Решить в паскале! в файле marks.csv записаны сведения о результатах экзаменов в 9-х классах района. всего в списке 1000 записей, каждая из которых содержит • фамилию • имя • отметки по четырем предметам (, языку, и ). все элементы в каждой строке разделены запятыми. напишите программу, которая читает данные из файла в массив структур (записей) и выводит на экран: а) средний в районе по каждому предмету; б) максимальную сумму , полученных учащимися; в) список учащихся (фамилии и имена), набравших эту максимальную сумму, в алфавитном порядке; г) количество учащихся, получивших хотя бы одну отметку «2». пример данных в файле александрова,маргарита,3,3,4,2 алескеров,имран,3,4,4,2 бармин,владимир,4,3,4,2
// Внимание! Если программа не работает, обновите версию!
type
Exams=record
fam:string;
nam:string;
ball:=new integer[4];
end;
begin
var Ls:=new List<Exams>;
var b:Exams; // буфер
ReadLines('marks.csv')
.Foreach(t->begin
var a:=t.ToWords(',');
(b.fam,b.nam):=(a[0],a[1]);
b.ball:=a[2:].Select(q->q.ToInteger).ToArray;
Ls.Add(b)
end);
var n:=Ls.Count;
// а
var m:=Arr(0,0,0,0);
var c:=Ls.Select(t->t.Ball);
foreach var d in c do
for var i:=0 to 3 do m[i]+=d[i];
Writeln('Средние по предметам: ', m[0]/n:0:1,', ',m[1]/n:0:1,
', ',m[2]/n:0:1,', ',m[3]/n:0:1);
// б
var max:=Ls.Select(t->t.Ball.Sum).Max;
Writeln(NewLine,'Максимальная сумма ',max);
// в
Writeln(NewLine,'Учащиеся, набравшие максимальную сумму :');
Ls.Where(t->t.Ball.Sum=max).Select(t->t.fam+' '+t.nam)
.OrderBy(t->t).Println(NewLine);
// г
Writeln(NewLine,'Получили хотя бы одну двойку:');
Ls.Where(t->t.Ball.Any(t->t=2)).Select(t->t.fam+' '+t.nam)
.OrderBy(t->t).Println(NewLine)
end.
Пример:
Средние по предметам: 3.3, 3.3, 4.0, 2.0
Максимальная сумма 13
Учащиеся, набравшие максимальную сумму :
Алескеров Имран
Бармин Владимир
Получили хотя бы одну двойку:
Александрова Маргарита
Алескеров Имран
Бармин Владимир
Замечание:
В PascalABC.NET 3.3 динамические массивы реализованы с списков, поэтому было принято решение использовать именно список, позволяющий не знать заранее размера массива и добавлять элементы по мере необходимости. Если возникнет причуда иметь данные именно в массиве, перед end. добавьте строку var x:=Ls.ToArray; - она создаст из списка массив х.