Prawdziwe oblicze Informatyki. Tysiące linijek kodu i kompilatory które nigdy nie wybaczają.
Awatar użytkownika

GENERiC

Zasłużony użytkownik
Posty: 1158
Rejestracja: 21 mar 2009, 19:39
Lokalizacja: wszedzie
    Linux Firefox

Post18 lip 2012, 21:48

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.

Awatar użytkownika

lolasher

Zasłużony użytkownik
Posty: 2432
Rejestracja: 10 paź 2008, 19:28
Lokalizacja: Zadupie pod Siedlcami ;)
    Windows 8 Opera

Post18 lip 2012, 22:07

Oj Pascal ma taką ładną składnie, taką naturalną i rozwiniętą, a nie skrót na skrócie.

A btw w BASICu są w ogóle inne pętle niż GOTO? chyba FOR jest, prawda?

Awatar użytkownika

TheMediator95

Posty: 468
Rejestracja: 29 kwie 2010, 10:35
    Windows 7 Opera
Kontakt:

Post18 lip 2012, 22:57

No to mam kolejny Brick. :zalamany:

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.
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. :(

Awatar użytkownika

lolasher

Zasłużony użytkownik
Posty: 2432
Rejestracja: 10 paź 2008, 19:28
Lokalizacja: Zadupie pod Siedlcami ;)
    Windows 8 Opera

Post19 lip 2012, 0:16

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ć.

Awatar użytkownika

TheMediator95

Posty: 468
Rejestracja: 29 kwie 2010, 10:35
    Windows 7 Opera
Kontakt:

Post19 lip 2012, 7:29

Jedziesz mnie na każdym kroku za te goto :P
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.

Awatar użytkownika

pc.qwerty

Zasłużony użytkownik
Posty: 3276
Rejestracja: 01 lip 2010, 12:28
    unknown Opera Mini

Post19 lip 2012, 11:54

Albo jeszcze lepiej: usunąć :trollface:
There is no cloud. It's just someone else's computer.

Awatar użytkownika

TheMediator95

Posty: 468
Rejestracja: 29 kwie 2010, 10:35
    Windows 7 Opera
Kontakt:

Post19 lip 2012, 12:18

Jak usunę, to będzie Brick :)

Awatar użytkownika

lolasher

Zasłużony użytkownik
Posty: 2432
Rejestracja: 10 paź 2008, 19:28
Lokalizacja: Zadupie pod Siedlcami ;)
    Windows 8 Opera

Post19 lip 2012, 12:27

pc.qwerty pisze:Albo jeszcze lepiej: usunąć
Popieram

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.

Awatar użytkownika

TheMediator95

Posty: 468
Rejestracja: 29 kwie 2010, 10:35
    Windows 7 Opera
Kontakt:

Post19 lip 2012, 12:36

lolasher pisze:bo inaczej odmówię poszukiwania błędów.
Oj lolasher - ty mój debugerze :P.
Nie mam zamiaru usunąć, ale mam dobrą wiadomość - nie mam zamiaru dodawać nowych.
Jak napotka mnie jeszcze jakiś Brick to dam znać.

Awatar użytkownika

lolasher

Zasłużony użytkownik
Posty: 2432
Rejestracja: 10 paź 2008, 19:28
Lokalizacja: Zadupie pod Siedlcami ;)
    Windows 8 Opera

Post19 lip 2012, 12:42

Mediator14 pisze:Oj lolasher - ty mój debugerze
miiiii :3

Zobaczysz, to goto jeszcze się okrutnie zemści i będziesz pół kodu pisał od zera.

Awatar użytkownika

GENERiC

Zasłużony użytkownik
Posty: 1158
Rejestracja: 21 mar 2009, 19:39
Lokalizacja: wszedzie
    Linux Firefox

Post19 lip 2012, 13:15

@lolasher:
FOR...TO...STEP...NEXT to chyba jedyna pętla z prawdziwego zdarzenia w BASICu(przynajmniej tego z Commodore 64, innego nie znam).

Awatar użytkownika

lolasher

Zasłużony użytkownik
Posty: 2432
Rejestracja: 10 paź 2008, 19:28
Lokalizacja: Zadupie pod Siedlcami ;)
    Windows 8 Opera

Post19 lip 2012, 13:52

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 :P

Awatar użytkownika

GENERiC

Zasłużony użytkownik
Posty: 1158
Rejestracja: 21 mar 2009, 19:39
Lokalizacja: wszedzie
    Linux Firefox

Post19 lip 2012, 14:10

Model GLK jak pamiętam, a program G-BASIC. Któryś numerek miał chyba piny pod port LPT.

Awatar użytkownika

lolasher

Zasłużony użytkownik
Posty: 2432
Rejestracja: 10 paź 2008, 19:28
Lokalizacja: Zadupie pod Siedlcami ;)
    Windows 8 Opera

Post19 lip 2012, 14:22

Na kartridżu miałem edytor tekstowy z opcją "drukuj".

Awatar użytkownika

pc.qwerty

Zasłużony użytkownik
Posty: 3276
Rejestracja: 01 lip 2010, 12:28
    unknown Opera Mini

Post19 lip 2012, 15:24

Mediator14 pisze:Jak usunę, to będzie Brick :)
Jak napiszesz z użyciem repeat...until to bricka nie będzie.
There is no cloud. It's just someone else's computer.

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość