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
 
DesWeeedert

Registriert seit: 16. Mai 2017
7 Beiträge
 
#6

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

  Alt 23. Mai 2017, 17:54
Hallo zusammen und vielen Dank für eure Antworten =)

Die Schreibweise von Zacherl war mir in der Form noch unbekannt und ich habe seinen Code erstmal für mich übersetzt:

Code:
function BlattMax ( inRefWurzel : tRefBinBaum; inPfadMax : tNatZahl) : Boolean;
   { prüft ob alle Blätter des Baumes die Maxima der Pfade zu ihnen sind }
   
      begin
         if (inRefWurzel^.links = nil) and (inRefWurzel^.rechts = nil) then
            BlattMax := (inRefWurzel^.Wert > inPfadMax)
         else
            begin
               if (inRefWurzel^.Wert > inPfadMax) then
                     inPfadMax := inRefWurzel^.Wert;
               BlattMax := true;
               if (inRefWurzel^.links <> nil) then
                  BlattMax := BlattMax and BlattMax(inRefWurzel^.Links, inPfadMax);
               if (inRefWurzel^.rechts <> nil) then
                  BlattMax := BlattMax and BlattMax(inRefWurzel^.rechts, inPfadMax);
            end;   
      end;
Jetzt ist es so, dass dieses Programm bei mir lokal auch compiliert wird.
Allerdings muss ich die Aufgabe online in ein Portal hochladen und dort wird das ganze dann automatisch compiliert.

Hier meckert der Compiler dann wegen den folgenden beiden Zeilen:

Code:
BlattMax := BlattMax and BlattMax(inRefWurzel^.Links, inPfadMax);
BlattMax := BlattMax and BlattMax(inRefWurzel^.rechts, inPfadMax);
Soweit ich das beurteilen kann ist der Grund, weil die Funktion BlattMax hier ohne "Argument" aufgerufen wird? Also der Ausdruck vor dem "and", dass da keine Klammer mit Angaben hinter dem BlattMax steht?
Kann mir vielleicht jemand dazu mehr sagen, was da für ein Problem auftritt?

Ansonsten bin ich dann (Dank dem Tipp von Zacherl mit der unnötigen While-Schleife) auch auf meine eigene Lösung gekommen:

Code:
begin
  if (inRefWurzel^.links <> nil) or (inRefWurzel^.rechts <> nil) then
  {wir befinden uns nicht an einem Blatt}
  begin
   
    if inRefWurzel^.Wert > inPfadMax then
      inPfadMax := inRefWurzel^.Wert;
      {aktualisiert das Maximum des bisher durchlaufenen Pfades}

    if (inRefWurzel^.links = nil) and (inRefWurzel^.rechts <> nil) then
    {nur ein rechter Teilbaum existiert}
      BlattMax := BlattMax(inRefWurzel^.rechts, inPfadMax);
      {setzt die Funktion dann auf wahr, wenn der rechte Teilbaum die Bedingung erfüllt, unter Berücksichtigung des aktuellen Pfadmaximums}

    if (inRefWurzel^.links <> nil) and (inRefWurzel^.rechts = nil) then
    {nur ein linker Teilbaum existiert}
      BlattMax := BlattMax(inRefWurzel^.links, inPfadMax);
      {setzt die Funktion dann auf wahr, wenn der linke Teilbaum die Bedingung erfüllt, unter Berücksichtigung des aktuellen Pfadmaximums}

    if (inRefWurzel^.links <> nil) and (inRefWurzel^.rechts <> nil) then
    {es existieren ein linker und ein rechter Teilbaum}
      BlattMax := (BlattMax(inRefWurzel^.links, inPfadMax)) and (BlattMax(inRefWurzel^.rechts, inPfadMax));
      {setzt die Funktion dann auf wahr, wenn der linke UND der rechte Teilbaum die Bedingung erfüllen, unter Berücksichtigung des aktuellen Pfadmaximums}

  end;

  if (inRefWurzel^.links = nil) and (inRefWurzel^.rechts = nil) then
  {wir haben ein Blatt erreicht}
  begin
    BlattMax := inRefWurzel^.Wert > inPfadMax;
    {setzt die Funktion auf wahr, wenn der Wert des Blattes größer ist, als das Pfadmaximum. Ansonsten wird die Funktion auf falsch gesetzt}
  end;
end;
Ist natürlich schon bedeutend länger, aber immerhin hat es auch funktioniert (für mich schonmal ein Erfolg) =)
  Mit Zitat antworten Zitat
 


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 13:41 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