По данной информации определить самых уникальных учеников и самых средних - Pascal
Формулировка задачи:
Доброго времени суток)Пожалуйста,помогите написать программу к задаче:
Имеется информация об учениках некоторого класса из n человек: фамилия, имя, возраст в годах, рост в см., успеваемость – округленный средний балл. Ученик называется среднестатистическим по k –му параметру (уникальным по k параметру), если на нем достигается минимум (максимум) модуля разности среднего арифметического чисел из k –го столбца и значения k –го параметра этого ученика. Ученик называется самым уникальным(самым средним), если он уникален (является среднестатистическим) по самому большому количеству параметров, определить учеников:
а) самых уникальных;
б) самых средних;
в) самых средних среди самых уникальных;
г) самых уникальных среди самых средних.
Решение задачи: «По данной информации определить самых уникальных учеников и самых средних»
textual
Листинг программы
- type
- TSchoolboy = record
- surname, name: String[20];
- age, height: Byte;
- avr: Real;
- end;
- TSchoolboyArray = Array[1..255] Of TSchoolboy;
- procedure SortArray(var ar: TSchoolboyArray; const a, b: Byte);
- var
- i, j: Byte;
- avr: Real;
- procedure Swap(var x, y: TSchoolboy);
- var
- z: TSchoolboy;
- begin
- z := x;
- x := y;
- y := z;
- end;
- begin
- avr := 0;
- for i := a to b do
- avr := avr + ar[i].avr;
- avr := avr / (b - a + 1);
- for i := a to b - 1 do
- for j := a to b - 1 - i do
- if (Abs(ar[j].avr - avr) > Abs(ar[j + 1].avr - avr))
- then
- Swap(ar[j], ar[j + 1]);
- end;
- var
- ar: TSchoolboyArray;
- len, i, j: Byte;
- begin
- repeat
- Write('Сколько учеников? (достаточно большое для репрезентативности алгоритма)');
- ReadLn(len);
- until (len >= 12); //позже массив делится на трети - треть в уникальные, треть в средние, треть отбрасывается
- for i := 1 to len do
- with ar[i] do
- begin
- surname := '';
- for j := 1 to Random(20) + 1 do
- surname := surname + Chr(Random(26) + 97);
- name := '';
- for j := 1 to Random(25) + 1 do
- name := name + Chr(Random(26) + 97);
- age := Random(100);
- height := Random(120) + 100;
- avr := Random * 5;
- WriteLn(surname:20, ' ', name:20, ': возраст - ', age, ', рост - ', height, ', средний балл - ', avr:0:2);
- //Write('Фамилия: '); ReadLn(surname);
- //Write('Имя: '); ReadLn(name);
- //Write('Возраст: '); ReadLn(age);
- //Write('Рост: '); ReadLn(height);
- //Write('Средний балл: '); ReadLn(avr);
- end;
- {сортируем массив так, чтобы сначала шли самые средние, а в конце - самые уникальные}
- SortArray(ar, 1, len);
- WriteLn('А. Самые уникальные:');
- for i := (len div 3) * 2 + 1 to len do
- with ar[i] do
- WriteLn(surname:20, ' ', name:20, ' ', avr:0:2);
- WriteLn('Б. Самые средние:');
- for i := 1 to len div 3 do
- with ar[i] do
- WriteLn(surname:20, ' ', name:20, ' ', avr:0:2);
- WriteLn('В. Самые средние среди самых уникальных:');
- SortArray(ar, (len div 3) * 2 + 1, len);
- for i := (len div 3) * 2 + 1 to ((len + (len div 3) * 2 + 1) div 2) do
- with ar[i] do
- WriteLn(surname:20, ' ', name:20, ' ', avr:0:2);
- WriteLn('Г. Самые уникальные среди самых средних:');
- SortArray(ar, 1, len div 3);
- for i := (len div 6) + 1 to len div 3 do
- with ar[i] do
- WriteLn(surname:20, ' ', name:20, ' ', avr:0:2);
- end.
Объяснение кода листинга программы
- Объявление типа данных
- Объявляется тип данных
TSchoolboy
, который содержит поляsurname
(фамилия),name
(имя),age
(возраст),height
(рост) иavr
(средний балл). - Описывается тип данных
TSchoolboyArray
, представляющий массив структур типаTSchoolboy
.
- Объявляется тип данных
- Процедура сортировки массива
- Объявляется процедура
SortArray
, которая принимает на вход массивar
и граничные индексыa
иb
. - Вложенная процедура
Swap
меняет местами значения переменных типаTSchoolboy
. - В процедуре
SortArray
подсчитывается среднее значениеavr
среди элементов массива в пределах границa
иb
. - Сортировка массива
ar
осуществляется по близости среднего значенияavr
к общему среднему (avr
), используя функциюAbs
и процедуруSwap
.
- Объявляется процедура
- Основная часть программы
- Объявляются переменные программы
ar
,len
,i
иj
. - Запрашивается количество учеников, пока оно не станет не меньше 12.
- Создается массив
ar
из учеников с произвольно заполненными значениями фамилии, имени, возраста, роста и среднего балла. - Массив сортируется сначала по
среднему баллу
, затем выводятсясамые уникальные
исамые средние
ученики, и, наконец, среди них также производится дополнительная сортировка и выводится более узкая группасамых средних среди самых уникальных
исамых уникальных среди самых средних
. Этот код создает и сортирует массив учеников и выводит несколько подгруппсамых уникальных
исамых средних
учеников.
- Объявляются переменные программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д