PROGRAM demo_procedurparameter;   { Programmkopf }
USES crt;               { Einbinden der Unit crt }

VAR
    breit,hoch,i:integer;  { Deklaration der globalen Variablen }
    ergebnis:integer;

PROCEDURE berechne;    { Proceduraufruf ohne Parameterbergabe }
var
    a,b,summe:integer;  { Deklaration der lokalen Variablen }
BEGIN                   { Beginn des Zuweisungs und Anweisungsteils }
    a:= 30;             { Zuweisung (Definieren) a bekommt den wert 30 }
    b:= 20;
    summe:= a + b;      { Zuweisung, berechne a + b und weise summe den }
                        { wert zu }
    WRITELN('Aufruf 1: Summe = ', summe); { Anweisung (Writeln),       }
                                           { schreibe String  und summe }
                                           { auf den Bildschirm mit }
                                           { abschliesendem Zeilenvorschub }
END;      { Procedurende }

PROCEDURE berechne_ohne(a,b,summe:INTEGER);
BEGIN
    a:= a * 3;
    b:= b * 2;
    summe:= a * b;
END;

PROCEDURE berechne_mit(VAR a,b,summe:INTEGER);
BEGIN
    summe:= a * b;
END;

PROCEDURE ausgeben;
BEGIN
WRITELN('Aufruf: ',i);
WRITELN('Breit = ',breit);
WRITELN('Hoch  = ',hoch);
WRITELN('Ergebnis (Breit * Hoch) = ', ergebnis);
END;


BEGIN                    { HAUPTPROGRAMM }
CLRSCR;                  { Bildschirm lschen }
breit:=5;                { Zuweisungen }
hoch:=50;
ergebnis:=0;
i:=2;
berechne;                          { Proceduraufruf ohne Parameterbergabe }
WRITELN;                            { Zeilenvorschub }
berechne_ohne(breit,hoch,ergebnis); { Proceduraufruf mit Wertparameter }
ausgeben;                           { Werte ausgeben }
berechne_mit(breit,hoch,ergebnis);  { Proceduraufruf mit Variablenbergabe }
WRITELN;                            { Zeilenvorschub }
inc(i);                             { Zhler um 1 erhhen (i:= i +1) }
ausgeben;                           { Werte ausgeben Vergleichen Sie die }
                                    { einzelnen Ausgaben }
WRITELN;
WRITE('BITTE RETURNTASTE DRCKEN: ');
READLN;
CLRSCR;
END.                                { Programmende }

