• Помогите пожалуйста решить задачу в паскале!

    В файле marks.csv записаны сведения о результатах экзаменов в 9-х классах района. Всего в списке 1000 записей, каждая из которых содержит
    • фамилию
    • имя
    • отметки по четырем предметам (алгебре, русскому языку, физике и истории).
    Все элементы в каждой строке разделены запятыми.
    Напишите программу, которая читает данные из файла в массив структур (записей) и выводит на экран:
    а) средний балл в районе по каждому предмету;
    б) максимальную сумму баллов, полученных учащимися;
    в) список учащихся (фамилии и имена), набравших эту максимальную сумму, в алфавитном порядке;
    г) количество учащихся, получивших хотя бы одну отметку «2».

    Пример данных в файле

    Александрова,Маргарита,3,3,4,2
    Алескеров,Имран,3,4,4,2
    Бармин,Владимир,4,3,4,2


Ответы 1

  • // PascalABC.NET 3.3, сборка 1611 от 06.01.2018// Внимание! Если программа не работает, обновите версию!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; - она создаст из списка массив х.
  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years