На вход программе подаются сведения об учениках некоторой средней школы. В первой строке сообщается количество учеников N, каждая из следующих N строк имеет следующий формат:
<Фамилия> <Имя> <класс>,
где <Фамилия> — строка, состоящая не более чем из 20 символов,
<Имя> — строка, состоящая не более чем из 15 символов,
<класс> — год обучения (от 1 до 12) и заглавная буква (от «А» до «Я») без пробела. <Фамилия> и <Имя>, а также <Имя> <класс> разделены одним пробелом.
Пример входной строки:
Иванов Петр 10Б
Требуется написать программу на языке Паскаль или Бейсик, которая будет выводить на экран информацию о параллелях (годе обучения) с наибольшим числом учеников. Программа должна выводить на экран в первой строке количество учеников в искомых параллелях, а во второй строке — в порядке возрастания номера этих параллелей через пробел.
Например:
100
1 7 11
Программа должна верно читать входные данные, не запоминая их все, а сразу подсчитывая в массиве, хранящем 12 целых чисел, количество учащихся в каждой из параллелей. Затем с использованием этого массива ищется параллель с максимальным числом учеников. За дополнительный просмотр этого массива распечатывается информация об искомых параллелях. Баллы начисляются только за программу, которая решает задачу хотя бы для частного случая (например, параллель с максимальным количеством учеников единственна).
Пример правильной и эффективной программы на языке Паскаль:
var рс:array[1..12] of integer;
р : 1. .12;
class:string[3];
с:char;
max, i, N:integer;
begin readln(N) ;
for i:=1 to 12 do
pc[i]:=0;
for i:=l to N do
begin
repeat
read(c)
until c=' '; {считана фамилия}
repeat
read(c)
until c=' '; {считано имя}
readln(class);
{определяем номер параллели}
if length(class)=2 then
p:=ord(class[1])-ord(10') else
p:=(ord(class[1])-ord('0'))*10+
ord(class[2])-ord('0');
pc[p]:=pc[p]+1;{учитываем ученика этой параллели}
end;
max:=0;
for i:=1 to 12 do
if pc[i]>max then max:=pc[i];
writeln('Максимум учеников в параллели:',max);
for i:=1 to 12 do
if pc[i]=max then
write(i,' ');
readln
end.
Пример правильной программы на языке Бейсик:
DIM i, j, р, n, max, pc(12) AS INTEGER
DIM m(12)
DIM s AS STRING
FOR i = 1 TO 12
pc(i) = 0
NEXT i
INPUT n
FOR j = 1 TO n
LINE INPUT s
c$ = MI D$ (s, 1, 1)
i = 1
WHILE NOT (с $ = " ")
i = i - 1
c$ = MID$ (s, i, 1)
WEND i = i + 1
с$ = MID$(s, i, 1)
WHILE NOT (с $ = " ")
i = i + 1
c$ = MID$(s, i, 1)
WEND
s = MID$ (s, i + 1, 3)
IF MID$(s, 2, 1) >= "0" AND MID$(s, 2, 1) < =
"2" THEN
p = (ASC(MID$(s, 1, 1)) - ASC("0")) * 10 +
ASC(MID$(s, 2, 1)) - ASC("0")
ELSE
p = ASC(MID$(s, 1, 1)) - ASC("0")
ENDIF
pc(p) = pc(p) + 1
NEXT j
max = 0
FOR i = 1 TO 12
IF pc (i) > max THEN max = pc(i)
NEXT i
PRINT "Max = "; max
FOR i = 1 TO 12
IF pc(i) = max THEN PRINT i; " ";
NEXT i
END

