![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Мария788 |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 1 Пол: Мужской Репутация: ![]() ![]() ![]() |
Участники лыжной гонки финишируют неодновременно. Известны их стартовые номера, фамилии и результат (Мин., Сек.). Составить программу, осуществляющую вывод на табло информацию о лучших 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. |
![]() ![]() |
![]() |
Текстовая версия | 15.07.2025 7:42 |