Gambas: Kontrollstrukturen

Aus Wikibooks
Wechseln zu: Navigation, Suche


Zurück zu Gambas


Verzweigungen[Bearbeiten]

if - then[Bearbeiten]

Die einfachste Verzweigung eines Programmes erfolgt mit dem if - then Befehl

  • If heißt auf deutsch FALLS
  • then heißt auf deutsch DANN

Der If Then Befehl macht es möglich Programmverzweigungen zu programmieren, wenn eine bestimmte Bedingung erfüllt ist. Auf deutsch heißt der Befehl Falls die Bedingung wahr ist, dann mache folgendes.

Am besten versteht man dies an Hand eines Beispiels: Es gibt den Wochentag des heutigen Tages aus. Das Programm funktioniert im Terminalmdous:

STATIC PUBLIC SUB Main()
PRINT WeekDay(Now)
PRINT "Heute ist ";
IF WeekDay(Now) = 1 THEN PRINT "Montag" 
IF WeekDay(Now) = 2 THEN PRINT "Dienstag" 
IF WeekDay(Now) = 3 THEN PRINT "Mittwoch" 
IF WeekDay(Now) = 4 THEN PRINT "Donnerstag" 
IF WeekDay(Now) = 5 THEN PRINT "Freitag" 
IF WeekDay(Now) = 6 THEN PRINT "Samstag" 
IF WeekDay(Now) = 7 THEN PRINT "Sonntag" 
END

Das Programm nutzt den Befehl Weekday und den Befehl Now von Gambas

Zwischen If und Then kann man auch mehrere Bedingungen auflisten und auch bei den Anweisungen nach dem Then Befehl kann mehrere Anweisungen aufreihen, die man dann mit Endif abschließt.

If
 Bedingung1
 Bedingung2
Then
 Anweisung1
 Anweisung2
Endif

if then else[Bearbeiten]

Der If then Else erlaubt die Programmierung einer Alternative zur If Bedingung. Das wird am besten an einem Beispiel klar

dim name as string 
if name = männlich then 
 Print "An Herrn " & name
else 
 Print "An Frau " & name 
endif

Hier muß allerdings noch die Funktion männlich definiert werden.

Ein weiteres Beispiel: Sie brauchen eine leere Form , um das Programm in Gang zu bringen. Es erzeugt 100 Zufallszahlen zwischen 1 und 99 und überprüft ihre Teilbarkeit durch 2.

PUBLIC SUB Form_Open()
a AS Integer 
x AS Integer 
Randomize()
 FOR x = 1 TO 100 
 a = Int(Rnd(1,100))
 'Zufallszahl zwischen 1 und 99 erzeugen
  IF a MOD 2 = 0 THEN 
  'teilbar durch 2 ??
   PRINT a & " ist teilbar durch 2" 
  ELSE 
   PRINT a & " ist nicht teilbar durch 2"
  ENDIF
 NEXT
END

GOTO Sprungadresse[Bearbeiten]

Auch das alte GOTO gibt es noch in Gambas. Man kann es allerdings nur in einem Unterprogramm verwenden. Wie das geht zeigt folgendes Beispiel:

Man braucht eine Textarea und einen Befehlsbutton um das Programm in Gang zu bringen.

PUBLIC SUB Form_Open()
 ME.Width = 400
 ME.Height = 300
 ME.Text = "GOTO Befehl mit Labels als Sprungadresse"
 Button1.Text = "Zufallszahl einordnen"
 Button1.Width = 200
 Textarea1.Text = ""
 Textarea1.Width = 300
 Textarea1.Height = 160
END
PUBLIC SUB Button1_Click()
 z AS Integer 
 Randomize()
 z = Int(Rnd(1,100))
 IF z < 10 THEN GOTO zehn
 IF z < 20 THEN GOTO z2
 IF z < 50 THEN GOTO z5
 'PRINT " z > 49 , da z = ";z
 textarea1.Text = textarea1.Text & " z > 49 , da z = " & z & Chr(10)
 RETURN

zehn:
   textarea1.Text = textarea1.Text & " z < 10 , da z = " & z & Chr(10)
   RETURN
   
z2:
   textarea1.Text = textarea1.Text & " z < 20 , da z = " & z & Chr(10)
   RETURN
      
z5:
    textarea1.Text = textarea1.Text & " z < 50 , da z = " & z & Chr(10) 
    RETURN
END

Select Case[Bearbeiten]

Der Select Case Befehl erlaubt die Auswahl aus mehreren Alternativen.

Wie er funktioniert zeigt folgendes Beispiel. Es überprüft die Randomfunktion eines Würfels 1000 mal und gibt die Häufigkeit, wie oft eine Zahl des Würfels erhalten wurde im Direktfenster aus. Sie brauchen nur eine leere Form um das Programm in gang zu bringen.

PUBLIC SUB Form_Open()
x AS Integer
w AS Integer
a AS Integer 
b AS Integer 
c AS Integer 
d AS Integer 
e AS Integer 
f AS Integer 
Randomize()
FOR x = 1 TO 1000
  w = Int(Rnd(6) + 1)
  SELECT CASE TRUE
   CASE w = 1 
    a = a + 1 
   CASE w = 2 
    b = b + 1 
   CASE w = 3
    c = c + 1
   CASE w = 4 
    d = d + 1
   CASE w = 5
    e = e + 1 
   CASE w = 6
    f = f + 1 
  END SELECT
NEXT
PRINT a,b,c,d,e,f
END

Das Programm kann man etwas abkürzen:

PUBLIC SUB Form_Open()
x AS Integer
w AS Integer
a AS Integer 
b AS Integer 
c AS Integer 
d AS Integer 
e AS Integer 
f AS Integer 
FOR x = 1 TO 1000
   w = Int(Rnd(6) + 1)
 SELECT CASE w
     CASE 1 
       a = a + 1 
     CASE 2 
       b = b + 1 
     CASE 3
       c = c + 1
     CASE 4 
       d = d + 1
     CASE 5
       e = e + 1 
     CASE 6
       f = f + 1 
   END SELECT
 NEXT
 PRINT a, b, c, d, e, f
END


Für eine genaue Syntaxbeschreibung siehe: