Tutorial
Anfängerkurs Teil 3 - Kontrollstrukturen: Bedingungen, Schleifen usw.
von ytwinky | Seite 1 von 4 |
Mit dem Wissen aus den bisherigen Teilen dieses Tutorials können wir bereits recht eindrucksvolle Programme schreiben, die allerdings noch alle ’nach Schema F’ laufen.
Was wir brauchen, ist die Fähigkeit, im Programm Entscheidungen zu treffen. Eigentlich geht das ja ganz einfach. Und zwar mit dem IF-Befehl. Die Syntax dieses Befehls ist eigentlich recht einfach:
if <bedingung> then <befehl> else <befehl>
Wenn die Bedingung nach IF zutrifft, dann wird der Befehl, der nach then steht ausgeführt. Ansonsten wird der Befehl nach else ausgeführt.
Selbstverständlich kann man auch mehrere Befehle in den then oder else Teil schreiben. Das geht dann folgendermaßen:
if <bedingung> then
<befehl1>
<befehl2>
…
else
<befehl1>
<befehl2>
…
end if
Wie man sieht, muss der IF...THEN-Block mit einem END IF abgeschlossen werden.
Dazu jetzt mal ein Beispiel
dim wahl as integer
'
cls
'
print "Was möchtest du tun?"
print 'die Möglichkeiten anzeigen
print "1) aus dem Fenster starren"
print "2) weiterhin auf die Auswahl starren"
print "3) das Tutorial fertig lesen"
print "4) mich entscheiden...."
print
print
input "Deine Entscheidung (1-4): ", wahl 'Entscheidung abfragen
'
if wahl = 1 then 'erste möglichkeit
print "Dann starre halt weiterhin aus dem Fenster..."
sleep
end if
if wahl = 2 then 'zweite möglichkeit
print "Dann starre halt weiterhin auf den Bildschirm..."
sleep
end if
if wahl = 3 then 'die dritte
print "gute Entscheidung!"
sleep
end if
if wahl = 4 then 'die vierte
print "bitte mach das...."
sleep
end if
if wahl < 1 or wahl > 4 then ' ansonsten
print "falsche Eingabe!"
sleep
end if
'
end
Ja, ich weiß, ich hätte das SLEEP auch weglassen und vor dem END hinschreiben können, ich will aber hier das mit den mehrzeiligen Befehlen demonstrieren.
Wenn man den Code so ansieht, dann fallen einem zwei Dinge auf:
1) Mann kann (wie beim letzten IF-Block ersichtlich) mit 'Booleschen Operatoren’ (UND, ODER, ...) einen Bereich einschränken.
2) Wenn man mehr als zwei Möglichkeiten bei einem Vergleich hat, dann wird das kompliziert, lange und unübersichtlich.
Wegen letzterem werden wir jetzt das gleiche Beispiel mit einem SELECT CASE-Block machen und eine Schleife zur Tastenabfrage verwenden!
dim wahl as string
'
cls
'
print "Was möchtest du tun?"
print 'die Möglichkeiten anzeigen
print "1) aus dem Fenster starren"
print "2) weiterhin auf die Auswahl starren"
print "3) das Tutorial fertig lesen"
print "4) mich entscheiden...."
print
print
print "Deine Entscheidung (1-4)" 'entscheidung abfragen
' die schleife zur abfrage
do
sleep 1 'Dem System kurz eine Pause (1ms) gönnen, das sorgt für eine geringere Prozessorauslastung
wahl = inkey 'wahl wird der Wert von inkey zugewiesen
'inkey ist eine Variable, in der der ASCII Wert der momentan gedrückten Taste steht
loop until wahl <> "" 'Abbruch der Schleife, wenn wahl nicht "" ist
'
select case wahl 'select case block
case chr(27)
end
case "1" 'erste möglichkeit
print "Dann starre halt weiterhin aus dem Fenster..."
case "2" 'zweite möglichkeit
print "Dann starre halt weiterhin auf den Bildschirm..."
case "3" 'die dritte
print "gute Entscheidung!"
case "4" 'die vierte
print "bitte mach das...."
case else ' und der else-Block
print "falsche Eingabe!"
end select
'
sleep
end
Es sind in etwa gleich viele Zeilen, aber das Programm ist schon viel übersichtlicher dynamischer:
1) Der SELECT CASE-Block ist übersichtlich und kann einfach erweitert werden
2) Wir verwenden eine Schleife zur Tastenabfrage und können das Programm mit Escape beenden.
3) usw….
Zur Syntax des SELECT CASE-Blockes brauche ich wohl nicht viel mehr erklären, oder? Da ein SELECT CASE <variable>. Hier ein CASE: mit beliebig vielen Befehlen danach, dort ein CASE ELSE mit ein paar Befehlen und am Ende noch ein END SELECT. Ist doch gar nicht so schwierig, oder? Ach ja, wenn man eine Zahlenvariable vergleicht, braucht man natürlich kein “<möglichkeit>“ beim CASE-Befehl.
Selbstverständlich werde ich die Schleifen nicht so durchkommen lassen, ohne eine Erklärung! Dieser Tutorialteil heißt nicht umsonst „Bedingungen, Schleifen“.
Im Beispiel, wird eine DO...LOOP-Schleife verendet. Die Syntax dieser Schleife ist denkbar einfach
do
<befehl1>
<befehl2>
.......
loop
Diese Schleife wird endlos durchlaufen, aber wir wollen doch irgendwann mal abbrechen! Das geht mit WHILE oder UNTIL.
do
<befehl1>
<befehl2>
.......
loop while <bedingung>
Hier wird die Schleife durchlaufen, solange die Bedingung erfüllt ist. Auf unser Beispiel, könnte man das so anwenden:
...
do
wahl = inkey 'wahl wird der Wert von inkey zugewiesen
loop while wahl = "" 'Schleife wird durchlaufen, solange wahl den Wert "" hat.
Die UNTIL Variante haben wir ja bereits kennen gelernt.
do
<befehl1>
<befehl2>
.......
loop until <abbruch-bedingung>
Hier wird die Schleife durchlaufen, bis die Abbruchbedingung erfüllt ist.
Die DO...LOOP Schleife ist die am häufigsten anzutreffende Schleife, es gibt da aber noch eine andere Schleife. Die FOR... NEXT Schleife.
for x = a to b
<befehl>
<befehl>
...
next x
Die FOR...NEXT Schleife ist eine Zählschleife. Der in der Schleife stehende Code wird ausgeführt und dabei wird die Variable mit dem Ausgangswert a bei jedem Durchlauf um 1 erhöht, bis sie den Wert b erreicht, dann wird die Schleife abgebrochen. Ich hoffe, ich konnte das jetzt verständlich ausdrücken. Als ich das erste Mal in einem Tutorial etwas über die FOR...NEXT Schleife las, habe ich es auf Anhieb nicht verstanden.
Aber jetzt erstmal ein beispiel:
dim x as integer
'
for x = 0 to 100 'Die Schleife wird durchlaufen, bis x den Wert 100 hat.
print "Schleifendurchlauf nummer:", x
next x
'
sleep
end
Also, was macht der Code? Es wird angezeigt, der wievielte Durchlauf der Schleife ausgeführt wird.
Das ist ja alles recht praktisch, aber was, wenn wir x um einen Bestimmen wert erhöhen möchten? Zum Beispiel, ich will die Zahlen von 0 bis 256 ausgeben und zwar in 4er Schritten. Da muss man dann einfach den Befehl STEP anwenden:
dim x as integer
screen 15 'Anzeige: 400x300 Pixel und 256 Farben
'
for x = 0 to 256 step 4 'Die Schleife wird in 4erschritten durchlaufen, bis x den Wert 256 hat.
color x
print "Na, welche Farbe ist das?"
next x
'
sleep
end
X wird hier immer um vier erhöht, bis x den Wert 256 hat. Und x wird dabei auch noch als Farbe für den Text verwendet.
Mit diesem Beispiel hoffe ich, sollte der Einsatz der FOR...NEXT Schleife mit beliebiger Schrittweite klar sein.
Aber das war erst Seite 1...
Zusätzliche Informationen und Funktionen | |||||||
---|---|---|---|---|---|---|---|
|