Verständnisproblem 2-dimensionale Arrays
Übersicht BlitzBasic Allgemein
Richie1984Betreff: Verständnisproblem 2-dimensionale Arrays |
Di, Apr 19, 2016 13:03 Antworten mit Zitat |
|
---|---|---|
Heyho liebe BB-Gemeinde,
nachdem ich hier schon länger lesend unterwegs bin, stellt sich bei meinen ersten BlitzBasic3D-Versuchen nun ein kleines Verständnisproblem, ich hoffe ihr könnt mir etwas auf die Sprünge helfen. Es geht um Arrays sowie deren Data- und Read-Befehle. Bei einem 1-dimensionalen Array ist noch alles klar soweit: BlitzBasic: [AUSKLAPPEN] Dim testfeld(5) Die erzielte Ausgabe sollte sein: 0 1 2 3 4 5 Bei einem 2-dimensionalen Testfeld müsste ich ja jetzt 2 for-next Schleifen in einander verschachteln, oder? BlitzBasic: [AUSKLAPPEN] Dim testfeld(5,5) Lässt sich das so darstellen? Gewünscht wird in diesem Beispiel die Ausgabe 0a 1b 2c usw. Das ganze soll später der Koordinatenspeicherung dienen. Mein grundlegendes Verständnisproblem bezieht sich jetzt vor allem auf die beiden Data-Reihen. Wie muss ich diese beiden Reihen formatieren, so dass immer nacheinander der erste x-Wert und der erste y-Wert etc. kombiniert werden? Wäre es zum Beispiel auch mit "Data 0,1,2,3,4,5,a,b,c,d,e,f" möglich? Woher weiß der Read-Befehl, wann er welche Stelle der Data-Reihe einlesen soll? Ich bedanke mich schonmal vorab für eure Hilfe. |
||
Mathias-Kwiatkowski |
Di, Apr 19, 2016 17:48 Antworten mit Zitat |
|
---|---|---|
also ich benutze nie den "data" befehl da es ebenso einfacher geht grad wenn man eine lade / speicher routine erstellen mag.
mein bsp wäre folgendes: Code: [AUSKLAPPEN] Dim Map(2,2)
Map(0,0)=1 Map(0,1)=1 Map(1,2)=1 Map(2,2)=1 For X%=0 To 2 For Y%=0 To 2 Print "X="+x+",Y="+y+" Ergebniss:"+Map(x,y) Next Next WaitKey so gehts auch mit einem 3D Array hier ein bsp Code: [AUSKLAPPEN] Dim Map(2,2,1)
Map(0,0,0)=1 Map(0,1,0)=1 Map(1,2,0)=1 Map(2,2,0)=1 Map(1,1,1)=1 Map(1,0,1)=1 Map(1,2,1)=1 Map(2,1,1)=1 For X%=0 To 2 For Y%=0 To 2 Print "X="+x+",Y="+y+" Ebene:0 Ergebniss:"+Map(x,y,0) Next Next For X%=0 To 2 For Y%=0 To 2 Print "X="+x+",Y="+y+" Ebene:1 Ergebniss:"+Map(x,y,1) Next Next WaitKey Edit : nochmal zu deiner frage das ist dein bsp code: Code: [AUSKLAPPEN] Dim testfeld(5,5)
Data 0,1,2,3,4,5 Data a,b,c,d,e,f For x = 0 To 5 For y = 0 To 5 Read testfeld(x,y) Next Next For x = 0 To 5 For y = 0 To 5 Print testfeld(x,y) Next Next soetwas geht nicht! soweit ich weiß kann data nur int oder maximal float aber strings glaube ich kaum und wenn sollte es so aussehen "a","b" usw. woher das read feld weiß wo es ist erklärrt sich ganz einfach Data 0,1,2,3,4,5 Data 0,1,2,3,4,5 Data 0,1,2,3,4,5 Data 0,1,2,3,4,5 Data 0,1,2,3,4,5 Data 0,1,2,3,4,5 dein dim array gibt vor von 0 zu 5 (6 felder X) und auch ( 6 felder Y ) fehlt in diesem fall eine stelle wird es wohl nich mehr ausgelesen werden können. (geschätzt nicht getestet) aber empfehlenswert würde ich einfach sagen richte dich an meinen bsp's. glaube das es so ganz gut sein sollte. |
||
Skype: Anarchie1984
http://projektworks.de/maxbase/ Icq - Erneuert am 21.08.2017 Yahoo - Erneuert am 21.08.2017 |
XeresModerator |
Di, Apr 19, 2016 19:47 Antworten mit Zitat |
|
---|---|---|
Data Blöcke können auch Texte enthalten, sagt die Hilfe.
Wenn ich mich recht entsinne, kann man bloß keine Variablen/Funktionen/Berechnungen darin unterbringen, weil die eben statisch an die Exe gehangen werden. Vielleicht macht es in der Praxis kaum einen unterschied, aber die Variablen sollten andersherum durch iteriert werden: Code: [AUSKLAPPEN] For y = 0 To 5
For x = 0 To 5 Print testfeld(x,y) Next Next Dann muss nicht so wild im Speicher hin und her gesprungen werden (die Daten liegen linear hintereinander im Speicher, auch wenn das Array mehrere Dimensionen hat). |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
HolzchopfMeisterpackerBetreff: Re: Verständnisproblem 2-dimensionale Arrays |
Di, Apr 19, 2016 20:01 Antworten mit Zitat |
|
---|---|---|
Hallo Richie!
Richie1984 hat Folgendes geschrieben: Bei einem 2-dimensionalen Testfeld müsste ich ja jetzt 2 for-next Schleifen in einander verschachteln, oder?
Ganz genau. Aber hier kommt der Haken (und da denke ich, tappst du in die Falle): Deine beiden verschachtelten Schleifen BlitzBasic: [AUSKLAPPEN] For x = 0 To 5 Rufen nämlich 6 * 6 = 36 mal Read auf - du stellst aber nur 12x Data zur Verfügung, das wird nicht das gewünschte Ergebnis bringen. Um deine gewünschte Ausgabe zu erhalten, müsstest du schon mit Types arbeiten oder mit zwei Arrays was zurecht basteln. Halt in der Annahme, dass du effektiv im Sinn hast, zwei unterschiedliche Datentypen (Int und String) in einer Struktur unterzubringen. (Vielleicht wähltest du ja auch nur a,b,c der Verständlichkeit wegen?) Du bräuchtest in dem Fall auch nicht ein 6x6 Array... Die Unterbringung in den Data-Reihen könnte dann so aussehen: BlitzBasic: [AUSKLAPPEN] Data 0, "a", 1, "b", 2, "c" Alternativ könntest du auch zuerst die Felder 1,2,3... und dann die a,b,c... auslesen, wenn du die Data-Blöcke wie in deinem Post anordnest. Ach und schau dir mal Restore an Aber zurück zum Verständnisproblem Richie1984 hat Folgendes geschrieben: Das ganze soll später der Koordinatenspeicherung dienen.
Bei einem 2D-Array muss das Array selbst nicht der Koordinatenspeicherung dienen. Die Koordinierung übernehmen ja bereits die verschachtelten Schleifen (die eine iteriert in x-, die andere in y-Richtung). Stell dir ein 2D-Array einfach als Stück Karo-Papier vor, dass die Grösse hat, die du mit Dim angibst: Die einzelnen Felder beinhalten dann irgendwelche Daten (typischerweise Ganzzahlen, die etwas repräsentieren) und ansprechen tust du die Felder via meinarray(x,y) mfG Holzchopf Edit Wenn's wirklich um die Speicherung von Koordinatenpaaren geht, reicht ein Array der Grösse Anzahlpunkte x 2. 2 weil einmal x- und einmal y-Koordinate. |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
Midimaster |
Mi, Apr 20, 2016 8:38 Antworten mit Zitat |
|
---|---|---|
für mich sieht das so aus, als wollte Richie mit 1,2,3 und a,b,c nur die beiden Dimensionen verdeutlichen.
Code: [AUSKLAPPEN] 0 1 2 3 4 5
------------------ a| x x x x x x b| x x x x x x c| x x x x x x d| x x x x x x e| x x x x x x e| x x x x x x damit liegst Du mit dem Array testfeld(5,5) schon ganz richtig. Es ist allerdings nicht nötig, die "Bezeichnungen" der Felder einzulesen. Es genügt, deren Inhalt im Datafeld abzulegen: DataCode: [AUSKLAPPEN] Data 1,1,1,1,1,1
Data 1,2,0,0,0,1 Data 1,0,2,7,0,1 Data 1,0,0,2,0,1 Data 1,0,0,0,2,1 Data 1,1,1,1,1,1 ergibt zum Beispiel solch ein Spielfeld: Code: [AUSKLAPPEN] 0 1 2 3 4 5
------------------ a| 1 1 1 1 1 1 b| 1 2 1 c| 1 2 7 1 d| 1 2 1 e| 1 2 1 e| 1 1 1 1 1 1 Dass heißt, ein Array-Element z.b. testfeld(2,3) spiechert nicht einen X und einen Y-Wert, sondern nur einen "Inhaltswert" z.b. "7" an der Position 2/3. Ein vollständiges DATA-Feld bräuchte daher 36 Einträge Alternative: willst Du ein DATA-Feld, bei dem jeweils die drei Informationen X-Koordinate, Y-Koordinate und deren Inhalt eingelesen werden sollen, so könntenst Du das so machen: Code: [AUSKLAPPEN] Dim testfeld(5,5) ; Data-Struktur: X , Y , Inhalt Data 0, 0, 1 Data 2, 2, 2 Data 2, 3, 7 ...usw For i = 1 To 3 ; abhängig von der Anzahl der Zeilen Read x Read y Read testfeld(x,y) Next For x = 0 To 5 For y = 0 To 5 Print testfeld(x,y) Next Next |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
Richie1984 |
Mi, Apr 20, 2016 8:58 Antworten mit Zitat |
|
---|---|---|
Vielen lieben Dank für eure sehr ausführlichen und hilfreichen Antworten. ihr habt mir sehr weitergeholfen.
Mit 1,2,3 und a,b,c wollte ich tatsächlich nur die beiden Dimensionen verdeutlichen. Der elementare Denkfehler war tatsächlich, dass ich davon ausging dim blabla(5,5) erzeuge ein Feld mit 2 Spalten a 6 Feldern. Da es tatsächlich ja aber 6*6 Felder sind, hat das logischerweise nie geklappt mit dem einlesen. Geplant war, über diese Methode eine Art Arena zu definieren, wobei in diesem Feld die X,Y,Z Koordinaten der 4 Wände und des Bodens abgelegt und ausgelesen werden können. Ich glaube aber mittlerweile, dass es für mein ordinäres erstes Szenario deutlich weniger umständlich ist, die 4 Wände manuell zu platzieren Aber nochmal vielen vielen Dank, nun habe ich die dämlichen Arrays endlich so halbwegs kapiert Ich werde euch sicher noch öfters mit Noob-Fragen beschäftigen |
||
Übersicht BlitzBasic Allgemein
Powered by phpBB © 2001 - 2006, phpBB Group