![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
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. |
![]() ![]() |
![]() |
Текстовая версия | 19.04.2025 19:19 |