[C++] Arrays/Felder

-|SoI|- JJ

Newbie
Registriert
Sep. 2002
Beiträge
5
Arrays/Felder

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
 
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?
 
Er will in C++ einen Würfel programmieren, der ein wenig über den Bildschirm rotiert........


greetz shadow
 
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
 
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
 
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
 
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 ;)
 
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
 
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 :)
 
Zuletzt bearbeitet:
Hi,

prinzipiell ist es vollkommen egal, ob man so:
Code:
int tabelle[4][4] = { { 1, 2, 3, 4 } , { 5, 6, 7, 8 }, { 9, 10, 11, 12}, { 13, 14, 15, 16 } };
oder so schreibt:
Code:
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:
Code:
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
 
Supi

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
 
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:
Code:
int tabelle[][4] = { {  1,  2,  3     },
                     {  5,  6         },
                     {  9, 10, 11, 12 },
                     { 13, 14, 15, 16 } };
das nächste funktioniert nicht:
Code:
[COLOR=red]int tabelle[][] = { {  1,  2,  3     },
                    {  5,  6         },
                    {  9, 10, 11, 12 },
                    { 13, 14, 15, 16 } };[/COLOR]
Das Ganze funktioniert auch als Funktionsparameter:
Code:
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]); [COLOR=green]// das gleiche wie die vorherige Zeile[/COLOR]
}
Auf möglichen Indexüberlauf muss der Programmierer selbst achten!

Gruß Nighthero
 
Zurück
Oben