AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen FreePascal Prüfe: Sind alle Blätter in einem Baum die Maxima der Pfade zu ihnen?
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von DesWeeedert · begonnen am 20. Mai 2017 · letzter Beitrag vom 24. Mai 2017
Antwort Antwort
Michael II

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

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
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

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

  Alt 24. Mai 2017, 14:24
Zitat von Michael II:
Nebenbei: Es ist seit vielen Jahren üblich das Resultat einer Funktion via Result zurückzugeben.
Stimmt, das wollte ich zu deinem Code auch noch angemerkt haben.

Falls dein Lehrer/Prof. deshalb nachfragen sollte, kannst du ihm ja die offensichtlichen Vorteile präsentieren. Auf das erste Problem der alternativen Schreibweise bist du ja schon von selbst gestoßen: Man kann der Funktion über den konkreten Namen zwar ein Ergebnis zuweisen, nicht aber das momentane Ergebnis nochmal abfragen. Zweiter Vorteil von Result : Du kannst die Funktion jederzeit umbenennen, ohne sämtliche Vorkommen von Rückgabewertzuweisungen ebenfalls ändern zu müssen.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz