Wegfindung in Delphi und C++
-
Ich muss in einem Programm einen Weg finden. Gegeben sind:
const Anzahl = 5; // Fünf Punkte, jeder könnte mit jedem verbunden sein BOOL Relation[6][6]; // Existiert eine Verbindung? Relation[1][3] = TRUE; // Es gibt einen Weg von 1 nach 3 Relation[3][5] = TRUE; // Es gibt einen Weg von 3 nach 5Es geht nicht darum, den kürzesten Weg zu finden, sondern die zu schreibende Funktion soll lediglich herausfinden, ob ein Weg existiert. Meine Funktion sieht so aus:
BOOL __fastcall TfrmFormular::Weg(INT Start, INT Ziel) { BOOL Kontrolliert[99], Verbindung[99], b; Verbindung[Start] = TRUE; Kontrolliert[Ziel] = TRUE; for (INT i=0; i<= Anzahl; i++) { for (INT j=0; j<= Anzahl; j++) { if ((Verbindung[j]) && (!Kontrolliert[j])) { Kontrolliert[j] = TRUE; for (INT k=0; k<= Anzahl; k++) { if (Relation[j][k]) { Verbindung[k] = TRUE; if (k == Ziel) b = TRUE; } } } } } return b; }Die Funktion funktioniert nicht, ich habe keine Ahnung warum. Der gleiche Quelltext in Delphi:
function Weg(Start,Ziel:integer):boolean; var Kontrolliert, Verbindung: array[0..99] of boolean; b:boolean; i,j,k:integer; begin Verbindung[Start] := TRUE; Kontrolliert[Ziel] := TRUE; for i:=1 to Anzahl do begin for j:=1 to Anzahl do begin if ((Verbindung[j]) and ( not Kontrolliert[j])) then begin Kontrolliert[j] := TRUE; for k:=1 to Anzahl do begin if (Relation[j][k]) then begin Verbindung[k] := TRUE; if (k = Ziel) then begin b := TRUE; end end; end; end; end; end; Weg := b; end;Diese Funktion funktioniert. Warum nur

-
Du hast also eine lauffähige version in pascal, und in C++ läuft die nicht..
Der teufel steckt im Detail...
-
Aber es ist doch alles genau gleich!
Ich hatte erst die c++ version. Weil die nicht richtig funktioniert hat, habe ich sie in delphi übersetzt. Dort gab es keine Schwierigkeiten.Oder findet doch wer nen unterschied?

-
Die Schleifenvariablen i und j fangen in Delphi bei 1 an, in C habt ihr sie bei 0 beginnen lassen. Vielleicht mal darüber nachdenken

-
Ich hab es rausgefunden. Der Fehler liegt in dieser Zeile:
BOOL Kontrolliert[99], Verbindung[99], b;In b steht nicht, wie ich erwartet hätte, ein FALSE, sondern irgend eine Zahl. So funktioniert es:
BOOL Kontrolliert[99], Verbindung[99], b = FALSE;