Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Delphi / Kylix / Turbo Pascal » Pascal Programme

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
05.11.2005, 14:18 Uhr
Incubus



Hallo,

kann mir jemand Hilfestellung zu dem Programm geben. Ich kann zur Zeit noch nicht so viel damit anfangen. Ich studiere neben der Arbeit Info und liege aufgrund verschiedener beruflicher Projekte einige Wochen hinter dem aktuellen Stoff.

Jetzt bräuchte ich Unterstützung, dass ich wenigstend die Aufgaben einsenden kann.
Falls also jemand Interesse hat wäre ich Ihm überaus dankbar.


Aufgabe:
Geben Sie eine rekursive PASCAL-Funktion an, welche die Anzahl der Knoten eines Binärbaumes bestimmt. Die Anzahl der Knoten in einem Baum ist die Summe aus den Knotenzahlen seiner Teilbäume plus eins (für den Wurzelknoten). Der leere Baum hat keinen Knoten.

Beurteilen Sie, ob es sich um eine sinnvolle Anwendung der Rekursion handelt.


program TesteBBKnotenzahl (input, output);

type
tNatZahl = 0..maxint;
tRefBinBaum = ^tBinBaum;
tBinBaum = record
info : integer;
links : tRefBinBaum;
rechts : tRefBinBaum;
end;

var
Wurzel : tRefBinBaum;
Anzahl : integer;

function BBKnotenzahl (
inRefWurzel : tRefBinBaum) : tNatZahl;
{ bestimmt die Anzahl der Knoten des Binaerbaumes,
auf dessen Wurzel inRefWurzel zeigt }


HIER SOLL DANN WAHSCHEINLICH DIE REKURSIVE FUNKTION STEHEN ;-)))



procedure BBKnotenEinfuegen (
inZahl : integer;
var ioWurzel : tRefBinBaum);
{ fuegt in den Suchbaum, auf dessen Wurzel ioWurzel
zeigt, ein Blatt mit Wert inZahl an. }

var
Zeiger : tRefBinBaum;

begin
if ioWurzel = nil then
begin
new (Zeiger);
Zeiger^.Info := inZahl;
Zeiger^.links := nil;
Zeiger^.rechts := nil;
ioWurzel := Zeiger
end { if }
else { ioWurzel <> nil }
if inZahl < ioWurzel^.info then
BBKnotenEinfuegen (inZahl, ioWurzel^.links)
else
BBKnotenEinfuegen (inZahl, ioWurzel^.rechts);
end; { BBKnotenEinfuegen }




procedure BBAufbauen (var outWurzel : tRefBinBaum);
{ Liest eine Folge von Integer-Zahlen ein (0 beendet die
Eingabe, gehoert aber nicht zur Folge) und speichert
die Folge in einem binren Suchbaum. }

var
Zahl : integer;

begin
outWurzel := nil; { mit leerem Baum initialisieren }
read (Zahl);
while Zahl <> 0 do
begin
BBKnotenEinfuegen (Zahl, outWurzel);
read (Zahl)
end
end; { BBAufbauen }


begin
writeln('Bitte integer-Zahlen eingeben (0=Ende):');
BBAufbauen (Wurzel);
{ 2 mal aufrufen wie bei Aufg. 1 }
Anzahl := BBKnotenzahl (Wurzel);
Anzahl := BBKnotenzahl (Wurzel);
writeln ('Der Baum hat ', Anzahl, ' Knoten.');
end. { TesteBBKnotenzahl }

Dieser Post wurde am 05.11.2005 um 14:21 Uhr von Incubus editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.11.2005, 14:29 Uhr
Spacelord
Hoffnungsloser Fall


Ach der gute alte 1613 .
Ich schau gleich mal ob ich noch an meine alten Lösungen in WebAssign rankomme...
Die kannst du ruhig nehmen,hatte damals 393 von 400 Punkten oder so(Gesamtsemester).

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.11.2005, 14:35 Uhr
Incubus



Das wäre super. Du weist gar nicht wie du mir gerade geholfen hast.
Vielen Dank.

Gruß
Incubus
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
05.11.2005, 18:42 Uhr
Spacelord
Hoffnungsloser Fall


Hi,
also mit WebAssign war nix mehr.Die haben vor 2 Tagen den Betrieb der alten LVU eingestellt und direkt komm ich da von der neuen LVU nicht mer ran ohne den Kurs nachzubelegen.
Hab die Lösung also nochmal neu gemacht.Musste mich da auch erst wieder reindenken und erstmal wieder TP installieren .
Naja,aber erst Hoffnung machen und dann den Schwanz einziehen gibt´s nicht .

Also die Funktion sollte etwa so aussehen:

Code:

function BBKnotenzahl (
inRefWurzel : tRefBinBaum) : tNatZahl;
{ bestimmt die Anzahl der Knoten des Binaerbaumes,
auf dessen Wurzel inRefWurzel zeigt }
begin
  if inRefWurzel<>nil then
  begin
    if (inRefWurzel^.links = nil) and (inRefWurzel^.rechts = nil) then
           BBKnotenzahl:=1
    else
        BBKnotenzahl:=BBKnotenzahl(inRefWurzel^.links)+BBKnotenzahl(inRefWurzel^.rechts)+1
  end
  else
      BBKnotenzahl:=0
end;


Kannst du ja mal durch WebAssign durchjagen und schauen was die Testfälle sagen.
Auf die Frage ob dass ein sinnvoler Einsatz der Rekursion ist würde ich sagen :Ja.
Um das gleiche Ergebniss iterativ zu erreichen wäre eine Hilfsdatenstruktur nötig und der Programmcode wäre wesentlich komplexer.
Schau dazu nochmal in Kapitel 4 ab Seite 215-222.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Delphi / Kylix / Turbo Pascal ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: