Pascal, system pucharowy 8 drużyn


(Maciek1224) #1

Witam, napisałem kawałek programy, który ma rozegrać system pucharowy pomiędzy 8 drużynami. Niestety nie wiem, jak wygraną drużynę "przenieść" do następnego meczu. Chodzi mi o to, że gra powiedzmy a z b i wychodzi b i potem gra c z d i wychodzi c i potem gra b z c itp. Proszę o pomoc ; )

Program puchar;

uses crt;

var

  nazwy: array [1..8] of string;

  i:integer;

  wyniki: array[1..8] of integer;


procedure WczytajDruzyny;

var i:Byte;

begin

  for i:= 1 to 8 do

  begin

    write('Nazwa ',i,': ');

    readln(nazwy[i]);

  end;

end;


procedure WyswietlDruzyny;

var i:Byte;

begin

  clrscr;

  for i:= 1 to 8 do writeln(nazwy[i]);

end;


begin

  clrscr;

  WczytajDruzyny;

  WyswietlDruzyny;

  writeln('mecz pomiedzy: ',nazwy[1], ' a ',nazwy[2]);

  Writeln('Wpisz wynik ',nazwy[1]);

  readln(wyniki[1]);

  Writeln('Wpisz wynik ',nazwy[2]);

  readln(wyniki[2]);

  if wyniki[1]>wyniki[2] then writeln('Wygraˆa druľyna: ',nazwy[1],' i przechodzi dalej!')

  else if wyniki[1]= wyniki[2] then Writeln('Remis')

  else writeln('Wygraˆa druľyna: ',nazwy[2],' i przechodzi dalej!');

    writeln('mecz pomiedzy: ',nazwy[3], ' a ',nazwy[4]);

  Writeln('Wpisz wynik ',nazwy[3]);

  readln(wyniki[3]);

  Writeln('Wpisz wynik ',nazwy[4]);

  readln(wyniki[4]);

  if wyniki[3]>wyniki[4] then writeln('Wygraˆa druľyna: ',nazwy[3],' i przechodzi dalej!')

  else if wyniki[3]= wyniki[4] then Writeln('Remis')

  else writeln('Wygraˆa druľyna: ',nazwy[4],' i przechodzi dalej!');

    writeln('mecz pomiedzy: ',nazwy[5], ' a ',nazwy[6]);

  Writeln('Wpisz wynik ',nazwy[5]);

  readln(wyniki[5]);

  Writeln('Wpisz wynik ',nazwy[6]);

  readln(wyniki[6]);

  if wyniki[5]>wyniki[6] then writeln('Wygraˆa druľyna: ',nazwy[5],' i przechodzi dalej!')

  else if wyniki[5]= wyniki[6] then Writeln('Remis')

  else writeln('Wygraˆa druľyna: ',nazwy[6],' i przechodzi dalej!');

    writeln('mecz pomiedzy: ',nazwy[7], ' a ',nazwy[8]);

  Writeln('Wpisz wynik ',nazwy[7]);

  readln(wyniki[7]);

  Writeln('Wpisz wynik ',nazwy[8]);

  readln(wyniki[8]);

  if wyniki[i]>wyniki[8] then writeln('Wygraˆa druľyna: ',nazwy[7],' i przechodzi dalej!')

  else if wyniki[7]= wyniki[8] then Writeln('Remis')

  else writeln('Wygraˆa druľyna: ',nazwy[8],' i przechodzi dalej!');

  readkey;

end.

([alex]) #2

Stwórz dodatkową tablicę:

  • dla pólfinala

nazwy2: array [1..4] of string;

wynik2: array[1..4] of integer;

  • dla finala

nazwy1: array [1..2] of string;

wynik1: array[1..2] of integer;

po wczytaniu wyników wyniki[1],wyniki[2] odpowiednio wypełniasz wpisujesz w nazwy2[1] napis z nazwy[1] lub nazwy[2] w zależności od wyników.


(Tomek Matz) #3

Nudziło mi się i przerobiłem trochę ten Twój kod oraz dodałem to co potrzebujesz. Może Ci się przyda:

program puchar;

uses crt;


type

  TDruzyna = record

    ID: byte;

    nazwa: string;

    miejsce: byte; { 1,2,3 lub 4 }

    polfinal: byte; { flaga: 1 - awans, 2 - przegrany, 3 - wygrany }

    final: byte; { flaga: 1 - awans, 2 - przegrany, 3 - wygrany }

  end;


type

  TMecz = record

    druzyna1ID: byte;

    druzyna2ID: byte;

    druzyna1Bramki: byte;

    druzyna2Bramki: byte;

  end;


var

  mecze: array[1..8] of TMecz;

  druzyny: array[1..8] of TDruzyna;


procedure WczytajDruzyny;

var i: byte;

begin

  for i:= 1 to 8 do

  begin

    write('Podaj nazwe druzyny nr ',i,': ');

    readln(druzyny[i].nazwa);

    druzyny[i].ID:= i;

    druzyny[i].miejsce:= 0;

    druzyny[i].polfinal:= 0;

    druzyny[i].final:= 0;

  end;

end;


procedure WyswietlDruzyny;

var i: byte;

begin

  writeln('');

  writeln('Podsumowanie:');

  for i:= 1 to 8 do

  begin

    write(druzyny[i].nazwa);

    if druzyny[i].miejsce > 0 then writeln(' (miejsce nr ',druzyny[i].miejsce,')')

    else writeln('');

  end;

end;


procedure RozegrajMeczPomocnicza(wygranyID : byte; przegranyID : byte; meczNumer : byte);

begin

  write('Wygrala druzyna ',druzyny[wygranyID].nazwa,' ');

  if meczNumer <= 4 then

  begin

    druzyny[wygranyID].polfinal:= 1;

    writeln('i awansowala do polfinalu!');

  end

  else if meczNumer < 7 then

  begin

    druzyny[wygranyID].final:= 1;

    druzyny[wygranyID].polfinal:= 3;

    druzyny[przegranyID].polfinal:= 2;

    writeln('i awansowala do finalu!');

  end

  else if meczNumer = 7 then

  begin

    druzyny[wygranyID].miejsce:= 1;

    druzyny[przegranyID].miejsce:= 2;

    druzyny[wygranyID].final:= 3;

    druzyny[przegranyID].final:= 2;

    writeln('zdobywajac tym samym puchar!');

  end

  else

  begin

    druzyny[wygranyID].miejsce:= 3;

    druzyny[przegranyID].miejsce:= 4;

    writeln('zdobywajac tym samym trzecie miejsce!');

  end;

end;


procedure RozegrajMecz(var mecz : TMecz; meczNumer : integer);

begin

  writeln('');

  writeln('Mecz pomiedzy: ',druzyny[mecz.druzyna1ID].nazwa,' a ',druzyny[mecz.druzyna2ID].nazwa);

  write('Wpisz ilosc bramek strzelonych przez ',druzyny[mecz.druzyna1ID].nazwa,': ');

  readln(mecz.druzyna1Bramki);

  write('Wpisz ilosc bramek strzelonych przez ',druzyny[mecz.druzyna2ID].nazwa,': ');

  readln(mecz.druzyna2Bramki);


  if mecz.druzyna1Bramki > mecz.druzyna2Bramki then RozegrajMeczPomocnicza(mecz.druzyna1ID, mecz.druzyna2ID, meczNumer)

  else if mecz.druzyna1Bramki = mecz.druzyna2Bramki then

  begin

    writeln('Remis! Rozegrana zostanie dogrywka.');

    RozegrajMecz(mecz, meczNumer);

  end

  else RozegrajMeczPomocnicza(mecz.druzyna2ID, mecz.druzyna1ID, meczNumer);

end;


procedure UstalDruzynyPomocnicza(var druzyna1ID : byte; var druzyna2ID : byte; flaga : byte); { flaga: 1 - polfinal, 2 - final, 3 - trzecie miejsce }

var i,j: byte;

begin

  j:= 1;

  for i:= 1 to 8 do

  begin

    if ((druzyny[i].polfinal = 1) and (flaga = 1))

    or ((druzyny[i].final = 1) and (flaga = 2))

    or ((druzyny[i].polfinal = 2) and (flaga = 3)) then

    begin

      if j = 1 then

      begin

        druzyna1ID:= i;

        j:= 2;

      end

      else

      begin

        druzyna2ID:= i;

        break;

      end;

    end;

  end;

end;


procedure UstalDruzyny(var mecz : TMecz; meczNumer : integer);

begin

  if meczNumer <= 4 then { 1/4 Finalu }

  begin

    mecz.druzyna1ID:= 2*meczNumer-1;

    mecz.druzyna2ID:= 2*meczNumer;

  end

  else if meczNumer < 7 then UstalDruzynyPomocnicza(mecz.druzyna1ID, mecz.druzyna2ID,1) { 1/2 Finalu }

  else if meczNumer = 7 then UstalDruzynyPomocnicza(mecz.druzyna1ID, mecz.druzyna2ID,2) { Final }

  else UstalDruzynyPomocnicza(mecz.druzyna1ID, mecz.druzyna2ID,3); { Mecz o trzecie miejsce }

end;


procedure RozegrajPuchar;

var i: byte;

begin

  for i:= 1 to 8 do

  begin

    UstalDruzyny(mecze[i],i);

    RozegrajMecz(mecze[i],i);

  end;

end;


begin

  clrscr;

  WczytajDruzyny;

  RozegrajPuchar;

  WyswietlDruzyny;

  readkey;

end.

(Maciek1224) #4

Dzięki stary, właśnie o to mi chodziło! Jeszcze raz dzięki wielkie ; )


(Tomek Matz) #5

Luzik :). BTW ten programik możesz rozwinąć, np. dodać, że jak był remis to potem jest dogrywka, a potem karne (musiałbyś dodać dodatkowy parametr do metody RozegrajMecz, jakąś flagę). Albo np. do struktury TDruzyna dodać łączną ilość bramek strzelonych i straconych przez daną drużynę. Ale to już pozostawiam Tobie do zrobienia.

Powodzenia i Pozdrawiam !