Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Fehler in der Funktion?
Bestzeller - Mo 08.06.09 21:48
Titel: Fehler in der Funktion?
Hi nochmal,
Die Funktion funktioniert manchmal nicht, aber in unterschiedlichen Fällen.
Wird zum Beispiel 202 und 31 als String verglichen, sagt er mir , dass 202<31 ist
, währendessen beim Vergleich von 202 und 0 202 > 0 ist.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| function TBaum.suchen(var w:pzeiger;row,counter:integer):Tresults; Begin If nName=w^.data then begin result.t:=counter; result.r:=row; end else If nName < w^.data then If w.links <> nil then result:=suchen(w.links,row,counter+1) else exit else If w.rechts <> nil then result:=suchen(w.rechts,row+1,counter+1) else exit; end; |
Gausi - Mo 08.06.09 22:04
Wenn 202 und 31 Strings sind, dann ist 202 kleiner 31 genauso richtig, wie "Autobahn" kleiner als "Zoo" ist, weil 2 vor 3 kommt, so wie A vor Z kommt ;-).
Wenn du mit Zahlen arbeitest, solltest du den Typ auch als Integer deklarieren, dann funktioniert das auch richtig.
Bestzeller - Mo 08.06.09 22:08
Hm..will aber beides Eingeben können, sowohl Namen als auch Zahlen. Aber Danke für den Hinweis.^^
//Edit: Hab es jetzt mit integer gemacht, aber irgentwas stimmt immernoch nicht an der Funktion.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| function TBaum.suchen(var w:pzeiger;row,counter:integer):Tresults; var zahl,bzahl:integer; Begin zahl:=strtoint(nName);Bzahl:=strtoint(w^.data); If Zahl=Bzahl then begin If w^.z=indiz then begin result.t:=counter; result.r:=row; end else result:=suchen(w.links,row,counter+1); end else If Zahl < Bzahl then If w^.links <> nil then result:=suchen(w.links,row,counter+1) else exit else If w.rechts <> nil then result:=suchen(w.rechts,row+1,counter+1) else exit; end; |
jaenicke - Di 09.06.09 00:55
Dann wird da w^.links nil sein, müsstest du mal schauen. :nixweiss:
Wenn du in der Zeile mit dem Debugger bist, musst du ja nur die Maus drüberhalten, dann siehst du den Wert. Bei alten Delphiversionen bis D7 musst du den Ausdruck markieren und Strg + F7 drücken.
Was soll das else exit? :gruebel:
Wie wäre es wie ich es in deinem letzten Thread geschrieben hatte ganz einfach mit begin..end?
oki - Di 09.06.09 07:42
Wenn du beides (strings und Zahlen) vergleichen willst, dann prüfe ob beide Werte in Integer oder Real konvertierbar sind. Ist dies möglich, so unterstellst du, dass Zahlen verglichen werden sollen und machst den Vergleich auf Real oder Integer. Ist das nicht möglich, so vergleichst du die Strings.
Gruß oki
Bestzeller - Di 09.06.09 18:23
Danke euch, habs jetzt hinbekommen. Funktioniert immoment nur für Worte und gibt die Tiefe des gesuchten Elements, sowie
die Position in der Tiefe zurück. Falls Jemand damit noch was Anfangen kann:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| function TBaum.suchen(var w:pzeiger; row:string; counter:integer):Tresults;
Begin If nName=w^.data then begin If w^.z=indiz then begin result.t:=counter; result.r:=bintoint(row)+1; end else begin result:=suchen(w.links,row+'0',counter+1); end; end else begin If nName < w^.data then begin If w^.links <> nil then result:=suchen(w.links,row+'0',counter+1) end else begin If w.rechts <> nil then result:=suchen(w.rechts,row+'1',counter+1); end; end; end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!