Turbo Pascal: Was stimmt hier nicht

looona

Grünschnabel
Dieses Programm verstehe ich nicht ganz Warum errechnet es nicht 2x das selbe Ergebnis


PROGRAM Vorsicht_bei_Referenzparametern;

USES Crt;

VAR a, b, p: Integer;

{------------------------ Prozedur ------------------------}

PROCEDURE Produkt(VAR x, y, z: Integer);

{ fortgesetzte Addition }

BEGIN
z := 0;
WHILE y > 0 DO
BEGIN z := z + x; y := y - 1 END
END;

{--------------------- Hauptprogramm ----------------------}

BEGIN
ClrScr;
Writeln('Vorsicht bei Referenzparametern!');
Writeln('--------------------------------');
Writeln;

a := 2; b := 3;

Produkt(a, b, p); Writeln('2 * 3 = ', p);

Produkt(a, b, p); Writeln('2 * 3 = ', p);

Writeln;
Writeln('Das habe ich anders gelernt...');
Readln
END.
 
Hallo,

wie das Programm schon sagt: Vorsicht bei Referenzparametern.

Wenn man Parameter einer Funktion oder Prozedur als Referenz übergibt (Schlüsselwort var in der Funktionsdeklaration) werden keine Kopien, sondern die original Variablen übergeben. Werden diese in der Funktion/Prozedur dann verändert, verändern sich also auch die Werte der Variaben im Hauptprogramm.

In deinem Fall wird die Variable y in der Prozedur (bzw. b im Hauptprogramm) verändert. Nach dem ersten Durchlauf ist b also 0, weil y in der Funktion heruntergezählt wird. Das Ergebnis des zweiten Durchlaufs ist deshalb 0.

Verhindern könnte man dieses, wenn nur der das Ergebnis als Referenz übergeben wird:

Code:
procedure Produkt(x, y: Integer; var z: Integer)

oder lieber gleich eine Funktion einsetzen.


Grüße Thomas
 
Hi Thomas,

danke für deine Hilfe. Ich glaube jetzt habe ich's auch verstanden. Ist auf jeden Fall klarer als vorher.

Danke
 
Zurück