Einzelnen Beitrag anzeigen

Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
736 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Prüfe: Sind alle Blätter in einem Baum die Maxima der Pfade zu ihnen?

  Alt 23. Mai 2017, 20:33
BlattMax := BlattMax and BlattMax(inRefWurzel^.Links, inPfadMax); Ersetze BlattMax durch Result. Also so:
Result := Result and BlattMax(inRefWurzel^.Links, inPfadMax); Nebenbei: Es ist seit vielen Jahren üblich das Resultat einer Funktion via Result zurückzugeben.


Und wie bereits erwähnt: Der Code ist cool, wenn die Kurzschlussauswertung [Standard] eingeschaltet ist (d.h. in Delphi "Vollständige Boolesche Auswertung = AUS" ist).

Wenn die Kurzschlussauswertung eingeschaltet ist, dann berechnet Delphi den Ausdruck
Result and BlattMax(inRefWurzel^.Links, inPfadMax); immer von links nach rechts nur solange bis das Resultat bekannt ist. Wenn also Result=false ist, dann ist bereits klar, dass false and BlattMax(inRefWurzel^.Links, inPfadMax); immer false ist (0 and x ist immer 0), unabhängig vom Wert von BlattMax(inRefWurzel^.Links, inPfadMax); . Delphi berechnet also BlattMax(inRefWurzel^.Links, inPfadMax); nicht.

Falls aber "Vollständige Boolesche Auswertung = EIN" ist, rechnet Delphi immer auch BlattMax(inRefWurzel^.Links, inPfadMax); Es wird bei diesem Code dann immer der ganze Baum durchlaufen. Abhilfe: Code anpassen.


Der Hinweis zur Kurzschlussauswertung betrifft auch deine rekursive Funktion; genauer diese Zeile:
Zitat:
Result := (BlattMax(inRefWurzel^.links, inPfadMax)) and (BlattMax(inRefWurzel^.rechts, inPfadMax));
Michael Gasser

Geändert von Michael II (23. Mai 2017 um 21:55 Uhr)
  Mit Zitat antworten Zitat