Problem z powtarzaniem pytań

0

Mam problem z powtarzaniem pytań z moim programie. Chce, aby zadanie pytanie na które odpowiedziałem nie mogło się już więcej powtórzyć. Taki kod wyrzuca niestety błędy:
First compilation of d:\programy\free pascal\bin\i386-win32\sudoku.pas
SUDOKU.PAS(72,1) Fatal: Syntax error, ";" expected but "identifier ZESTAWY" found
SUDOKU.PAS(0) Fatal: Compilation aborted

 program Quiz;
Uses Crt;

Type TZestaw = record
                 Pytanie   : string;
                 Odpowiedz : array [1..3] of string;
                 Dobra     : Integer;
                 Bylo : Boolean;
               end;

Const Zestawy : array [1..10] of TZestaw = ((Pytanie:'Oficjalne maskotki, będace symbolami Euro 2012, to:'; 

Odpowiedz: ('Siemko i Strimko','Slavek i Slavko','Klemek i Ladko');Dobra:2),

(Pytanie:'W ilu polskich miastach odbeda sie rozgrywki podczas Euro 2012?'; Odpowiedz: ('3','6','4');Dobra:3),

(Pytanie:'Mecz otwarcia bedzie rozegrany na stadionie:'; Odpowiedz: ('w Gdansku','w Kijowie','w 

Warszawie');Dobra:3),

(Pytanie:'Oficjalne rozpoczecie UEFA EURO 2012 na Stadionie Narodowym w Warszawie, bedzie mialo miejsce:'; 

Odpowiedz: ('1 czerwca 2012','8 czerwca 2012','3 czerwca 2012');Dobra:2),

(Pytanie:'W ktorym z polskich miast, nie bedzie rozgrywek w czasie trwania Euro 2012?'; Odpowiedz: ('w Krakowie','w 

Gdansku','w Warszawie');Dobra:1),

(Pytanie:'Stadion w Gdansku nosi nazwe:'; Odpowiedz: ('Allianz Arena','PGE Arena','PZU Arena');Dobra:2),

(Pytanie:'Przygotowania do Euro 2012 w Polsce, sa koordynowane przez:'; Odpowiedz: ('Spolke PL.2012','Spolke 

Euro.2012','Spolke Euro2012.PL');Dobra:1),

(Pytanie:'Ktorym z kolei finalem Mistrzostw Europy organizowanym przez dwa kraje, bedzie Euro 2012?'; Odpowiedz: 

('2','4','3');Dobra:3),

(Pytanie:'Mecz finalowy zostanie rozegrany na stadionie:'; Odpowiedz: ('w Warszawie','w Kijowie','w 

Lwowie');Dobra:2),

(Pytanie:'Mecz finalowy podczas Euro 2012 bedzie rozegrany'; Odpowiedz: ('30 czerwca 2012 roku','2 lipca 2012 

roku','1 lipca 2012 roku');Dobra:3));

VAR suma, i : Integer;

procedure PokazZestaw(NrZestawu : Integer);
 
  var Odp, i : Integer;
 
  begin
 
 
    ClrScr;
 
    Writeln('Pytanie ',NrZestawu,'  : ',Zestawy[NrZestawu].Pytanie);
 
    Writeln;
 
    for i:=1 to 3 do
 
      Writeln('Odpowiedz ', i,': ',Zestawy[NrZestawu].Odpowiedz[ i]);
 
    Writeln;
 
    Write('Twoj wybor : ');
 
    Readln(Odp);

if Odp=Zestawy[NrZestawu].Dobra then
begin
  suma:=suma+1;
  TextColor(Green);
  Writeln('Brawo! To prawidlowa odpowiedz.');
  TextColor(White);
end
else
begin
  TextColor(Red);
  Writeln('Niestety! Jest to zla odpowiedz.');
  TextColor(White);
end;
 
ReadKey
 
Zestawy[NrZestawu].Bylo := True;
 
end;


begin
clrscr;
writeln('Nacisnij dowolny klawisz by rozpoczac test z wiedzy o Euro 2012...');
ReadKey;

for i:=1 to 10 do
    Repeat
      tmp := random(10)+1
      If Zestawy[tmp].Bylo = false Then PokazZestaw(tmp);
    Until Zestawy[tmp].Bylo = false;

clrscr;
        writeln('Koniec testu!');
        writeln('Zdobyto ', suma,' na 10 pkt mozliwych.');
readln;
End.
0

OK, jedno to już wiem ... zapomniałem dodać tmp w zmiennych. Ale co z resztą? Bo nadal niestety nie działa ...

0

Przy deklaracji stałej rekordowej macierzy można się łatwo pogubić i Ty to zrobiłeś;

Jeżeli wypełniasz taką macierz to najpierw wpisz indentyfikatory pól rekordu, a później je wypełniaj; W każdym polu macierzy zapomniałeś o polu Bylo: Boolean; w rekordzie;

Najpierw trzeba było sobie przygotować szkielet:

const Zestawy : array [1 .. 10] of TZestaw = ((Pytanie: '';
                                               Odpowiedz: ('', '', '');
                                               Dobra: ;
                                               Bylo: ),
                                               Pytanie: '';
                                               Odpowiedz: ('', '', '');
                                               Dobra: ;
                                               Bylo: ),
                                               Pytanie: '';
                                               Odpowiedz: ('', '', '');
                                               Dobra: ;
                                               Bylo: ),
                                               {...}

a po przygotowaniu właściwej ilość dopiero zabrać się za ich wypełnianie;

0

Czyli powinno to wyglądać w taki sposób jak poniżej?

Const Zestawy : array [1..10] of TZestaw = ((Pytanie:'Oficjalne maskotki, będace symbolami Euro 2012, to:'; 
 
Odpowiedz: ('Siemko i Strimko','Slavek i Slavko','Klemek i Ladko');Dobra:2;Bylo:false),
0

ty patrz w której linijce nie działa.

ReadKey
 
Zestawy[NrZestawu].Bylo := True;

Brakuje średnika.

'w Lwowie'

we Lwowie.

0

Dobra, panowie po wprowadzeniu ów poprawek działa ... Niestety po 10 pytaniach program się zacina i nic się nie da zrobić. Co poprawić, aby to działało?

0

Czyli tak jak pisałem

spróbuj dopisać Until (Zestawy[tmp].Bylo = false) or (i = 10);

i OWYCH poprawek. ów się również odmienia.

0

Niestety nic to nie dało ... Nadal to samo.

0

A w którym miejscu się zacina? Na pętli repeat until czy gdzie?

0

No odpowiadam na 10 pytań, które mam w tablicy ... Wskakuje mi komunikat że odpowiedziałem poprawie lub nie i program się zacina.

0

Mi chodzi o DOKŁADNE miejsce czyli w której linijce... Podpowiedź Run -> Step over

0

If Zestawy[tmp].Bylo=false Then PokazZestaw(tmp);

wskazuje na ta linijkę ...

0

ech musisz wymyśleć dodatkowy warunek przerwania pętli or (i = 10) powinno działać. A jak nie działa to daj cały kod. Skopiuje sobie i ogarnę.

0
program Quiz;
Uses Crt;

Type TZestaw = record
                 Pytanie   : string;
                 Odpowiedz : array [1..3] of string;
                 Dobra     : Integer;
                 Bylo : Boolean;
                 tmp  : Integer;
               end;

Const Zestawy : array [1..10] of TZestaw = ((Pytanie:'Oficjalne maskotki, będace symbolami Euro 2012, to:'; 

Odpowiedz: ('Siemko i Strimko','Slavek i Slavko','Klemek i Ladko');Dobra:2;Bylo:false),

(Pytanie:'W ilu polskich miastach odbeda sie rozgrywki podczas Euro 2012?'; Odpowiedz: ('3','6','4');Dobra:3),

(Pytanie:'Mecz otwarcia bedzie rozegrany na stadionie:'; Odpowiedz: ('w Gdansku','w Kijowie','w 

Warszawie');Dobra:3;Bylo:false),

(Pytanie:'Oficjalne rozpoczecie UEFA EURO 2012 na Stadionie Narodowym w Warszawie, bedzie mialo miejsce:'; 

Odpowiedz: ('1 czerwca 2012','8 czerwca 2012','3 czerwca 2012');Dobra:2;Bylo:false),

(Pytanie:'W ktorym z polskich miast, nie bedzie rozgrywek w czasie trwania Euro 2012?'; Odpowiedz: ('w Krakowie','w 

Gdansku','w Warszawie');Dobra:1;Bylo:false),

(Pytanie:'Stadion w Gdansku nosi nazwe:'; Odpowiedz: ('Allianz Arena','PGE Arena','PZU Arena');Dobra:2;Bylo:false),

(Pytanie:'Przygotowania do Euro 2012 w Polsce, sa koordynowane przez:'; Odpowiedz: ('Spolke PL.2012','Spolke 

Euro.2012','Spolke Euro2012.PL');Dobra:1;Bylo:false),

(Pytanie:'Ktorym z kolei finalem Mistrzostw Europy organizowanym przez dwa kraje, bedzie Euro 2012?'; Odpowiedz: 

('2','4','3');Dobra:3;Bylo:false),

(Pytanie:'Mecz finalowy zostanie rozegrany na stadionie:'; Odpowiedz: ('w Warszawie','w Kijowie','w 

Lwowie');Dobra:2;Bylo:false),

(Pytanie:'Mecz finalowy podczas Euro 2012 bedzie rozegrany'; Odpowiedz: ('30 czerwca 2012 roku','2 lipca 2012 

roku','1 lipca 2012 roku');Dobra:3;Bylo:false));

VAR suma, i, tmp : Integer;

procedure PokazZestaw(NrZestawu : Integer);
 
  var Odp, i : Integer;
 
  begin
 
 
    ClrScr;
 
    Writeln('Pytanie ',NrZestawu,'  : ',Zestawy[NrZestawu].Pytanie);
 
    Writeln;
 
    for i:=1 to 3 do
 
      Writeln('Odpowiedz ', i,': ',Zestawy[NrZestawu].Odpowiedz[ i]);
 
    Writeln;
 
    Write('Twoj wybor : ');
 
    Readln(Odp);

if Odp=Zestawy[NrZestawu].Dobra then
begin
  suma:=suma+1;
  TextColor(Green);
  Writeln('Brawo! To prawidlowa odpowiedz.');
  TextColor(White);
end
else
begin
  TextColor(Red);
  Writeln('Niestety! Jest to zla odpowiedz.');
  TextColor(White);
end;
 
ReadKey;
 
Zestawy[NrZestawu].Bylo := True;
 
end;


begin
clrscr;
writeln('Nacisnij dowolny klawisz by rozpoczac test z wiedzy o Euro 2012...');
ReadKey;

for i:=1 to 10 do
    Repeat
      tmp := random(10)+1;
      If Zestawy[tmp].Bylo = false Then PokazZestaw(tmp);
    Until (Zestawy[tmp].Bylo = false) or (i=10);

clrscr;
        writeln('Koniec testu!');
        writeln('Zdobyto ', suma,' na 10 pkt mozliwych.');
readln;
End.
1

Zamiast

 for i:=1 to 10 do
    Repeat
      tmp := random(10)+1;
      If Zestawy[tmp].Bylo = false Then PokazZestaw(tmp);
    Until (Zestawy[tmp].Bylo = false) or (i=10);

Wstaw

 i := 0;
    Repeat
      i := i + 1;
      tmp := random(10)+1;
      If Zestawy[tmp].Bylo = false Then PokazZestaw(tmp);
    Until (Zestawy[tmp].Bylo = false) or (i=10);

I zatrybi. Nie zapomnij o ptaszku ;)

0

No teraz działa, ale nie do końca jak było w zamiarze ... Problem tkwi w tym, że obecnie program nie zadaje 10, a zaledwie 5 pytań ...

2

A ja bym dał taką pętlę:

for i:= 1 to 10 do begin
  repeat
    tmp:= Random(10) + 1;
  until not Zestawy[tmp].Bylo;
  PokazZestaw(tmp);
end;
0

OK, dzięki wielkie działa :) A powiedzcie mi jeszcze jedną rzecz. Czy moglibyście zaznaczyć konkretnie które rzeczy muszę zmienić w poniższym programie, aby zmienić ilość pytań na które ktoś ma odpowiedzieć i w którym miejscu zwiększyć tablice pytań, by wszystko działało. Program ten dostałem od znajomego i próbuje pozmieniać, ale wyskakują mi jakieś dziwne błędy ...

program quiz;
Uses Crt;

Var
  z         : Char;
  Pkt,i,r,w : Byte;
  Imie,x    : String;
  Repeats   : Array[1..10]of Boolean;

Const
  P : Array[1..11]of String =
  ('Oficjalne maskotki, bedace symbolami Euro 2012, to:',
   'W jakim miescie zostal wybrany gospodarz Euro 2012?',
   'W ilu polskich miastach odbeda sie rozgrywki podczas Euro?',
   'Mecz otwarcia bedzie rozegrany na stadionie:',
   'Data rozpoczecia Euro 2012 to:',
   'W ktorym z miast nie bedzie rozgrywek Euro 2012?',
   'Stadion w Gdansku nosi nazwe:',
   'Przygotowania do Euro 2012 w Polsce, sa koordynowane przez:',
   'Euro 2012 to ... z kolei Euro organizowane przez dwa kraje',
   'Mecz finalowy zostanie rozegrany na stadionie?',
   'Mecz finalowy podczas Euro 2012 bedzie rozegrany:');

  A   : Array[1..11]of String =
  ('Siemko i Strimko','w Cardiff','5','w Kijowie',
   '1 czerwca 2012','w Wroclawiu','Allianz Arena','Spolke Euro.2012',
   '6','w Warszawie','30 czerwca 2012');
  B   : Array[1..11]of String =
  ('Slavek i Slavko','w Kijowie','4','w Poznaniu',
   '8 czerwca 2012','w Gdansku','PGE Arena','Spolke Euro2012.PL',
   '4','w Kijowie','2 lipca 2012 roku');
  C   : Array[1..11]of String =
  ('Klemek i Ladko','w Madrycie','2','w Warszawie',
   '3 czerwca 2012','w Krakowie','PZU Arena','Spolke PL.2012',
   '3','we Wroclawiu','1 lipca 2012 roku');
  Odp : Array[1..11]of Byte = (2,1,2,3,2,3,2,3,3,2,3);

Procedure Wygrana;
Begin
  ClrScr;
  Gotoxy(35,1);
  Write('GRATULACJE');
  Gotoxy(20,2);
  Write('Jestes dobrze przygotowany do Euro 2012!');
End;

Procedure Przegrana;
Begin
  ClrScr;
  Gotoxy(35,1);
  Write('PRZYKRO MI');
  Gotoxy(12,2);
  Write('Do Euro jeszcze troche czasu wiec zdazysz sie przygotowac!');
End;

Procedure DobraOdp;
Begin
  Inc(Pkt);
  TextBackground(2);
  Case w of
    1 : Begin Gotoxy(06,6); Write('A:',A[r]); End;
    2 : Begin Gotoxy(31,6); Write('B:',B[r]); End;
    3 : Begin Gotoxy(56,6); Write('C:',C[r]); End;
  End;
  Gotoxy(23,11); Write('0000   000  0000  0000  00000 00000');
  Gotoxy(23,12); Write('0   0 0   0 0   0 0   0    0  0    ');
  Gotoxy(23,13); Write('0   0 0   0 0000  0000    0   0000 ');
  Gotoxy(23,14); Write('0   0 0   0 0   0 0   0  0    0    ');
  Gotoxy(23,15); Write('0000   000  0000  0   0 00000 00000');
  Delay(1000);
  Window(1,18,80,24);
  TextBackground(0);
  ClrScr;
  Window(1,8,80,25);
End;

Procedure ZlaOdp;
Begin
  TextBackground(4);
  Case w of
    1 : Begin Gotoxy(06,6); Write('A:',A[r]); End;
    2 : Begin Gotoxy(31,6); Write('B:',B[r]); End;
    3 : Begin Gotoxy(56,6); Write('C:',C[r]); End;
  End;
  Gotoxy(33,09); Write('  00             ');
  Gotoxy(33,10); Write('                 ');
  Gotoxy(33,11); Write('00000 0     00000');
  Gotoxy(33,12); Write('   0  0     0    ');
  Gotoxy(33,13); Write('  0   0     0000 ');
  Gotoxy(33,14); Write(' 0    0     0    ');
  Gotoxy(33,15); Write('00000 00000 00000');
  Delay(1000);
  Window(1,18,80,24);
  TextBackground(0);
  ClrScr;
  Window(1,8,80,25);
  Przegrana;
End;


Begin
  ClrScr;
  Randomize;
  Gotoxy(29,2); Write('00000 0   0 0000   000');
  Gotoxy(29,3); Write('0     0   0 0   0 0   0');
  Gotoxy(29,4); Write('0000  0   0 0000  0   0');
  Gotoxy(29,5); Write('0     0   0 0   0 0   0');
  Gotoxy(29,6); Write('00000  000  0   0  000');
  Window(1,8,80,25);
  Gotoxy(26,1); Write('|---------------------------|');
  Gotoxy(26,2); Write('|Witam w Quizie o Euro 2012!|');
  Gotoxy(26,3); Write('|    Czas zaczac zabawe!    |');
  Gotoxy(26,4); Write('|---------------------------|');
  Repeat Until Readkey=Chr(13);
  ClrScr;
  Gotoxy(6,1); Write('  /-----------------------------------------------------------\ ');
  Gotoxy(6,2); Write('-<                                                             >-');
  Gotoxy(6,3); Write('  \-----------------------------------------------------------/  ');
  Gotoxy(3,5);  Write('  /--------------------\   /--------------------\   /--------------------\ ');
  Gotoxy(3,6);  Write('-<                      >-<                      >-<                      >-');
  Gotoxy(3,7);  Write('  \--------------------/   \--------------------/   \--------------------/  ');
  Pkt:=0;
  r:=Random(11)+1;
  Repeat
    w:=1;
    i:=11;
    While Repeats[r] Do
    Begin
      r:=Random(11)+1;
      Dec(i);
      If i=0 Then Break;
    End;
    If i=0 Then Break;
    Repeats[r]:=True;
    Gotoxy(9,2); Write(P[r]);
    Repeat
      If w=1 Then TextBackground(6) Else TextBackground(0);
      Gotoxy(06,6); Write('A:',A[r]);
      If w=2 Then TextBackground(6) Else TextBackground(0);
      Gotoxy(31,6); Write('B:',B[r]);
      If w=3 Then TextBackground(6) Else TextBackground(0);
      Gotoxy(56,6); Write('C:',C[r]);
      TextBackground(0);
      z:=Readkey;
      If z=Chr(0) Then z:=Readkey;
      Case z of
        'M' : If w<3 Then Inc(w);
        'K' : If w>1 Then Dec(w);
      End;
    Until z=Chr(13);
    TextBackground(0);
    Case w of
      1 : Begin Gotoxy(06,6); Write('A:',A[r]); End;
      2 : Begin Gotoxy(31,6); Write('B:',B[r]); End;
      3 : Begin Gotoxy(56,6); Write('C:',C[r]); End;
    End;
    Delay(1500);
    If Odp[r]=w Then DobraOdp Else Begin ZlaOdp; Break; End;
    Gotoxy(13,2); Write('                                                        ');
    Gotoxy(06,6); Write('                    ');
    Gotoxy(31,6); Write('                    ');
    Gotoxy(56,6); Write('                    ');
  Until Pkt=10;
  If Pkt>6 Then Wygrana Else Przegrana;
  Gotoxy(28,3);
  Write('Uzbierales ',Pkt*10,'/100 punktow. ');
  Gotoxy(20,4);
  If Pkt<7 Then Write('Aby zdac, musisz miec ponad 60 punktow.');
  Repeat Until Readkey=Chr(13);
End.
0

Proponuję zmienić nazwy zmiennych bo ni cholery nie mogę zrozumieć do czego służą zmienne i,r,w ale może to wina późnej pory.

0

Szczerze mówiąc także mi ciężko coś z tego kodu wywnioskować ... Tak jak pisałem post wcześniej, na szybko napisał mi to znajomy, a ja jedynie popracowałem trochę nad wyglądem tego. A niestety mam problem gdy chce więcej pytań dodać i więcej ich zadać w celu udzielenia odpowiedzi. Postaram się go zapytać jak będzie uchwytny ... Niemniej jednak dalej proszę o pomoc.

0
Randall3 napisał(a)

Czy moglibyście zaznaczyć konkretnie które rzeczy muszę zmienić w poniższym programie, aby zmienić ilość pytań na które ktoś ma odpowiedzieć i w którym miejscu zwiększyć tablice pytań, by wszystko działało.

Przede wszystkim pasowałoby żebyś pytania wraz z odpowiedziami wczytywał z pliku do macierzy dynamicznej (np. rekordowej); Dzięki temu aby rozszerzyć ilość pytań wystarczy podmienić plik z pytaniami i gotowe; A tak to musisz bawić sie i ręcznie w kodzie przestawiać wszystko co jest czasochłonne, bo budowa macierzy rekordowej jest dość zawiła i łatwo się pogubić;

Następnie: myślałeś o podzieleniu programu na kilka modułów? Ja na Twoim miejscu przede wszystkim przeniósłbym macierz z pytaniami do innego modułu ponieważ potwornie to wygląda i dość miesza w kodzie; Rozbij cały kod na kilka modułów - będzie Ci łatwiej się w nim odnaleźć, szczególnie dlatego:

Randall3 napisał(a)

Szczerze mówiąc także mi ciężko coś z tego kodu wywnioskować ...

i nie dziwie się, bo niezły bałagan w nim panuje;

Poza tym dodaj więcej procedur/funkcji po to, by kod był bardziej przejrzysty; Tutaj często powtarzają się pewne instrukcje - skorzystaj z regóły DRY; Program ma niewiele linii, a mimo to dość nieprzyjemnie się go interpretuje;

0

Nie chciałbym zbytnio ingerować w kod, bo tak dobrze na Pascalu się jeszcze nie znam. Jesteś w stanie pomóc na tym co mamy i wskazać miejsca, które trzeba zmienić w celu zmiany ilości pytań?

1
Const
  P : Array[1..11]of String =
  ('Oficjalne maskotki, bedace symbolami Euro 2012, to:',
   'W jakim miescie zostal wybrany gospodarz Euro 2012?',
   'W ilu polskich miastach odbeda sie rozgrywki podczas Euro?',
   'Mecz otwarcia bedzie rozegrany na stadionie:',
   'Data rozpoczecia Euro 2012 to:',
   'W ktorym z miast nie bedzie rozgrywek Euro 2012?',
   'Stadion w Gdansku nosi nazwe:',
   'Przygotowania do Euro 2012 w Polsce, sa koordynowane przez:',
   'Euro 2012 to ... z kolei Euro organizowane przez dwa kraje',
   'Mecz finalowy zostanie rozegrany na stadionie?',
   'Mecz finalowy podczas Euro 2012 bedzie rozegrany:');
 
  A   : Array[1..11]of String =
  ('Siemko i Strimko',
   'w Cardiff',
   '5',
   'w Kijowie',
   '1 czerwca 2012',
   'w Wroclawiu',
   'Allianz Arena',
   'Spolke Euro.2012',
   '6',
   'w Warszawie',
   '30 czerwca 2012');

  B   : Array[1..11]of String =
  ('Slavek i Slavko',
   'w Kijowie',
   '4',
   'w Poznaniu',
   '8 czerwca 2012',
   'w Gdansku',
   'PGE Arena',
   'Spolke Euro2012.PL',
   '4',
   'w Kijowie',
   '2 lipca 2012 roku');

  C   : Array[1..11]of String =
  ('Klemek i Ladko',
   'w Madrycie',
   '2',
   'w Warszawie',
   '3 czerwca 2012',
   'w Krakowie',
   'PZU Arena',
   'Spolke PL.2012',
   '3',
   'we Wroclawiu',
   '1 lipca 2012 roku');

  Odp : Array[1..11]of Byte = (2,1,2,3,2,3,2,3,3,2,3);

Tutaj masz wszystkie dane odnośnie pytań;

Teraz aby zmienić ilośc pytań musisz powiększyć wsystkie ww macierze, oraz w kodzie programu pozmieniać liczniki;

0
program quiz;
Uses Crt;

Var
  z         : Char;
  Pkt,i,r,w : Byte;
  Imie,x    : String;
  Repeats   : Array[1..10]of Boolean;

Const
  P : Array[1..11]of String =
  ('Oficjalne maskotki, bedace symbolami Euro 2012, to:',
   'W jakim miescie zostal wybrany gospodarz Euro 2012?',
   'W ilu polskich miastach odbeda sie rozgrywki podczas Euro?',
   'Mecz otwarcia bedzie rozegrany na stadionie:',
   'Data rozpoczecia Euro 2012 to:',
   'W ktorym z miast nie bedzie rozgrywek Euro 2012?',
   'Stadion w Gdansku nosi nazwe:',
   'Przygotowania do Euro 2012 w Polsce, sa koordynowane przez:',
   'Euro 2012 to ... z kolei Euro organizowane przez dwa kraje',
   'Mecz finalowy zostanie rozegrany na stadionie?',
   'Mecz finalowy podczas Euro 2012 bedzie rozegrany:');
 
  A   : Array[1..11]of String =
  ('Siemko i Strimko',
   'w Cardiff',
   '5',
   'w Kijowie',
   '1 czerwca 2012',
   'w Wroclawiu',
   'Allianz Arena',
   'Spolke Euro.2012',
   '6',
   'w Warszawie',
   '30 czerwca 2012');

  B   : Array[1..11]of String =
  ('Slavek i Slavko',
   'w Kijowie',
   '4',
   'w Poznaniu',
   '8 czerwca 2012',
   'w Gdansku',
   'PGE Arena',
   'Spolke Euro2012.PL',
   '4',
   'w Kijowie',
   '2 lipca 2012 roku');

  C   : Array[1..11]of String =
  ('Klemek i Ladko',
   'w Madrycie',
   '2',
   'w Warszawie',
   '3 czerwca 2012',
   'w Krakowie',
   'PZU Arena',
   'Spolke PL.2012',
   '3',
   'we Wroclawiu',
   '1 lipca 2012 roku');

  Odp : Array[1..11]of Byte = (2,1,2,3,2,3,2,3,3,2,3);

Procedure Wygrana;
Begin
  ClrScr;
  Gotoxy(35,1);
  Write('GRATULACJE');
  Gotoxy(20,2);
  Write('Jestes dobrze przygotowany do Euro 2012!');
End;

Procedure Przegrana;
Begin
  ClrScr;
  Gotoxy(35,1);
  Write('PRZYKRO MI');
  Gotoxy(12,2);
  Write('Do Euro jeszcze troche czasu wiec zdazysz sie przygotowac!');
End;

Procedure DobraOdp;
Begin
  Inc(Pkt);
  TextBackground(2);
  Case w of
    1 : Begin Gotoxy(06,6); Write('A:',A[r]); End;
    2 : Begin Gotoxy(31,6); Write('B:',B[r]); End;
    3 : Begin Gotoxy(56,6); Write('C:',C[r]); End;
  End;
  Gotoxy(23,11); Write('0000   000  0000  0000  00000 00000');
  Gotoxy(23,12); Write('0   0 0   0 0   0 0   0    0  0    ');
  Gotoxy(23,13); Write('0   0 0   0 0000  0000    0   0000 ');
  Gotoxy(23,14); Write('0   0 0   0 0   0 0   0  0    0    ');
  Gotoxy(23,15); Write('0000   000  0000  0   0 00000 00000');
  Delay(1000);
  Window(1,18,80,24);
  TextBackground(0);
  ClrScr;
  Window(1,8,80,25);
End;

Procedure ZlaOdp;
Begin
  TextBackground(4);
  Case w of
    1 : Begin Gotoxy(06,6); Write('A:',A[r]); End;
    2 : Begin Gotoxy(31,6); Write('B:',B[r]); End;
    3 : Begin Gotoxy(56,6); Write('C:',C[r]); End;
  End;
  Gotoxy(33,09); Write('  00             ');
  Gotoxy(33,10); Write('                 ');
  Gotoxy(33,11); Write('00000 0     00000');
  Gotoxy(33,12); Write('   0  0     0    ');
  Gotoxy(33,13); Write('  0   0     0000 ');
  Gotoxy(33,14); Write(' 0    0     0    ');
  Gotoxy(33,15); Write('00000 00000 00000');
  Delay(1000);
  Window(1,18,80,24);
  TextBackground(0);
  ClrScr;
  Window(1,8,80,25);
  Przegrana;
End;


Begin
  ClrScr;
  Randomize;
  Gotoxy(29,2); Write('00000 0   0 0000   000');
  Gotoxy(29,3); Write('0     0   0 0   0 0   0');
  Gotoxy(29,4); Write('0000  0   0 0000  0   0');
  Gotoxy(29,5); Write('0     0   0 0   0 0   0');
  Gotoxy(29,6); Write('00000  000  0   0  000');
  Window(1,8,80,25);
  Gotoxy(26,1); Write('|---------------------------|');
  Gotoxy(26,2); Write('|Witam w Quizie o Euro 2012!|');
  Gotoxy(26,3); Write('|    Czas zaczac zabawe!    |');
  Gotoxy(26,4); Write('|---------------------------|');
  Repeat Until Readkey=Chr(13);
  ClrScr;
  Gotoxy(6,1); Write('  /-----------------------------------------------------------\ ');
  Gotoxy(6,2); Write('-<                                                             >-');
  Gotoxy(6,3); Write('  \-----------------------------------------------------------/  ');
  Gotoxy(3,5);  Write('  /--------------------\   /--------------------\   /--------------------\ ');
  Gotoxy(3,6);  Write('-<                      >-<                      >-<                      >-');
  Gotoxy(3,7);  Write('  \--------------------/   \--------------------/   \--------------------/  ');
  Pkt:=0;
  r:=Random(11)+1;
  Repeat
    w:=1;
    i:=11;
    While Repeats[r] Do
    Begin
      r:=Random(11)+1;
      Dec(i);
      If i=0 Then Break;
    End;
    If i=0 Then Break;
    Repeats[r]:=True;
    Gotoxy(9,2); Write(P[r]);
    Repeat
      If w=1 Then TextBackground(6) Else TextBackground(0);
      Gotoxy(06,6); Write('A:',A[r]);
      If w=2 Then TextBackground(6) Else TextBackground(0);
      Gotoxy(31,6); Write('B:',B[r]);
      If w=3 Then TextBackground(6) Else TextBackground(0);
      Gotoxy(56,6); Write('C:',C[r]);
      TextBackground(0);
      z:=Readkey;
      If z=Chr(0) Then z:=Readkey;
      Case z of
        'M' : If w<3 Then Inc(w);
        'K' : If w>1 Then Dec(w);
      End;
    Until z=Chr(13);
    TextBackground(0);
    Case w of
      1 : Begin Gotoxy(06,6); Write('A:',A[r]); End;
      2 : Begin Gotoxy(31,6); Write('B:',B[r]); End;
      3 : Begin Gotoxy(56,6); Write('C:',C[r]); End;
    End;
    Delay(1500);
    If Odp[r]=w Then DobraOdp Else Begin ZlaOdp; Break; End;
    Gotoxy(13,2); Write('                                                        ');
    Gotoxy(06,6); Write('                    ');
    Gotoxy(31,6); Write('                    ');
    Gotoxy(56,6); Write('                    ');
  Until Pkt=10;
  If Pkt>6 Then Wygrana Else Przegrana;
  Gotoxy(28,3);
  Write('Uzbierales ',Pkt*10,'/100 punktow. ');
  Gotoxy(20,4);
  If Pkt<7 Then Write('Aby zdac, musisz miec ponad 60 punktow.');
  Repeat Until Readkey=Chr(13);
End.

Czyli tak to ma wyglądać? A w przypadku zmiany ilości pytań, powiększam tablice i zmieniam wartości w programie, które obecnie w większości ustawione są na wartość 11?

0
Randall3 napisał(a)

Czyli tak to ma wyglądać?

Mniej więcej tak, ale jeszcze można dużo zmienić; Przede wszystkim przenieś deklaracje macierzy do innego modułu, ponieważ dużo zajmują; Jeśli umieścisz je w innym module zyskasz trochę przejrzystości;

Randall3 napisał(a)

A w przypadku zmiany ilości pytań, powiększam tablice i zmieniam wartości w programie, które obecnie w większości ustawione są na wartość 11?

No tak, wszędzie, gdzie wpisane jest na sztywno 11 zamień to na funkcję High - wtedy ilość pytań będziesz zmieniał tylko w jednym miejscu, a wszędzie w programie automatycznie zmiany będą obsługiwane; Chodzi przede wszystkim o liczniki pętli - teraz masz ustawione na sztywno 11 i jeśli zmienisz wielkość macierzy z pytaniami, będziesz musiał znaleźć wszystkie odwołania do górnego indeksu macierzy i pozmieniać je; Podam Ci przykład - jeśli pętle ustawisz tak:

var
  I: Word;
begin
  for I := 0 to High(Tab) do
    {...}

  {...}
end;

To choćby nie wiem ile elementów miała macierz Tab to i tak pętla zawsze będzie przechodzić przez wszystkie elementy macierzy aż do ostatniego; U Ciebie tyczy się to przede wszystkim losowania r := Random(11) + 1, gdzie Random(11) zamieniasz na Random(High(Id_Tablicy));

Jeszcze możesz dodać kilka procedur, które znacznie skrócą kod oraz zwiększą jego czytelność; Musisz znaleźć w kodzie instrukcje, które nałogowo powarzasz; W pierwszej kolejności co mi się rzuciło w oczy to wyświetlanie napisów; W kółko ustawiasz kursor w danej pozycji i wyświetlasz napis, np.:

Gotoxy(23,11); Write('0000   000  0000  0000  00000 00000');
Gotoxy(23,12); Write('0   0 0   0 0   0 0   0    0  0    ');
Gotoxy(23,13); Write('0   0 0   0 0000  0000    0   0000 ');
Gotoxy(23,14); Write('0   0 0   0 0   0 0   0  0    0    ');
Gotoxy(23,15); Write('0000   000  0000  0   0 00000 00000');

czy:

Gotoxy(26,1); Write('|---------------------------|');
Gotoxy(26,2); Write('|Witam w Quizie o Euro 2012!|');
Gotoxy(26,3); Write('|    Czas zaczac zabawe!    |');
Gotoxy(26,4); Write('|---------------------------|');

Napisz sobie procedurę, która w parametrach przyjmie nowe współrzędne kursora oraz napis do wyświetlenia:

procedure WriteXY(X, Y: Byte; Value: String);
begin
  GoToXY(X, Y);
  Write(Value);
end;

Dzięki temu będziesz mógł napisać to:

case W of
  1: WriteXY(6, 6,  'A:',A[r]);
  2: WriteXY(31, 6, 'B:',B[r]);
  3: WriteXY(56, 6, 'C:',C[r]);
end;

zamiast tego:

Case w of
  1 : Begin Gotoxy(06,6); Write('A:',A[r]); End;
  2 : Begin Gotoxy(31,6); Write('B:',B[r]); End;
  3 : Begin Gotoxy(56,6); Write(); End;
End;

Możesz jeszcze wiele zmienić, ale pomyśl sam co jeszcze można i co będziesz umiał zrobić;

0

Witam wszystkich forumowiczów jako iż jestem tu nowy:)

Chciałem użyć powyższego kodu ale po wklejaniu go do delphi7 zapisaniu i próbie skompilowania wyskakuje mi komunikat: Error in module Unit1: Declaration of class TForm1 is missing or incorrect. Wie ktoś może o co chodzi?? Musze do tego robić jakąś bazę danych?? Dodam jeszcze że zaczynam dopiero swoją przygodę z programowaniem.

0
Bartosz11 napisał(a)

Dodam jeszcze że zaczynam dopiero swoją przygodę z programowaniem.

To może najpierw poucz się kodzenia, zanim będziesz chciał wykorzystać kody znalezione w sieci; Więc polecam pouczyć się z jakiegoś dobrego kursu lub książki, następnie poznać dobrze środowisko, a dopiero potem próbować coś działać;

A błąd dotyczy tego, że próbujesz wykorzystać kod aplikacji okienkowej w aplikacji konsolowej.

0
furious programming napisał(a):
Bartosz11 napisał(a)

Dodam jeszcze że zaczynam dopiero swoją przygodę z programowaniem.

To może najpierw poucz się kodzenia, zanim będziesz chciał wykorzystać kody znalezione w sieci; Więc polecam pouczyć się z jakiegoś dobrego kursu lub książki, następnie poznać dobrze środowisko, a dopiero potem próbować coś działać;

Czytałem kompendium na waszym forum i miałem jakieś podstawy na studiach ale do dość obszerny dział żeby to wszystko ogarnąć. Nie muszę być jakimś super programistą bo nie taki mój kierunek :P Chcę tylko odpalić ten program i go edytować...

furious programming napisał(a):

A błąd dotyczy tego, że próbujesz wykorzystać kod aplikacji okienkowej w aplikacji konsolowej.

A jak odpalić aplikację okienkową w Delphi7 File>New> i co dalej???

0
Bartosz11 napisał(a)

Odpaliłem tak jak mówiliście i w Delphi 7 mam nadal ten sam błąd a w Lazarusie pokazuje mi się teraz coś takiego: quiz.pas(1.1) Fatal: Syntax error, "UNIT" expected but "PROGRAM" found

Ehhh... Propunuję najpierw pouczyć się tworzenia aplikacji okienkowych, a dopiero później cokolwiek próbować; Tak się właśnie kończy korzystanie z gotowców; Programowanie to nie sztuka kopiowania i wklejania kodu - każda instrukcja ma swoje miejsce i przeznaczenie, więc żeby dany kod zastosować, to trzeba go rozumieć; Ty nie znasz praktycznie w ogóle programowania zorientowanego obiektowo, więc każda aplikacja okienkowa będzie dla Ciebie niezrozumiała;

Błąd quiz.pas(1.1) Fatal: Syntax error, "UNIT" expected but "PROGRAM" found oznacza próbę wykorzystania głównego kodu programu (zapoczątkowanego słowem program) w module, który ma zupełnie inną budowę (kod modułu zaczyna się od słowa unit) i dlatego kompilator sygnalizuje porażkę...

1 użytkowników online, w tym zalogowanych: 0, gości: 1