Quick Basic: For-Next
Aus Wikibooks
Inhaltsverzeichnis |
[Bearbeiten] Grundlagen und Syntax
Bei einer FOR-Schleife wird ein Anweisungsblock eine bestimmte Anzahl mal ausgeführt.
Syntax:
FOR Laufvariable = Untergrenze TO Obergrenze [ STEP Schrittweite ]
Anweisungen
[ EXIT FOR ]
Anweisungen
NEXT Laufvariable
Dabei wird eine Variable verändert:
FOR x = 0 TO 5
Anweisungen
NEXT x
Hier würden die Anweisungen insgesamt 6x ausgeführt werden. Beim ersten Durchlauf würde die Variable x 0 sein, beim zweiten 1, beim dritten 2, beim vierten 3, beim fünften 4 und beim sechten 5. Man kann durch das optionale STEP-Schlüsselwort festlegen, in welchen Schritten sich die Zählervariable - hier x - verändern soll:
FOR zaehler = 1 TO 7 STEP 2
Anweisungen
Next zaehler
Hier würde zaehler im ersten Durchlauf 1, im zweiten 3, im dritten 5 und im vierten 7 sein. Die Schrittweite kann auch Werte kleiner 1 annehmen oder negativ werden: Bei For c=2 to 0 step -1 nimmt c nacheinander die Werte 2, 1 und 0 an.
[Bearbeiten] EXIT FOR-Anweisung
Mit der EXIT FOR-Anweisung ist es möglich eine FOR-NEXT-Schleife zu beenden.
FOR i = 1 TO 100 IF i > 10 THEN EXIT FOR PRINT i NEXT i
Dieses Beispiel wird nur die Zahlen von 1 bis 10 ausgeben. Beim 11. Durchlauf (wenn i = 11 ist) ist die Bedingung i > 10 erfüllt und die die EXIT FOR-Anweisung wird ausgeführt. Somit wird hier die FOR-Scheife verlassen.
[Bearbeiten] Beispiele
[Bearbeiten] Quadratzahlen
Im folgenden Programmbeispiel sollen die Quadratzahlen von 1 bis 5 berechnet werden. Hier wird zuerst eine Kopfzeile geschrieben, und darunter eine Liste der Zahlen 1, 2, 3, 4, 5 und den dazugehörigen Quadratzahlen 1, 3, 9, 16, 25.
DIM i AS INTEGER PRINT "Zahl", "Quadratzahl" '''Kopfzeile'' FOR i = 1 TO 5 PRINT i, i*i '''Liste mit den Quadratzahlen erstellen'' NEXT i
[Bearbeiten] Primzahlen
Das nächste Beispiel soll zeigen, wie du mit Hilfe einer FOR-Schleife überprüfen kannst ob eine gegebene Zahl eine Primzahl ist. (zur Erinnerung: eine Primzahl ist eine Zahl, die nur durch eins und sich selbst teilbar ist.)
Idee: wenn n unsere Zahl ist wollen wir einfach der Reihe nach ausprobieren ob n durch alle Zahlen von 2 bis n-1 teilbar ist. n ist durch eine Zahl i (ohne Rest) teilbar, genau dann wenn n MOD i = 0 Und nun zu unserem kleinen Programm:
DIM i AS INTEGER, n AS INTEGER, nichtPrim AS INTEGER n = 12 'die Zahl die wir überprüfen wollen nichtPrim = 0 'hier wird gespeichert ob ein Teiler gefunden wurde FOR i = 2 TO n - 1 IF n MOD i = 0 THEN 'wenn Teiler gefunden.. nichtPrim = 1 '..merken und.. EXIT FOR '..Schleife verlassen END IF NEXT i IF nichtPrim = 0 THEN 'und zum Schluss wollen wir das Ergebnis auf dem Bildschirm ausgeben PRINT n, "ist eine Primzahl!" ELSE PRINT n, "ist KEINE Primzahl!! - Gefundener Teiler:", i END IF
[Bearbeiten] Primzahlen, Teil 2
Hier wollen wir den Code des vorigen Beispiels noch etwas optimieren.
Bekanntlich sind alle geraden Zahlen (2, 4, 6, etc.) durch 2 teilbar. Deshalb reicht es völlig aus die Teilbarkeit nur für ungerade Zahlen zu überprüfen.
Darüber hinaus ist der größte Teiler einer Zahl n maximal gleich der Wurzel aus n. Also reicht es als Obergrenze der Schleife die Wurzel aus n, also SQR(n) anzugeben.
DIM i AS INTEGER, n AS INTEGER, nichtPrim AS INTEGER n = 377 'die Zahl die wir überprüfen wollen IF n MOD 2 = 0 THEN 'Zahl ist durch 2 teilbar PRINT n, "ist durch 2 Teilbar." ELSE 'falls nicht durch 2 teilbar nichtPrim = 0 FOR i = 3 TO SQR(n) STEP 2 'neue Grenzen und Schrittweite IF n MOD i = 0 THEN nichtPrim = 1 EXIT FOR END IF NEXT i IF nichtPrim = 0 THEN PRINT n, "ist eine Primzahl!" ELSE PRINT n, "ist KEINE Primzahl!! - Gefundener Teiler:", i END IF END IF
Im Vergleich zur ersten Version ist unser neuer Algorithmus um einiges schneller als der vorherige, das liegt insbesondere daran, dass die Schleife wesentlich enger bei einanderliegende Grenzen hat und dass wir in größeren Schritten die Schleife durchlaufen.