» »

[VB05] Pomoč za Do...Loop - začetnik

[VB05] Pomoč za Do...Loop - začetnik

gregor_83 ::

Pozdrav od novega uporabnika!

Spravil sem se pisat svoj prvi program. Namen je igranje preproste igrice.
Če imamo polje številk:

1 2 3
4 5 6
7 8 X

je cilj da bodo razporejene takole:

1 2 3
8 X 4
7 6 5

Prazen prostor(X) lahko premikamo samo vodoravno in navpično.
Moj program naj bi delal vse možn poteze dokler ne bi našel prave. Se pravi od začetnega polja rešitev bi nadaljeval do i-tega, dokler ne bi našel prave kombinacije cifer, pri tem pa bi upošteval pravila ige.
In sedaj moj problem: uspelo mi je spisati dovolj da program prebavi prvo iteracijo rešitev, vendar naprej noče. Preprosto v Debuggerju zmrzne in niti ne pokaže kake napake (Samo 'Program not responding')

KODA (z opombami):

'Najprej so deklarirane vse spremenljivke, tega nisem skopiral


i = 0
Do
'prva DOLOOP (znotraj te sta še dve), namen je da iterira dokler ne najde rešitve. Za zadaj je pogoj da konča pri i=2, pa še to ne zmore:))

matrika = My.Computer.FileSystem.ReadAllText("C:\igra\matrika.txt")
'Prvo polje (pravim jim matrike) je .zapisano v .txt datoteki in je oblike '123456789' (9 je enako kot prazno polje)

steviloMatrik = (3 ^ i)
'Število matrik v vsaki iteraciji

Do
'DOLOOP za prebiranje vseh vrednosti v vseh poljih vseh matrik, ki so na voljo za igranje v i-ti iteraciji. Vrednosti polj se shranijo v 1D array-e 'Cifra11(),'cifra12()'....'cifra33()', kjer je cifra11 vrednost v prvi vrstici in prvem stolpcu, cifra33 pa vrednost v tretji vrstici v retjem stolpcu. Tu najverjetneje nastopijo težave, a o tem kasneje.

cifraprogres = 0
char11progres = 0
char12progres = 1
char13progres = 2
char21progres = 3
char22progres = 4
char23progres = 5
char31progres = 6
char32progres = 7
char33progres = 8
cifra11(cifraprogres) = Val(matrika.Chars(char11progres))
cifra12(cifraprogres) = Val(matrika.Chars(char12progres))
cifra13(cifraprogres) = Val(matrika.Chars(char13progres))
cifra21(cifraprogres) = Val(matrika.Chars(char21progres))
cifra22(cifraprogres) = Val(matrika.Chars(char22progres))
cifra23(cifraprogres) = Val(matrika.Chars(char23progres))
cifra31(cifraprogres) = Val(matrika.Chars(char31progres))
cifra32(cifraprogres) = Val(matrika.Chars(char32progres))
cifra33(cifraprogres) = Val(matrika.Chars(char33progres))
cifraprogres = cifraprogres + 1
char11progres = char11progres + 9
char12progres = char12progres + 9
char13progres = char13progres + 9
char21progres = char21progres + 9
char22progres = char22progres + 9
char23progres = char23progres + 9
char31progres = char31progres + 9
char32progres = char32progres + 9
char33progres = char33progres + 9
Loop Until cifraprogres = steviloMatrik

matrika = ""
'Sprazni strikng 'matrika', ki jo je prebral na začetku. Njene vrednosti so spravljene v cifraxy(), tako da lahko napiše novo, ki bo osnova za naslednjo potezo.

Do
'Pravila za igro. Na kratko: program gleda kje lahko premakne cifro 9 in kam. V skrajnih kotih sta možni dve potezi, na robovih matrike tri in v sredini štiri. Vsakič ko najde možno potezo, zapiše sekvenco v string 'matrika' in gleda naprej. To ponovi (glej spremenljivko 'cloop') tolikokrat, kolikor je spremenljivk v posameznem arrayu cifraXY(). Na koncu dobimš zaporednje številk, ki so odigrane vrednosti. Lahko da je kje napaka, ampak sem skrbno pregledal, pa tudi če je ni tako pomembno, saj le sekvence ne bodo prave, število potez pa bo pravo (4*2+4*3+4=24), tako da bo na voljo pravilno število matrik za naslednjo potezo.

cloop = 0
If cifra11(cloop) = 9 Then
cifra11(cloop) = cifra12(cloop)
cifra12(cloop) = 9
matrika = matrika & cifra11(cloop) & cifra12(cloop) & cifra13(cloop) & cifra21(cloop) & cifra22(cloop) & cifra23(cloop) & cifra31(cloop) & cifra32(cloop) & cifra33(cloop)
cifra12(cloop) = cifra11(cloop)
cifra11(cloop) = 9
End If


If cifra11(cloop) = 9 Then
cifra11(cloop) = cifra21(cloop)
cifra21(cloop) = 9
matrika = matrika & cifra11(cloop) & cifra12(cloop) & cifra13(cloop) & cifra21(cloop) & cifra22(cloop) & cifra23(cloop) & cifra31(cloop) & cifra32(cloop) & cifra33(cloop)
cifra21(cloop) = cifra11(cloop)
cifra11(cloop) = 9
End If

If cifra12(cloop) = 9 Then
cifra12(cloop) = cifra11(cloop)
cifra11(cloop) = 9
matrika = matrika & cifra11(cloop) & cifra12(cloop) & cifra13(cloop) & cifra21(cloop) & cifra22(cloop) & cifra23(cloop) & cifra31(cloop) & cifra32(cloop) & cifra33(cloop)
cifra11(cloop) = cifra12(cloop)
cifra12(cloop) = 9
End If

If cifra12(cloop) = 9 Then
cifra12(cloop) = cifra13(cloop)
cifra13(cloop) = 9
matrika = matrika & cifra11(cloop) & cifra12(cloop) & cifra13(cloop) & cifra21(cloop) & cifra22(cloop) & cifra23(cloop) & cifra31(cloop) & cifra32(cloop) & cifra33(cloop)
cifra13(cloop) = cifra12(cloop)
cifra12(cloop) = 9
End If


If cifra12(cloop) = 9 Then
cifra12(cloop) = cifra22(cloop)
cifra22(cloop) = 9
matrika = matrika & cifra11(cloop) & cifra12(cloop) & cifra13(cloop) & cifra21(cloop) & cifra22(cloop) & cifra23(cloop) & cifra31(cloop) & cifra32(cloop) & cifra33(cloop)
cifra22(cloop) = cifra12(cloop)
cifra12(cloop) = 9
End If

If cifra13(cloop) = 9 Then
cifra13(cloop) = cifra12(cloop)
cifra12(cloop) = 9
matrika = matrika & cifra11(cloop) & cifra12(cloop) & cifra13(cloop) & cifra21(cloop) & cifra22(cloop) & cifra23(cloop) & cifra31(cloop) & cifra32(cloop) & cifra33(cloop)
cifra12(cloop) = cifra13(cloop)
cifra13(cloop) = 9
End If

If cifra13(cloop) = 9 Then
cifra13(cloop) = cifra23(cloop)
cifra23(cloop) = 9
matrika = matrika & cifra11(cloop) & cifra12(cloop) & cifra13(cloop) & cifra21(cloop) & cifra22(cloop) & cifra23(cloop) & cifra31(cloop) & cifra32(cloop) & cifra33(cloop)
cifra23(cloop) = cifra13(cloop)
cifra13(cloop) = 9
End If

If cifra21(cloop) = 9 Then
cifra21(cloop) = cifra11(cloop)
cifra11(cloop) = 9
matrika = matrika & cifra11(cloop) & cifra12(cloop) & cifra13(cloop) & cifra21(cloop) & cifra22(cloop) & cifra23(cloop) & cifra31(cloop) & cifra32(cloop) & cifra33(cloop)
cifra11(cloop) = cifra21(cloop)
cifra21(cloop) = 9
End If

If cifra21(cloop) = 9 Then
cifra21(cloop) = cifra22(cloop)
cifra22(cloop) = 9
matrika = matrika & cifra11(cloop) & cifra12(cloop) & cifra13(cloop) & cifra21(cloop) & cifra22(cloop) & cifra23(cloop) & cifra31(cloop) & cifra32(cloop) & cifra33(cloop)
cifra22(cloop) = cifra21(cloop)
cifra21(cloop) = 9
End If

If cifra21(cloop) = 9 Then
cifra21(cloop) = cifra31(cloop)
cifra31(cloop) = 9
matrika = matrika & cifra11(cloop) & cifra12(cloop) & cifra13(cloop) & cifra21(cloop) & cifra22(cloop) & cifra23(cloop) & cifra31(cloop) & cifra32(cloop) & cifra33(cloop)
cifra31(cloop) = cifra21(cloop)
cifra21(cloop) = 9
End If

If cifra22(cloop) = 9 Then
cifra22(cloop) = cifra12(cloop)
cifra12(cloop) = 9
matrika = matrika & cifra11(cloop) & cifra12(cloop) & cifra13(cloop) & cifra21(cloop) & cifra22(cloop) & cifra23(cloop) & cifra31(cloop) & cifra32(cloop) & cifra33(cloop)
cifra12(cloop) = cifra22(cloop)
cifra22(cloop) = 9
End If

If cifra22(cloop) = 9 Then
cifra22(cloop) = cifra21(cloop)
cifra21(cloop) = 9
matrika = matrika & cifra11(cloop) & cifra12(cloop) & cifra13(cloop) & cifra21(cloop) & cifra22(cloop) & cifra23(cloop) & cifra31(cloop) & cifra32(cloop) & cifra33(cloop)
cifra21(cloop) = cifra22(cloop)
cifra22(cloop) = 9
End If

If cifra22(cloop) = 9 Then
cifra22(cloop) = cifra23(cloop)
cifra23(cloop) = 9
matrika = matrika & cifra11(cloop) & cifra12(cloop) & cifra13(cloop) & cifra21(cloop) & cifra22(cloop) & cifra23(cloop) & cifra31(cloop) & cifra32(cloop) & cifra33(cloop)
cifra23(cloop) = cifra22(cloop)
cifra22(cloop) = 9
End If

If cifra22(cloop) = 9 Then
cifra22(cloop) = cifra32(cloop)
cifra32(cloop) = 9
matrika = matrika & cifra11(cloop) & cifra12(cloop) & cifra13(cloop) & cifra21(cloop) & cifra22(cloop) & cifra23(cloop) & cifra31(cloop) & cifra32(cloop) & cifra33(cloop)
cifra32(cloop) = cifra22(cloop)
cifra22(cloop) = 9
End If

If cifra23(cloop) = 9 Then
cifra23(cloop) = cifra13(cloop)
cifra13(cloop) = 9
matrika = matrika & cifra11(cloop) & cifra12(cloop) & cifra13(cloop) & cifra21(cloop) & cifra22(cloop) & cifra23(cloop) & cifra31(cloop) & cifra32(cloop) & cifra33(cloop)
cifra13(cloop) = cifra23(cloop)
cifra23(cloop) = 9
End If

If cifra23(cloop) = 9 Then
cifra23(cloop) = cifra22(cloop)
cifra22(cloop) = 9
matrika = matrika & cifra11(cloop) & cifra12(cloop) & cifra13(cloop) & cifra21(cloop) & cifra22(cloop) & cifra23(cloop) & cifra31(cloop) & cifra32(cloop) & cifra33(cloop)
cifra22(cloop) = cifra23(cloop)
cifra23(cloop) = 9
End If

If cifra23(cloop) = 9 Then
cifra23(cloop) = cifra33(cloop)
cifra33(cloop) = 9
matrika = matrika & cifra11(cloop) & cifra12(cloop) & cifra13(cloop) & cifra21(cloop) & cifra22(cloop) & cifra23(cloop) & cifra31(cloop) & cifra32(cloop) & cifra33(cloop)
cifra33(cloop) = cifra23(cloop)
cifra23(cloop) = 9
End If

If cifra13(cloop) = 9 Then
cifra13(cloop) = cifra21(cloop)
cifra21(cloop) = 9
matrika = matrika & cifra11(cloop) & cifra12(cloop) & cifra13(cloop) & cifra21(cloop) & cifra22(cloop) & cifra23(cloop) & cifra31(cloop) & cifra32(cloop) & cifra33(cloop)
cifra21(cloop) = cifra13(cloop)
cifra13(cloop) = 9
End If

If cifra13(cloop) = 9 Then
cifra13(cloop) = cifra32(cloop)
cifra32(cloop) = 9
matrika = matrika & cifra11(cloop) & cifra12(cloop) & cifra13(cloop) & cifra21(cloop) & cifra22(cloop) & cifra23(cloop) & cifra31(cloop) & cifra32(cloop) & cifra33(cloop)
cifra32(cloop) = cifra31(cloop)
cifra31(cloop) = 9
End If

If cifra32(cloop) = 9 Then
cifra32(cloop) = cifra31(cloop)
cifra31(cloop) = 9
matrika = matrika & cifra11(cloop) & cifra12(cloop) & cifra13(cloop) & cifra21(cloop) & cifra22(cloop) & cifra23(cloop) & cifra31(cloop) & cifra32(cloop) & cifra33(cloop)
cifra31(cloop) = cifra32(cloop)
cifra32(cloop) = 9
End If

If cifra32(cloop) = 9 Then
cifra32(cloop) = cifra22(cloop)
cifra22(cloop) = 9
matrika = matrika & cifra11(cloop) & cifra12(cloop) & cifra13(cloop) & cifra21(cloop) & cifra22(cloop) & cifra23(cloop) & cifra31(cloop) & cifra32(cloop) & cifra33(cloop)
cifra22(cloop) = cifra32(cloop)
cifra32(cloop) = 9
End If

If cifra32(cloop) = 9 Then
cifra32(cloop) = cifra33(cloop)
cifra33(cloop) = 9
matrika = matrika & cifra11(cloop) & cifra12(cloop) & cifra13(cloop) & cifra21(cloop) & cifra22(cloop) & cifra23(cloop) & cifra31(cloop) & cifra32(cloop) & cifra33(cloop)
cifra33(cloop) = cifra32(cloop)
cifra32(cloop) = 9
End If

If cifra33(cloop) = 9 Then
cifra33(cloop) = cifra23(cloop)
cifra23(cloop) = 9
matrika = matrika & cifra11(cloop) & cifra12(cloop) & cifra13(cloop) & cifra21(cloop) & cifra22(cloop) & cifra23(cloop) & cifra31(cloop) & cifra32(cloop) & cifra33(cloop)
cifra23(cloop) = cifra33(cloop)
cifra33(cloop) = 9
End If

If cifra33(cloop) = 9 Then
cifra33(cloop) = cifra32(cloop)
cifra32(cloop) = 9
matrika = matrika & cifra11(cloop) & cifra12(cloop) & cifra13(cloop) & cifra21(cloop) & cifra22(cloop) & cifra23(cloop) & cifra31(cloop) & cifra32(cloop) & cifra33(cloop)
cifra32(cloop) = cifra33(cloop)
cifra33(cloop) = 9
End If
cloop = cloop + 1
Loop Until cloop = steviloMatrik

steviloElementov = 9 * (4 ^ (i + 1))
'Število elmentov v vseh matrikah v i-ti potezi, tudi tisti, ki so nični (glej spodaj).

If matrika.Length < steviloElementov Then
Ta IFTHEN pogleda če je dovolj vseh elementov. Če sta naprimer samo dve možni potezi (tako kot pri prvi potezi, ko je polje 123456789), potem bo v naslednji potezi premalo elementov, da bi napolnil vsa mesta v array-ih cifraXY(). Tako da če ugotovi da jih res manjka, jih z DOLOOP dodaja eno po eno dokler jih ni dovolj (=steviloElementov)
Do
matrika = matrika & "0"
Loop Until matrika.Length = steviloElementov
End If

My.Computer.FileSystem.WriteAllText("C:\igra\matrika.txt", matrika, False)
'Napiše nov navor matrik v 'matrika.txt', sedaj samo še doda k števcu potez (i), in potem jo znova lhko preber in začene novo potezo. Vsaj tako naj bi bilo....
i = i + 1
MsgBox(matrika)
Loop Until i = 2

Torej, probal sem v Debugu pritisniti pavzo in pogledati kaj se dogaja. Ustavi se nekje pri deklaracijah cifraXY(cifraprogres) = Val(matrika.Chars(charXYprogres)), ampak ko preberem trenutne vrednosti spremenljivk in števcev so ti v redu, tako da pojma nimam zakaj se mi to dogaja.

Hvala za odgovore!

darkolord ::

Preprosto v Debuggerju zmrzne in niti ne pokaže kake napake

A si prepričan da program ne laufa naprej? Lahko da laufa normalno in samo ne osvežuje forme.

Dej cel projekt zazipaj pa ga uploadaj recimo na rapidshare.

gregor_83 ::

Prepričan? Hja, nekje srednje prepričan. Sem omenil da je to moj prvi program? :))

V glavnem, tu je upload: *link*

Pa še dodati je potrebno c:\igra\matrika.txt ki naj vsebuje' 123456789' (oziroma katero koli kombinacijo cifer 1-9)

Zgodovina sprememb…

nevone ::

Pomoje maš tle napako:

Kako naj bogi cloop kdaj doseže steviloMatrik, če ga vedno na vrhu zanke resetiraš na 0?

Do

cloop = 0

If cifra11(cloop) = 9 Then
cifra11(cloop) = cifra12(cloop)
cifra12(cloop) = 9
...
bla bla bla
...

cloop = cloop + 1

Loop Until cloop = steviloMatrik

o+ nevone
Either we will eat the Space or Space will eat us.

gregor_83 ::

Kako naj bogi cloop kdaj doseže steviloMatrik, če ga vedno na vrhu zanke resetiraš na 0?


Seveda! Zveseljem sporočam da sedaj po tem in nekaj drugih manjših popravkih deluje, zato hvala za pomoč!:))
Edin hakeljc je da 10 potez vzame več ur da se izračuna (opomba sebi: enačbe kot so 9*(4^i+1) niso programerjev prijatelj:)) )

Sedaj me čaka samo še da napišem pogoj. Ker je ta precej dolg, ga ne morem spraviti v eno vrstico zraven LOOP UNTIL ...
Zato me zanima če lahko napišem *LOOP UNTIL nekSub* in definiram nekSub kar ob zagonu glavne forme?

nevone ::

Lahko narediš na ta način:

Do  
  bla bla
  bla bla  
  
  pejtven = 0
  If pogoj1 Then 
    If pogoj2 Then
       pejtven = 1
    End If
  End if 
  If pogoj3 Then pejtven = 1
  
Loop Until pejtven = 1

o+ nevone
Either we will eat the Space or Space will eat us.

gregor_83 ::

Hvala nevone, sem že sam razmišljal o nečem podobnem, ampak sem ugotovil da lahko uporabim:

Do Until katerikoliString.Contains("iskaniString") = True

Ki prav fletno paše v eno vrstico!:)) Mi je vedno všeč ta VB.NET.
Program je zdaj končan, tako da še enkrat hvala!

Zgodovina sprememb…



Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C#] branje ter urejanje podatkov

Oddelek: Programiranje
181509 (1284) maticm
»

Suse Linux - rabim pomoč čisto od začetka

Oddelek: Operacijski sistemi
71160 (1006) twom
»

Linux / net

Oddelek: Pomoč in nasveti
221550 (1223) roscha
»

Zvok v Pingo2

Oddelek: Operacijski sistemi
14723 (612) BigWhale
»

problem v c++ kako prebrati matriko?

Oddelek: Programiranje
131339 (1156) robinzon

Več podobnih tem