Val(s, k, r);
эта процедура (Turbo Pascal, Borland Pascal, PascalABC, среда АЛГО) преобразует символьную строку s в числовое значение k; с помощью переменной r обнаруживается ошибка: если раскодировать число не удалось (в строке не число), в r будет записан нуль (здесь мы не будем обрабатывать эту ошибку, полагая, что все данные правильные); если вы работаете на ПаскалеABC (никто не может вам запретить написать, что этот так), вместо Val можно использовать более удобную и понятную функцию StrToInt: k:= StrToInt(s); 13) таким образом, основной цикл выглядит так: for i:=1 to N do begin readln(s); { читаем очередную строку } { выделяем часть после второго пробела } p:= Pos(' ', s); Delete(s, 1, p+5); { определяем номер школы k } Val(s, k, r); C[k]:= C[k] + 1; { увеличиваем счетчик k-ой школы } End; 14) дальше стандартным алгоритмом определяем в массиве C минимальный элемент Min, не учитывая нули (школы, из которых не было участников): Min:= N; for k:=1 to 99 do if (C[k] <> 0) and (C[k]<Min) then Min:= C[k]; здесь интересна первая строчка, Min:=N: по условию всего было N участников, поэтому минимальное значение не может быть больше N; обратите внимание, что привычный вариант (который начинается с Min:=C[1]) работает неверно, если из первой школы не было ни одного участника 15) и выводим на экран номера всех школ (обратите внимание – номера!), для которых C[k]=Min: for k:=1 to 99 do if C[k] = Min then writeln(k); 16) остается «собрать» программу, чтобы получилось полное решение; максимальное количество школ мы задали в виде константы LIM: const LIM = 99; var C:array[1..LIM] of integer; i, p, N, k, r, Min: integer; s:string; Begin for k:=1 to 99 do C[k]:=0; Readln(N); for i:=1 to N do begin readln(s); { читаем очередную строку } { выделяем часть после второго пробела } p:= Pos(' ', s); Delete(s, 1, p+5); { определяем номер школы k } Val(s, k, r); C[k]:= C[k] + 1; { увеличиваем счетчик k-ой школы } End; Min:= N; for k:=1 to LIM do if (C[k] <> 0) and (C[k]<Min) then Min:= C[k]; for k:=1 to LIM do if C[k] = Min then writeln(k); End.
Еще пример задания: На вход программе подаются сведения о сдаче экзаменов учениками 9-х классов некоторой средней школы. В первой строке сообщается количество учеников N, которое не меньше 10, но не превосходит 100, каждая из следующих N строк имеет следующий формат: <Фамилия> <Имя> <оценки>, где <Фамилия> – строка, состоящая не более чем из 20 символов, <Имя> – строка, состоящая не более чем из 15 символов, <оценки> – через пробел три целых числа, соответствующие оценкам по пятибалльной системе. <Фамилия> и <Имя>, а также <Имя> и <оценки> разделены одним пробелом. Пример входной строки:
|