Напистаь подпрограмму для универсальной сортировки произвольного массива с произвольным базовым типом. Подпрограмме передается массив как нетипизованный параметр, его длина, размер элемента и логическая функция сравнения двух элементов массива.
С использованием этой подпрограммы решить следующую задачу.
Имеется информация о студентах группы: Ф.И.О., результаты последней экзаменационной сессии. Требуется получить список студентов с указанием среднего балла по итогам сессии, упорядоченный по указанию пользователя либо лексикографически, либо по невозрастанию среднего балла.
Подобрать набор тестовых данных!
Имеется информация о студентах группы
И второе: зачем длина массива передается. В Си классическом это может и нужно, а в Паскале можно использовать открытые массивы. Может их применить? Или обязательно использовать нетипизированный параметр?
Не понял, что это значит:
Имеется информация о студентах группы
- Как она имеется? Как вводить?
TYPE
func_compare = function (var v1, v2): Integer;
TOneStud = record
name: String[name_len];
scores: array[1..score_ar_len] of byte;
mid : Real;
end;
function UpRuss(src: String): String;
{все буквы, в том числе и русские - в заглавные.
Нужна для корректного сравнения}
var i, len: Integer;
begin
len := length(src);
for i := 1 to len do
case src[i] of
'a'..'z': src[i] := UpCase(src[i]);
'а'..'п': src[i] := chr(ord(src[i]) - 32);
'р'..'я': src[i] := chr(ord(src[i]) - 80);
end;
UpRuss := src
end;
function CompareLexigraf(var value1, value2): Integer; far;
{0 - если равны, -1 - если value1 < value2, +1 - если value1 > value2
по фамилиям без учета регистра}
var r1: TOneStud absolute value1;
r2: TOneStud absolute value2;
begin
if UpRuss(r1.name) > UpRuss(r2.name) then CompareLexigraf := 1
else
if UpRuss(r1.name) < UpRuss(r2.name) then CompareLexigraf := -1
else CompareLexigraf := 0
end;
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.