Опредение среднего балла по данным из файла - 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)));
}
}
}