Registreer FAQ Berichten van vandaag


Ga terug   Scholieren.com forum / Technologie / Software & Hardware
Reageren
 
Topictools Zoek in deze topic
Oud 07-07-2006, 09:52
Dr HenDre
Avatar van Dr HenDre
Dr HenDre is offline
Ik moet voor school een programma maken wat een grafische overzicht geeft van de directory structuur en de bijbehorende bestanden. Een deel is gegeven en je moet nu bepaalde functies implementeren. Ik loop vast bij een functie die de 2 coordinaten van een functie meekrijgt en met de functie contains(AX, AY) kan ik kijken of bepaalde coordinaten binnen de huidige rechthoek vallen (object).
Nu moet ik op de een of andere manier heel de tree doorlopen, daarbij heb ik de beschikking om voor iedere dir zijn onderliggende en bovenliggende dingen te bekijken.
Wat ik niet snap is hoe ik de complete tree moet doorlopen, ik weet niet hoe diep de tree zal zijn, dus ik zat te denken aan recursieve aanroepen, maar hoe return je dan het object waar de coordinaten wel in zitten?

Code:
function TRectTree.ContainingRect(AX, AY: Integer): TRectTree;
// Return the innermost node of which rectangle contains the given coordinates,
// or else nil.

begin
{TODO}
end;
ik heb van alles geprobeerd maar geen idee hoe ik dit nou op ga lossen.
Iemand suggesties?
Met citaat reageren
Advertentie
Oud 10-07-2006, 22:52
ILUsion
Avatar van ILUsion
ILUsion is offline
Je bent niet helemaal duidelijk in wat je precies nodig hebt, maar een recursief algoritme om een bestaande directorystructuur op je computer te doorlopen is een vrij standaard dingetje hoor. Ik ben al iets te lang niet met Delphi bezig geweest, daarom in een soort pseudo-code:

Code:
function FindTree(loc:string;prior:integer);
begin
  VoegToeAanBoomStructuur(loc,prior);
  VindBestand := ZoekBestanden(loc,*);
    while GevondenBestand
       do 
         begin
           if GevondenBestand.IsDir 
             then FindTree(loc+'\'+GevondenBestand.naam,prior+1);
           GevondenBestand := ZoekVolgendBestand;
         end;
end;
Het is iets in die aard, thuis heb ik het in ieder geval wel in een Delphi-boek in echte code staan, met de juiste functienamen. Het komt erop neer dat je de functies voor het zoeken van bestanden moet gebruiken, vermits een map ook maar een bestand is en dan kijk je bij elk gevonden bestand na of het een map is. Die map kun je weeral doorzoeken. Die variabele prior lijkt me nodig om de "prioriteit (het niveau) van de map te bepalen bij het invoegen in de boomstructuur, die dan vanaf de bovenste map (prior=0) opgebouwd zal worden naar onderliggende mappen (prior=1) en zo verder naar verder onderliggende mappen (prior=2) enzovoorts.

De gebruikte funcites zitten in de unit "Files", als ik me niet vergis, maar in de help van Delphi valt er zeker genoeg over te vinden

Wat die coördinaten betreft, misschien van elk object een childclass maken, die als OnMouseOver (want ik gok dat het daarvoor is?) een functie meegeven die een pointer naar het object laat wijzen. Programmeer-technisch misschien niet de meest propere en

edit:

ofwel versta ik het verkeerd, daar lijkt het in ieder geval wel op. In dat geval zal je een beetje moeten uitleggen hoe je boomstructuur eruit ziet, in het geval van een SequoiaView-achtig diagram, kun je gewoon kijken of het daarbinnen valt, alle childs oproepen en kijken of het binnen een child valt, ook allemaal recursief. Is het eerder een klassieke boomstructuur (zoals in Explorer), dan zul je volgens mij ook bovenaan de tree moeten beginnen, ook gewoon recursief alles aflopen. Eventueel gewoon het bovenste niveai aflopen, ligt je y-coördinaat lager dan je te testen rechthoek, ga je naar volgende object op hetzelfde niveau. Bij die kijk je opnieuw, ligt deze hoger, dan ga je weer naar het vorige item, vraagt de childs daarvan op en voert daarop weer de functie uit. Dat lijkt me het snelste (in ieder geval sneller dan alle parents en bijhorende childs af te lopen en na te kijken, hierbij hangt de looptijd enkel af van de hoeveelste rechthoek je nodig hebt en hoe diep in de structuurhij geworteld zit, niet per se van het aantal objecten, die je anders bij elke zoekpoging zou moeten doorlopen. Al het bovenstaand lijkt me het beste met pointers door te geven (huidigePogin, vorigePoging).
__________________
vaknar staden långsamt och jag är full igen (Kent - Columbus)

Laatst gewijzigd op 10-07-2006 om 23:02.
Met citaat reageren
Oud 12-07-2006, 19:17
Dr HenDre
Avatar van Dr HenDre
Dr HenDre is offline
het probleem waar ik dus tegenaan loop is dat dat niet zomaar kan, alle functies en/of functiedefinities zijn al gegeven, het enige wat nog rest is de implementatie van de functies. Maar laat maar, ik ben toch al te laat met mn opdracht
had al maandag af moeten zijn, volgend jaar weer een kans
Met citaat reageren
Advertentie
Reageren


Regels voor berichten
Je mag geen nieuwe topics starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit

Spring naar


Alle tijden zijn GMT +1. Het is nu 04:54.