[GS] Pointer van een boom NIL maken in een methode

Forum van 1ste Bachelor Informatica.

Moderator: Praesidium

Glenn
Posts: 280

[GS] Pointer van een boom NIL maken in een methode

Post#1 » Thu Mar 05, 2009 9:22 pm

Hoi allen,

Weet er soms iemand hoe ik een pointer NIL kan maken in mijn methode ReplaceElement? Als ik als replacementElement NIL meegeef crasht hij. Dit gebeurt bij binTree^ := replacementElement^ en ik denk dat het komt omdat NIL geen inhoud heeft. Weet er iemand hoe ik dat kan oplossen? Ik wil namelijk hebben dat mijn binTree wijst. Hoe kan ik dat oplossen?

Wel vervelend dat je in oberon in de receiver precies geen VAR kan plaatsen...

Code: Select all


PROCEDURE (binTree : BinaryTree) ReplaceElement (key : INTEGER; replacementElement : BinaryTree);
(* We zoeken via deze methode een bepaalde key, wanneer we de key gevonden hebben zetten we bij het element met die key het replacementElement in de plaats *)

BEGIN
OutExt.String("Ingang procedure");
IF (key = binTree^.key) THEN
binTree^ := replacementElement^;
ELSIF (key < binTree^.key) THEN
IF binTree^.leftchild # NIL THEN
binTree.leftchild^.ReplaceElement(key, replacementElement);
END;
ELSE
IF binTree^.rightchild # NIL THEN
binTree.rightchild^.ReplaceElement(key, replacementElement);
END;
END;
END ReplaceElement;
Sorry voor mijn vele programmeervragen maar op sommige momenten zit je gewoon echt stokvast :P .

Groetjes,
Glenn

Glenn
Posts: 280

Post#2 » Fri Mar 06, 2009 2:58 pm

Ik heb er vandaag op de unif over gepraat en heb een oplossing gevonden :). Dus deze topic mag weg ;).

User avatar
Robbe
WOZ
Posts: 2161
Contact:

Post#3 » Fri Mar 06, 2009 3:59 pm

Glenn wrote:Ik heb er vandaag op de unif over gepraat en heb een oplossing gevonden :). Dus deze topic mag weg ;).
Ge gaat toch ni de vervelende noob uithangen en u antwoord hier ni posten? ;)
"I'm not afraid of falling, I'm afraid of landing" -- Sam
How To Ask Questions The Smart Way

Zingen? UKA-n dat ook!

User avatar
racekakje
WOZ
Posts: 740

Post#4 » Fri Mar 06, 2009 5:26 pm

Maakt toch gewoon een Procedure "FindElement" en 2 aparte "Replace" en "Delete". Want als ge kunt toch ni zomaar deleten in nen boom, het kan zijn da der nog kinderen zijn..

Glenn
Posts: 280

Post#5 » Sat Mar 07, 2009 10:20 pm

Sorry Robbe, hier komt het antwoord :). In mijn PROCEDURE RemoveElement get ik het element dat men wil verwijderen. Ik kijk dan na of:
a) het element geen kinderen heeft ((element^.leftchild = NIL) & (element^.rightchild = NIL)
b) het element 1 linkerkind heeft
c) het element 1 rechterkind heeft
d) het element 2 kinderen heeft

Ik zat dus vast in het geval a. De oplossing is de volgende. Ik kijk eerst of de hoogte # 1, als de hoogte verschillend is van 1 zijn we sowieso ni aan ons laatste element (= het normale geval). Als we niet aan ons laatste element zijn, en dus gewoon ergens een blad in een boom moeten verwijderen, dan roep ik de methode SetNil op.

Deze methode zet dus een bepaald element met een bepaalde key op NIL.

SetNil is dus de sleutel tot de oplossing. Deze kijkt of de sleutel gelijk is aan de sleutel van het linkerkind, zoja, dan moet dat linkerkind op NIL gezet worden en is onze missie geslaagd.
Vervolgens kijkt hij of de sleutel gelijk is aan de sleutel van het rechterkind, zoja, dan moeten we het rechterkind op NIL zetten en is onze missie geslaagd.

Als onze missie nog niet geslaagd is, dan kijken we of we verder moeten zoeken in de linker of rechterdeelboom door de opgegeven sleutel te vergelijken met binTree^.key . De hele procedure werkt recursief en na een tijd vinden we het blad sowieso :).

User avatar
Robbe
WOZ
Posts: 2161
Contact:

Post#6 » Sun Mar 08, 2009 11:39 pm

Glenn wrote:Sorry Robbe, hier komt het antwoord :)
Daar gaan de volgende generaties blij mee zijn ^^

Werkt het ook nog als je 4,3,5,1,2,7,4.5 toevoegd (in die volgorde) en dan 4 wilt verwijderen?
"I'm not afraid of falling, I'm afraid of landing" -- Sam
How To Ask Questions The Smart Way

Zingen? UKA-n dat ook!

Glenn
Posts: 280

Post#7 » Fri Mar 20, 2009 5:11 pm

Sorry voor het late antwoord. Ik kan geen kommagetallen invoeren. Maar als ik 4, 3, 5, 1, 2, 7 en 4 achtereenvolgens invoer en vervolgens 4 probeer te verwijderen klopt het resultaat jammer genoeg niet meer :(. Ik had het dus beter moeten testen. Ik ging er vanuit dat de test die Patricia gaf voldoende was, maar dat was blijkbaar niet het geval.

Pieter Belmans
Posts: 593
Contact:

Post#8 » Fri Mar 20, 2009 5:38 pm

Robbe bedoelt inderdaad een rij van integers. En dan kunt ge gan debuggen nu ;).

User avatar
nasam
Posts: 233
Contact:

Post#9 » Fri Mar 20, 2009 6:54 pm

Pieter Belmans wrote:Robbe bedoelt inderdaad een rij van integers. En dan kunt ge gan debuggen nu ;).
Als laatste werd wel 4.5 toegevoegd...


4,3,2 is ook een beetje een vreemd kommagetal...
http://www.nathansamson.be" onclick="window.open(this.href);return false; Flattr me!Image

Pieter Belmans
Posts: 593
Contact:

Post#10 » Fri Mar 20, 2009 7:00 pm

Vermenigvuldig al die getallen dan met 2. Opgelost!

Ik ging er vanuit dat die test vooral ging over wortels verwijderen.

User avatar
Robbe
WOZ
Posts: 2161
Contact:

Post#11 » Sun Mar 22, 2009 11:34 pm

Pieter Belmans wrote:Robbe bedoelt inderdaad een rij van integers. En dan kunt ge gan debuggen nu ;).
Ik bedoelde een rij van floating point getallen. Normaal zou dat niet veel extra werk mogen zijn!
"I'm not afraid of falling, I'm afraid of landing" -- Sam
How To Ask Questions The Smart Way

Zingen? UKA-n dat ook!

Pieter Belmans
Posts: 593
Contact:

Post#12 » Mon Mar 23, 2009 7:03 am

Floating point is gewoon vermenigvuldigen met een voldoende grote macht van 2 om een geheel getal te krijgen, klaar ;).

User avatar
Robbe
WOZ
Posts: 2161
Contact:

Post#13 » Mon Mar 23, 2009 2:41 pm

Pieter Belmans wrote:Floating point is gewoon vermenigvuldigen met een voldoende grote macht van 2 om een geheel getal te krijgen, klaar ;).
het gaat hem niet om die specifieke getallen, het gaat hem om de relaties tussen de objecten. Zolang er op die objectruimte een orderelatie is, maakt het geen zak uit of het over reële getallen, koeien, auto's, planeten, batterijen ... gaat.
"I'm not afraid of falling, I'm afraid of landing" -- Sam
How To Ask Questions The Smart Way

Zingen? UKA-n dat ook!

Return to “1ste Bachelor”

Who is online

Users browsing this forum: No registered users and 48 guests