Runde Klammern

FreeBASIC-Referenz » Operatoren in FreeBASIC » Runde Klammern

Die runden Klammern werden in FreeBASIC für zwei Sprachkonstrukte verwendet:

Reihenfolge der Abarbeitung der Glieder einer math. Gleichung
Die runden Klammern werden in FreeBASIC wie in jeder mathematischen Gleichung eingesetzt und beeinflussen die Abarbeitung eines Ausdrucks. Dabei gilt, dass zuerst der Wert der Klammer berechnet wird, und anschließend alle anderen Operationen in der Reihenfolge ihrer Priorität abgehandelt werden.

Dabei gilt die folgende Hierarchie der Operatoren:

Dementsprechend kommen folgende Werte zustande:

PRINT (3 + 4) * 5
PRINT -(1 + 1) ^ 2
PRINT (3 * (5 + 1)) + (-2 - (1 * 1))

Ausgabe:

35
-4
 15

Indizierung von Arrays
Wie unter DIM beschrieben, kann man sich ein Array als eine Liste bzw. Tabelle vorstellen, in der Werte gespeichert werden. Der Zugriff auf diese Werte erfolgt mittels Indizes, die in Klammern hinter dem Bezeichner des Arrays genannt werden.

Beispiel 1: Dimensionierung (Erstellung) eines Arrays:

DIM AS INTEGER myArray(1 TO 10)
'     ^           ^       ^
'     |           |       +-- Anzahl der Elemente
'     |           +---------- Bezeichner des Arrays
'     +---------------------- Datentyp des Arrays

Diese Zeile legt das Verhalten des Arrays im Wesentlichen fest.
Wie bereits erwähnt, wird auf Elemente des Arrays zugegriffen, indem zuerst der Bezeichner genannt wird, gefolgt vom Index des Elements in Klammern. Dabei gelten dieselben Regeln für den Lese- wie für den Schreibzugriff:

Beispiel 2: Zugriff auf Elemente eines Arrays:

DIM AS INTEGER myArray(10)

myArray(5) = 17

PRINT myArray(5)
SLEEP

Wie bereits erwähnt ist es nicht nur möglich, Listen zu erstellen; auch mehrdimensionale Tabellen können dargestellt werden. Dabei werden sowohl bei der Dimensionierung als auch beim Zugriff die Indizes durch Kommata getrennt.

Beispiel 3: Mehrdimensionale Arrays:

RANDOMIZE TIMER

SCREENRES 320, 200

DIM AS INTEGER myTable(32, 20)
DIM AS INTEGER x, y

FOR x = 0 TO 32
   FOR y = 0 TO 20
      myTable(x, y) = RND * 255
   NEXT
NEXT

FOR x = 0 TO 32
   FOR y = 0 TO 20
      LINE (x * 10, y * 10) - (x * 10 + 10, _
         y * 10 + 10), myTable(x, y), BF
   NEXT
NEXT

SLEEP

Es ist möglich, ganze Arrays an eine Prozedur zu übergeben. Dazu wird als Parameter der Bezeichner des Arrays übergeben, gefolgt von den runden Klammern, jedoch ohne Angabe von Indizes, aber immer mit Typ.

Beispiel 4: Übergabe eines Arrays an eine Prozedur:

RANDOMIZE TIMER

DECLARE SUB ShowTable( Table() AS INTEGER )

DIM AS INTEGER myTable(4, 4)
DIM AS INTEGER x, y

FOR x = 0 TO 4
   FOR y = 0 TO 4
      myTable(x, y) = RND * 9
   NEXT
NEXT

ShowTable myTable()
SLEEP

SUB ShowTable( Table() AS INTEGER )
   DIM AS INTEGER x, y, MaxX, MaxY
   MaxX = UBOUND(Table, 1)
   MaxY = UBOUND(Table, 2)

   FOR    x = 0 TO MaxX
      FOR y = 0 TO MaxY
         LOCATE y * 2 + 1, x * 3 + 1
         PRINT Table(x, y); "|"
         LOCATE y * 2 + 2, x * 3 + 1
         PRINT "--+"
      NEXT
   NEXT
END SUB