AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit Durchzählen von Elementen

Ein Thema von daschaos · begonnen am 19. Jun 2007 · letzter Beitrag vom 19. Jun 2007
Antwort Antwort
daschaos

Registriert seit: 23. Mai 2007
117 Beiträge
 
Delphi 2006 Professional
 
#1

Probleme mit Durchzählen von Elementen

  Alt 19. Jun 2007, 11:06
Ich weiß nich, ob man mir helfen kann, aber ich bin zu blöd die Gesamtanzahl meiner Elemente zu zählen. Ich habe eine Komponente die zwei Schnittstellen nach außen hat, die diese dann mit Leben füllen sollen, um später zu zeichnen. Damit die Gesamtfunktionalität gegeben ist, brauche ich aber unter anderem eine Funktion die die Gesamtanzahl meiner Elemente angibt.

Also die Daten müssen so angeordnet sein, dass die ID´s einfach durchnumeriert werden...


Die Schnittstellen sehen folgendermaßen aus:

Delphi-Quellcode:
function DoGetChildData(AParentID: Integer; AIndex: Integer; var ChildValue: Integer; var Value: Integer; var
  Caption: WideString): Integer;
   
function DoGetChildCount(AParentID: Integer): Integer;
Ich weiß nicht, ob die erste überhaupt interessant ist in diesem Kontext? Naja, auf jeden Fall liefert diese zu gegebener ParentID und dem Index, also welches Kind des Parent man haben möchte, z.B. das zweite, die ChildID.
Die zweite Schnittstelle liefert mir dann immer die direkte Anzahl an Kindern.

Die Funktion zum Zählen der Elemente hab ich mir ungefähr so vorgestellt, wobei die so nich richtig funktioniert, weil der Aufruf
CountTotalNumberofElements(ParentID + i) ja nich richtig ist. Das funktioniert ja nur für ParentID = 0, das dann die zum Beispiel 5 Kinder mit i aufgerufen werden. Wenn ich jetzt aber die Kinder von 1 aufrufen möchte, müsste der ja bei 6 anfangen, und genau das ist mein Problem! Wie mache ich das?

Delphi-Quellcode:
function TTreemapChart.CountTotalNumberOfElements(ParentID: Integer): Integer;
var
  i : Integer;
  Helper : Integer;
begin
  Helper := DoGetChildCount(ParentID);
  for i := 1 to Helper do
  begin
    Result := Result + Helper + CountTotalNumberofElements(ParentID + i);
  end;
end;
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Probleme mit Durchzählen von Elementen

  Alt 19. Jun 2007, 11:40
Hallo,

offensichtlich sind die Dinge, die du deine Elemente nennst, Teil einer Baumstruktur. Deine Komponente TTreeMapChart scheint Eigentümer dieser Struktur zu sein. Es gibt zwei grundsätzliche Herangehensweisen bei der Speicherung von Bäumen: (1) Abbildung der Knoten auf die Items in einem linearen Array und (2) Realisierung der Hierarchie über Zeiger. Bei (1) werden die Knoten dicht gepackt (Array) gespeichert und die notwendigen Zeiger verwenden Indexwerte. Bei (2) können die Knoten einzeln und verstreut auf dem Heap gespeichert sein und die Zeiger arbeiten mit Adressen.

Aufgrund deiner Fragestellung scheinst du Weg (1) gewählt zu haben. Wie sehen die Knoteninformationen aus? Welchen Grad, welche Höhe, welche sonstigen Eigenschaften hat der Baum? Das ist wichtig für den Algorithmus zur Feststellung der Gesamtzahl an Nachfolgern.

Grüße vom marabu
  Mit Zitat antworten Zitat
daschaos

Registriert seit: 23. Mai 2007
117 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Probleme mit Durchzählen von Elementen

  Alt 19. Jun 2007, 12:00
Momentan verwende ich nur Testdaten, die in einem Array abgelegt sind. Im späteren Verlauf, das wird aber noch eine Weile dauern, bis ich mit realen Werten arbeite, werd ich wohl den zweiten Weg wählen müssen.
Dann sollen die Dateien einer Festplatte einzeln eingelesen werden. Und am Anfang will ich eben erstmal zählen, wieviel Dateien zum Beispiel die Festplatte enthält mit Hilfe der Funktion oben. Und die Höhe oder Grad eines Baumes sind ja dann nicht bekannt.

Aber kann ich nicht unabhängig davon, was ich verwende nur mit den Daten der Schnittstelle arbeiten? Also dass ich dort immer ausgehend von einer ID anfrage, wieviel Kinder dasjenige Element hat, welche ID das soundsovielte Kind hat usw. ? Weil es ist ja eine Komponente und soll unabhängig von meiner Anwendung und Gegebenheiten, die später die Daten liefert, arbeiten.

An Eigenschaften hat ein Element neben seiner Kennung (ID) halt noch die Größe(Value), die Anzahl der Kinder und einen Text(Caption).
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Probleme mit Durchzählen von Elementen

  Alt 19. Jun 2007, 13:39
Hallo,

ich habe den Eindruck, dass deine Datenstrukturen noch nicht festgelegt sind, aber irgendwie muss ich bei TreeMap und Dateisystem an SequoiaView denken. Höhe und Tiefe des entstehenden Baumes sind nur insofern interessant, als dass kein spezieller Baum vorliegt. Das Zählen deiner Elemente wird über einen Tree Traversal Algorithmus erledigt. Du wirst ein Kennzeichen zur Unterscheidung von Verzeichnissen und Dateien benötigen, da beide nebeneinander existieren können. Selbstverständlich kannst du mit einer abstrakten Schnittstelle arbeiten, welche die Implementierungsdetails (Array oder kein Array) verbirgt. Du musst auch gar nicht bei Null anfangen. Schau dir doch die Klassen TTreeNodes und TTreeNode an. Dort kannst du Eigenschaften und Methoden sehen, die auch du benötigen wirst - vielleicht nicht alle, aber einige bestimmt. Die drei Eigenschaften aus deiner Aufzählung sind auf jeden Fall nicht ausreichend, egal wie du letzten Endes implementierst.

Freundliche Grüße
  Mit Zitat antworten Zitat
19. Jun 2007, 18:18
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Antwort Antwort


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 04:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz