Помощь - Поиск - Пользователи - Календарь
Полная версия: Статистика чемпионата по футболу
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
DD
Помогите пожалуйста сделать по кол-ву очков сортировку мест команд. Ну ещё бы хорошо, если очков одинаково, то смотрелось бы по забитым мячам.

Исходный код
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
У тебя же массив записей не так ли? Тогда в чем проблема? Здесь все расписано:
FAQ: Как отсортировать массив записей по возрастанию
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.