Сведения о сдаче экзаменов учениками 9-х классов некоторой средней школы - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

Помогите найти ошибку в моей программе. Не нужно писать свою программу. На вход программе подаются сведения о сдаче экзаменов учениками 9-х классов некоторой средней школы. В первой строке сообщается количество учеников N, которое не меньше 10, но не превосходит 100, каждая из следующих N строк имеет следующий формат: <Фамилия> <Имя> <оценки>, где <Фамилия> – строка, состоящая не более чем из 20 символов, <Имя> – строка, состоящая не более чем из 15 символов, <оценки> – через пробел три целых числа, соответствующие оценкам по пятибалльной системе. <Фамилия> и <Имя>, а также <Имя> и <оценки> разделены одним пробелом. Пример входной строки: Иванов Петр 4 5 3 Требуется написать как можно более эффективную программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет выводить на экран фамилии и имена трех худших по среднему баллу учеников. Если среди остальных есть ученики, набравшие тот же средний балл, что и один из трех худших, то следует вывести и их фамилии и имена.

Решение задачи: «Сведения о сдаче экзаменов учениками 9-х классов некоторой средней школы»

textual
Листинг программы
const LIM = 100;
var Info: array[1..LIM] of record
      name: string;
      sum: integer;
     end;
 i, k, N, mark, min1, min2, min3: integer;
  c: char;
begin
readln(N);
  { ввод исходных данных }
for i:=1 to N do begin
 Info[i].name := ''; 
 for k:=1 to 2 do
  repeat
   read(c);
   Info[i].name := Info[i].name + c;
  until c = ' ';
 Info[i].sum := 0; 
 for k:=1 to 3 do begin
  read(mark);
  Info[i].sum := Info[i].sum + mark;
 end;
 readln;
end;
  { поиск трех минимальных }
min1 := 20; min2 := 20; min3 := 20;
for i:=1 to N do begin
 if Info[i].sum <min1 then begin 
  min3 := min2; min2 := min1; 
  min1 := Info[i].sum; 
 end
 else if Info[i].sum <min2 then begin 
   min3 := min2;
   min2 := Info[i].sum; 
  end
  else if Info[i].sum <min3 then 
     min3 := Info[i].sum;
end;
  { вывод результата }
for i:=1 to N do
 if Info[i].sum <= min3 then
   writeln(Info[i].name); 
end.

Объяснение кода листинга программы

  1. В начале кода объявляются следующие переменные:
    • LIM - целочисленная константа, определяющая максимально возможное количество учеников (100);
    • Info - массив записей, содержащих информацию об учениках (имя и сумма баллов);
    • i, k, N, mark, min1, min2, min3 - целочисленные переменные для выполнения различных операций;
    • c - символ, используемый для чтения имени ученика;
    • end - символ, обозначающий конец цикла.
  2. Затем происходит чтение количества учеников (N) с помощью функции readln.
  3. В цикле по i от 1 до N происходит заполнение массива Info. Значение переменной name формируется путем чтения двух символов (имя ученика) и добавляется к уже имеющейся строке. Значение переменной sum устанавливается равным 0.
  4. В цикле по k от 1 до 3 происходит чтение трех оценок для каждого ученика и добавление их к сумме.
  5. После окончания ввода данных происходит поиск трех минимальных значений сумм. Переменные min1, min2 и min3 инициализируются значением 20.
  6. В цикле по i от 1 до N происходит сравнение суммы текущего ученика с минимальными значениями. Если сумма текущего ученика меньше min1, то значения min3, min2 и min1 обновляются. Если сумма текущего ученика меньше min2, то значения min3 и min2 обновляются. Если сумма текущего ученика меньше min3, то только значение min3 обновляется.
  7. В цикле по i от 1 до N происходит проверка условия Info[i].sum <= min3, и если оно выполняется, то выводится имя ученика. Таким образом, данный код выполняет следующие действия:
  8. Считывает количество учеников.
  9. Заполняет массив Info информацией об учениках.
  10. Находит три минимальных значения суммы баллов.
  11. Выводит имена учеников, сумма баллов которых не превышает минимальное значение.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.778 из 5
Похожие ответы