Помогите пожалуйста решить задачу в паскале! В файле marks.csv записаны сведения о результатах экзаменов в 9-х классах района. В
Помогите пожалуйста решить задачу в паскале!
В файле marks.csv записаны сведения о результатах экзаменов в 9-х классах района. Всего в списке 1000 записей, каждая из которых содержит • фамилию • имя • отметки по четырем предметам (алгебре, русскому языку, физике и истории). Все элементы в каждой строке разделены запятыми. Напишите программу, которая читает данные из файла в массив структур (записей) и выводит на экран: а) средний балл в районе по каждому предмету; б) максимальную сумму баллов, полученных учащимися; в) список учащихся (фамилии и имена), набравших эту максимальную сумму, в алфавитном порядке; г) количество учащихся, получивших хотя бы одну отметку «2».
<em>// PascalABC.NET 3.3, сборка 1611 от 06.01.2018</em> <em>// Внимание! Если программа не работает, обновите версию!</em>
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.
<u>Пример:</u> Средние баллы по предметам: 3.3, 3.3, 4.0, 2.0
Максимальная сумма баллов 13
Учащиеся, набравшие максимальную сумму баллов: Алескеров Имран Бармин Владимир
Получили хотя бы одну двойку: Александрова Маргарита Алескеров Имран Бармин Владимир
<u>Замечание:</u> В PascalABC.NET 3.3 динамические массивы реализованы с помощью списков, поэтому было принято решение использовать именно список, позволяющий не знать заранее размера массива и добавлять элементы по мере необходимости. Если возникнет причуда иметь данные именно в массиве, перед end. добавьте строку var x:=Ls.ToArray; - она создаст из списка массив х.
1) 7 - изза начального присвоение m 2) 994. 4 соответствует условию, остальные числа лишь максимизируют число 3)
var N, d, m: longint;
begin readln(N); {m := N mod 10; ошибочная строка} m:=-1; {N mod 10 - может не удовлетворять условию, 0 - может и удовлетворять условию } while N > 0 do begin d := N mod 10; if d < 5 then if d > m then m := d; N := N div 10; end; {if m = 0 then ошибочная строка} if m = -1 then {если в цикле m так не разу и не поменялась} writeln('NO') else writeln(m); end.
1. самое простое ПЕРЕ и нарисовать ДАЧУ 2. или нарисовать Ч перед А и в конце подписать А и получится перед АчА <span>3. Х, нарисовать экран и впереди поставить две запятые убирающие ЭК (остается РАН) , Pa(давление) и впереди 4 запятых и получится Х ' '(экран) ' ' ' 'Pa</span>