По данной информации определить самых уникальных учеников и самых средних - 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.

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

  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
Похожие ответы