
Вопрос задан 04.03.2019 в 22:47.
Предмет Информатика.
Спрашивает Гриценко Анастасия.
Помогите пожалуйста решить задачу в паскале! В файле marks.csv записаны сведения о результатах
экзаменов в 9-х классах района. Всего в списке 1000 записей, каждая из которых содержит • фамилию • имя • отметки по четырем предметам (алгебре, русскому языку, физике и истории). Все элементы в каждой строке разделены запятыми. Напишите программу, которая читает данные из файла в массив структур (записей) и выводит на экран: а) средний балл в районе по каждому предмету; б) максимальную сумму баллов, полученных учащимися; в) список учащихся (фамилии и имена), набравших эту максимальную сумму, в алфавитном порядке; г) количество учащихся, получивших хотя бы одну отметку «2». Пример данных в файле Александрова,Маргарита,3,3,4,2 Алескеров,Имран,3,4,4,2 Бармин,Владимир,4,3,4,2

Ответы на вопрос

Отвечает Векленко Надя.
// 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; - она создаст из списка массив х.
// Внимание! Если программа не работает, обновите версию!
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; - она создаст из списка массив х.


Топ вопросов за вчера в категории Информатика

Информатика 562

Информатика 404

Информатика 31

Информатика 76

Информатика 16

Информатика 41

Информатика 31
Последние заданные вопросы в категории Информатика
Предметы
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili