Prozeduren und Funktionen ------------------------- Prozeduren und Funktionen sind Unterprogramme, die sich darin unterscheiden, dass Funktionen einen Wert zurueckgeben. In beiden koennen eigene Konstanten und Variablen definiert werden, die dann nur innerhalb der Prozedur bzw. Funktion gelten. Prozeduren und Funktionen koennen wiederum eigene Unterprozeduren bzw. -funktionen besitzen. Ausserdem koennen Prozeduren und Funktionen sich selbst aufrufen (Rekursion). Als Parameter akzeptiert G-Pascal nur Integerwerte. Es entfaellt die sonst in Pascal uebliche Typenangabe bei den Parametern. Das folgende Programm errechnet fuer einen gewuenschten Bereich an Ganzzahlen (hier 1 bis 10) die Quardratwerte dieser Zahlen: procedure berechnequadrat(von, bis); var zahl: integer; function quadrat(x); begin quadrat := x * x; end; begin for zahl := von to bis do writeln(zahl, " * ", zahl, " = ", quadrat(zahl)); end; begin berechnequadrat(1, 10); end. Array als Parameter Wenn man ein ARRAY als Parameter uebergeben moechte, muss man einen Umweg gehen, da G-Pascal nur Integerwerte als Parameter akzeptiert. Statt des ARRAYs selbst wird nur die Adresse des ersten Elements mit dem Schluesselwort ADDRESS uebergeben und die Prozedure greift ueber das ARRAY MEMC direkt auf den Speicher zu. De facto wird also ein Zeiger auf das ARRAY uebergeben. Eine Besonderheit von G-Pascal ist, dass ARRAYs in umgekehrte Reihenfolge im Speicher abgelegt werden, also das letzte Element zuerst und das erste Element am Schluss. Zur Veranschaulichung hier ein Beispiel, in dem das Alphabet in einem ARRAY als Zeichenkette abgelegt und mittels der Prozedure strout ausgegeben wird. Im ersten Element des Arrays (Index 0) ist die Laenge der Zeichenkette gespeichert. const max = 26; var s: array [max] of char ; i: integer ; procedure strout(adr); var i: integer ; begin if memc [adr] > 0 then for i := 1 to memc [adr] do write (chr (memc [adr - i])); end ; begin for i:= 1 to max do s[i] := i + 64; s[0] := max; strout(address (s[0])); writeln ; end . In anderen Pascal-Versionen, die den Type-Ausdruck unterstuetzen, wuerde der Prozedure das Array direkt als Paremeter uebergeben werden: const max = 26; type str = array[0..max] of char; var s: str ; i: integer ; procedure strout(s: str); var i: integer ; begin if s[0] > 0 then for i := 1 to s[0] do write (s[i]); end ; begin for i:= 1 to max do s[i] := i + 64; s[0] := max; strout(s); writeln ; end .