Manche Sachen gehen mit FOR-NEXT nicht oder nicht so einfach:
Ich habe ein Array von der Größe 1x4. Ich möchte festgelegte (!) unregelmäßige Werte zufällig darin verteilen. Da bietet sich eine Roulette-Lösung an:
</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">DIM r[4]
PUT 4,12,7,16
FOR i=1 TO 4 ! (1)
s=2+INT(RND(4)) : j=0
WHILE s>0 DO !(2)
j=j+1 : IF j>4 then j=1
IF R[j]=0 then s=s-1
ENDWHILE
R[j]=GET(1)
NEXT i 1: Schleife für die Werte die zu verteilen sind.
2: Rouletteschleife, die den Wert über s frei Plätze hüpfen läßt. Muß mind. einmal ausgeführt werden, damit der Wert wenigstens einmal hüpft um ein freies Feld zu finden.
Sicher nicht die einzige Lösung für das Problem, aber IMHO eine elegante. 😉
Essenz: Bei FOR-NEXT sollte im Vorweg klar sein, wieviele Iterationen anstehen. Bei den anderen ist die Anzahl der Durchläufe unbestimmt. FOR-TO merkt sich ja auch den Zielwert zu Beginn, auch wenn er sich "unterwegs" ändert:
</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">DIM R[]
PUT 4,13,6,23
FOR i=1 to NSP
R=GET(1)
NEXT i NSP ist nach dem ersten Durchlauf nur noch 3 und trotzdem gibt es 4 Schleifendurchläufe, während folgendes nur 2 Werte abholt:
</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">DIM R[]
PUT 4,13,6,23
i=0
WHILE i<NSP DO
i=i+1 : R=GET(1)
ENDWHILE
[ 06. Dezember 2006, 17:00: Beitrag editiert von: Ove Bodj ]