Участники лыжной гонки финишируют неодновременно. Известны их стартовые номера, фамилии и результат (Мин., Сек.). Составить программу, осуществляющую вывод на табло информацию о лучших 6-ти результатах (с распределением мест) после финиша каждого из участников

Написала код. Начальству не понравилось. Заставило переписать. Переписать не могу. Помогите с самой сортировкой. Скину две программы.


Вот первая работающаяя:


program qq;
uses crt;
const
nn = 5;
type
trow = record
sec, num: integer;
fio: string;
end;
var
res: array [1..nn+2] of trow;
i, j, d, n, min: integer;
ch: char;
begin

ClrScr;
gotoxy(1,5) ;
for j:=1 to 79 do Write('-'); WriteLn;
gotoxy(3,6) ;
Write('Введите интервал раздельного старта(сек.): ');
gotoxy(1,7) ;
for j:=1 to 79 do Write('-'); WriteLn;
ReadLn(d);
begin
ClrScr;
for j:=1 to 79 do Write('-'); WriteLn;
n:=0;
repeat
WriteLn('Результаты');
for j:=1 to 79 do Write('-'); WriteLn;
WriteLn('Место| Номер | Ф.И.О.','':50-5, '| Мин.|Сек.');
for j:=1 to 79 do Write('-'); WriteLn;
for i:=1 to nn do with res[i] do begin
if i<=n then
WriteLn(i:4, ' | ', num:5, ' | ', fio, '':50-length(fio), ' | ',
sec div 60:5, ':', sec mod 60)
else
WriteLn(i:4, ' | ');
end;
for j:=1 to 79 do Write('-'); WriteLn;
WriteLn;
if n<=nn then inc(n);
with res[n] do
repeat
Writeln ('Мин Сек Номер Ф.И.О. (-1 - выход): ');
Read(min); if min<0 then Exit;
ReadLn(sec, num, fio);
sec:=min*60+sec-num*d*(num-1);
if sec<=0 then WriteLn('Ошибка: финиш раньше старта на ', -sec, ' секунд!');
until (sec>0);
for i:=n-1 downto 1 do
if res[i+1].sec < res[i].sec then begin
res[nn+2]:=res[i]; res[i]:=res[i+1]; res[i+1]:=res[nn+2];

end;

until false;

end;
end;
end.



Вот вторая (та, что не работает) при запуске всё будет понятно.

program qq;
uses crt;
type
trow = record
min,
sec,
num: integer;
fio: array [1..100] of string;
end;
var
res: array [1..100] of trow;
i,
n,
line,
interval,
kolichestvostart,
min,
sec,
num: integer;
fio: array [1..100] of string;
ch: char;
{Организация процедуры}


{___________________________Начало основной программы_______________________________}

{___________________________Вывод заставки_______________________________}


{_________________Ввод количества результатов, выводимых таблицей________________}

begin
ClrScr;
gotoxy(1,2) ;
for line:=1 to 79 do Write('='); WriteLn;
gotoxy(22,3) ;
Writeln('Введите количество стартующих спортсменов ');
gotoxy(1,4) ;
for line:=1 to 79 do Write('='); WriteLn;
gotoxy(3,6) ;
Writeln('Количество выводимых результатов дожно быть в промежутке от 2 до 15,');
gotoxy(3,7);
Writeln('Иначе таблица не поместится на экране');
gotoxy(1,8) ;
for line:=1 to 79 do Write('='); WriteLn;
ReadLn(kolichestvostart);



{______________________________Ввод интервала старта_______________________________}
n:=0;
if n<=kolichestvostart then inc(n);
with res[n] do
ClrScr;
gotoxy(1,2) ;
for line:=1 to 79 do Write('='); WriteLn;
gotoxy(20,3) ;
Write('Введите интервал раздельного старта(сек.): ');
gotoxy(1,4) ;
for line:=1 to 79 do Write('='); WriteLn;
ReadLn(interval);


{______________________________Ввод стартового листа_______________________________}
ClrScr;
gotoxy(1,2) ;
for line:=1 to 79 do Write('='); WriteLn;
gotoxy(3,3) ;
Writeln('Сформируйте стартовый лист.');
gotoxy(3,4) ;
Writeln('Введите фамилии спортсменов по номерам.');
gotoxy(1,5) ;
for line:=1 to 79 do Write('='); WriteLn;
Writeln('Номер | Имя');
gotoxy(1,7) ;
for line:=1 to 79 do Write('='); WriteLn;
for num :=1 to kolichestvostart do
Begin
write( ' ',num,' | ');
readln(fio[num]);

end;

{______________________________Стартовый лист_______________________________}
ClrScr;
gotoxy(1,2) ;
for line:=1 to 79 do Write('='); WriteLn;
gotoxy(30,3) ;
Writeln('Ваш стартовый лист');
gotoxy(1,4) ;
for line:=1 to 79 do Write('='); WriteLn;
gotoxy(1,5) ;
Writeln('Номер| Имя | Инт.(сек)');
gotoxy(1,6) ;
for line:=1 to 79 do Write('='); WriteLn;
for num:=1 to kolichestvostart do
writeln(' ',num,' | ',fio[num],'':61-length(fio[num]),'| +',(0-interval)+num*interval);

gotoxy(1,6+kolichestvostart+1) ;
for line:=1 to 79 do Write('='); WriteLn;
gotoxy(1,7+kolichestvostart+2);
Writeln('Нажмите Enter для продолжения');
readln;
end;

{___________________________Ввод результатов_______________________________}
ClrScr;
gotoxy(1,2) ;
for line:=1 to 79 do Write('='); WriteLn;
gotoxy(25,3) ;
Writeln('Введите результаты через пробел');
gotoxy(1,4) ;
for line:=1 to 79 do Write('='); WriteLn;
gotoxy(1,5) ;
Writeln('********************************************************************* Результат');
Writeln('Номер| Имя * Мин:Сек');
gotoxy(1,7) ;
for line:=1 to 79 do Write('='); WriteLn;
for num:=1 to kolichestvostart do

repeat
write(' ',num,' | ',fio[num],'':61-length(fio[num]),'| ');
Read(min); if min<0 then Exit;
ReadLn(sec);
sec:=min*60+sec-num*interval*(num-1);
if sec<=0 then WriteLn('Ошибка: финиш раньше старта на ', -sec, ' секунд!')
until (sec>0);
gotoxy(1,7+kolichestvostart+1) ;
for line:=1 to 79 do Write('-'); WriteLn;
gotoxy(1,7+kolichestvostart+2);
Writeln('Нажмите Enter для продолжения');
readln;


{___________________________Вывод таблицы результатов________________________________}


clrscr;
WriteLn('Результаты');
for line:=1 to 79 do Write('='); WriteLn;
WriteLn('Место| Номер | Ф.И.О.','':50-5, ' | Мин.|Сек.');
for line:=1 to 79 do Write('='); WriteLn;


WriteLn( i:4, ' | ', num:5, ' | ', fio[num], '':52-length(fio[num]), ' | ',
min, ':', sec);


for line:=1 to 79 do Write('='); WriteLn;

end.