Skocz do zawartości

[delphi]Rozwiązanie gry kółko i krzyżyk


sazian

Polecane posty

Może najpierw kod
[code=Delphi]
plansza:array[1..3,1..3]of char=(
(' ',' ',' '),
(' ',' ĘKB ĘCB
NB[[Y[][BB
_CB&6VGW&RDf&Ó'WGF6Ć66VćFW#D&ŚV7Bf ŚŃ4)ąą4)4)4)4)dom(3);
y:=random(3);
if plansza[x,y]=' ' then
begin
plaVWNIÓBZ[K[^]

LJL ÓŚVć@ŚV6RvFw'V3w'V3#&ćFŚSŁ&ćF24)4)ąmątŃĄ4)4)ąmy]:='X';
paintbox1.Canvas.TextOut(x*20-20,y*20-20,'X');
enB[HXB[BB [/code]

Włączyłem to i coś nie działa zamiast pełnego rozwiązania pojawia się kilka kółek i krzyżyków(poza tym musze klikać kilka razy na buttona), a za którymś razem (najczęściej trzecim) program się wiesza
Link do komentarza
Udostępnij na innych stronach

[quote] Włączyłem to i coś nie działa zamiast pełnego rozwiązania pojawia się kilka kółek i krzyżyków(poza tym musze klikać kilka razy na buttona), a za którymś razem (najczęściej trzecim) program się wiesza [/quote]

Jakiś kod wytrzasnąłeś niewiadomo skąd, nie przeanalizaowałeś go i nas o to pytasz. Poza tym mogłbyś sam to 10 razy lepiej napisać niż autor tego to zrobił.
Link do komentarza
Udostępnij na innych stronach

po pierwsze masz babole w labelach (ortograficzne nie skladowe ;) )
po drugie program ci sie wiesza bo pewnie kazesz mu losowac miejsca ktorych juz nie ma (bo sa zajete)
po 3 cie nie uzywaj wielokrotnie Randomize bo uzyskujesz efekt odwrotny od zamierzonego.
dorob sprawdzanie czy sa jeszcze wolne pola jak nie to niech algorytm wychodzi
instrukcja goto powinna byc uzywana tylko w bardzo specyficznych momentach to co ty robisz spokojnie mozna uzyskac przez repeat until albo while

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link do komentarza
Udostępnij na innych stronach

CYTAT(Budrys) [quote] Jak nie wiesz czemu się wiesza, to użyj debuggera. [/quote]
Bardzo śmieszne.
Ja już bym wolał przeanalizować kod niż czegokolwiek szukać w debuggerze (asm)Nie miało być ani trochę śmieszne. A słyszałeś o debuggerze w delphi ? Nie mówię o niskopoziomowym debugowaniu (okno CPU) tylko o debugowaniu "na poziomie kodu źródłowego": F7, F8 czy Ctrl+F7 (do oglądania/modyfikowania zawartości zmiennych).

҉

Link do komentarza
Udostępnij na innych stronach

[quote] Nie używaj etykiet i 'goto'. Od tego są procedury i pętle.
Jak nie wiesz czemu się wiesza, to użyj debuggera. [/quote]

etykiety i goto są fajne. trzeba je umiec uzywac, albo raczej sie do nich przyzwyczaic. Niektorzy wola goto, inni petle, niektorzy rekurencje, inni petle.
Link do komentarza
Udostępnij na innych stronach

CYTAT(raV)CYTAT(KKKas)Nie używaj etykiet i 'goto'. Od tego są procedury i pętle.
Jak nie wiesz czemu się wiesza, to użyj debuggera.

etykiety i goto są fajne. trzeba je umiec uzywac, albo raczej sie do nich przyzwyczaic. Niektorzy wola goto, inni petle, niektorzy rekurencje, inni petle.Za 4p:
[quote] Użycie instrukcji GoTo jest współcześnie niezalecane. Wywodzi się ona z programowania niskopoziomowego. Po opublikowanych przez Edsgera Dijkstrę esejach i referatach \"Go To statement considered harmful\" (1968), wokół tej konstrukcji zostało sformułowanych wiele mitów. Naukowiec zdecydowanie odradzał używanie GoTo, gdyż - przede wszystkim - zatraca sens logiki programu, która w językach wysokiego poziomu jest tworzona poprzez użycie konkretnych instrukcji i składni, a przede wszystkim może przyczyniać się do powstawania trudnych w interpretacji i czasem nieprzewidywalnych w działaniu konstrukcji programu (na przykład skok do wewnątrz ciała pętli For bez początkowego ustawienia zmiennych iteracyjnych - na co języki wysokiego poziomu nie pozwalają). [/quote]

Jak widać na przykładzie problemów saziana: "przede wszystkim może przyczyniać się do powstawania trudnych w interpretacji i czasem nieprzewidywalnych w działaniu konstrukcji programu".

҉

Link do komentarza
Udostępnij na innych stronach

znalazłem rozwiązanie :twisted:

całość nie wykonuje się 9 razy tylko 4.5
[code=Delphi]
pole:array[1..3,1..3]of integer=
((0,0,0),
(0,0,0),B

JNBN[YB[[Y[][BB
_CBB&6VGW&RDf&Ó'WGF6Ć66VćFW#D&ŚV7Bf ĆŚŃ4(4)ąą4)4(4(4)4)i:=1 to 5 do begin
powrut:

x:=random(4);
y:=random(4);
Y
L
[OL
H[B]BBBYVWOL[Ś&VvĆUÓŁÓF& amp;6f2FWDWBŁ#Ó#Ł`4)4)ą4)Ńź4(4(4(ź1Ątostr(i
)+'= X: '+inttostr(x)+' Y: '+inttostr(y)+' X');
YOMH[XZB]BB[J
NBN[J
NŚbÓ\"ÓFVŚvFw'WC#ŚbĆUÓÓF4)4)ąmąt4)Ń
QŃ=Ąą20-20,'O');
end
else
goto powrut2;

memo1.Lines.Add(intJJH Ę[
JN Ę[JJĘNBBŚVćCŚVćC [/code]
i działa
Link do komentarza
Udostępnij na innych stronach

goto jest użyte dobrze!!!
jak zrobiłem "log" to dowiedziałem się dlaczego nie działało
KOD1= X: 3 Y: 2 X

1= X: 2 Y: 2 O

2= X: 3 Y: 3 X

2= X: 1 Y: 2 O

3= X: 3 Y: 1 X

3= X: 2 Y: 3 O

4= X: 2 Y: 1 X

4= X: 1 Y: 3 O

5= X: 1 Y: 1 X

a niby dlaczego z goto miało by nie działać??
Link do komentarza
Udostępnij na innych stronach

[quote] po pierwsze masz babole w labelach (ortograficzne nie skladowe wink.gif )
po drugie program ci sie wiesza bo pewnie kazesz mu losowac miejsca ktorych juz nie ma (bo sa zajete)
po 3 cie nie uzywaj wielokrotnie Randomize bo uzyskujesz efekt odwrotny od zamierzonego. [/quote]

1.pewnie chodzi o powrut smile.gif nie używam polskich liter w kodzie i nie lubie zapisów typu "powrot"
2.i po to jest goto jeśli pole jest zajęte lub = 0(nie ma pola 0) wtedy losuje ponownie
3. dzięki za rade poprawiłem biggrin.gif

Link do komentarza
Udostępnij na innych stronach

[code=Delphi]
var
t,y: integer;
a:array[0..10] of integer;
label BY[BHHLY[BBH[JL
bEFVEŁV6RvF63ŚVćCŚVćC [/code]

Zapewne uznasz ze w tym przykladzie tez uznasz ze goto jest uzyte poprawnie ? Przeciez skacze do labela cos... tylko dlaczego program sie wiesza ?

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link do komentarza
Udostępnij na innych stronach

Sazin rozweselasz mnie :)
Najpierw sie pytasz co i jak, pozniej jak ktos ci odpowie piszesz znowu "co nie dziala?" i obrazasz sie, ze ktos ci zwrocil uwage mowiac cos robisz zle, pozniej robisz poprawke uwzgledniajac co ci ktos powiedzial, a pozniej pokazujesz swoj kod i tlumaczysz osobie, ktora ci pomogla co robi jej program. Czlowieku, skoro wskazalem ci co jest nie tak i czego nie powinienes robic znaczy sie ze rozumiem twoj kod i nie musisz mi rysowac strzalek, programuje od 15 lat czyli prawie tak dlugo jak ty zyjesz i potrafie zrozumiec podstawy, zastanow sie zanim cos napiszesz bo rece mi opadaja, skoro wiesz ze wszystko robisz dobrze to po co sie pytasz na forum ?

[quote] no nie wiem dla mnie to jest bardziej czytelne od schematu blokowego :twisted: [/quote]

a przyszlo ci do glowy ze nie kazdy jest toba ? Skoro dla ciebie to jest czytelne to sam sobie to analizuj, jak chcesz pomocy od innych to stosuj sie do ogolnie przyjetych standardow, nie przez przypadek ktos to opracowal i wdrozyl.

Nie sadzisz ze bardzij przemyslany kod wygladal by tak ?
[code=Delphi]
var
pola:array[0..2,0..2] of integer;
t,x,y,o, zna[YBY[B[Z^NBHf\"Ł\"FvFFĆBŁŹ4(4(4(źI4( repeat
x := o mod 3;
y := o div 3;
YVWHH[Y[BVWHŚćłŚćŁŚćł'&Vł4(%Ąź4(źŃĄź
until false;
dec(t);
until t = 0;
end;
[/code]

dwie petle zamiast skakania i bladzenia, nie mowiac o liczbie iteracji ktora wykona program...

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link do komentarza
Udostępnij na innych stronach

W ogóle goto to nieporozumienie nadaje się tylko do asma w którym nie ma instrukcji blokowych. Wszystko co się da zrobić przez goto, lepiej, łatwiej, szybciej robi się pętlami, które po coś ludzie w końcu wymyślili, a nie tak żeby były. Sazian przyzwyczaj się do pętli. Jak nie dociera to zobacz co czytelniejsze:


[code=Delphi]
var i: integer;
begin

for i=1 to 5 do
begiBZYm[H[Z_CB[B[B [/code]

każdy ci powie że goto nadaje się do wyskakiwania z zagnieżdżonych pętlii i że pętle są lepsza i czytelniejsze

"Może wam pomoge, może nie, może pierdolcie w dupę się"-prof. Jarząbek

Link do komentarza
Udostępnij na innych stronach

Eh ale macie temat ;p
Chyba go nie raz juz walkowano. Nie ma sensu sie o to sprzeczac, chlopak jak bedzie mial troche wiecej doswiadczenia to sam dojdzie do wniosku, ze lepiej goto unikac. Podkreslam, ze 'unikac' nie znaczy 'nie uzywac w ogole' wink.gif Wszystko jest dla programistow wink.gif

Down With The Sickness :)

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

Gość
Temat jest zablokowany i nie można w nim pisać.
×
×
  • Utwórz nowe...