2 dimensionale dynamische Tabelle

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

2 dimensionale dynamische Tabelle

Beitrag von Konne »

Hallo,
Ich habe folgendes Problem. Ich benoetige eine 2 dimensionale dynamische Tabelle. Wenn es nicht dynamisch sein sollte wuerde ich natuerlich ein Array verwenden. Wie mache ich es jetzt aber am besten wenn es dynamisch sein soll? Kann ich vielleicht auch mit Linked Lists rumtrixen? Was ist dass schnellest. Wichtig ist dass beide dimensionen dynamisch sein muessen sonnst koennte ich auch redim verwenden. Kann mir jemand helfen was das beste ist, oder ob es schneller ist eine ganz andere methode zu verwenden auf die ich nur noch nicht kam...
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Also ich würde auch eine LinkedList nehmen, wenn ich zum Beispiel die Position aller abgefeurten Schüsse meines Raumshiffes speichern will. Das geht mit einer Linkedlist und Strukturen:

Code: Alles auswählen

Structure position
   x.l
   y.l
EndStructure

NewList Position.position()

AddElement(Position()) : Position()\x = 56
                         Position()\y = 78 ; Hier nich ein zweites mal AddElement() aufrufen!
Jetzt müsste man nur noch wissen, wie man eine dynamische Struktur hinbekommt, oder du machst folgendes:
Du arbeitest mit 3 Listen! Davon ist eine die x-Loordinatenliste, die andere ist die y-Koordinatenliste. Listen sind ja dynamisch, steht ja auch in der Hilfe. Die letzte Liste enthält dann die -wie sagt man?- zeiger bzw. Pointer zu den anderen Listen.
Warum so kompliziert? SO wie ich das versatnden habe, würde das obige Beiospiel nur hinsichtlich der Länge, also Anzahl der Schüsse dynamisch sein. Mehr Infos pro Schuss kannst du im Nachhinein nicht mehr ändern, du kannst also später nur noch die x- und y-Werte benutzen. Mit den 3 LinkedLists Hast du wieder die variable länge/Anzahl der Schüsse und kannst, da die 3. auch eine variable LinkedList ist, dieser 3. Liste immer mehr Pointer zu anderen LinkedLists speichern. Grob gesagt: Die 3. Liste ersetzt die Structure aus dem obigen Code Beispiel. Daran kann man am deutlichsten sehen, dass Strutce statisch/nicht veränderbar ist, LinkedLists aber schon.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

in welchen grössen-dimensionen befindet sich denn die element-anzahl der jeweiligen dimensionen? ich nehme mal an die "dynamik" bezieht sich nur auf die anzahl, nicht auf den typ/die struktur. wenn es sich nicht um millionen handelt, könnte man einen array ja auch provisorisch vor definieren, und wenn er zu klein wird, kopiert man ihn in einen neuen, welcher z.b. auf 20% mehr elemente dimensioniert wurde und verwirft dann den alten, so hat man erst mal wieder platz. (pseudo-dynamisch :roll: ) häng davon ab, wie oft sich die grösse voraussichtlich ändert und wie stark plötzliche änderungen sind. wenn immer einzelne tabellen-zellen dazukommen sind wohlmöglich LL's einfacher zu handhaben. wenn sich die zellen-anzahl plötzlich verdreifachen kann, ist es aber vielleicht besser arrays zu verwenden, die dann durch grössere ersetzt werden.

man könnte auch eine dimension mit pointer-elementen definieren. jedes element zeigt dann auf ein array der zweiten dimension. wenn du mehr zeilen brauchst, redimensionierst du das pointer-array und weist den zusätzlichen pointern neue arrays zu. wenn du mehr spalten brauchst, redimensionierst du alle arrays, auf die gezeigt wird.

@AND51
in PB gibt es die vordefinierte structure POINT :wink:
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Ja und was ist diese vordefinierte Structure POINT? Damit habe ich mich noch nie beschäftigt, ich habe immer eigene Structures bisher verwendet; ist dieses POINT ein dynamisches Structure? Wie kann man denn Structures dynamisch verändern?

Ich befinde mich auf der Ebene der einfachen Structures, ich habe noch nie weiter in der Hilfe gescrollt als bis zu den einfachen, das hat mir auch gereicht.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

wo ist den eigentlich das problem, das ganze nich dynamisch zu machen?

klar, ich bewundere klassischen programmierstil, aber in so nem fall mach ich doch mal schnell ein 1024x1024-array auf, in longs is das grad mal 4MB, da schiet doch heutzutag der hund drauf...

da führ ich noch 2 vars mit, die mir die momentane max-dim sagen, und gut is.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

:allright: stimmt schon und ist auch gut so, aber eigentlich beantwortet es ja nicht die frage.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Beitrag von Konne »

Naja habe mir jetzt ein Wenig memory Spielerei gebastelt. Nunja scheint zu tun. Obs schnell ist weiss ich net aber ich brauche nciht mehr speicher als ich brauche. Nunja theoretisch koennte man einfach mal auf gutglueck riesig reservieren aber ich mag halt auch alte Computer und wenn man schpn in PB arbeitet ...
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

wie gesagt, klassischer stil ok...

aber in dem fall is das doch echt babykacke.. also mach doch einfach das array 4 - 16 - 64 MB gross, kratzt doch nich.... performance macht heute mehr aus als speicher....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Beitrag von Konne »

Lol jetzt habe ich aber schon die hammer geile 200 Zeilen Pointerverbiege sache geschrieben jetzt werde ich die auch verwenden ;)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

XD mach doch.. aber ich pack dir ne 2-zeilen array-lösung hin die schneller is..
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten