Категория C4 • задача №3

 
 
 

Условие задачи

Дано:
после единых выпускных экзаменов по информатике в район пришла информация о том, какой ученик какой школы сколько баллов набрал.
Районный методист решила выяснить фамилии учеников, которые набрали наибольший балл, по каждой школе в отдельности, но только если из школы информатику сдавало не меньше трех человек. Если в школе информатику сдавало меньше трех человек, информацию по этой школе выводить не нужно.
Программа должна вывести на экран информацию в виде:
<Номер школы>  <Фамилия ученика>
в отдельной строке для каждой школы.

На вход программе сначала подается число учеников, сдававших экзамен. В каждой из следующих N строк находится информация об учениках в формате:
<Фамилия> <Имя> <Номер школы> <Количество баллов>, где
<Фамилия>           - строка, состоящая не более чем из 30 символов без пробелов;
<Имя>               - строка, состоящая не более чем из 20 символов без пробелов;
<Номер школы>       - целое число в диапазоне от 1 до 99;
<Количество баллов> - целое число в диапазоне  от 0 до 100.

 

Реализовать:
напишите  эффективную,  в  том  числе  и по используемой памяти, программу (укажите   используемую  версию  языка  программирования,   например   Borland Pascal 7.0), которая должна вывести на экран   требуемую  информацию.

Известно, что  информатику  сдавало  больше  5-ти  учеников  района. Также известно, что в районе школы с некоторыми номерами не существуют.

Эти данные записаны через пробел, причем ровно один между каждой парой (то есть, всего по три пробела в каждой строке).

Пример входной строки:
          Иванов Иван 50 87

Пример выходных данных:
         5   Иванов
         50 Петров
         74 Сидоров

 

Решение

Начнем разбираться с задачей на конкретных данных, допустим экзамен сдавало 10 человек. Вся информация является вымышленной и все совпадения случайны.

ФамилияИмя№ школыКоличество
баллов
1ИвановИван1285
2ПетроваОльга9043
3СидоровЕвгений5050
4СмирновОлег9087
5РомановаЕлена1575
6ТрубинМихаил1246
7МолодоваАлла5010
8ВеликановИлья5095
9СеребряковаМария9080
10ИсаковЛеонид2563

 

Выпишем номера школ (упорядочим по возрастанию), из которых представлено хотя бы по одному ученику.
Номера школ: 12, 15, 25, 50, 90.

Анализ исходной таблицы для школы №12. Очевидно, что в таблице присутствует два ученика из данной школы:

ФамилияИмя№ школыКоличество
баллов
1ИвановИван1285
2ПетроваОльга9043
3СидоровЕвгений5050
4СмирновОлег9087
5РомановаЕлена1575
6ТрубинМихаил1246
7МолодоваАлла5010
8ВеликановИлья5095
9СеребряковаМария9080
10ИсаковЛеонид2563

 

Анализ исходной таблицы для школы №15. Очевидно, что в таблице присутствует один ученик из данной школы:

ФамилияИмя№ школыКоличество
баллов
1ИвановИван1285
2ПетроваОльга9043
3СидоровЕвгений5050
4СмирновОлег9087
5РомановаЕлена1575
6ТрубинМихаил1246
7МолодоваАлла5010
8ВеликановИлья5095
9СеребряковаМария9080
10ИсаковЛеонид2563

 

Анализ исходной таблицы для школы №25. Очевидно, что в таблице присутствует один ученик из данной школы:

ФамилияИмя№ школыКоличество
баллов
1ИвановИван1285
2ПетроваОльга9043
3СидоровЕвгений5050
4СмирновОлег9087
5РомановаЕлена1575
6ТрубинМихаил1246
7МолодоваАлла5010
8ВеликановИлья5095
9СеребряковаМария9080
10ИсаковЛеонид2563

 

Анализ исходной таблицы для школы №50. Очевидно, что в таблице присутствует три ученика из данной школы:

ФамилияИмя№ школыКоличество
баллов
1ИвановИван1285
2ПетроваОльга9043
3СидоровЕвгений5050
4СмирновОлег9087
5РомановаЕлена1575
6ТрубинМихаил1246
7МолодоваАлла5010
8ВеликановИлья5095
9СеребряковаМария9080
10ИсаковЛеонид2563

 

Анализ исходной таблицы для школы №90. Очевидно, что в таблице присутствует три ученика из данной школы:

ФамилияИмя№ школыКоличество
баллов
1ИвановИван1285
2ПетроваОльга9043
3СидоровЕвгений5050
4СмирновОлег9087
5РомановаЕлена1575
6ТрубинМихаил1246
7МолодоваАлла5010
8ВеликановИлья5095
9СеребряковаМария9080
10ИсаковЛеонид2563

 


В итоге, среди пяти школ, только из двух школ было представлено не менее трех учеников. Это школа №50 и школа №90. В условии задачи сказано, что необходимо выяснить фамилии учеников, которые набрали наибольший балл по своей школе.

Рассмотрим учеников из школы №50 и выделим запись зеленым цветом того ученика, набравшего максимальный балл:

ФамилияИмяКоличество
баллов
СидоровЕвгений50
МолодоваАлла10
ВеликановИлья95


 

Рассмотрим учеников из школы №90 и выделим запись зеленым цветом того ученика, набравшего максимальный балл:

ФамилияИмяКоличество
баллов
ПетроваОльга43
СмирновОлег87
СеребряковаМария80

 

В результате, ответом для подобных входных данных является следующее:

  • 50 Великанов

  • 90 Смирнов

 

Рассмотрим реализацию программы на языке программирования Borland Pascal 7.0 с подробными русифицированными комментариями:

{заголовок программы}
program C4;
{раздел подключения модулей и сторонних расширений}
uses
{подключаем модуль crt – console run time. Данный модуль содержит специализированные подпрограммы для обработки текста, звука, клавиатурных событий}
    crt;
{раздел объявления константных величин}
const
{общее количество номеров школ}
    NUMBER = 99;
{раздел декларации переменных}
var
{хранит общее количество школьников, принимавших участие в сдаче экзаменов}
    n : integer;
{счетчик цикла}
    i : integer;
{хранит текущий символ, введенный с клавиатуры от пользователя}
    ch : char;
{текущий номер школы, введенный пользователем}
    currSchool : integer;
{текущее количество баллов набранных текущим учеником}
    currBall : integer;
{хранит текущую фамилию ученика, сдававшего экзамен}
    currLastName : string[31];
{хранит количество школьников по каждой школе. Номером школы выступает индекс элемента одномерного массива}
    countPupil : array[1..NUMBER] of integer;
{хранит максимальный балл по каждой школе. Номером школы выступает текущий индекс элемента.}
    maxBall   :  array[1..NUMBER]  of integer;
{хранит фамилии учеников, набравших максимальный балл по своей школе. Номером школы выступает текущий индекс элемента массива}
    FIO : array[1..NUMBER] of string;
{главный блок программы}
begin
{очистка экрана дисплея от прошлых выводов}
    clrscr;
{поскольку информации еще нет, то обнуляем характеристики}
    for i := 1 to N do
    begin
        countPupil[i] := 0;
{присваиваем «-1», т к минимально возможный балл равен нулю}
        maxBall[i] := -1;
    end;
{считываем количество школьников, сдававших экзамен}
    readln(n);
{цикл, в котором происходит считывание информации с клавиатуры от пользователя}
    for i := 1 to n do
    begin
{обнуляем переменную, отвечающую за хранение фамилии}
        currLastName := ' ';
{посимвольно считываем фамилию ученика, причем запоминая данную информацию в специальной переменной, поскольку в дальнейшей обработке данная информация может быть использована}
        repeat
            read(ch);
            currLastName := currLastName + ch;
        until(ch = ' ');
{посимвольно считываем имя, причем, не запоминая данную информацию, поскольку в дальнейшей обработке данная информация не потребуется}
        repeat
            read(ch);
        until(ch = ' ');
{считываем текущий номер школы ученика и количество баллов, полученных школьником}
        readln(currSchool, currBall);
{если величина текущего балла, больше максимального балла в текущей школе}
        if(currBall > maxBall[currSchool]) then
        begin
{запоминаем «новое» максимальное значение балла в текущей школе}
            maxBall[currSchool] := currBall;
{запоминаем фамилию ученика набравшего новый максимальный балл в текущей школе}
            FIO[currSchool] := currLastName;
        end;
{увеличиваем количество школьников на единицу у той школы, чей номер совпадает с только что считанным номером школы}
        countPupil[currSchool] := countPupil[currSchool] + 1;
    end;
{вставка пустой строки для повышения читабельности}
    writeln;
{в цикле перебираем все школы от первого до 99 номера}
    for i := 1 to NUMBER do
{если количество учеников текущей школы больше или равно трем, то печатаем номер данной школы и фамилию ученика из данной школы, получившего наивысший балл на экзамене}
    if(countPupil[i] >= 3) then
        writeln(i, ' ', FIO[i]);
{имитация задержки программы. Программа будет закрыта после нажатия произвольной клавиши на клавиатуре}
    readkey;
end.

 
 
Рейтинг:
 
Проголосовало: 1
Количество просмотров: 2124
 
 
 

Категория C4 • задача №3

 

Комментарии

Для комментирования или зарегистрируйтесь
 

Остальные решения из билета №3 для подготовки к ЕГЭ по информатике 2013

 
Условие задачи
(наведите курсор мыши на ссылку)
Аудиовизуальное
решение
Мультимедийная
видеопрезентация
Решение в формате
слайд-шоу
Текстовое
решение
 
© 2011-2024 ООО "СтадиМен". Все права сохранены.
Перепечатка и использование материалов с данного сайта, разрешена только по согласию с владельцем.
Владелец оставляет за собой право воспользоваться 146 статьей УК РФ при нарушении авторских и смежных прав.
 
 
 
 
Авторизация на сайте
 
 
 
Обнаружили
ошибку на сайте?