BASIC-Tutorial (Vorwort, Installation, Kapitel 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)

Schleifen, Sprunganweisung, Operatoren

7.1. FOR-Schleife

Schleifen dienen dazu, um bestimmte Anweisungen so oft wiederholt auszuführen, solange eine Bedingung erfüllt (bzw. nicht erfüllt) ist.

Es gibt in BASIC mehrere Schleifen-Typen, wovon ich mit der FOR-Schleife aufgrund ihrer Einfachheit beginne. Die FOR-Schleife wird meist als Zählschleife eingesetzt. Angenommen, ein Anweisungsblock soll 10-mal ausgeführt werden, so wäre dies eine gültige Bedingung, die der Programmierer angeben könnte.

Die FOR-Schleife hat folgende Syntax:

FOR Zaehler = Von TO Bis STEP Schrittweite
   Anweisung 1
   Anweisung 2
   Anweisung 3
   ...
NEXT Zaehler

Wie üblich ist es nicht zwingend notwendig, mehr als eine Anweisung im Anweisungsblock anzugeben. Der Zähler bezeichnet eine Variable, die "mitzählt", wie oft die Anweisungen bereits wiederholt wurden. Anstelle von Von und Bis stehen zwei Werte (bzw. 2 Variablen), die angeben, ab welcher Stelle zu zählen begonnen (Von) und bis wohin gezählt werden soll (Bis). Die Schrittweite gibt an, um welchen Wert die Variable nach einem Durchlauf inkrementiert (von lat. incrementare = vergrößern; hinaufzählen) bzw. dekrementiert (von lat. decrementare = vermindern; herunterzählen) werden soll. STEP sowie die Angabe einer Schrittweite sind nicht unbedingt notwendig. Wird nichts angegeben, wird automatisch 1 angenommen.

Dazu gleich ein Beispiel:

CLS
FOR i = 1 TO 10 STEP 1
   PRINT i
NEXT i

Die Variable i ist hierbei die Zählervariable. Ihre Aufgabe ist es, festzuhalten, wie oft die Schleife bereits durchlaufen wurde. Zu zählen beginnen wir bei 1. Wird der Wert 10 erreicht (d.h. dass die Schleife 10-mal durchlaufen wurde), endet die Ausführung der Schleife. STEP 1 gibt an, dass nach jedem Durchlauf der Wert der Variable i um 1 erhöht werden soll (1 addieren nach jedem Durchlauf). 10-mal wird also die Anweisung PRINT i ausgeführt. Das Ergebnis davon ist, dass das Programm von 1 bis 10 zählt und den jeweils aktuellen Wert anzeigt.

Nun wollen wir das Programm von 10 bis 1 zählen lassen. Um dieses Rückwärtszählen bewerkstelligen zu können, müssen wir lediglich die Bedingungen und den STEP-Wert verändern. Das sieht nun so aus:

CLS
FOR i = 10 TO 1 STEP -1
   PRINT i
NEXT i

Mit jedem Schleifendurchlauf wird nun der Wert der Variable um 1 dekrementiert (STEP -1).

7.2. WHILE-Schleife

Die nächste Schleife, mit der wir uns befassen, ist die WHILE-Schleife. Der Anweisungsblock dieser Schleife wird solange ausgeführt, solange (= while) die Bedingung erfüllt ist.

WHILE Bedingung
   Anweisung 1
   Anweisung 2
   Anweisung 3
   ...
WEND

Das obige Beispiel so verändert, dass eine WHILE-Schleife zum Einsatz kommt:

CLS
i = 1
WHILE i <= 10
   PRINT i
   i = i + 1
WEND

Ich bin der Ansicht, dass dieses Beispiel nur mehr einer kurzen Erklärung bedarf. Neu für Sie dürfte der Operator <= sein. Dessen Bedeutung ist kleiner oder gleich. Im obigen Beispiel heißt dies nun Folgendes: Wiederhole die Schleife, solange der Wert der Variable i kleiner oder gleich 10 ist. Wichtig ist, dass nach der PRINT-Anweisung eine Zeile folgt, die den Wert der Variable inkrementiert. Ansonsten würde der Wert der Variable immer 1 bleiben, und die Schleife würde bis in alle Ewigkeit ausgeführt werden (= Endlosschleife; so etwas werden Sie noch öfter fabrizieren :-) ).

Tipp: Übrigens können Sie die Ausführung eines Programmes jederzeit mit STRG+UNTBR (gilt für QBasic!) abbrechen - z.B. im Fall einer Endlosschleife.

7.3. DO-LOOP-Schleifen

Die letzte Form der Schleifen, mit denen wir uns beschäftigen, sind DO-LOOP-Schleifen.

Möglichkeit 1: DO-LOOP, der einfachste Fall

DO
   Anweisung 1
   Anweisung 2
   Anweisung 3
   ...
LOOP 

Hierbei handelt es sich um eine Endlosschleife. Mittlerweile müssten Sie ausreichend BASIC-Wissen haben, um zu verstehen, was die obige Syntax aussagt. Auf eine nähere Erläuterung verzichte ich deshalb.

Jedoch sind hiermit die Möglichkeiten dieses Schleifentyps noch lange nicht erschöpft. Es gibt 4 weitere Möglichkeiten, die in weiterer Folge erläutert werden.

Möglichkeit 2: DO-LOOP-WHILE

DO
   Anweisung 1
   Anweisung 2
   Anweisung 3
   ...
LOOP WHILE Bedingung

Der einfachste Fall wurde um eine Bedingung erweitert. Solange die Bedingung erfüllt ist, wird diese Schleife ausgeführt. Diese Bedingung steht jedoch am Schluss der Schleife, was hat zur Folge, dass die Schleife mindestens einmal ausgeführt wird, egal ob die Bedingung erfüllt ist oder nicht. Man spricht von einer nicht-abweisenden Schleife.

Möglichkeit 3: DO-LOOP-UNTIL

DO
   Anweisung 1
   Anweisung 2
   Anweisung 3
   ...
LOOP UNTIL Bedingung

Diese Schleife wird solange ausgeführt, solange die Bedingung NICHT erfüllt ist. Oder anders ausgedrückt: Die Schleife wird solange ausgeführt, BIS die Bedingung erfüllt ist!

Möglichkeit 4: DO-WHILE-LOOP

DO WHILE Bedingung
   Anweisung 1
   Anweisung 2
   Anweisung 3
   ...
LOOP

Diese Schleife funktioniert nach dem gleichen Prinzip wie die WHILE-WEND-Schleife. Die Schleife wird solange ausgeführt, solange die Bedingung erfüllt ist.

Möglichkeit 5: DO-UNTIL-LOOP

DO UNTIL Bedingung
   Anweisung 1
   Anweisung 2
   Anweisung 3
   ...
LOOP

Ich habe bereits die DO-LOOP-UNTIL-Schleife behandelt. Diese führt einen Anweisungsblock solange aus, bis eine Bedingung erfüllt ist. Allerdings wird der Anweisungsblock bei der DO-LOOP-UNTIL-Schleife mindestens einmal ausgeführt, da die Bedingung erst am Ende geprüft wird (nicht-abweisend).

Bei der DO-UNTIL-LOOP-Schleife, mit der wir es hier zu tun haben, steht die Bedingung jedoch am Anfang. Das hat zur Folge, dass der Anweisungsblock nicht ausgeführt wird, wenn die Bedingung gleich zu Beginn - dem Eintritt in die Schleife - erfüllt ist. Es handelt sich hierbei um eine abweisende Schleife.

7.4. Sprunganweisung (GOTO)

Ich habe mir überlegt, ob ich nicht einfach die Erklärung des GOTO-Befehls auslassen soll. Der GOTO-Befehl erlaubt es, Sprünge innerhalb des Quellcodes durchzuführen. Das hat zur Folge, dass der Programmablauf schwer nachvollziehbar wird. Erschwert wird außerdem die Fehlersuche. Trotz allem wird der GOTO-Befehl von vielen - schlechten - BASIC-Programmierern sehr häufig eingesetzt, obwohl es durchaus auch anders ginge.. (zumindest in BASIC-Dialekten späterer Generationen; wie lernen Sie im nächsten Kapitel, wenn wir uns mit Funktionen und SUBs beschäftigen)

Damit Sprünge durchgeführt werden können, muss an der Stelle im Quellcode, zu der gesprungen werden soll, eine Sprungmarke gesetzt werden. Eine Sprungmarke steht immer alleine in einer Zeile. Jede Sprungmarke benötigt einen Bezeichner (Namen) und wird mit einem Doppelpunkt abgeschlossen. Das sieht dann in etwa so aus:

Sprungmarke:

Wurde die Sprungmarke gesetzt, kann nun mit GOTO in diese Zeile gesprungen werden:

GOTO Sprungmarke

Ein kleines Beispiel habe ich auch hier parat:

CLS
anfang:
PRINT "Dies ist die erste Programmierzeile."
GOTO ende	' die naechste Zeile ueberspringen
PRINT "Diesen Text werden Sie nie angezeigt bekommen..."
ende:
PRINT "Dies ist die (vor)letzte Programmierzeile."
GOTO anfang:

Testen Sie Ihre Programmierkenntnisse: Versuchen Sie herauszufinden, wie der Programmablauf aussieht, ohne das Beispiel ausprobiert zu haben. Wenn Sie sich eine Vorstellung davon gemacht haben, probieren Sie das Beispiel aus und überprüfen Sie, ob Ihre Vorstellungen mit der Praxis übereinstimmen.

Erläuterung: In der zweiten Programmierzeile steht eine Sprungmarke, die den Bezeichner anfang trägt. Dass sich diese Sprungmarke an Zeile 2 befindet, hat vorerst noch keine Auswirkungen auf die Programmausführung. Kurz gesagt: Eine Sprungmarke stört nicht, bei der normalen Quellcodeausführung wird sie einfach ignoriert. Nur, wenn mittels GOTO ein Sprung durchgeführt wird, ist sie notwendig. Die nächste Zeile (PRINT ...) zeigt einen Text auf dem Bildschirm an. In der darauffolgenden Zeile erfolgt ein Sprung zur Sprungmarke ende. Danach wird wieder ein Text angezeigt. Zum Schluss erfolgt ein Sprung in die zweite Programmierzeile, und das Ganze beginnt wieder von vorne. Eine Endlosschleife ist also das Resultat des Beispiels. Übrigens: Mit STRG+UNTBR (in QBasic) können sie die Programmausführung abbrechen. Probieren Sie sonst STRG+C, STRG+D oder STRG+Z. Unter Linux hat bei DOSBox STRG+SHIFT+Rollen funktioniert. Notfalls hilft der Taskmanager.

7.5. Operatoren

Bereits mehrfach habe ich von Operatoren gesprochen, doch genau erklärt habe ich sie noch nicht. Dem möchte ich nun nachkommen. Eine mathematische Berechnung, wie etwa –23 * 42, besteht aus Operanden und Operatoren. Das Zeichen * ist hierbei der Operator, -23 und 42 sind die Operanden. Das sind die Daten, mit denen der Operator "arbeitet".

Es folgt eine Übersicht inklusive kurzer Erklärung der Operatoren in BASIC:

Operator Bedeutung Erläuterung Beispiel(e)
= Ist-Gleich Zuweisung oder Vergleich auf Gleichheit a = 2
a = b
< Kleiner Vergleich auf best. Wert - ob kleiner a < b
> Größer Vergleich auf best. Wert - ob größer a > b
<= Kleiner-Gleich Wahr (erfüllt), wenn linker Operand kleiner oder gleich dem rechten ist a <= b
>= Größer-Gleich Wahr (erfüllt), wenn linker Operand größer oder gleich dem rechten ist a >= b
- Minus Subtrahieren a = b - 2
+ Plus Addieren a = b + 2
* Mal Multiplizieren a = b * 2
/ Dividieren Dividieren a = b / 2

Ein kleines Beispiel hierzu:

CLS
a = 2
PRINT "Der Wert der Variable a betraegt: "; a
INPUT "Welcher Wert soll a zugewiesen werden. (3 hat Ausgabe zur Folge) ", a
IF a = 3 THEN PRINT "a hat den Wert: "; a
a = a * 5
PRINT "Der Wert von a wurde verfuenffacht und betraegt nun: "; a
Vorheriges Kapitel Nächstes Kapitel