Опредение среднего балла по данным из файла - C#

Узнай цену своей работы

Формулировка задачи:

Дан текстовый файл (in.txt) содержащий список учащихся и их оценки по трем предметам: математике, физике, информатике. Формат файла: сначала количество учащихся n, затем n строк, каждая из которых содержит фамилию, имя и три числа. Данные в строке разделены одним пробелом. Оценки принимают значение от 1 до 5. Пример входного файла: 4 Ivanov Vasiliy 4 3 4 Petrov Sergey 5 3 5 Konstantinov Nikolay 4 4 5 Kuznetsov Ivan 5 5 5 I Определите средний балл каждого из учащихся. Выведите в файл out.txt фамилии и имена учащихся, не имеющих троек (а также двоек и колов). II Выведите три действительных числа: средний балл всех учащихся по математике, по физике, по информатике. Определите учащихся с наилучшей успеваемостью, то есть с максимальным средним баллом по трем предметам. Выведите в файл out.txt одного или нескольких учащихся, имеющих максимальный средний балл. III Выведите в файл out.txt фамилии и имена учащихся в порядке убывания их среднего балла. Помогите пожалуйста

Решение задачи: «Опредение среднего балла по данным из файла»

textual
Листинг программы
using System;
using System.Linq;
using System.IO;
 
namespace ConsoleApp4
{
    class Program
    {
        struct Ball
        {
            public string FIO;
            public int math, phys, inf;
            public double ave;
        }
 
        static void exit()
        {
            Console.Write("Оценки должны быть < 5!\nНажмите любую клавишу...");
            Console.ReadKey(true);
            Environment.Exit(1);
        }
 
        static void Main(string[] args)
        {
            string path = @"E:\in.txt", pathout = @"E:\out.txt";
            string[][] a = File.ReadLines(path).Select(v => v.Split(' ').ToArray()).ToArray();
            Ball[] b = new Ball[a.GetLength(0)];
            for (int i = 0; i < b.Length; i++)
            {
                b[i].FIO = a[i][0] + ' ' + a[i][1];
                if (int.TryParse(a[i][2], out b[i].math))
                    if (b[i].math > 5)
                        exit();
                if (int.TryParse(a[i][3], out b[i].phys))
                    if (b[i].phys > 5)
                        exit();
                if (int.TryParse(a[i][4], out b[i].inf))
                    if (b[i].inf > 5)
                        exit();
                b[i].ave = (double)(b[i].inf + b[i].math + b[i].phys) / 3;
            }
 
            File.AppendAllText(pathout, "Не имеющие троек:" + Environment.NewLine);
            for (int i = 0; i < b.Length; i++)
            {
                int[] ave1 = { b[i].math, b[i].inf, b[i].phys };
                if (ave1.Average() > 3)
                    File.AppendAllText(pathout, b[i].FIO + Environment.NewLine);
            }
 
            File.AppendAllText(pathout, Environment.NewLine + $"Ср. математика: {b.Select(v => v.math).Average()}; " +
                $"Ср. физика: {b.Select(v => v.phys).Average()}; Ср. информатика: {b.Select(v => v.inf).Average()}" + Environment.NewLine);
 
            File.AppendAllText(pathout, Environment.NewLine + "Максимальный средний балл имеет(ют):");
            for (int i = 0; i < b.Length; i++)
                if (b[i].ave == b.Select(v => v.ave).Max())
                    File.AppendAllText(pathout,Environment.NewLine + b[i].FIO);
 
            File.AppendAllText(pathout, Environment.NewLine + Environment.NewLine + "В порядке убывания среднего балла:" +
                Environment.NewLine + String.Join(Environment.NewLine, b.OrderByDescending(v => v.ave).Select(v => v.FIO)));
        }
    }
}

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


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

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

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