Arrays in C Ein Array ist eine Variable, die aus einer Anzahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen. Beispiele sind Listen Tabellen Arrays können eine oder mehrere Dimen-sionen haben. (C) Harder 2007 16.01.2019
Beispiele eindimensionale Arrays Listen Vektoren zweidimensionale Arrays Tabellen Matrizen ein TicTacToe-Spielfeld ein Excel-Arbeitsbatt dreidimensionale Arrays „Zauber“würfel (C) Harder 2007 16.01.2019
Eindimensionale Arrays Listen sind Eindimensionale Arrays. Folgende Liste hat 5 Positionen Man muß zwischen der Position der Zelle und dem Inhalt der Zelle unterscheiden. In C hat die erste Zelle die Positionsnummer 0. Die Zelle an dieser Position enthält den Wert 9. Die letzte Zelle hat die Positionsnummer 4. Ihr Inhalt ist 8. (C) Harder 2007 16.01.2019
Deklaration einer Liste Die Beispielliste Liste wird durch folgende Anweisung deklariert: int Liste [5] ; Die Liste ist vom Typ int. Alle Elemente sind Integerwerte. Die Liste hat 5 Zellen. Die Zellen heißen Liste[0], Liste [1], Liste[2], Liste [3], Liste[4]. Die Liste kann bei der Deklaration durch das Aufzählen der Elementwerte durch die folgende Anweisung initialisiert werden. int Liste [ 5] = { 9, 1, 5, 3, 8 } ; (C) Harder 2007 16.01.2019
Wertzuweisung Zugriff auf die im Feld gespeicherten Werte z.B. wie folgt: x = Liste [0] ; // x wird der Wert 9 zugewiesen. y = Liste [4] ; // y wird der Wert 8 zugewiesen. x = Liste [5]; // Anweisung verursacht i. d. Regel einen Speicherzugriffsfehler, da auf Speicherbereich außerhalb des reservierten Bereichs zugegriffen wird. => Bei der Benutzung von Arrays liegt die Verantwortung über die Einhaltung der Bereichsgrenzen beim Programmierer ! (C) Harder 2007 16.01.2019
Eingabe Die Werte von Liste können mit einer Schleife ein-gelesen werden. Dazu deklarieren wir einen Positionszähler pos, der die Zellen von 0 bis 4 zählen kann. Es ist darauf zu achten, daß die letzte Position den Wert 4 hat, pos darf daher den Wert 5 nicht mehr annehmen. for (pos = 0; pos < 5; pos ++) { fflush (stdin) ; scanf (“%i“ , & Liste [ pos ] ) ; } (C) Harder 2007 16.01.2019
TAB-Abstand herstellen Ausgabe Die Werte von Liste können mit einer Schleife aus- gegeben werden. Dazu deklarieren wir einen Positionszähler pos, der die Zellen von 0 bis 4 zählen kann. Es ist darauf zu achten, daß die letzte Position den Wert 4 hat, pos darf daher den Wert 5 nicht mehr annehmen. for ( pos = 0 ; pos < 5 ; pos++ ) { printf ( ”%i” , Liste [pos] ) ; printf ( ”\t” ) ; } TAB-Abstand herstellen (C) Harder 2007 16.01.2019
TAB-Abstand herstellen Liste.cpp #include <stdio.h> void main ( ) { int Liste [5] ; int pos = 0 ; for ( pos = 0 ; pos < 5 ; pos++ ) fflush (stdin) ; scanf ( ”%i” , & Liste [pos] ) ; } printf ( ”%i” , Liste [pos] ) ; printf ( ”\t” ) ; TAB-Abstand herstellen (C) Harder 2007 16.01.2019
Zweidimensionale Arrays (C) Harder 2007 16.01.2019
Zweidimensionale Arrays Ein zweidimensionales (3,4)-Array ist wie folgt aufgebaut: zeilenpos = 0 spaltenpos = 0 3 Zeilen: 0, 1, 2 zeilenpos = 2 spaltenpos = 3 4 Spalten: 0, 1, 2, 3 (C) Harder 2007 16.01.2019
Deklaration eines zweidimensionalen Arrays Die Beispieltabelle Tabelle wird durch folgende Anweisung deklariert int Tabelle [3][4] ; Die Tabelle ist vom Typ int. Ihre Elemente sind Integerwerte. Die Tabelle hat 12 Zellen. Die Feldelemente von Tabelle heißen Tabelle [0][0], Tabelle [0][1], Tabelle [0][2], Tabelle [0][3], .... Tabelle [2][3]. Die Tabelle kann bei der Deklaration durch das Aufzählen der Elementwerte durch die folgende Anweisung initialisiert werden: int Tabelle [ 3] [ 4] = { 3, 2, 4, 3, 6, 1, 4, 5, 6, 7, 8, 1 } ; (C) Harder 2007 16.01.2019
Schleife Die Eingabe der Elemente von Tabelle kann z.B. durch eine verschachtelte Schleife erfolgen. . Dazu deklarieren wir einen Zeilenzähler zeilenpos, der die Zeilen von 0 bis 2 zählen kann. Es ist darauf zu achten, daß die letzte Position der Zeile den Wert 2 hat. Dazu deklarieren wir einen Positionszähler spaltenpos, der die Spalten von 0 bis 3 zählen kann. Es ist darauf zu achten, daß die letzte Position der Spalte den Wert 3 hat. Die äußere Schleife durchläuft die Zeilen, die innere die Spalten von Tabelle. (C) Harder 2007 16.01.2019
Ende eingelesene Zeile Eingabe Die Werte von Tabelle werden durch folgende Schleife zeilenweise eingelesen for ( zeilenpos = 0 ; zeilenpos < 3 ; zeilenpos++ ) { for ( spaltenpos = 0 ; spaltenpos < 4 ; spaltenpos++ ) fflush (stdin) ; scanf (“%i“ , &Tabelle [zeilenpos] [spaltenpos] ) ; } Ende eingelesene Zeile (C) Harder 2007 16.01.2019
Formatierte Ausgabe Die Werte von Tabelle werden durch folgende Schleife zeilenweise ausgegeben: for ( zeilenpos = 0; zeilenpos < 3 ; zeilenpos++ ) { for ( spaltenpos = 0; spaltenpos < 4 ; spaltenpos++ ) printf (“%i“ , Tabelle [zeilenpos] [spaltenpos] ) ; printf ( “\t“ ) ; } printf ( “\n“ ) ; Ende der Ausgabezeile erreicht Zeilenumbruch erzeugen (C) Harder 2007 16.01.2019
C Quellcode #include <stdio.h> void main ( ) { int Tabelle [3] [4] ; int zeilenpos = 0 , spaltenpos = 0 ; for ( zeilenpos = 0; zeilenpos < 3 ; zeilenpos ++ ) for ( spaltenpos = 0; spaltenpos < 4 ; spaltenpos ++ ) fflush ( stdin ) ; scanf ( ”%i” , & Tabelle [zeilenpos ] [spaltenpos ] ) ; } for (zeilenpos = 0; zeilenpos < 3 ; zeilenpos ++ ) for (spaltenpos = 0; spaltenpos < 4 ; spaltenpos ++ ) printf ( ”%i” , Tabelle [zeilenpos ] [spaltenpos ] ) ; printf ( ”\t” ) ; printf ( ”\n” ) ; (C) Harder 2007 16.01.2019
Aufgaben Aufgaben (1) Schreiben Sie ein C-Programm. Das Programm soll ein aus Integerwerten bestehendes (3,4)-Array einlesen und dann wahlweise eine bestimmte Zeile, eine bestimmte Spalte oder das gesamte Array ausgeben. (2) Schreiben Sie ein C-Programm. Das Programm soll ein aus Integerwerten bestehendes (3,4)-Array einlesen und prüfen, ob ein bestimmter int-Wert (z.B. 5) ein Element des Arrays ist. Ist dies der Fall, soll die Position (Zeile, Spalte) des betreffenden Elements ausgegeben werden. (3) Schreiben Sie ein C-Programm. Das Programm soll ein aus Integerwerten bestehendes (3,4)-Array einlesen. Das Programm soll den größten Wert des Arrays finden. Das Maximum und seine Position (Zeile, Spalte) sind auszugeben ! (C) Harder 2007 16.01.2019