Supportnet / Forum / Anwendungen(Java,C++...)
pascal und das problem der rekursion bei funktionen
Frage
hallo,
ich arbeite mit einer zeigerstruktur und habe eine funktion geschrieben, die das vorkommen eines wertes in eben dieser struktur überprüft.
das ist der code
[code]
function kompExist(komp : integer; KompPointer : TKomppointer) : boolean;
var temp : integer;
begin
temp := KompPointer^.name;
if(komp = temp) then
begin
kompExist := true;
end
else
begin
if(KompPointer^.next = nil) then
begin
kompExist := false;
end
else
begin
## kompExist(komp, KompPointer^.next); //hier ist das problem
end;
end;
end;
[/code]
so, an der markierten stelle liegt das problem vor.
pascal erwartet an dieser stelle eine zuweisung, da es von einem rückgabewert ausgeht, wie jedoch schaffe ich es, dass pascal da die funktion aufruft und keine rückgabe erwartet.
vielen dank für eure hilfe
Antwort 1 von Rangoo
Hi,
Pascal erzwingt die Annahme von Rückgaben bei Funktionen. Das ist nicht zu umgehen. Willst du keinen Rückgabewert, musst du eine Prozedur nutzen.
Allerdings habe ich das Gefühl, du hast selbst nicht ganz verstanden, was du mit deiner Rekursion bezweckst.
Ich versuche dir mal aufzuschreiben, was dein Code gerade tut:
Ist der Eintrag gleich dem gesuchten: Gebe "wahr" zurück.
Ist der Eintrag ungleich dem gesuchten:
-> Existiert kein nächster Eintrag: Gebe "falsch" zurück.
-> Existiert ein nächster Eintrag: Gucke nach, welches Ergebnis dieser zurückliefert, ignoriere aber das Ergebnis.
Du hast in der markierten Zeile gleich zwei Probleme:
1. Du fängst den Rückgabewert der Funktion nicht auf.
2. Du weist deiner aktuellen Funktion keinen Rückgabewert zu.
Die beiden Probleme hängen zusammen und lassen sich gleichzeitig lösen. ;-)
Pascal erzwingt die Annahme von Rückgaben bei Funktionen. Das ist nicht zu umgehen. Willst du keinen Rückgabewert, musst du eine Prozedur nutzen.
Allerdings habe ich das Gefühl, du hast selbst nicht ganz verstanden, was du mit deiner Rekursion bezweckst.
Ich versuche dir mal aufzuschreiben, was dein Code gerade tut:
Ist der Eintrag gleich dem gesuchten: Gebe "wahr" zurück.
Ist der Eintrag ungleich dem gesuchten:
-> Existiert kein nächster Eintrag: Gebe "falsch" zurück.
-> Existiert ein nächster Eintrag: Gucke nach, welches Ergebnis dieser zurückliefert, ignoriere aber das Ergebnis.
Du hast in der markierten Zeile gleich zwei Probleme:
1. Du fängst den Rückgabewert der Funktion nicht auf.
2. Du weist deiner aktuellen Funktion keinen Rückgabewert zu.
Die beiden Probleme hängen zusammen und lassen sich gleichzeitig lösen. ;-)
Antwort 2 von najaoc
danke,
also die logik des codes stimmt schon, und ich weiß auch, was ich mit der rekursion mache.
ich habs als prozedur geschrieben und einfach in eine andere funktion reingepackt. jetzt läufts wie ich es will.
mfg naja
also die logik des codes stimmt schon, und ich weiß auch, was ich mit der rekursion mache.
ich habs als prozedur geschrieben und einfach in eine andere funktion reingepackt. jetzt läufts wie ich es will.
mfg naja
Antwort 3 von Rangoo
Hi!
Ich wollte dir auch nichts unterstellen. Bin kein Pascal-Kenner, deshalb wundert es mich, dass der Code so funktioniert, wenn du statt einer Funktion an der markierten Stelle eine Prozedur aufrufst.
Ich hätte erwartet, dass du den Code in
abändern musst, damit es läuft.
Ich wollte dir auch nichts unterstellen. Bin kein Pascal-Kenner, deshalb wundert es mich, dass der Code so funktioniert, wenn du statt einer Funktion an der markierten Stelle eine Prozedur aufrufst.
Ich hätte erwartet, dass du den Code in
kompExist := kompExist(komp, KompPointer^.next);abändern musst, damit es läuft.

