Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
24
Добавлен:
19.05.2015
Размер:
719.36 Кб
Скачать

Var schMax, schCount: array[1..Max] of integer;

В начале оба массива обнуляются:

for i:=1 to MAX do begin

schMax[i] := 0;

schCount[i] := 0;

end;

В этой задаче фамилии и имена нам не нужны, при чтении их можно пропускать. Дойдя до второго пробела, читаем номер школы и балл в целые переменные sch и ball:

repeat read(c) until c = ' ';

repeat read(c) until c = ' ';

readln(sch, ball);

Если балл текущего ученика равен максимальному, увеличиваем счетчик максимальных баллов для этой школы:

if ball = schMax[sch] then

schCount[sch] := schCount[sch] + 1;

Если балл текущего ученика больше предыдущего максимального, записываем новый максимум и сбрасываем счетчик максимальных баллов для этой школы в единицу:

if ball > schMax[sch] then begin

schMax[sch] := ball;

schCount[sch] := 1;

end;

После чтения всех N строк (в цикле) нужно искать максимум в массиве schMax. Попутно (чтобы не делать второй цикл) ищем наибольшее значение счетчика среди всех школ, у которых наибольший балл. Сначала считаем, что лучшая школа – первая:

ball := schMax[1];

count := schCount[1];

Затем в цикле просматриваем все остальные школы. Если балл равен максимальному, ищем наибольшее значение счетчика:

if (schMax[i] = ball) and (schCount[i] > count) then

count := schCount[i];

Если балл больше предыдущего максимального, запоминаем новое максимальное значение и новое значение счетчика:

if schMax[i] > ball then begin

ball := schMax[i];

count := schCount[i];

end;

В конце программы выводим номера школ, в которых и балл, и счетчик равны найденным максимальным значениям:

for i:=1 to MAX do

if (schMax[i] = ball) and (schCount[i] = count) then

writeln(i)

Вот полная программа:

const MAX = 99;

Var schMax, schCount: array[1..Max] of integer;

I, n, sch, ball, count: integer;

c: char;

begin

for i:=1 to MAX do begin

schMax[i] := 0;

schCount[i] := 0;

end;

readln(N);

for i:= 1 to N do begin

repeat read(c) until c = ' ';

repeat read(c) until c = ' ';

readln(sch, ball);

if ball = schMax[sch] then

schCount[sch] := schCount[sch] + 1;

if ball > schMax[sch] then begin

schMax[sch] := ball;

schCount[sch] := 1;

end;

end;

ball := schMax[1];

count := schCount[1];

for i:=2 to MAX do begin

if (schMax[i] = ball) and (schCount[i] > count) then

count := schCount[i];

if schMax[i] > ball then begin

ball := schMax[i];

count := schCount[i];

end;

end;

for i:=1 to MAX do

if (schMax[i] = ball) and (schCount[i] = count) then

writeln(i)

end.

  1. Особенность этой задачи состоит в том, что здесь жестко прописано, что вводить данные нужно из файла, а выводить результаты – в тот же файл, дописывая их в конец файла. Тут помогут стандартные функции для работы с файлами: Assign (связать указатель на файл с файлом на диске), Reset (открыть файл на чтение), Rewrite (открыть файл на запись), Append (открыть файл на добавление в конец) и Close (закрыть файл). Схема работы с файлами в данной программе выглядит так (считаем, что файл называется eq.txt):

Соседние файлы в папке ЕГЗ_2012_Поляков_май