HA2 7

SLik
Neuling
Neuling
Beiträge: 4
Registriert: 10. Nov 2007 13:31
Kontaktdaten:

Beitrag von SLik »

1.
bei primzahlen muss ja auch ein baum zurückgeliefert werden, damit im aufruf bei nachfolgenden prozeduren keine fehler entstehen, bzw der vertrag nich verletzt wird.
wenn ich aber nun in der prozedur nur
(zero? (smallest_factor num)) (make-tree num 1 num)
überprüfe, wird zwar eine Primzahl nun als (make-tree prim 1 prim) ausgegeben, bei anderen Bäumen blöderweise die letzte primzahl auch in einem baum dargestellt.

Nun muss unterschieden werden, ob bereits ein baum besteht (dann muss nur die primzahl ausgegeben werden) oder ob dies nicht der fall ist (dann muss ein baum ausgegeben werden).
Eine möglichkeit zur direkten unterscheidung, ob bereits ein wurzel-baum besteht oder ob es sich um einen einzelnen handelt finde ich nicht; und die lösung dies schon im vorherigen schritt einmal zu prüfen, also beim erstellen eines baums als dritte variable eine if und dann ob die nächste zahl noch einen teiler hat checken..das funzt zwar; sieht aber doof aus - und frisst nebenbei noch zusätzlich ressourcen.
>> ich würde es ja gern einfach mal vorher prüfen und den rest der prozedur im lokal schreiben..aber das geht ja auch ncih..oder halt hilfsprozedur -.-' <<

Wie überprüft ihr das?


2.
Soll im template was stehen bei "a tree is either.."? weil in der aufgabenstellung nix davon is
haber auch kP was da rein soll

Grüße
Tobi

BeatriceFriess
Mausschubser
Mausschubser
Beiträge: 70
Registriert: 1. Okt 2007 15:55
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von BeatriceFriess »

Schau mal bei T3 folie 40 da steht nämlich ein Beispiel zum Design für den Stammbaum :wink:

BeatriceFriess
Mausschubser
Mausschubser
Beiträge: 70
Registriert: 1. Okt 2007 15:55
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von BeatriceFriess »

Aber ich hab hier auch mal eine ähnliche Frage...
Nämlich, wie ich einen Baum als Liste ausgeben soll....
Ich hänge an der Nummer 3 und hab keine Ahnung, wie ich das jetzt ausgeben soll O.o

BeatriceFriess
Mausschubser
Mausschubser
Beiträge: 70
Registriert: 1. Okt 2007 15:55
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von BeatriceFriess »

Ich hab jetzt die dritte Aufgabe fertig, aber ich sitze an der 7.4...
O.o...
Und ich bin am verzweifeln..
Kann mir da jemand helfen???
Das muss ja heute noch fertig werden!!

Benutzeravatar
bearmann
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 121
Registriert: 20. Okt 2006 13:53
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von bearmann »

Grüß dich,
keine Bange, die 7.4 ist auch keine Hexerei. ;)
Mal ein paar Überlegungen...

(factor-tree 60) sollte ja sowas ausspucken: (make-tree 60 2 (make-tree 30 2 (make-tree 15 3 5)))

Das wäre also dein Input für (factor-list (factor-tree 60)) ... Von dem ganzen interessieren dich eigentlich nur tree-left und tree-right, richtig?!
tree-left (also deinen kleinen Teiler) kannst du eigentlich sofort in deine neue Liste packen. mit tree-right wirds etwas umständlicher, da dieser ja wieder aus einem unterbaum besteht, in unsrem Falle (make-tree 30 2 (make-tree 15 3 5)). tree-right sollte also rekursiv wieder an factor-list übergeben werden, dann geht das Spielchen von vorne los: tree-left kannst du direkt in deine Liste packen, factor-list wird wieer rekursiv mit tree-right aufgerufen...
Du wanderst also rekursiv durch deine Baumstruktur und packst immer nur tree-left in deine Liste und rufst dich selbst wieder mit tree-right auf.

Irgendwann ist tree-right ja kein ganzer Baum mehr, sondern eben wirklich nur noch eine Zahl - dann bist du am Ende angelangt und die Rekursion muss abbrechen. Beim Abbruch musst du nur noch deine Zahl "tree-right" in deine Liste packen und du bist fertig!

Aus (make-tree 60 2 (make-tree 30 2 (make-tree 15 3 5))) hast du dann (list 2 2 3 5) gemacht. :)

Hoffe, ich konnte helfen.

Beste Grüße,
bearmann

BeatriceFriess
Mausschubser
Mausschubser
Beiträge: 70
Registriert: 1. Okt 2007 15:55
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von BeatriceFriess »

Danke für die Erklärung
Auch wenn ich inzwischen fertig bin....
^^
Wie gesagt..
Trotzdem danke..
Vielleicht hilft die Erklärung dann jemand anderen, der noch verzweifelt davor sitzt.

MisaghZ
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 133
Registriert: 11. Okt 2007 15:50

Beitrag von MisaghZ »

muss man der funktion factor-list einen baum mitgeben?
also soll das ganze so aussehen?
(factor-list (factor-tree 10)) ?

und wird das ganze dann so definiert?
(define (factor-list (factor-tree n)))

Stumpf.Alex
Nerd
Nerd
Beiträge: 643
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von Stumpf.Alex »

Ersteres ist richtig.

Jonnylein
Windoof-User
Windoof-User
Beiträge: 30
Registriert: 24. Okt 2007 15:10
Wohnort: Darmstadt

Beitrag von Jonnylein »

du definierst factor-list ganz normal mit einem übergebenen parameter. um etwaigen fehlern in der auswertung vorzubeugen, die daraus resultieren, dass der übergebene parameter kein baum sein sollte, kannst du ja eine entsprechende abfrage in die prozedur einfriemeln:

(define (factor-list a-tree)
(cond
[(tree? a-tree)...

Antworten

Zurück zu „Archiv“