Kleines Pascal Programm < Pascal < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 22:41 Mo 07.08.2006 | Autor: | Harries |
Aufgabe | Gegeben ist folgendes Programm
Program Irgendwas;
Var a,b:integer;
Procedure Berechnen (var y: integer; z: integer);
begin
dec(y);
inc (z);
writeln (y:10,z:10);
end;
begin
a:=10;
b:=20;
writeln (a:5,b:5);
Berechne (a,b);
writeln (a:5,b:5);
Berechne (b,a);
writeln (a:5,b:5);
end; |
Dieses Programm wurde uns vom Dozenten gestellt und wir sollen nun sagen, welche Werte durch die writeln-Anweisungen aus gegeben werden mit Begründung.
Das Ergebnis ist wie folgt:
10 20
9 21
9 20
19 10
9 19
Also ich versteh das ganze bis dahin, das a um eins verkleinert wird und b um eins erhöht und somit in die nächste Zeite geschrieben wird aber warum steht dann in der darauffolgenden 9 und 20 usw. kann mir da vielleicht jemand helfen??
Vielen Dank im vorraus
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
Harries
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 00:34 Di 08.08.2006 | Autor: | ardik |
Hallo Harries,
hier soll ein wesentlicher Unterschied bei der Variablen-Übergabe an die Prozedur demonstriert werden: Mit oder ohne "var".
Fehlt das "var" in der Parameterdeklaration im Procedurkopf, so wird lediglich der aktuelle Wert an die Prozedur übergeben, die dann damit arbeiten kann, aber die ursprüngliche Variable (hier: a) bleibt unbeeinflusst.
Steht dort aber ein "var", so wird die Variable selbst übergeben, das y in der Prozedur ist dann letztlich identisch mit dem übergebenen a, d.h. bei Veränderungen innerhalb der Prozedur wird das a mitverändert.
Ein etwas knapperes Beispiel:
1: | Program Irgendwas;
| 2: | Var a:integer;
| 3: |
| 4: | Procedure Ohne (y: integer);
| 5: | begin
| 6: | y:= y+5;
| 7: | end;
| 8: |
| 9: | Procedure Mit (var y: integer);
| 10: | begin
| 11: | y:= y+5;
| 12: | end;
| 13: |
| 14: | begin
| 15: | a:=10;
| 16: | writeln (a); => 10
| 17: | Ohne (a);
| 18: | writeln (a); => immer noch 10
| 19: | Mit (a);
| 20: | writeln (a); => jetzt aber 15
| 21: | end;
|
Entsprechend bleibt in Deinem Beispiel die jeweils als zweites übergebene Variable (beachte, dass beim zweiten Aufruf b und a vertauscht sind) unverändert, denn vor dem z fehlt ja das "var".
Alles klar?
Schöne Grüße,
ardik
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 09:09 Di 08.08.2006 | Autor: | Harries |
Vielen dank! Jetzt hab ich es auch verstanden!!
Gruß Harries
|
|
|
|