По данной информации определить самых уникальных учеников и самых средних - 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
из учеников с произвольно заполненными значениями фамилии, имени, возраста, роста и среднего балла. - Массив сортируется сначала по
среднему баллу
, затем выводятсясамые уникальные
исамые средние
ученики, и, наконец, среди них также производится дополнительная сортировка и выводится более узкая группасамых средних среди самых уникальных
исамых уникальных среди самых средних
. Этот код создает и сортирует массив учеников и выводит несколько подгруппсамых уникальных
исамых средних
учеников.
- Объявляются переменные программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д