ich hoffe Ihr könnt mir weiterhelfen.
Ich habe ein Problem mit verschachtelten IF-Anweisungen. Der Pascal-Code selbst müsste inhaltlich richtig sein, jedoch habe ich Probme mit den Begin und End Anweisungen...
Hier ein Auszug aus meinem Programm:
...
if (eingabe >= 0.5) then
Begin
eingabe:= eingabe -0.5;
geld50:= 1
end else
Begin
if eingabe >= 0.4 then
eingabe:= eingabe -0.4;
geld20:= 2
end
else
if eingabe >= 0.2 then
Begin
geld20:= 1;
eingabe:= eingabe -0.2
end
else ...
Wie lautet der Syntax, wenn ich mehrere It then else Anweisungen benutzen möchte und ich mit Begin und End arbeiten muss, da ich nach dem then mehr als eine Anweisung ausführen möchte?
Ich würde mich sehr freuen, wenn mir jemand weiterhelfen kann.
Comments
chris*
Contributions on this page: 3
View profileWas für ein Problem genau? Die Syntax von if-then-else ist ganz einfach
[code]
if <bedingung> then <anweisung> else <anweisung>
[/code]
Ein begin-else-Block ist jetzt einfach eine zusammengesetzte Anweisung, die überall dort stehen darf, wo eine Anweisung erwartet wird. Mit begin-end lautet die Syntax also
[code]
if <bedingung> then
begin
<anweisung>; <anweisung>; ... ; <anweisung>
end
else
begin
<anweisung>; <anweisung>; ... ; <anweisung>
end
[/code]
Natürlich können die Anweisungen aber auch selbst wieder if-then-else sein. Das einzige, worauf man dabei achten muss, ist, dass es dabei theoretisch eine Mehrdeutigkeit gibt:
[code]
if <bedingung> then
if <bedingung> then
<anweisung>
else
<anweisung>
[/code]
Gehört das else zum ersten oder zum zweiten if? Beides ist theoretisch möglich, diese Mehrdeutigkeit wird praktisch durch die Festlegung aufgelöst, dass ein else immer zum direkt vorangegangenen if gehört (also schon so,wie ich es eingerückt habe).
Jens1
Contributions on this page: 3
View profilechris*,
vielen Dank für die schnelle und hilfreiche Antwort.
Ich habe meinen Code noch einmal geprüft, jedoch erhalte ich immer noch eine Fehlermeldung:
unbenannt.pas(33,3) Error: Can't create object file: unbenannt.exe
unbenannt.pas(33,3) Fatal: Can't create executable unbenannt.exe
Hier der dazugehörige Code:
[CODE]program unbenannt;
var i:boolean;
a: integer;
BEGIN {1}
i:= true;
if (i = true) then
begin {2}
a :=2;
a :=2
end {2}
else
begin {3}
if (i = true) then
Begin {4}
a :=2;
a :=2
end {4}
else
Begin {5}
if (i = true) then
Begin {6}
a :=2;
a :=2
end {6}
else
a :=2;
write (a)
end {5}
end{3}
end. {1}
[/CODE]
Hier das ganze noch einmal etwas abstrakter:
[CODE]BEGIN {1}
if <bedingung> then
begin {2}
<anweisung>;
<anweisung>
end {2}
else
begin {3}
if <bedingung> then
Begin {4}
<anweisung>;
<anweisung>
end {4}
else
Begin {5}
if <bedingung> then
Begin {6}
<anweisung>;
<anweisung>
end {6}
else
<anweisung>;
<anweisung>
end {5}
end{3}
end. {1}[/CODE]
Wo liegt hier mein Denkfehler?
chris*
Contributions on this page: 3
View profileIst das alles? Das ist ja sehr nichtssagend. Wenn da nicht noch was vorher kommt, klingt es fast so, als hättest du in dem Verzeichnis, wo die exe erstellt wird, keine Schreibrechte. Funktioniert ein einfaches Hello World Programm?
Der Code ist zwar teils ein bisschen komisch eingerückt, aber anscheinend syntaktisch korrekt.
Jens1
Contributions on this page: 3
View profilees lag an den Schreibrechten, ich hatte geany nicht als admin gestartet.
Danach hat er mir keinerlei fehler mehr gebracht.
Allerdings habe ich jetzt den "echten" Code eingefügt und bekomme nun die Meldung:
kleingeld2.pas(49,4) Fatal: Syntax error, ";" expected but "." found
Es handelt sich hier um die letzte Zeile im Programm:
[CODE]Program Kleingeld (input,output); { Kleingeldrechner liefert die minimale Münzanzahl für den eingegebenen Betrag}
Var
eingabe,
geld50,
geld20,
geld10,
geld5,
geld2,
geld1: real;
Begin
read(eingabe); {Eingabe des Betrages welcher gewechselt werden soll.}
geld50:=0;
geld20:=0;
geld10:=0;
geld5:=0;
geld2:=0;
geld1:=0;
BEGIN {1}
if (eingabe >= 0.5) then
Begin {2}
eingabe:= eingabe -0.5;
geld50:= 1
End {2}
else
Begin {3}
if (eingabe >= 0.4) then
Begin {4}
geld20:= 1;
eingabe:= eingabe -0.4
End {4}
else
Begin {5}
if (eingabe >= 0.2) then
Begin {6}
geld20:= 1;
eingabe:= eingabe -0.2
End {6}
else
End. {1} { Auf diese Zeile bezieht sich die Fehlermeldung}
[/CODE]
chris*
Contributions on this page: 3
View profileDu hast da oben ein begin, zu dem es kein end gibt. Später kommt nochmal ein mit {1} gekennzeichnetes begin, dessen Sinn ich jetzt nicht so richtig einordnen kann. Vielleicht sollte das weg.
Noch ein paar Tipps:
Rücke entsprechend der Blockstruktur ein.
Lass die Klammern um die Bedingung bei if-then weg.