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

 
 
 

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

Дано:
после единых выпускных экзаменов по информатике в район пришла информация о том, какой ученик какой школы сколько набрал баллов. Эта информация в том же виде была разослана в школы.
Завуч школы № 50 решила наградить двух учащихся, которые лучше всех в школе сдали информатику.
Программа должна вывести на экран фамилии и имена этих учеников.
Если наибольший балл набрало больше двух человек – вывести количество таких учеников.
Если наибольший балл набрал один человек, а следующий балл набрало несколько человек - нужно вывести только фамилию и имя лучшего.

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

 

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

Эти данные записаны через пробел, причём ровно один между каждой парой (то есть, всего по три пробела в каждой  строке).
Пример входной строки:
                 Иванов Иван 50 87
Пример выходных данных:
                 Круглов Василий
                 Тарасова Дарья
Другой вариант выходных данных:
                 7
Третий вариант выходных данных:
                 Гусарский Илья

 

Решение

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

 

Начнем построчный анализ входной информации.
Для корректного анализа потребуются вспомогательные "счетчики", а именно:

  • ФИО ученика, набравшего самый максимальный балл;

  • ФИО ученика, набравшего второй по максимальности балл;

  • балл, полученный текущим учеником;

  • значение самого максимального балла;

  • значение второго по максимальности балла;

  • количество учеников, набравших самый максимальный балл;

  • количество учеников, набравших второй по максимальности балл.

 

Ученик I              : -
Ученик II             : -
Текущий балл          : -
Балл I                : 0
Балл II               : 0
Количество учеников I : 0
Количество учеников II: 0

Промежуточный вывод: запись под №1 пропускаем, так как требуется проводить анализ учеников только из школы №50, а текущий ученик из школы под номером 23.

 

Ученик I              : Анюкова Елизавета
Ученик II             :  -
Текущий балл          : 29
Балл I                : 29
Балл II               :  0
Количество учеников I :  1
Количество учеников II:  0

Промежуточный вывод: найден первый ученик из школы №50 и информация о текущем ученике записывается в счетчики.

 

Ученик I              : Панкратов Илья
Ученик II             :
Анюкова Елизавета
Текущий балл          : 84
Балл I                : 84
Балл II               : 29
Количество учеников I :  1
Количество учеников II:  1

Промежуточный вывод: ученик Панкратов Илья имеет более высокий балл, чем Анюкова Елизавета, следовательно, происходит переприсваивание информации, то есть, Панкратов Илья становится "первым" учеником, а Анюкова Елизавета переходит на "вторую" позицию.

 

Ученик I              : Панкратов Илья
Ученик II             :
Анюкова Елизавета
Текущий балл          : 84
Балл I                : 84
Балл II               : 29
Количество учеников I :  1
Количество учеников II:  1

Промежуточный вывод: запись под №4 пропускаем, так как требуется проводить анализ учеников только из школы №50, а текущий ученик из школы под номером 10. Значения всех "счетчиков" остаются без модификации.

 

Ученик I              : Панкратов Илья
Ученик II             :
Оливье Марина
Текущий балл          : 63
Балл I                : 84
Балл II               : 63
Количество учеников I :  1
Количество учеников II:  1

Промежуточный вывод: ученик Оливье Марина имеет более высокий балл, чем Анюкова Елизавета, следовательно, происходит переприсваивание информации, то есть, Оливье Марина становится "вторым" учеником, а Анюкова Елизавета покидает ранжирование.

 

Ученик I              : Панкратов Илья
Ученик II             :
Оливье Марина
Текущий балл          : 63
Балл I                : 84
Балл II               : 63
Количество учеников I :  1
Количество учеников II:  1

Промежуточный вывод: запись под №6 пропускаем, так как требуется проводить анализ учеников только из школы №50, а текущий ученик из школы под номером 6. Значения всех "счетчиков" остаются без модификации.

 

Ученик I              : Петров Игорь
Ученик II             :
Панкратов Илья
Текущий балл          : 92
Балл I                : 92
Балл II               : 84
Количество учеников I :  1
Количество учеников II:  1

Промежуточный вывод: ученик Петров Игорь имеет более высокий балл, чем Панкратов Илья, следовательно, происходит переприсваивание информации, то есть, Панкратов Илья становится "вторым" учеником, а Петров Игорь становится "лучшим" учеником на данный момент.

 

Ученик I              : Петров Игорь
Ученик II             :
Панкратов Илья
Текущий балл          : 84
Балл I                : 92
Балл II               : 84
Количество учеников I :  1
Количество учеников II:  2

Промежуточный вывод: текущий ученик Якимова Мария имеет аналогичный балл, как и второй по максимальности балл, полученный Панкратовым Ильей. Следовательно, производим увеличение счетчика, отвечающего за количество учеников, получивших второй по максимальности балл на единицу.

 

Ученик I              : Петров Игорь
Ученик II             :
Володина Тамара
Текущий балл          : 91
Балл I                : 92
Балл II               : 91
Количество учеников I :  1
Количество учеников II:  1

Промежуточный вывод: ученик Володина Тамара имеет более высокий балл, чем Панкратов Илья (и меньше, чем Петров Игорь), следовательно, происходит переприсваивание информации, то есть, Володина Тамара становится "вторым" учеником, а Панкратов Илья покидает ранжирование.

 

Ученик I              : Петров Игорь
Ученик II             :
Володина Тамара
Текущий балл          : 91
Балл I                : 92
Балл II               : 91
Количество учеников I :  1
Количество учеников II:  1

Промежуточный вывод: запись под №10 пропускаем, так как требуется проводить анализ учеников только из школы №50, а текущий ученик из школы под номером 21. Значения всех "счетчиков" остаются без модификации.

 

В итоге имеем:

Как видно из представленной таблицы, существует единственный ученик (Петров Игорь), набравший самый максимальный балл и существует единственный человек (Володина Тамара), набравший второй по максимальности балл.

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

Петров Игорь
Володина Тамара

 

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

  1. {заголовок программы}
  2. program C4;
  3. {раздел подключения модулей и сторонних расширений}
  4. uses
  5. {подключаем модуль crt – console run time. Данный модуль содержит специализированные подпрограммы для обработки текста, звука, клавиатурных событий}
  6.     crt;
  7. {раздел объявления константных величин}
  8. const
  9. {поскольку требуется проводить анализ только учеников из школы 50}
  10.     NUMBER = 50;
  11. {раздел декларации переменных}
  12. var
  13. {количество строк с информацией для анализа и обработки}
  14.     n : integer;
  15. {хранит фамилию и имя текущего ученика}
  16.     currFio : string;
  17. {хранит фамилию и имя ученика набравшего максимальный балл по школе}
  18.     fio1 : string;
  19. {хранит фамилию и имя ученика набравшего второй по максимальности балл}
  20.     fio2 : string;
  21. {количество учеников набравших самый максимальный балл по школе}
  22.     k1 : integer;
  23. {количество учеников набравших второй по максимальности балл}
  24.     k2 : integer;
  25. {максимальный балл, полученный учеником/ учениками по школе}
  26.     ball1 : integer;
  27. {второй по максимальности балл, полученный по школе}
  28.     ball2 : integer;
  29. {счетчик циклов}
  30.     i : integer;
  31. {хранит введенный символ пользователем с клавиатуры}  
  32.     ch : char
  33. {номер школы, считанный с клавиатуры, текущей записи}
  34.     numberSchool : integer;
  35. {значение полученного балла текущим учеником}
  36.     currBall : integer;
  37. {главный блок программы}
  38. begin
  39. {очистка экрана от прошлых выводов}
  40.     clrscr;
  41. {устанавливаем белый цвет тексту на дисплее}
  42.     textColor(WHITE);
  43. {диалог пользователю о вводе количества записей для обработки}
  44.     write(‘Введите   количество записей:);
  45. {считывание с клавиатуры количества записей}
  46.     readln (n);
  47. {происходит обнуление информации, поскольку ее обработка еще не начиналась}
  48.     k1 := 0;
  49.     k2 := 0;
  50.     fio1 := ‘ ’;
  51.     fio2 := ‘ ’;
  52.     ball1 := 0;
  53.     ball2 := 0;
  54. {вставка пустой строки для повышения читабельности}
  55.     writeln;
  56. {цикл со счетчиком, в котором происходит запрос информации от пользователя и, сразу же происходит обработка и анализ полученной информации}
  57.     for i := 1 to n do
  58.     begin
  59. {посимвольно считываем фамилию текущего ученика и запоминаем ее}
  60.         currFio := ‘ ’;
  61.         repeat
  62.             read(ch);
  63.             currFio := currFio + ch;
  64.         until(ch = ‘ ’);
  65. {посимвольно считываем имя текущего ученика и запоминаем его добавляя в конец ранее считанной фамилии}
  66.         repeat
  67.             read(ch);
  68.             currFio := currFio + ch;
  69.         until(ch = ‘ ’);
  70. {считываем номер школы и балл набранный текущим учеником}
  71.         readln (numberSchool, currBall);
  72. {вся обработка производится над учениками из школы номер 50}
  73.         if (numberSchool = NUMBER) then
  74.         begin
  75. {если текущий балл больше по значению максимального балла среди всех учеников, то происходит переприсваивание. Характеристики ученика набравшего максимальный балл, становятся характеристиками ученика, набравшего второй по максимальности балл, а текущие характеристики присваиваются ученику набравшего максимальный балл}
  76.             if(currBall > ball1) then
  77.             begin
  78.                 fio2 := fio1;
  79.                 k2 := k1;
  80.                 ball2 := ball1;
  81.                 fio1 := currFio;
  82.                 ball1 := currBall;
  83. {ученик, получивший максимальный балл пока что ЕДИНСТВЕННЫЙ среди всех учеников}
  84.                 k1 := 1;
  85.             end
  86.             else
  87. {если текущий балл совпадает по значению с максимальным баллом среди всех учеников, то увеличивается количество учеников получивших максимальный балл на единицу и фамилия текущего ученика, присваивается взамен фамилии ученика, набравшего второй по максимальности балл}
  88.                 if(currBall = ball1) then
  89.                 begin
  90.                     k1 := k1 + 1;
  91.                     fio2 := currFio;
  92.                     k2 := k1;
  93.                 end
  94. {если текущий балл меньше по значению максимального балла, но больше по значению чем второй по максимальности балл, то характеристики текущего ученика присваиваются характеристикам ученика, получившего второй по максимальности балл}
  95.                 else
  96.                     if(currBall > ball2) then
  97.                     begin
  98.                         k2 := 1;
  99.                         ball2 := currBall;
  100.                         fio2 := currFio;
  101.                     end
  102.                     else
  103. {если текущий балл совпадает по значению со вторым максимальным баллом, то количество учеников, набравших второй по максимальности балл, увеличивается на единицу}
  104.                         if(currBall = ball2) then
  105.                             k2 := k2 + 1;
  106.             end;
  107.         end;
  108. {перед печатью производим анализ: если количество учеников, набравших максимальный балл больше двух, то выпечатывается количество таких учеников}
  109.     if(k1 > 2) then
  110.         writeln(k1)
  111.     else
  112. {если количество учеников, набравших максимальный балл равно одному и количество учеников, набравших второй по максимальности балл больше одного человека, то печатается только фамилия и имя ученика, получившего максимальный балл по школе}
  113.         if(k1 = 1) and (k2 > 1) then
  114.             writeln(fio1)
  115.         else
  116. {во всех остальных вариантах визуализируются фамилии и имена учеников, набравших максимальный и второй по максимальности балл по школе номер 50}
  117.         begin
  118.             writeln(fio1);
  119.             writeln(fio2);
  120.         end;
  121. {имитация задержки программы. Программа будет закрыта после нажатия произвольной клавиши на клавиатуре}
  122.     readkey;
  123. {финализирующий оператор программы}
  124. end.

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

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

 

Комментарии

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

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

 
Условие задачи
(наведите курсор мыши на ссылку)
Аудиовизуальное
решение
Мультимедийная
видеопрезентация
Решение в формате
слайд-шоу
Текстовое
решение
Категория A1
/sites/default/files/slides/inf/1211/inf_A1_01_01_t4S.jpg
Перейти Перейти Перейти Перейти
Категория A2
/sites/default/files/slides/inf/804/inf_A2_01_01_knN.jpg
Перейти Перейти Перейти Перейти
Категория A3
/sites/default/files/slides/inf/805/inf_A3_01_01_53B.jpg
Перейти Перейти Перейти Перейти
Категория A4
/sites/default/files/slides/inf/806/inf_A4_01_01_HXr.jpg
Перейти Перейти Перейти Перейти
Категория A5
/sites/default/files/slides/inf/877/inf_A5_01_01_phpTD0463.jpg
Перейти Перейти Перейти Перейти
Категория A6
/sites/default/files/slides/inf/1225/inf_A6_01_01_CRr.jpg
Перейти Перейти Перейти Перейти
Категория A7
/sites/default/files/slides/inf/890/inf_A7_01_01_Ado.jpg
Перейти Перейти Перейти Перейти
Категория A8
/sites/default/files/slides/inf/898/inf_A8_01_01_JJV.jpg
Перейти Перейти Перейти Перейти
Категория A9
/sites/default/files/slides/inf/2159/inf_A9_01_01_phpUpivnW.jpg
Перейти Перейти Перейти Перейти
Категория A10
/sites/default/files/slides/inf/2170/inf_A10_01_01_phpl32P1w.jpg
Перейти Перейти Перейти Перейти
Категория A11
/sites/default/files/slides/inf/994/inf_A11_01_01_KyH.jpg
Перейти Перейти Перейти Перейти
Категория A12
/sites/default/files/slides/inf/1295/inf_A12_01_01_TJK.jpg
Перейти Перейти Перейти Перейти
Категория A13
/sites/default/files/slides/inf/1310/inf_A13_01_01_VsS.jpg
Перейти Перейти Перейти
Категория B1
/sites/default/files/slides/inf/899/inf_B1_01_01_php1fwK8N.jpg
Перейти Перейти Перейти Перейти
Категория B2
/sites/default/files/slides/inf/2193/inf_B2_01_01_phpUx4Mvg.jpg
Перейти Перейти Перейти Перейти
Категория B3
/sites/default/files/slides/inf/2202/inf_B3_01_01_phpUx4Mvg.jpg
Перейти Перейти Перейти Перейти
Категория B4
/sites/default/files/slides/inf/1364/inf_B4_01_01_iKq.jpg
Перейти Перейти Перейти Перейти
Категория B5
/sites/default/files/slides/inf/1341/inf_B3_01_01_i5V.jpg
Перейти Перейти Перейти Перейти
Категория B6
/sites/default/files/slides/inf/2213/inf_B6_01_01_phpEyxdxU.jpg
Перейти Перейти Перейти Перейти
Категория B7
/sites/default/files/slides/inf/2221/inf_B7_01_01_phpo5DDL8.jpg
Перейти Перейти Перейти Перейти
Категория B8
/sites/default/files/slides/inf/2228/inf_B8_01_01_phpLRZYf4.jpg
Перейти Перейти Перейти Перейти
Категория B9
/sites/default/files/slides/inf/2250/inf_B9_01_01_phpqjzRBb.jpg
Перейти Перейти Перейти Перейти
Категория B10
/sites/default/files/slides/inf/2271/inf_B10_01_01_phpBoQYXv.jpg
Перейти Перейти Перейти Перейти
Категория B11
/sites/default/files/slides/inf/2281/inf_B11_01_01_phpi8udor.jpg
Перейти Перейти Перейти Перейти
Категория B12
/sites/default/files/slides/inf/2290/inf_B12_01_01_phpE00GlF.jpg
Перейти Перейти Перейти Перейти
Категория B13
/sites/default/files/slides/inf/2310/inf_B13_01_01_phpwzFLNF.jpg
Перейти Перейти Перейти Перейти
Категория B14
/sites/default/files/slides/inf/2324/inf_B14_01_01_php64fzgb.jpg
Перейти Перейти Перейти Перейти
Категория B15
/sites/default/files/slides/inf/2330/inf_B15_01_01_phpKZvkiX.jpg
Перейти Перейти Перейти Перейти
Категория C1
/sites/default/files/slides/inf/901/inf_C1_01_01_VWF.jpg
Перейти Перейти Перейти Перейти
Категория C2
/sites/default/files/slides/inf/902/inf_C2_01_01_DuJ.jpg
Перейти Перейти Перейти Перейти
Категория C3
/sites/default/files/slides/inf/903/inf_C3_01_01_P64.jpg
Перейти Перейти Перейти Перейти
 
© 2011-2019 ООО "СтадиМен". Все права сохранены.
Перепечатка и использование материалов с данного сайта, разрешена только по согласию с владельцем.
Владелец оставляет за собой право воспользоваться 146 статьей УК РФ при нарушении авторских и смежных прав.
 
 
 
 
Авторизация на сайте
 
 
 
Обнаружили
ошибку на сайте?