


Программа на ПАСКАЛЕ (ЕГЭ)
Задача С4 по информатике, ЕГЭ. Помогите пожалуйста - как мне нужно исправить мою ошибку, чтобы программа работала верно? (Паскаль ABC)
---------
ЗАДАЧА: На вход программе подаются сведения о сдаче экзаменов учениками 9-х классов некоторой средней школы. В первой строке сообщается количество учеников N, которое не меньше 10, но не превосходит 100, каждая из следующих N строк имеет следующий формат: <Фамилия> <Имя> <оценки>, где <Фамилия> - строка, состоящая не более чем из 20 символов, <Имя> — строка, состоящая не более чем из 15 символов, <оценки> - через пробел три целых числа, соответствующие оценкам по пятибалльной системе. <Фамилия> и <Имя>, а также <Имя> и <оценки> разделены одним пробелом. Пример входной строки:
Иванов Петр 4 2 4
Требуется написать как можно более эффективную программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет выводить на экран фамилии и имена неуспевающих учеников (имеющих по результатам экзаменов хотя бы одну двойку), располагая их в порядке уменьшения числа двоек.
МОЯ ПРОГРАМММА: a:array[1..100] of db;
c:char;
begin
readln (N);
for i:=1 to n do begin
while c<>' ' do begin
c:=' ';
read(c);
a[i].name:=a[i].name+c;
end;
a[i].ball:=0;
for j:=1 to 3 do begin
readln(m);
if (m=2) then
a[i].ball:=a[i].ball+1;
end;
readln;
end;
for i:=1 to n do begin
if (a[i].ball=3) then
writeln (a[i].name);
end;
for i:=1 to n do begin
if (a[i].ball=2) then
writeln (a[i].name);
end;
for i:=1 to n do begin
if (a[i].ball=1) then
writeln (a[i].name);
end;
end.
type db = record
name:string;
ball:integer;
end;
var i,j,m,n,k:integer;
a:array[1..100] of db;
c:char;
begin
readln (N);
for i:=1 to n do begin
for k:=1 to 2 do begin
while c<>' ' do begin
a[i].name:=a[i].name+c;
read(c);
end;
end;
read(c);
while c<>' ' do begin
a[i].name:=a[i].name+c;
read(c);
end;
a[i].ball:=0;
for j:=1 to 3 do begin
read(m);
if (m=2) then
a[i].ball:=a[i].ball+1;
end;
end;
for i:=1 to n do begin
if (a[i].ball=3) then
writeln (a[i].name);
end;
for i:=1 to n do begin
if (a[i].ball=2) then
writeln (a[i].name);
end;
for i:=1 to n do begin
if (a[i].ball=1) then
writeln (a[i].name);
end;
end.
----------
В первый раз не до конца скопировал
Возможно потому что не определена запись "a" и нет описания её полей.