Список фамилий студентов, которым будет назначена обычная и повышенная стипендия - 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))
    };
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.333 из 5
Похожие ответы