Ubungspaket 14 ¨
Eindimensionale Arrays
Ubungsziele: ¨
Deklaration und Verwendung eindimensionaler Arrays Skript:
Kapitel: 33 Semester:
Wintersemester 2021/22 Betreuer:
Thomas, Tim und Ralf Synopsis:
Nach dem wir nun die wesentlichen Datentypen kennengelernt haben,
kommt etwas neues dazu; die eindimensionalen Arrays. Mit Arrays
kann man mehrere Variablen gleichen Typs zusammenfassen, so wie
wir es aus der Mathematik in Form von Vektoren, (indizierten) Koef-
fizienten und dergleichen kennen.
Teil I: Stoffwiederholung
Aufgabe 1: Aufbau eines eindimensionalen Arrays
Aus welchen Komponennten besteht eine Array-Definition (ohne Initialisierung)?
1. 2.
3. 4.
Aufgabe 2: Array-Gr¨ oße und g¨ ultige Indizes
Nehmen wir an, wir h¨atten ein Array der Gr¨oße n (eines mit n Elementen), wobei n stell- vertretend f¨ur eine ganzzahlige Konstante wie beispielsweise 14 ist.
Frage: Was sind die g¨ultigen Indizes?
Aufgabe 3: Speicherbelegung
Wie viele Bytes belegt ein Array mitn Elementen mindestens im Arbeitsspeicher (RAM), wenn der Elementtyp genau b Bytes belegt?
Skizziere ein Array a mit 6 Elementen vom Typ int unter der Annahme, dass ein int genau 4 Bytes belegt und die Startadresse des Arrays 0x1000 ist.
Definition: Adresse Variable Typ Gr¨oße
0x1018 . . . . . . . . . . . .
0x1014 . . . . . . . . . . . .
0x1010 . . . . . . . . . . . .
0x100C . . . . . . . . . . . .
0x1008 . . . . . . . . . . . .
0x1004 . . . . . . . . . . . .
0x1000 . . . . . . . . . . . .
Teil II: Quiz
Aufgabe 1:
” Standard“ Arrays
Gegeben seien die folgenden vier Definitionen:
1. int a[ 3 ];
2. char b[ 4 ];
3. double c[ 2 ];
4. int d[ 1 ];
Welche Indizes sind bei den jeweiligen Arrays erlaubt und welche Werte haben die Array- Elemente unmittelbar nach der Definition?
Array Indizes Werte
a . . . . . . . .
b . . . . . . . .
c . . . . . . . .
d . . . . . . . .
Aufgabe 2: Implizit definierte Arrays
Die Gr¨oße eines Arrays kann man auch
”implizit“ durch eine zus¨atzliche Initialisierung definieren. Gegeben seien die folgenden vier Definitionen:
1. int e[] = { 3, 4, 5 };
2. int f[] = { -1, -3 };
3. double g[] = { , , 23.0, };
4. double h[] = { -3,0 , , 2.0 };
Welche Gr¨oßen haben die Arrays, welche Indizes sind jeweils erlaubt und welche Werte haben die einzelnen Elemente unmittelbar nach der Definition?
Array Gr¨oße Indizes Werte
Teil III: Fehlersuche
Aufgabe 1: Arbeiten mit mehreren Zahlen
Das folgende Programm soll zehn Zahlen einlesen und in einem Array ablegen, anschließend die Summe ausrechnen und diese am Ende ausgeben. Leider hatDr. One-Neuronwieder diverse Fehler gemacht, die ihr finden und korrigieren sollt.
1 # i n c l u d e < stdioh >
2
3 # d e f i n e N =10 4
5 int man ( int argc , c h a r ** a r g v )
6 {
7 int i , sum , a [ N ];
8 for ( i = 0 , i < N , i = i + 1 )
9 {
10 p r i n t f ( B i t t e W e r t f u e r a [ % d ] e i n g e b e n : , i ) ; 11 s c a n f ( " % d " , & ( a [ ] ) ) ;
12 }
13 for ( i = 1; sum = 0; i <= N ; i = i + 1 )
14 sum = sum + a { i };
15 p r i n t f ( " Die S u m m e der Z a h l e n b e t r a e g t % d \ n " , N , sum ) ;
16 }
Teil IV: Anwendungen
Aufgabe 1: Deklaration einfacher Arrays
Die folgende ¨Ubungsaufgabe ist nicht wirklich sinnvoll, sondern dient haupts¨achlich dem Ein¨uben des Hantierens mit eindimensionalen Arrays.
1. Aufgabenstellung
Ziel der Aufgabe ist es, ein Programm zu erstellen, das folgende Arrays enth¨ahlt:
1. ein Array mit 10 Elementen vom Typint, 2. ein Array mit 3 Elementen vom Typchar und 3. ein Array mit 100 Elementen vom Typdouble.
Des Weiteren sollen die Elemente dieser drei Arrays initialisiert werden. Dies ge- schieht vorzugsweise in einer Schleife. Diese Schleife soll so aufgebaut sein, dass eine Gr¨oßen¨anderung des Arrays keine weiteren ¨Anderungen in den Initialisierungsschlei- fen nach sich ziehen sollte; mit anderen Worten: Eine Gr¨oßen¨anderung sollte durch eine einzige Modifikation vollst¨andig realisiert sein.
2. Kodierung
Aufgabe 2: Implizite Gr¨ oßendefinitionen
Wir haben gelernt, dass man in der Programmiersprache C die Gr¨oße eines Arrays auch indirekt und zwar durch die initialisierte Definition festlegen kann. Gegenstand dieser Auf- gabe ist das aktive Ein¨uben dieses Konzeptes.
1. Aufgabenstellung
Entwickle ein kleines C-Programm, in dem die Gr¨oßen von mindestens vier Arrays implizit durch ihre Initialisierung definiert werden. Zwei Beispieldefinitionen sind bereits weiter unten angegeben.
Zur weiteren Verwendung der Gr¨oßen, beispielsweise in Initialisierungsschleifen, ist die Gr¨oße jedes Arrays durch ein geeignetes#define-Makro zu
”berechnen“.
Zur Best¨atigung, dass alles korrekt abgelaufen ist, sind die einzelnen Elemente mittels geeigneter Schleifen auszugeben. In diesen Schleifen sind nat¨urlich oben erw¨ahnte
#define-Makros zu verwenden.
2. Pflichtenheft: Aufgabe, Eingabe, Ausgabe, Sonderf¨alle
3. Testdaten
Array Typ Initialwerte C-Definitionen
a int 1, 2, 3, 4 . . . . . . . .
x double 1.0, 2.0 . . . . . . . . ... ... ... . . . . . . . . ... ... ... . . . . . . . .
4. Kodierung