title image


Smiley Re: Was ist da so schwer
Hallo Uwe,



hier noch 'ne Frage:



Die Variable "Start" ist jetzt durch die merkwürdige Array-Zuweisung ein eindimensionales Feld geworden, wobei jedes Feldelement einen Vektor enthält.

Der Typ ist Variant.

Wie greift man nun auf die einzelnen Felder dieser Variable "Start" zu?

Also z.B.



a=start(2,3)



geht nicht.



Auch gehen



a=start(2(3))

oder

a=start(2)(3)

nicht.





Außerdem sind alle Felder von "Start" vomTyp Variant, was ich auch nicht will, da Variant sehr viel Speicher belegt und auch langsamer in der Verarbeitung ist.



Das C-Programm sieht genial einfach aus, aber ist nicht leicht auf Visual Basic umzuschreiben. (Jedenfalls nicht für einen VB-Anfängen, wie mich und in dieser Effizienz).





geht nicht so was in der Art:



DIM start(1 to 9, 1 to 9) as integer

start = (

(0,2,3,4,5,6,7,8,9)

(3,5,4,3,4,5,4,3,4)

...

(2,3,4,3,0,0,0,4,3))



Hier mein Code, den ich bisher habe, der Compiler wirft aber noch Fehlermeldungen aus, vor allem beim Zugriff auf Array-Variablen start und feld.





Sub main()



Dim start As Integer

start = Array(Array(2, 4, 0, 0, 9, 0, 0, 0, 0), _

Array(5, 1, 0, 0, 0, 3, 4, 0, 9), _

Array(0, 0, 0, 0, 6, 4, 2, 8, 1), _

Array(0, 0, 0, 3, 0, 8, 1, 0, 0), _

Array(1, 0, 7, 0, 0, 0, 0, 5, 3), _

Array(0, 3, 5, 6, 0, 0, 0, 0, 4), _

Array(0, 5, 1, 7, 0, 0, 0, 0, 2), _

Array(0, 0, 3, 0, 2, 0, 0, 0, 0), _

Array(0, 2, 4, 0, 1, 9, 3, 0, 0))





If nextone(start, 0, 0) Then

For x = 0 To 8

For y = 0 To 8

Debug.Print start(x)(y);

Next y

Debug.Print start(x, y)

Next x

Else

Debug.Print "Rätsel nicht lösbar!"

End If

End Sub



Function isfine(feld, x, y As Integer) As Boolean



isfine = True

'doppelte Zahl in Zeile oder Spalte?

For yi = 0 To 8

If Not (yi = y) And feld(x, yi) = feld(x, y) Then isfine = False

Next yi

For xi = 0 To 8

If Not (xi = x) And feld(xi, y) = feld(x, y) Then isfine = False

Next xi

'3x3 Quadrant-Test

x1 = Int(x / 3) * 3

x1 = Int(y / 3) * 3

For xk = x1 To x1 + 2

For yk = y1 To y1 + 2

If ((xk x) Or (yk y)) And feld(xk, yk) = feld(x, y) Then isfine = False

Next yk

Next xk

End Function



Function nextone(feld, x, y As Integer) As Boolean

nextone = False

If y = 9 Then

y = 0

x = x + 1

End If

If x = 9 Then

nextone = True

Else



If feld(x, y) > 0 Then 'schon belegt, dann

If isfine(feld, x, y) Then 'Belegung ok, dann

nextone = nextone(feld, x, y + 1)

End If

Else 'wenn noch nicht belegt, dann

feld(x, y) = 1

nx = True

While feld(x, y) < 10 And nx

If isfine(feld, x, y) Then

If nextone(feld, x, y + 1) Then

nx = False

nextone = True

End If

Else

feld(x, y) = feld(x, y) + 1

nx = True

End If

Wend

End If

End If

If Not nextone Then

feld(x, y) = 0

End If

End Function





p.s. Der Code in meinem Editierformular sieht viel strukturierter aus als dann im Posting!??

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: