REPEAT
REPEAT | |
Syntax: | REPEAT |
Parameter | |
keine | |
Einordnung | |
Typ: | Anweisung |
Kontext: | Strukturkontrolle |
Aufgabe: | Leitet eine fußgesteuerte Schleife ein |
Abkürzung: | keine (TSB: reP) |
Token: | $64 $20 (100 32) |
Verwandte Befehle | |
END LOOP - EXIT - LOOP - UNTIL - FOR - NEXT |
Dieser Artikel beschreibt das Simons'-Basic-Schlüsselwort REPEAT.
Typ: Anweisung Syntax: REPEAT
REPEAT markiert den Anfang einer fußgesteuerten Schleife, die mit dem Befehl UNTIL endet. Jener Teil eines Programms, der unter Umständen mehrfach durchlaufen werden kann, wird als Schleife bezeichnet. Mehr zum Thema "Schleifen" findet sich unter LOOP.
Es sind bis zu 5 Verschachtelungsebenen möglich. Bei der sechsten quittiert das Programm mit Fehlermeldung ?STACK TOO LARGE ERROR. Da REPEAT seinen eigenen Stack besitzt, ist es unabhängig von der Nutzung des BASIC-Stacks und etwaigen Verschachtelungen von LOOP.
Erst die TSB-Version des Befehls stellt die im Simons' Basic Handbuch versprochene Stack-Tiefe von 20 (entspricht 10 Verschachtelungen) auch tatsächlich zur Verfügung. Wird sie überschritten, gibt es einen ?STACK OVERFLOW ERROR.
Der Stack der REPEAT-UNTIL-Konstruktion wird nicht überwacht. Verlässt man eine solche Schleife vorzeitig, wird der Stack nicht bereinigt und kann bei wiederholter Ausführung überlaufen. Um das zu verhindern, kann man die Speicherstelle $C617 (den REPEAT-Stackpointer) bei einem vorzeitigen Schleifenausstieg manipulieren. Siehe dazu den Abschnitt "Eine Struktur vorzeitig verlassen" in TSB Tricks.
Beispiele[Bearbeiten | Quelltext bearbeiten]
Beispiel 1: eine fußgesteuerte Schleife[Bearbeiten | Quelltext bearbeiten]
10 REPEAT 20 PRINT "Ja (j) oder Nein (n)? "; 30 FETCH "{crsr right}", 1, A$ : REM alle Klein- und Grossbuchstaben 40 UNTIL PLACE (a$, "jnJN")
Ja-Nein-Abfrage, die zwar beliebe Groß- oder Kleinbuchstaben akzeptiert, aber nur "j" und "n" (auch groß) durchreicht und damit die Abfrage beendet.
Beispiel 2: Tastaturabfrage[Bearbeiten | Quelltext bearbeiten]
10 REPEAT: GET X$: UNTIL X$>""
Tastaturabfrage, die in BASIC V2 mühsam mit der Speicherstelle 198, POKE und WAIT zusammengebastelt werden muss oder aber mit folgendem FOR-NEXT-Konstrukt umschrieben werden kann:
10 FOR UNTIL = 0 TO -1 STEP -1 20 GET X$ 30 UNTIL = X$>"" 40 NEXT
Die Schleife terminiert erst, sobald der Ausdruck X$>""
wahr ist bzw. die Schleifenvariable UNTIL den Wert für wahr bekommt, also diese den Wert -1 erhält, was dem Endwert der Schleife entspricht.
In einer WHILE-Form schreibt sich das Programm dann (etwas kompakter) so:
10 FOR WHILE = -1 TO 0 20 GET X$ 30 WHILE = X$="" 40 NEXT
Solange X$ also leer ist, läuft die Schleife weiter.
$ | % | @ | ANGL | ARC | AT | AUTO | BCKGNDS | BFLASH | BLOCK | CALL | CENTRE | CGOTO | CHAR | CHECK | CIRCLE | CMOB | COLD | COLOUR | COPY | CSET | DELAY | DESIGN | DETECT | DIR | DISABLE | DISAPA | DISK | DISPLAY | DIV | DOWN | DRAW | DUMP | DUP | ELSE | END LOOP | END PROC | ENVELOPE | ERRLN | ERRN | EXEC | EXIT | EXOR | FCHR | FCOL | FETCH | FILL | FIND | FLASH | FRAC | GLOBAL | GRAPHICS | HI COL | HIRES | HRDCPY | INKEY | INSERT | INST | INV | JOY | KEY | LEFT | LIN | LINE | LOCAL | LOOP | LOW COL | MEM | MERGE | MMOB | MOB OFF | MOB SET | MOD | MOVE | MULTI | MUSIC | NO ERROR | NRM | OFF | OLD | ON ERROR | ON KEY | OPTION | OUT | PAGE | PAINT | PAUSE | PENX | PENY | PLACE | PLAY | PLOT | POT | PROC | RCOMP | REC | RENUMBER | REPEAT | RESET | RESUME | RETRACE | RIGHT | RLOCMOB | ROT | SCRLD | SCRSV | SECURE | SOUND | TEST | TEXT | TRACE | UNTIL | UP | USE | VOL | WAVE