По данной информации определить самых уникальных учеников и самых средних - Pascal

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

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

Доброго времени суток)Пожалуйста,помогите написать программу к задаче: Имеется информация об учениках некоторого класса из n человек: фамилия, имя, возраст в годах, рост в см., успеваемость – округленный средний балл. Ученик называется среднестатистическим по k –му параметру (уникальным по k параметру), если на нем достигается минимум (максимум) модуля разности среднего арифметического чисел из k –го столбца и значения k –го параметра этого ученика. Ученик называется самым уникальным(самым средним), если он уникален (является среднестатистическим) по самому большому количеству параметров, определить учеников: а) самых уникальных; б) самых средних; в) самых средних среди самых уникальных; г) самых уникальных среди самых средних.

Решение задачи: «По данной информации определить самых уникальных учеников и самых средних»

textual
Листинг программы
  1. type
  2.     TSchoolboy = record
  3.         surname, name: String[20];
  4.         age, height: Byte;
  5.         avr: Real;
  6.     end;
  7.     TSchoolboyArray = Array[1..255] Of TSchoolboy;
  8. procedure SortArray(var ar: TSchoolboyArray; const a, b: Byte);
  9. var
  10.     i, j: Byte;
  11.     avr: Real;
  12. procedure Swap(var x, y: TSchoolboy);
  13. var
  14.     z: TSchoolboy;
  15. begin
  16.     z := x;
  17.     x := y;
  18.     y := z;
  19. end;
  20. begin
  21.     avr := 0;
  22.     for i := a to b do
  23.         avr := avr + ar[i].avr;
  24.     avr := avr / (b - a + 1);
  25.     for i := a to b - 1 do
  26.         for j := a to b - 1 - i do
  27.             if (Abs(ar[j].avr - avr) > Abs(ar[j + 1].avr - avr))
  28.             then
  29.                 Swap(ar[j], ar[j + 1]);
  30. end;
  31. var
  32.     ar: TSchoolboyArray;
  33.     len, i, j: Byte;
  34. begin
  35.     repeat
  36.         Write('Сколько учеников? (достаточно большое для репрезентативности алгоритма)');
  37.         ReadLn(len);
  38.     until (len >= 12); //позже массив делится на трети - треть в уникальные, треть в средние, треть отбрасывается
  39.     for i := 1 to len do
  40.         with ar[i] do
  41.         begin
  42.             surname := '';
  43.             for j := 1 to Random(20) + 1 do
  44.                 surname := surname + Chr(Random(26) + 97);
  45.             name := '';
  46.             for j := 1 to Random(25) + 1 do
  47.                 name := name + Chr(Random(26) + 97);
  48.             age := Random(100);
  49.             height := Random(120) + 100;
  50.             avr := Random * 5;
  51.             WriteLn(surname:20, ' ', name:20, ': возраст - ', age, ', рост - ', height, ', средний балл - ', avr:0:2);
  52.             //Write('Фамилия: '); ReadLn(surname);
  53.             //Write('Имя: '); ReadLn(name);
  54.             //Write('Возраст: '); ReadLn(age);
  55.             //Write('Рост: '); ReadLn(height);
  56.             //Write('Средний балл: '); ReadLn(avr);
  57.         end;
  58.     {сортируем массив так, чтобы сначала шли самые средние, а в конце - самые уникальные}
  59.     SortArray(ar, 1, len);
  60.     WriteLn('А. Самые уникальные:');
  61.     for i := (len div 3) * 2 + 1 to len do
  62.         with ar[i] do
  63.             WriteLn(surname:20, ' ', name:20, ' ', avr:0:2);
  64.     WriteLn('Б. Самые средние:');
  65.     for i := 1 to len div 3 do
  66.         with ar[i] do
  67.             WriteLn(surname:20, ' ', name:20, ' ', avr:0:2);
  68.     WriteLn('В. Самые средние среди самых уникальных:');
  69.     SortArray(ar, (len div 3) * 2 + 1, len);
  70.     for i := (len div 3) * 2 + 1 to ((len + (len div 3) * 2 + 1) div 2) do
  71.         with ar[i] do
  72.             WriteLn(surname:20, ' ', name:20, ' ', avr:0:2);
  73.     WriteLn('Г. Самые уникальные среди самых средних:');
  74.     SortArray(ar, 1, len div 3);
  75.     for i := (len div 6) + 1 to len div 3 do
  76.         with ar[i] do
  77.             WriteLn(surname:20, ' ', name:20, ' ', avr:0:2);
  78. end.

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

  1. Объявление типа данных
    • Объявляется тип данных TSchoolboy, который содержит поля surname (фамилия), name (имя), age (возраст), height (рост) и avr (средний балл).
    • Описывается тип данных TSchoolboyArray, представляющий массив структур типа TSchoolboy.
  2. Процедура сортировки массива
    • Объявляется процедура SortArray, которая принимает на вход массив ar и граничные индексы a и b.
    • Вложенная процедура Swap меняет местами значения переменных типа TSchoolboy.
    • В процедуре SortArray подсчитывается среднее значение avr среди элементов массива в пределах границ a и b.
    • Сортировка массива ar осуществляется по близости среднего значения avr к общему среднему (avr), используя функцию Abs и процедуру Swap.
  3. Основная часть программы
    • Объявляются переменные программы ar, len, i и j.
    • Запрашивается количество учеников, пока оно не станет не меньше 12.
    • Создается массив ar из учеников с произвольно заполненными значениями фамилии, имени, возраста, роста и среднего балла.
    • Массив сортируется сначала по среднему баллу, затем выводятся самые уникальные и самые средние ученики, и, наконец, среди них также производится дополнительная сортировка и выводится более узкая группа самых средних среди самых уникальных и самых уникальных среди самых средних. Этот код создает и сортирует массив учеников и выводит несколько подгрупп самых уникальных и самых средних учеников.

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


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

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

12   голосов , оценка 3.5 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы