Unterprogramme
Prozeduren und Funktionen
PROCEDURE mit Variablenparametern
Beispiel
Beim Addieren von zwei Brüchen muss im ersten Schritt der Hauptnenner gebildet werden. Der Hauptnenner ist das kleinste gemeinsame Vielfache der beiden Nenner.
Ein Programm soll das kleinste gemeinsame Vielfache (kgV) von zwei Zahlen ermitteln.
Beispiel: Es ist das kgV von 15 und 12 zu ermitteln.
1. Methode Das Vielfache bilden, das erste gemeinsame Vielfache ist das kgV.
V15 = {15; 30; 45; 60; 75 ;...}
V12 = {12; 24;36;48;60;72;...} Ergebnis: kgV = 60
2. Methode über das ggT
15 = 3*5
12 = 3* 2 *2
ggT = 3; 15 / ggT = 5 --> Merke_1; 42 / ggT = 4 --> Merke_2;
kgV = ggT * Merke_1 * Merke_2 = 60
Algorithmus | Eingabe zweier natürlicher Zahlen |
ggT {siehe ggT} | |
1. Zahl dividieren mit ggT -->Merke_1 | |
2. Zahl dividieren mit ggT -->Merke_2 | |
kgV = ggT * Merke_1 * Merke_2 | |
Ausgabe kgV der beiden Zahlen |
program kgV_1; {Ermiitelt das kleinste gemeinsame Vielfache} {von zwei natuelrichen Zahlen} {mithilfe des ggT} {***Procedure mit Variablenparametern***}
uses crt;
var zahl1, zahl2, ggt, kgv :integer; {globale Variablen}
procedure bildschirm; var i,j : integer; begin clrscr; for i:=1 to 80 do begin for j:=1 to 24 do gotoxy(j,i);textbackground(white); write(''); end; textcolor(black);gotoxy(1,1); end;
procedure g_g_T(x, y : integer; var ggt : integer); var Rest : integer;
begin repeat Rest := x mod y; x := y; y := Rest; until Rest = 0; ggT := x; end;{Ende ggt}
procedure k_g_V (x, y, ggt_h : integer; var kgv : integer); var merke_1, merke_2 : integer;
begin merke_1 := x div ggt_h; merke_2 := y div ggt_h; kgv := ggt_h * merke_1 * merke_2; end;{Ende kgV}
{+++++++++++++++HAUPTPROGRAMM++++++++++++++++++} begin bildschirm; gotoxy(20,3);writeln(' Bestimmen des '); gotoxy(20,5);writeln(' kleinsten gemeinsamen Vielfachen'); gotoxy(20,7);writeln(' zweier natrlicher Zahlen'); gotoxy(14,10);write('1. Zahl : ');readln(zahl1); gotoxy(14,12);write('2. Zahl : ');readln(zahl2);
g_g_t(zahl1,zahl2,ggt);
k_g_v(zahl1,zahl2,ggt,kgv);
gotoxy(14,16);textcolor(green);write('Das kleinste gemeinsame Vielfache von'); gotoxy(14,18);write(zahl1,' und ',zahl2, ' betraegt ',kgv); readln; end.
Prozeduren können beliebig viele Eingangsparameter und beliebig viele Ausgangsparameter haben, über welche die Ergebnisse übermittelt werden.
Die Deklaration einer Prozedur geschieht im Deklarationsteil des Programms (nach der Variablenvereinbarung), diese Deklaration nennt man auch Block
Im Deklarationsteil einer Prozedur können Konstanten, Typen, Variablen und wieder Blöcke (Prozeduren, Funktionen) definiert werden
Der Deklarationsteil ist die Schnittstelle zur übergeordneten Programmeinheit festgelegt; dazu dienen die formalen Parameter,nsie werden in den Anweisungen der Prozedur verwendet und fungieren als Platzhalter für die beim Aufruf einzusetzender aktueller Parameter.
Die formalen Paramter werden durch einen Bezeichner und einen Typ gekennzeichnet, wobei der Typ sein kann:
- einfacher Typ (z.B. integer, real, char, boolean)
- Typname (ist mit Typ-Deklaration einzuführen)
Die formalen Parameter und die im Deklarationsteil der Prozedur vereinbarten lokalen Variablen gelten nur in der Prozedur.
Aufruf einer Prozedur erfolgt mit seinem Namen und der Angabe aktueller Parameter, die mit den formalen Parametern korrespondieren.
Bei Variablenparameter werden von der aufgerufenen Prozedur keine neuen Speicherplätze belegt,
es wird auf die übergebenen Variablen der aufrufenden Prozedur direkt zugegriffen.
Deshalb müssen die aktuellen Parameter stets Variablen sein.
Anzahl, Reihenfolge und Typname der aktuellen und formalen Parameter müssen übereinstimmen
(nicht aber die Namen der Variablen)