abbrechen
Suchergebnisse werden angezeigt für 
Stattdessen suchen nach 
Meintest du: 
abbrechen
Suchergebnisse werden angezeigt für 
Stattdessen suchen nach 
Meintest du: 

Wir schätzen Ihren Input!
Bitte nehmen Sie an der Umfrage zu Archicad 28 Startbildschirm und Lerninhalte/Schnell-Tutorials teil

Programmierung
Alles über Programmierung in GDL und Python

schleifen

zzyzx
Newcomer
mal 'was grundsätzliches:
es gibt ja in gdl die schleifen
... bisher habe ich fast alles mit for-next gemacht, wenn da sowas im skript nötig war. wenn die schleifenbedingung zwischendrin schon erfüllt war, habe ich das i einfach auf den endwert hochgesetzt. nicht sauber, hat aber funktioniert.
was spricht (ausser skriptverschönerung) sonst noch für die "anderen" varianten?
Wenn also jemand tipps dazu hat: her damit!

:winken:
2 ANTWORTEN 2
Anonymous
Nicht anwendbar
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&gt;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 ]
zzyzx
Newcomer
@ ove: danke für die anregungen und das beispiel! 😉 )zumindest hab' ich jetzt eine idee, wie und wozu man das nutzen kann.
im ernstfall werde ich dann wohl nochmal fragen müssen.