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