![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
DD |
![]()
Сообщение
#1
|
Гость ![]() |
Помогите пожалуйста сделать по кол-ву очков сортировку мест команд. Ну ещё бы хорошо, если очков одинаково, то смотрелось бы по забитым мячам.
Исходный код program football; uses crt; const ncom=5; ourfname='table.txt'; numb : set of '0'..'9'= ['0'..'9']; type teamname = (Lokomotiv, Dinamo, Spartak, CSKA, Zenit, Shinnik); team = record name : teamname; ngames : integer; {число игр} wgames : integer; {выигранные} egames : integer; {ничьи} lgames : integer; {проигранные} balls : integer; {забитых иячей} skip : integer; {пропущенных мячей} points : integer; rank : integer; scores : array[1..6,1..2] of integer; end; var cmds : array[1..6] of team; wasgame : array [1..6,1..6] of boolean; fname:text; table:array[1..6] of string; k:integer; procedure input; var i,cm1,cm2, sc1,sc2:integer; begin clrscr; writeln('Выберите номера команд:'); for i:=0 to ncom do case i of 0 : writeln('1. Локомотив'); 1 : writeln('2. Динамо'); 2 : writeln('3. Спартак'); 3 : writeln('4. ЦСКА'); 4 : writeln('5. Зенит'); 5 : writeln('6. Шинник'); end; writeln; write('Номер команды, играющая дома: '); readln(cm1); write('Номер команды, играющая в гостях: '); readln(cm2); if cm1<>cm2 then begin writeln; wasgame[cm1,cm2]:=true; write('Количество голов, забившая первая команда:'); read(sc1); write('Количество голов, забившая вторая команда:'); read(sc2); writeln; write('Счёт игры - ',sc1,':',sc2); readkey; inc(cmds[cm1].ngames); inc(cmds[cm2].ngames); cmds[cm1].balls:=cmds[cm1].balls+sc1; cmds[cm2].balls:=cmds[cm2].balls+sc2; cmds[cm1].skip:=cmds[cm1].skip+sc2; cmds[cm2].skip:=cmds[cm2].skip+sc1; cmds[cm1].scores[cm2,1]:=sc1; cmds[cm1].scores[cm2,2]:=sc2; if sc1>sc2 then begin inc(cmds[cm1].wgames); cmds[cm1].points:=cmds[cm1].points+3; inc(cmds[cm2].lgames); end; if sc1=sc2 then begin inc(cmds[cm1].egames); inc(cmds[cm2].egames); inc(cmds[cm1].points); inc(cmds[cm2].points); end; if sc1<sc2 then begin inc(cmds[cm2].wgames); cmds[cm2].points:=cmds[cm2].points+3; inc(cmds[cm1].lgames); end; end; end; procedure wrres(i:integer); var j:integer; begin for j:=1 to 6 do if i=j then write(' X ') else if wasgame[i,j] then write(cmds[i].scores[j,1], ':', cmds[i].scores[j,2], ' ') else write(' - '); writeln(cmds[i].ngames,' ', cmds[i].wgames,' ', cmds[i].egames,' ', cmds[i].lgames,' ', cmds[i].balls,' ', cmds[i].skip,' ', cmds[i].points,' ', cmds[i].rank); end; procedure showtable; var i:integer; begin clrscr; write(' '); writeln('И В Н П ЗМ ПМ Очки Место'); for i:=1 to 6 do case i of 1 : begin write('1. Локомотив '); wrres(i); end; 2 : begin write('2. Динамо '); wrres(i); end; 3 : begin write('3. Спартак '); wrres(i); end; 4 : begin write('4. ЦСКА '); wrres(i); end; 5 : begin write('5. Зенит '); wrres(i); end; 6 : begin write('6. Шинник '); wrres(i); end; end; readkey; end; function IntToStr(I: Longint): String; var S: string[11]; begin Str(I, S); IntToStr := S; end; procedure loadfile; var i,j,l,m,cod,z:integer; tmp:array[1..8] of integer; tmps:string; begin tmps:=''; k:=1; l:=1; z:=1; assign(fname,ourfname); reset(fname); if ioresult=0 then begin while not eof(fname) do begin readln(fname,table[k]); inc(k); end; end; close(fname); k:=k-1; for i:=1 to k do begin z:=1; for j:=1 to length(table[i]) do begin if ( z >= k )then begin if table[i][j] in numb then begin tmps:=tmps+table[i][j]; continue; end; if (table[i][j]='|') then begin val(tmps,tmp[z-k],cod); tmps:=''; inc(z); continue; end; end; if (table[i][j]='|') then begin val(tmps,cmds[i].scores[z,2],cod); tmps:=''; inc(z); continue; end; if (table[i][j]='-') then begin wasgame[i][z] := false; continue; end; if table[i][j] in numb then begin tmps:=tmps+table[i][j]; continue; end; if (table[i][j]=':') then begin wasgame[i][z]:=true; val(tmps,cmds[i].scores[z,1],cod); tmps:=''; continue; end; end; cmds[i].ngames:=tmp[1]; cmds[i].wgames:=tmp[2]; cmds[i].egames:=tmp[3]; cmds[i].lgames:=tmp[4]; cmds[i].balls:=tmp[5]; cmds[i].skip:=tmp[6]; cmds[i].points:=tmp[7]; cmds[i].rank:=tmp[8]; end; end; procedure savefile; var i,j: integer; begin assign(fname,ourfname); rewrite(fname); for i:=1 to 6 do begin for j:=1 to 6 do if wasgame[i,j] then write(fname,cmds[i].scores[j,1],':',cmds[i].scores[j,2],'|') else write(fname,'-|'); writeln(fname,cmds[i].ngames,'|',cmds[i].wgames,'|', cmds[i].egames,'|',cmds[i].lgames,'|', cmds[i].balls,'|',cmds[i].skip,'|',cmds[i].points,'|',cmds[i].rank, '|'); end; close(fname); end; procedure clearsts; var i:integer; begin assign(fname,ourfname); rewrite(fname); for i:=1 to 6 do writeln(fname,''); close(fname); end; procedure menu; var act:integer; label st; begin st: clrscr; writeln('Программа, ведущая статистику чемпионата по футболу'); writeln; writeln('1. Таблица результатов'); writeln('2. Ввести данные по игре'); writeln('3. Сохранить данные'); writeln('4. Загрузить данные'); writeln('5. Очистить всю информацию'); writeln('6. Выход'); writeln; write ('Выберите дейстие:' ); read(act); case act of 1: begin showtable; goto st; end; 2: begin input; goto st; end; 3: begin savefile; goto st; end; 4: begin loadfile; goto st; end; 5: clearsts; 6: halt; else begin clrscr; writeln('Неверный ввод!'); readkey; goto st; end; end; end; begin menu; end. |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
У тебя же массив записей не так ли? Тогда в чем проблема? Здесь все расписано:
FAQ: Как отсортировать массив записей по возрастанию |
![]() ![]() |
![]() |
Текстовая версия | 23.06.2025 14:12 |