- Аудиовизуальное решение
- Мультимедийная видеопрезентация
- Решение в формате слайд-шоу
- Текстовое
решение - Исходный код программы
Решение
{заголовок программы}
program C4;
{раздел подключения модулей и сторонних расширений}
uses
{подключаем модуль crt. crt - console run time. Данный модуль содержит
специализированные подпрограммы для обработки текста, звука,
клавиатурных событий}
crt;
{радел объявления константных величин}
const
{поскольку требуеся проводить анализ только учеников из школы 50}
NUMBER = 50;
{раздел декларации переменных}
var
{количество строк с информацией для анализа и обработки}
n : integer;
{хранит фамилию и имя текущего ученика}
currFio : string;
{хранит фамилию и имя ученика набравшего максимальный балл по школе}
fio1 : string;
{хранит фамилию и имя ученика набравшего второй по максимальности балл}
fio2 : string;
{количество учеников, набравших самый максимальный балл по школе}
k1 : integer;
{количество учеников, набравших второй по максимальности балл}
k2 : integer;
{максимальный балл, полученный учеником / учениками по школе}
ball1 : integer;
{второй по максимальности балл, полученный по школе}
ball2 : integer;
{счетчик циклов}
i : integer;
{хранит введенный символ пользователем с клавиатуры}
ch : char;
{номер школы, считанный с клавиатуры, текущей записи}
numberShool : integer;
{значение полученного балла текущим учеником}
currBall : integer;
{главный блок программы}
begin
{очистка экрана от прошлых выводов}
clrscr;
{устанавливаем белый цвет тексту на дисплее}
textColor(WHITE);
{диалог пользователю о вводе количества записей для обработки}
write('Введите количество записей: ');
{считывание с клавиатуры количества записей}
readln(n);
{происходит обнуление информации, поскольку ее обработка еще не начиналась}
k1 := 0;
k2 := 0;
fio1 := '';
fio2 := '';
ball1 := 0;
ball2 := 0;
{вставка пустой строки для повышения читабельности}
writeln;
{цикл со счетчиком, в котором происходит запрос информации от пользователя и,
сразу же происходит обработка и анализ полученной информации}
for i := 1 to n do
begin
{посимвольно считываем фамилию текущего ученика и запоминаем ее}
currFio := '';
repeat
read(ch);
currFio := currFio + ch;
until(ch = ' ');
{посимвольно считываем имя текущего ученика и запоминаем его добавляя в
конец ранее считанной фамилии}
repeat
read(ch);
currFio := currFio + ch;
until(ch = ' ');
{считываем номер школы и балл набранный текущим учеником}
readln(numberShool, currBall);
{вся обработка производится над учениками из школы номер 50}
if(numberShool = NUMBER) then
begin
{если текущий балл больше по значению максимального балла среди всех учеников,
то происходит переприсваивание. Характеристики ученика набравшего максимальный
балл, становятся характеристиками ученика, набравшего второй по максимальности
балл, а текущие характеристики присваиваются ученику набравшего максимальный
балл}
if(currBall > ball1) then
begin
fio2 := fio1;
k2 := k1;
ball2 := ball1;
fio1 := currFio;
ball1 := currBall;
{ученик, получивший максимальный балл пока что ЕДИНСТВЕННЫЙ среди всех учеников}
k1 := 1;
end
else
{если текущий балл совпадает по значению с максимальным баллом среди всех
учеников, то увеличивается количество учеников получивших максимальный балл
на единицу и фамилия текущего ученика, присваивается взамен фамилии ученика,
набравшего второй по максимальности балл}
if(currBall = ball1) then
begin
k1 := k1 + 1;
fio2 := currFio;
k2 := k1;
end
{если текущий балл МЕНЬШЕ по значению максимального балла, но БОЛЬШЕ по
значению чем второй по максимальности балл, то характеристики текущего ученика
присваиваются характеристикам ученика, получившего второй по максимальности
балл}
else
if(currBall > ball2) then
begin
k2 := 1;
ball2 := currBall;
fio2 := currFio;
end
else
{если текущий балл совпадает по значению со вторым по максимальности баллом,
то количество учеников, набравших второй по максимальности балл,
увеличивается на единицу}
if(currBall = ball2) then
k2 := k2 + 1;
end;
end;
{перед печатью производим анализ: если количество учеников, набравших
максимальный балл больше двух, то выпечатывается количество таких учеников}
if(k1 > 2) then
writeln(k1)
else
{если количество учеников, набравших максимальный балл равно одному и
количество учеников, набравших второй по максимальности балл больше одного
человека, то печатается ТОЛЬКО фамилия и имя ученика, получившего
максимальный балл по школе}
if((k1 = 1) and (k2 > 1)) then
writeln(fio1)
else
{во всех остальных вариантах визуализируются фамилии и имена учеников,
набравших максимальный и второй по максимальности балл по школе номер 50}
begin
writeln(fio1);
writeln(fio2);
end;
{имитация задержки программы. Программа будет закрыта после нажатия
произвольной клавиши на клавиатуре}
readkey;
{финализирующий оператор программы}
end.
program C4;
{раздел подключения модулей и сторонних расширений}
uses
{подключаем модуль crt. crt - console run time. Данный модуль содержит
специализированные подпрограммы для обработки текста, звука,
клавиатурных событий}
crt;
{радел объявления константных величин}
const
{поскольку требуеся проводить анализ только учеников из школы 50}
NUMBER = 50;
{раздел декларации переменных}
var
{количество строк с информацией для анализа и обработки}
n : integer;
{хранит фамилию и имя текущего ученика}
currFio : string;
{хранит фамилию и имя ученика набравшего максимальный балл по школе}
fio1 : string;
{хранит фамилию и имя ученика набравшего второй по максимальности балл}
fio2 : string;
{количество учеников, набравших самый максимальный балл по школе}
k1 : integer;
{количество учеников, набравших второй по максимальности балл}
k2 : integer;
{максимальный балл, полученный учеником / учениками по школе}
ball1 : integer;
{второй по максимальности балл, полученный по школе}
ball2 : integer;
{счетчик циклов}
i : integer;
{хранит введенный символ пользователем с клавиатуры}
ch : char;
{номер школы, считанный с клавиатуры, текущей записи}
numberShool : integer;
{значение полученного балла текущим учеником}
currBall : integer;
{главный блок программы}
begin
{очистка экрана от прошлых выводов}
clrscr;
{устанавливаем белый цвет тексту на дисплее}
textColor(WHITE);
{диалог пользователю о вводе количества записей для обработки}
write('Введите количество записей: ');
{считывание с клавиатуры количества записей}
readln(n);
{происходит обнуление информации, поскольку ее обработка еще не начиналась}
k1 := 0;
k2 := 0;
fio1 := '';
fio2 := '';
ball1 := 0;
ball2 := 0;
{вставка пустой строки для повышения читабельности}
writeln;
{цикл со счетчиком, в котором происходит запрос информации от пользователя и,
сразу же происходит обработка и анализ полученной информации}
for i := 1 to n do
begin
{посимвольно считываем фамилию текущего ученика и запоминаем ее}
currFio := '';
repeat
read(ch);
currFio := currFio + ch;
until(ch = ' ');
{посимвольно считываем имя текущего ученика и запоминаем его добавляя в
конец ранее считанной фамилии}
repeat
read(ch);
currFio := currFio + ch;
until(ch = ' ');
{считываем номер школы и балл набранный текущим учеником}
readln(numberShool, currBall);
{вся обработка производится над учениками из школы номер 50}
if(numberShool = NUMBER) then
begin
{если текущий балл больше по значению максимального балла среди всех учеников,
то происходит переприсваивание. Характеристики ученика набравшего максимальный
балл, становятся характеристиками ученика, набравшего второй по максимальности
балл, а текущие характеристики присваиваются ученику набравшего максимальный
балл}
if(currBall > ball1) then
begin
fio2 := fio1;
k2 := k1;
ball2 := ball1;
fio1 := currFio;
ball1 := currBall;
{ученик, получивший максимальный балл пока что ЕДИНСТВЕННЫЙ среди всех учеников}
k1 := 1;
end
else
{если текущий балл совпадает по значению с максимальным баллом среди всех
учеников, то увеличивается количество учеников получивших максимальный балл
на единицу и фамилия текущего ученика, присваивается взамен фамилии ученика,
набравшего второй по максимальности балл}
if(currBall = ball1) then
begin
k1 := k1 + 1;
fio2 := currFio;
k2 := k1;
end
{если текущий балл МЕНЬШЕ по значению максимального балла, но БОЛЬШЕ по
значению чем второй по максимальности балл, то характеристики текущего ученика
присваиваются характеристикам ученика, получившего второй по максимальности
балл}
else
if(currBall > ball2) then
begin
k2 := 1;
ball2 := currBall;
fio2 := currFio;
end
else
{если текущий балл совпадает по значению со вторым по максимальности баллом,
то количество учеников, набравших второй по максимальности балл,
увеличивается на единицу}
if(currBall = ball2) then
k2 := k2 + 1;
end;
end;
{перед печатью производим анализ: если количество учеников, набравших
максимальный балл больше двух, то выпечатывается количество таких учеников}
if(k1 > 2) then
writeln(k1)
else
{если количество учеников, набравших максимальный балл равно одному и
количество учеников, набравших второй по максимальности балл больше одного
человека, то печатается ТОЛЬКО фамилия и имя ученика, получившего
максимальный балл по школе}
if((k1 = 1) and (k2 > 1)) then
writeln(fio1)
else
{во всех остальных вариантах визуализируются фамилии и имена учеников,
набравших максимальный и второй по максимальности балл по школе номер 50}
begin
writeln(fio1);
writeln(fio2);
end;
{имитация задержки программы. Программа будет закрыта после нажатия
произвольной клавиши на клавиатуре}
readkey;
{финализирующий оператор программы}
end.
- Аудиовизуальное решение
- Мультимедийная видеопрезентация
- Решение в формате слайд-шоу
- Текстовое
решение - Исходный код программы