AdminMod.de
https://www.adminmod.de/

kein 3-dimensionales Array?
https://www.adminmod.de/viewtopic.php?t=2813
Seite 1 von 1

Autor:  Weaselweb [ 03.05.2002, 11:42 ]
Betreff des Beitrags:  kein 3-dimensionales Array?

ich war heute einigermaßen überrascht, als ich feststellte, dass es bei Small keine 3-D Arrays gibt. :(
nun hab ich das Problem, wie ich das umgehen kann. Ich hab nur die Idee mit einem 2. Array das auszugleichen, oder weiß jemand von euch eine elegantere Lösung? :-?

Autor:  daRope [ 09.05.2002, 16:25 ]
Betreff des Beitrags: 

Du kannst sogar ein 1-D Array benutzen.... :)

Autor:  Biohazard1 [ 09.05.2002, 19:21 ]
Betreff des Beitrags: 

Letztenendes ist jedes Array 'eindimensional' im Speicher abgelegt.

Bio

Autor:  Weaselweb [ 10.05.2002, 07:38 ]
Betreff des Beitrags: 

Zitat:
Du kannst sogar ein 1-D Array benutzen.... :)
ach nee, das wusste ich jetzt nicht
mh, also bleibt mir nix anderes übrig, als mehrere arrays zu nutzen

Autor:  daRope [ 10.05.2002, 08:25 ]
Betreff des Beitrags: 

Wieso mehrere Arrays?

Autor:  Weaselweb [ 10.05.2002, 10:24 ]
Betreff des Beitrags: 

naja, wenn ich keine 3D-Felder habe muss ich die mir aus mehreren "bauen"

Autor:  daRope [ 10.05.2002, 10:28 ]
Betreff des Beitrags: 

Achso, jetzt, aha. Irgendwie habe ich mal wieder Unfug gelesen, naemlich "2d Array" statt "2. Array". Drum dachte ich Du hast den Loesungsansatz schon.

Wenn Du ein 3-d Array mit festen Dimensionen hast, kannst Du das ganze auch als 2-d bzw. 1-d Array erstellen. Du musst nur wissen, welche Groesse Deine Dimensionen haben. (Macht man in der Bildverarbeitung staendig).

Bleistiel:
Code:
/* Ein 3-d Array, das auf 2 Dimensionen Strings (die dritte DImension) speichert */
/* Also eine 2-d Stringtabelle */

#include <console>
#include <core>

/* Funktion zum Befuellen der Tabelle mit Strings */
set_string_2d( zweiD[], dX, dY, maxlen, x, y, string[] ) {

   // Position im der Tabelle bestimmen.
	new insert = (y*dX + x) * maxlen;
	new pos = insert;
	new i = 0;
	new len = strlen( string );
	
	if ( len > maxlen ) len = maxlen;

   /* String an dieser Stelle hineinschreiben (in die 3. Dimension) */
	while ( pos < insert+maxlen ) {
		while ( pos < insert+len ) {
			zweiD[pos] = string[i];
			++pos; ++i;
		}  // while
         /* Auffuellen mit Nullen */
		zweiD[pos] = '^0';
		++pos;
	}  // while

}


/* Funktion zum Ausgeben der Tabelle */
print_string_2d( const dreiD[], dX, dY, dZ ) {
	new x,y,z;
	new cChar;
	new pos = 0;

	for ( y = 0; y < dY; ++y ) {
		for ( x = 0; x < dX; ++x ) {
			for ( z = 0; z < dZ; ++z ) {
				cChar = dreiD[pos]?dreiD[pos]:' ';
				printf( "%c",  cChar );
				++pos;
			}  // for

			printf( "   " );
		}  // for

		printf( "^n" );
	} // for
}

/* Funktion zum Auslesen eines Strings */
get_string_2d( string[], x, y, zweiD[], dX, dY, dZ ) {

	new pos = (y*dX + x) * dZ;
	new i = 0;
	
	while ( zweiD[pos] != 0 ) {
		string[i] = zweiD[pos];
		++pos; ++i;
	}  // while
	zweiD[pos] = '^0';
}


/* Das ganze Testen */
main() {

	const dX = 4;
	const dY = 5;
	const dZ = 12;
	const dim = dX * dY * dZ;

   /* Dies ist nun ein Array in dem die drei Dimensionen hintereinenader stehen */
   /* Reihenfolge ist z,x,y. Man kann sich das ganze als 2-d Flaeche vorstellen, 
       auf der Hochhaeuser Stehen. Beim Durchlaufen klappert man erst alle
       Stockwerke des Hauses an Position (0,0) ab, dann (1,0), (2,0), usw. */
	new einD[dim];

	new string[dZ];

	set_string_2d( einD, dX, dY, dZ, 0, 0, "null" );
	set_string_2d( einD, dX, dY, dZ, 1, 0, "eins" );
	set_string_2d( einD, dX, dY, dZ, 2, 0, "zwei" );
	set_string_2d( einD, dX, dY, dZ, 3, 0, "drei" );
	set_string_2d( einD, dX, dY, dZ, 4, 0, "vier" );
	set_string_2d( einD, dX, dY, dZ, 0, 1, "fuenf" );
	set_string_2d( einD, dX, dY, dZ, 1, 1, "sechs" );
	set_string_2d( einD, dX, dY, dZ, 2, 1, "sieben" );
	set_string_2d( einD, dX, dY, dZ, 3, 1, "acht" );
	set_string_2d( einD, dX, dY, dZ, 4, 1, "neun" );
	set_string_2d( einD, dX, dY, dZ, 0, 2, "zehn" );
	set_string_2d( einD, dX, dY, dZ, 1, 2, "elf" );
	set_string_2d( einD, dX, dY, dZ, 2, 2, "zwoelf" );
	set_string_2d( einD, dX, dY, dZ, 3, 2, "dreizehn" );
	set_string_2d( einD, dX, dY, dZ, 4, 2, "vierzehn" );
	set_string_2d( einD, dX, dY, dZ, 0, 3, "fuenfzehn" );


	print_string_2d( einD, dX, dY, dZ );

	get_string_2d( string, 2, 1, einD, dX, dY, dZ );
	printf( "^n^nString an Postition (%d,%d) ist '%s'.", 2, 1, string );
	

}

Ergibt als Ergebnis:
Code:
null          eins         zwei          drei            vier
fuenf       sechs      sieben       acht            neun
zehn        elf           zwoelf       dreizehn     vierzehn
fuenfzehn
 
String an Postition (2,1) ist 'sieben'. 
Obiger Code ist schnell zusammengeschrieben (aber gecheckt) und daher kein Beispiel fuer besondere Effizienz.

*edit* Super, und das nennt sich fixed font :roll: *edit*

Seite 1 von 1 Alle Zeiten sind UTC+01:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/