Buchempfehlung
Windows System Programming
Windows System Programming
Das Kompendium liefert viele interessante Informationen zur Windows-Programmierung auf Englisch. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Tutorial

Anfängerkurs Teil 3 - Kontrollstrukturen: Bedingungen, Schleifen usw.

von RedakteurytwinkySeite 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...

 

Gehe zu Seite Gehe zu Seite  1  2  3  4  
Zusätzliche Informationen und Funktionen
  • Das Tutorial wurde am 09.06.2007 von Redakteurytwinky angelegt.
  • Die aktuellste Version wurde am 20.10.2008 von Redakteurytwinky gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen