Jest jedno rozwiązanie, gdzie goto jest lepsze:
10 PRINT "I'M A HORNY LITTLE PIGGY BANK"
20 GOTO 10
tak wiem, że to BASIC, ale Pascal ssie.
-
TheMediator95
- Posty: 468
- Rejestracja: 29 kwie 2010, 10:35
- Kontakt:
No to mam kolejny Brick.
Czy jakaś mądra głowa jest mi w stanie powiedzieć dlaczego jak najadę na podane w programie pole (x=4 i y=4) to nic się nie dzieje ??
Powinno się uruchomić losowe pytanie od 1 pytania do 4 pytania.
Kod: Zaznacz cały
Program Gra;
Uses crt, dos;
Label Menu, Poczatek, Start, Koniec;
Type
Pytanie = record
Question, a, b, c, d : string;
Answer : char;
End;
Var
q : array [1..150] of Pytanie;
wybor, x, y : Byte;
punkty : Integer;
klawisz : Char;
Procedure Obramowanie;
Var a, b : Byte;
Begin
For b:=3 to 20 do
Begin
a:= 2;
gotoxy (a,b);
Writeln (chr(186));
End;
For b:= 3 to 20 do
Begin
a:= 25;
gotoxy (a,b);
Writeln (chr(186));
End;
For a:= 3 to 25 do
Begin
b:= 2;
gotoxy (a,b);
Writeln (chr(205));
End;
For a:= 3 to 25 do
Begin
b:= 20;
gotoxy (a,b);
Writeln (chr(205));
End;
Gotoxy(2,2);
Writeln (chr(201));
Gotoxy(2,20);
Writeln (chr(200));
Gotoxy(25,2);
Writeln (chr(187));
Gotoxy(25,20);
Writeln (chr(188));
End;
Function Pytaj(q : Pytanie): Boolean;
Var Odp : char;
Begin
Clrscr;
Writeln (q.question);
Writeln (q.a);
Writeln (q.b);
Writeln (q.c);
Writeln (q.d);
Readln (Odp);
If Odp = q.answer Then
Pytaj := True
Else
Pytaj := False;
End;
BEGIN
Punkty := 0;
Randomize;
Cursoroff;
Menu:
Writeln ('Witaj !');
Writeln;
Writeln ('1. Nowa gra');
Writeln ('2. Samouczek');
Writeln ('3. Ustawienia');
Writeln ('4. Wyj',chr(152),'cie');
Readln (wybor);
clrscr;
Case wybor of
1:
Begin
Obramowanie;
Poczatek:
x:= 3;
y:= 3;
Gotoxy (x,y);
Writeln (chr(254));
Start:
klawisz:= readkey;
Case Klawisz of
'a': dec(x);
's': inc(y);
'w': dec(y);
'd': inc(x);
End;
If (x > 24) Then x:= 24;
If (y > 19) Then y:= 19;
If (x < 3) Then x:= 3;
If (y < 3) Then y:= 3;
If (x = 24) and (y = 19) Then Goto Koniec;
Clrscr;
Gotoxy (x,y);
Writeln (chr(254));
Obramowanie;
Goto Start;
q[1].question := 'Jaka pojemnosc ma dyskietka 5.25 cala (Podwojnej gestosci) ?';
q[1].a := 'A. 1.44MB';
q[1].b := 'B. 5.25MB';
q[1].c := 'C. 360Kb';
q[1].d := 'D. 520Kb';
q[1].answer := 'c';
q[2].question := 'Ile to 2 + 2 ?';
q[2].a := 'A. 1';
q[2].b := 'B. 2';
q[2].c := 'C. 3';
q[2].d := 'D. 4';
q[2].answer := 'd';
q[3].question := 'Ile to 3! ?';
q[3].a := 'A. 3';
q[3].b := 'B. 6';
q[3].c := 'C. 9';
q[3].d := 'D. 12';
q[3].answer := 'b';
q[4].question := 'Inne pytanie (Odpowiedz to: C)';
q[4].a := 'A. 3';
q[4].b := 'B. 6';
q[4].c := 'C. 9';
q[4].d := 'D. 12';
q[4].answer := 'c';
If ((x = 4) and (y = 4)) Then
Begin
Pytaj(q[(1+Random(4))]);
If Pytaj(q[(1+Random(4))]) = True Then
Begin
Inc (Punkty);
Writeln ('Dobrze, jedziesz dalej!');
Writeln ('Aktualny stan punkt',chr(162),'w: ',punkty);
Goto Start;
End
Else
Begin
Dec (Punkty);
Writeln (chr(141),'le, wracasz na pocz',chr(165),'tek!');
Writeln ('Aktualny stan punkt',chr(162),'w: ',punkty);
Goto Start;
End;
End;
Koniec:
Clrscr;
Goto Menu;
End;
2:
Begin
End;
3:
Begin
End;
4: Halt;
End;
END.
Powinno się uruchomić losowe pytanie od 1 pytania do 4 pytania.
-
lolasher
- Zasłużony użytkownik
- Posty: 2432
- Rejestracja: 10 paź 2008, 19:28
- Lokalizacja: Zadupie pod Siedlcami ;)
Masz tak ustawione te #$#@%$#% goto, że do warunku sprawdzającego, czy trzeba zadać pytanie program w ogóle nie dochodzi.
I jak właśnie widzisz, przez to goto nie potrafisz się tego doszukać, bo gubisz się w kodzie (sam też nie byłem w stanie, po prostu ustawiłem kompilator, aby zatrzymał kod a tym warunku i mu się to mnie powiodło).
Nadal mam przekonywać do używania pętli?
Przy okazji zrób sobie wypisywanie na boku na jakim polu stoisz, łatwiej ci będzie debuggować.
I jak właśnie widzisz, przez to goto nie potrafisz się tego doszukać, bo gubisz się w kodzie (sam też nie byłem w stanie, po prostu ustawiłem kompilator, aby zatrzymał kod a tym warunku i mu się to mnie powiodło).
Nadal mam przekonywać do używania pętli?
Przy okazji zrób sobie wypisywanie na boku na jakim polu stoisz, łatwiej ci będzie debuggować.
-
TheMediator95
- Posty: 468
- Rejestracja: 29 kwie 2010, 10:35
- Kontakt:
Jedziesz mnie na każdym kroku za te goto
Ale nie już znalazłem błąd, te ostatnie goto Start; trzeba umieścić po warunku, odnoszącego się do miejsca w którym ma się znajdować pytanie.
Ale nie już znalazłem błąd, te ostatnie goto Start; trzeba umieścić po warunku, odnoszącego się do miejsca w którym ma się znajdować pytanie.
-
TheMediator95
- Posty: 468
- Rejestracja: 29 kwie 2010, 10:35
- Kontakt:
Jak usunę, to będzie Brick
-
lolasher
- Zasłużony użytkownik
- Posty: 2432
- Rejestracja: 10 paź 2008, 19:28
- Lokalizacja: Zadupie pod Siedlcami ;)
Popierampc.qwerty pisze:Albo jeszcze lepiej: usunąć
Jadę za goto, bo goto się NIE UŻYWA PO PROSTU, BO NIE, to jest zaszłość z czasów jak prawdziwych pętli nie było. Jak chcesz koniecznie używać to zaznaczaj je w kodzie tak, żebym widział od razu co do czego skacze w i którym miejscu, bo inaczej odmówię poszukiwania błędów.
-
TheMediator95
- Posty: 468
- Rejestracja: 29 kwie 2010, 10:35
- Kontakt:
Oj lolasher - ty mój debugerze .lolasher pisze:bo inaczej odmówię poszukiwania błędów.
Nie mam zamiaru usunąć, ale mam dobrą wiadomość - nie mam zamiaru dodawać nowych.
Jak napotka mnie jeszcze jakiś Brick to dam znać.
-
lolasher
- Zasłużony użytkownik
- Posty: 2432
- Rejestracja: 10 paź 2008, 19:28
- Lokalizacja: Zadupie pod Siedlcami ;)
Miałem BASICa na takim pegazusie wbudowanym w klawiaturę. Pamięci starczało na tak z pięć poleceń może. Jak się przesadziło z "programem" to się po prostu kompletnie wysypywało, kto by tam myślał o ochronie pamięci, czy innych tym podobnych niepotrzebnych rzeczach
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość