PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++] Arrays/Felder



-|SoI|- JJ
04.09.2002, 08:28
Guten Morgen!

Ich wollte das eigentlich schon gestern posten, aber irgenwie bin ich nicht mehr dazu gekommen.

Ich brauche mal ein paar sinnvolle, leicht verständliche ("Betriebs-")Anleitungen, oder auch Tutorials zu Arrays/Feldern in C++.

Ich arbeite im Moment mit dem Buch "C++, objektorientiertes Programmieren von Anfang an - von Helmut Erlenkötter" als Leitfaden.

Leider ist dieser Teilbereich dort nicht so gut erklärt, wie ich es mir wünschen würde.

Danke schonmal im vorraus.

MfG
JJ

Bombwurzel
04.09.2002, 08:48
hmm, alleine damit kann man fast schon ganze Bücher füllen

Was genau willst du wissen?
Willst du wissen, was Arrays sind wozu sie da sind - eben so mal ne plastische Vorstellung davon bekommen, oder brauchst du nur konkrete Hinweise wie man in speziellen Anwendungsbeispielen mit ihnen unter C++ arbeitet?

-|SoI|- Shadow
04.09.2002, 11:31
Er will in C++ einen Würfel programmieren, der ein wenig über den Bildschirm rotiert........


greetz shadow

-|SoI|- JJ
04.09.2002, 11:32
Ich brauche eingetlich "sowohl als auch"...

Ich muss wissen (alles antürlich möglichst einfach),
_was_ Arrays sind,
_wie_ sie funktionieren,
_wozu_ sie da sind
und am besten auch _Anwendungsbeispiele_ .

Also im Prinzip alles zu dem Thema, von Anfang an.

Weils soviel ist, schicke ich schonmal ein "Danke" voraus ;-)

MfG
JJ

Bombwurzel
04.09.2002, 12:11
na denn will ich´s mal versuchen

also um eines vorweg zu schicken - alle Felder, die mehr als 4-dimensional sind, begreife ich auch nicht - von der Anwendung schon (da sind alle gleich) aber mein Kopf macht bei dem Versuch sich sowas vorzustellen einfach dicht :)


Also es gibt eindimensionale Felder, dabei handelt es sich nur um eine einfache Anreihung von Werten.

sowas sieht dann so aus

int werteliste[100] // ein Feld -Werteliste- mit bis zu 100 Integer-Einträgen

du kannst sebstverständlich auch Datentypen (i.e. float) in Arrays packen, du musst das Array dann halt nur entsprechend definieren


jetzt dasselbe mit 2 dimensionalen Feldern - die musst du dir vorstellen wie eine Tabelle

int tabelle [100][200] //eine Tabelle mit 100 Zeilen und 200 Spalten wird errichtet

damit kannst du schon mal kleine Datenbanken basteln

naja und 3, 4 und mehr dimensionale Felder funzen genauso


Okay, nächste Runde: Arrays mit Zahlen "bestücken" und auslesen


als allererstes kann man Arrays schon beim Erstellen mit Daten versorgen und zwar wie folgt:

int tabelle [4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};

oder aber ein Textfeld

char name[]={'Willi '};

womit man gleich wieder was gelernt hat:
Wenn man Arrays gleich bei der Initialisierung mit Daten einrichtet, braucht man ihre Größe nicht angeben, da sie automatisch ermittelt wird
Bei Text-Feldern ist das abschließende Leerzeichen ganz wichtig!!

innerhalb des Programms kann man die Felder wie folgt
beschreiben:

tabelle[x][y] = wert

Dabei müssen x und y mit den jew. Koordinaten geladen werden
Auslesen ist das gleiche.

ich hoffe damit hab ich erstmal etwas Licht ins Dunkel gebracht

-|SoI|- JJ
04.09.2002, 13:17
Super! In etwa das gleiche scheint in meinem Buch zu stehen, nur verstehe ich es da nicht. Anders bei dir, Danke.



int tabelle [4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15
,16}};


Ich verstehe hier aber nicht, warum du ausgerechnet diese Form der "Beladung" wählst. Also immer 4 zusammen.

Die zu dem Array gehörige Tabelle wäre etwa diese, oder?

[0].................. [1].................. [2].................... [3]
[ 0][ 1][ 2][ 3].. [ 0][ 1][ 2][ 3].. [ 0][ 1][ 2][ 3].... [ 0][ 1][ 2][ 3]
[ 1][ 2][ 3][ 4].. [ 5][ 6][ 7][ 8].. [ 9][10][11][12].. [13][14][15][16]

Ich hoffe, das die Tabele jetzt erkennbar ist... hat auch lang genug gedauert. ;-)

Mfg & Vielen Dank schonmal
JJ

Bombwurzel
04.09.2002, 13:44
okay, eigentlich sieht die entgültige Tabelle dann so aus


[01] [02] [03] [04]
[05] [06] [07] [08]
[09] [10] [11] [12]
[13] [14] [15] [16]


also ein Array von 4x4 Feldern

warum ich das so gemacht hab?
weil mir so schnell nix besseres einfiel ;)

-|SoI|- JJ
04.09.2002, 15:55
Die endgültige Ausgabe der Datei ist doch

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Die dazugehörige Tabelle entspricht doch meiner, oder?

Ein zweidimensionales Array, mit den Indexwerten 4 und 4 (also 0-3 jeweils) ergibt doch eine solche "graphische Darstellung".
Also quasi "Logiktabelle".


Ist es ebenfalls möglich, die Arrays mit

int tabelle [4][4]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};

zu beladen?
Oder gibt es da Unterschiede?

MfG&Thx
JJ

Bombwurzel
04.09.2002, 16:00
hmm, auf deine Art und Weise hab ich das nie gemacht, da ich es wie oben beschrieben mal gelernt hab.

muss ich doch glatt mal ausprobieren....

EDIT:
habs eben mal ausprobiert - scheint keine Unterschiede in beiden Schreibweisen zu geben
kewl - wieder was gelernt :)

Nighthero
05.09.2002, 01:37
Hi,

prinzipiell ist es vollkommen egal, ob man so:


int tabelle[4][4] = { { 1, 2, 3, 4 } , { 5, 6, 7, 8 }, { 9, 10, 11, 12}, { 13, 14, 15, 16 } };

oder so schreibt:


int tabelle[4][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };

Die erste Variante hat den Vorteil, daß sie übersichtlicher ist und man nicht alle Stellen mit Werten belegen muß, der Rest wird dann vom Compiler mit 0 oder '\0' je nach Variablentyp aufgefüllt, also etwa so:


int tabelle[4][4] = { { 1, 2, 3 },
{ 5, 6 },
{ 9, 10, 11, 12 },
{ 13, 14, 15, 16 } };


In dem Fall kann man die Dimensionsangaben auch weglassen, der Compiler rechnet dann einfach:
größte Elementeanzahl x Gruppenanzahl = 4 x 4

Gruß Nighthero

-|SoI|- JJ
05.09.2002, 12:20
Cool, danke!

Jetzt habe ich sogar den Abschnitt aus dem "schönen" Buch verstanden, wo es darum geht, dass man etwas weglassen kann.

Das war vorher auch so ein Problem.

MfG & Megadanke
JJ

Nighthero
07.09.2002, 02:41
Hi,

eine kleine Ergänzung, ich glaube, das könnte sonst bei meinem vorherigen Beitrag falsch verstanden werden. Weggelassen werden darf nur die erste Dimension, also so:

int tabelle[][4] = { { 1, 2, 3 },
{ 5, 6 },
{ 9, 10, 11, 12 },
{ 13, 14, 15, 16 } };
das nächste funktioniert nicht:

int tabelle[][] = { { 1, 2, 3 },
{ 5, 6 },
{ 9, 10, 11, 12 },
{ 13, 14, 15, 16 } };
Das Ganze funktioniert auch als Funktionsparameter:


void MyFunction(int iValue[][10], char *szMessage[][20])
{
printf("Wert 0-0: %01d\nWert 1-0: %01d\nWert 5-2: %01d", iValue[0][0], iValue[1][0], iValue[5][2]);
printf("%s\n%s", &szMessage[0][0], &szMessage[1][0]);
printf("%s\n%s", szMessage[0], szMessage[1]); // das gleiche wie die vorherige Zeile
}

Auf möglichen Indexüberlauf muss der Programmierer selbst achten!

Gruß Nighthero