Список фамилий студентов, которым будет назначена обычная и повышенная стипендия - C#
Формулировка задачи:
Дано задание:
Дана строка с результатами экзамена по предмету формата
«Предмет: Фамилия_студента_1, оценка, Фамилия_студента_2, …».
По каждому предмету такие строки занесены в массив.
Напишите метод формирования двух новых строк, содержащих списки фамилий студентов,
которым будет назначена обычная и повышенная стипендия.
В эти списки включаются студенты, не имеющие троек, и получившие все пятерки, соответственно.
Фамилии в строках расположите в алфавитном порядке.
Я написал код только для одного предмета, не понимаю, как сделать для нескольких предметов.
static void Main(string[] args)
{
string s1 = "Математика; Иванов:3; Сергеев:5; Степанов:4";
string s2 = "5";
string s3 = "4";
string s4 = "3";
metod(s1, s2, s3, s4);
Console.ReadKey();
}
private static void metod(string s1, string s2, string s3, string s4)
{
s1 = s1 + ";";
s2 = s2 + ";";
s3 = s3 + ";";
s4 = s4 + ";";
string[] logins = s1.Split(';');
foreach (string x in logins)
{
if (x != String.Empty && s2.Contains(x.Substring(x.IndexOf(':') + 1) + ";"))
{
Console.WriteLine("Повышенная стипендия у: ");
string y = x.TrimStart(); Console.WriteLine(y.Remove(y.IndexOf(':')));
}
else if (x != String.Empty && s3.Contains(x.Substring(x.IndexOf(':') + 1) + ";"))
{
Console.WriteLine("Неповышенная стипендия у: ");
string y = x.TrimStart(); Console.WriteLine(y.Remove(y.IndexOf(':')));
}
else if (x != String.Empty && s4.Contains(x.Substring(x.IndexOf(':') + 1) + ";"))
{
Console.WriteLine("нет стипендии у: ");
string y = x.TrimStart(); Console.WriteLine(y.Remove(y.IndexOf(':')));
}
}
}
}Решение задачи: «Список фамилий студентов, которым будет назначена обычная и повышенная стипендия»
textual
Листинг программы
private static void Main()
{
string[] subjects =
{
"Математика: Иванов, 4, Сергеев, 5, Степанов, 4",
"Математика: Иванов, 4, Сергеев, 5, Степанов, 3",
"Физика: Иванов, 5, Сергеев, 5, Степанов, 3",
"Физика: Иванов, 5, Сергеев, 5, Степанов, 3"
};
Array.ForEach(Metod(subjects), Console.WriteLine);
}
private static string[] Metod(string[] subjects)
{
var students = new Dictionary<string, int>();
foreach (string subject in subjects)
{
string[] info = subject.Split(':')[1].Split(',');
for (var i = 0; i < info.Length; i += 2)
{
string name = info[i].Trim();
int mark = int.Parse(info[i + 1]);
int minMark;
students[name] = students.TryGetValue(name, out minMark) ? Math.Min(minMark, mark) : mark;
}
}
var increasedStudents = new List<string>();
var notIncreasedStudents = new List<string>();
foreach (KeyValuePair<string, int> pair in students)
{
if (pair.Value == 5)
{
increasedStudents.Add(pair.Key);
}
else if (pair.Value == 4)
{
notIncreasedStudents.Add(pair.Key);
}
}
return new[]
{
string.Format("Повышенная стипендия: {0}", string.Join(", ", increasedStudents)),
string.Format("Обычная стипендия: {0}", string.Join(", ", notIncreasedStudents))
};
}