2 dimensionale dynamische Tabelle
2 dimensionale dynamische Tabelle
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...
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...
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:
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.
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!
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
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
) 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

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

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.
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
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
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.
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.
Der Weise weiß, dass er ein Narr ist.
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 ...
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22