На вход программы подаются сведения о результатах сдачи экзаменов учащимися 9-ых классов некоторой школы. Известно, что общее количество учеников не превосходит 60.В первой строке вводится количество учеников, сдавших экзамены N. Далее следуют N строк, имеющих следующий формат:<Фамилия> <Имя> <Баллы> — Pascal(Паскаль)

Здесь <Фамилия> - строка, состоящая не более чем из 15 символов;
<Имя> - строка, состоящая не более чем из 10 символов;
<Баллы> - строка, содержащая четыре целых числа, разделенных пробелом, соответствующих баллам, полученным учениками на экзаменах по каждому предмету.
При этом <Фамилия> и <Имя>,<Имя> и <Баллы> разделены одним пробелом.

Примеры входных строк: Соловьева Марина 5 3 3 4
Яковлев Максим 4 5 5 4
Написать программу, которая будет выводить фамилии и имена учеников, набравших максимальную сумму баллов, а также количество таких учеников.

10
Соловьева Марина 5 3 3 4
Яковлев Максим 4 5 5 4
Пушкин Михаил 5 5 5 5
Зверев Павел 5 5 5 5
Лунев Олег 5 5 5 5
Перова Маша 4 5 3 4
Горина Света 4 4 4 4
Трунова Лена 3 4 4 4
Лунин Игорь 4 5 4 4
Панина Наталья 5 5 5 5
uses crt;
const nmax=60;
type uch=record{тип запись}
         fam:string[15];{фамилия}
         nam:string[10];{имя}
         ocn:array[1..4] of byte;{массив оценок}
         bal:byte;{сумма баллов}
         end;
procedure Convert(var a:string);{перевод русских букв из кодировки файла 
                                 в кодировку программы из ANSI-ASCII}
var i:integer;
begin
for i:=1 to length(a) do
if ord(a[i]) in [192..239] then a[i]:=chr(ord(a[i])-64)
else if ord(a[i]) in [240..255] then a[i]:=chr(ord(a[i])-16)
else if ord(a[i])=168 then a[i]:=chr(ord(240))
else if ord(a[i])=184 then a[i]:=chr(ord(241));
end;
var f:text;
    u:array[1..nmax] of uch;{массив записей}
    x:uch;{переменная-буфер для сортировки}
    n,i,j:byte;
    name,s:string;
 
begin
clrscr;
write('Имя файла для чтения: ');
readln(name);
name:=name+'.txt';
assign(f,name);
{$I-} reset(f);  {$I+}
if IOResult <> 0 then
 begin
  writeLn('Не могу открыть файл ',name);
  writeLn('Работа программы завершена. Нажмите ENTER');
  readln;
  exit;
 end;
read(f,n);{читаем число в первой строке}
readln(f,s);{пропускаем строку}
for i:=1 to n do{по количеству}
 begin
  readln(f,s);{читаем остальные строки}
  Convert(s);{конвертируем}
  u[i].fam:=copy(s,1,pos(' ',s)-1);{до первого пробела фамилия}
  delete(s,1,pos(' ',s));{удаляем с пробелом}
  u[i].nam:=copy(s,1,pos(' ',s)-1);{до нового первого пробела имя}
  delete(s,1,pos(' ',s));{удаляем}
  u[i].ocn[1]:=ord(s[1])-48;{на нечетных номерах оценки, берем их код за минусом 48, 
                             '2'=50-48=2, '5'=53-48=5}
  u[i].ocn[2]:=ord(s[3])-48;
  u[i].ocn[3]:=ord(s[5])-48;
  u[i].ocn[4]:=ord(s[7])-48;
  u[i].bal:=0;{считаем сумму баллов}
  for j:=1 to 4 do
  u[i].bal:=u[i].bal+ u[i].ocn[j];
 end;
close(f);
for i:=1 to n-1 do{сортируем массив обменом}
for j:=i+1 to n do
if u[i].bal<u[j].bal then{по убыванию суммы баллов}
 begin
  x:=u[i];
  u[i]:=u[j];
  u[j]:=x;
 end;
writeln('Максимальный балл имеют:');
i:=1;
while u[i].bal=u[1].bal do{пока сумма= первому}
 begin
  i:=i+1;{считаем}
  writeln(u[i].fam,' ',u[i].nam);{выводим}
 end;
writeln;
write('Количество таких учеников=',i-1);{последний номер лишний}
readln
end.

Leave a Comment

9 + 1 =