Здесь <Фамилия> - строка, состоящая не более чем из 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.
Похожие записи/страницы:
- Вводятся фамилия и баллы от 1 до 100. Вывести фамилию учеников с максимальным и минимальным баллами - Pascal(Паскаль)
- Описать, используя структуру данных запись, данные на учеников (фамилия, улица, дом, квартира). Составить…
- В баскетбольную команду могут быть приняты ученики, рост которых превышает 170 см. Составьте список кандидатов в…
- Написать программу, которая составляет логины для учеников (логином является фамилия ученика, если фамилии…
- Распечатать список учеников музыкальной школы, которые учатся играть на скрипке. Указать также, сколько лет они…
- на входе вводится некоторое число строк(задается пользователем). Строки имеют следующий формат . Требуется найти…
- Используя сведения о результатах сдачи n вступительных экзаменов m абитуриентами, определите, сколько…
- Имеется информация об итогах зимней сессии на 1 курсе: фамилия, номер группы, оценка1, оценка2, оценка3. Причем…