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.