Übungspaket 14 Eindimensionale Arrays Übungsziele: Deklaration und Verwendung eindimensionaler Arrays Skript: Kapitel: 33 Semester: Wintersemester 2017/18 Betreuer: Kevin, Theo, Thomas 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) Koeffizienten 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öße und gültige Indizes Nehmen wir an, wir hätten ein Array der Größe n (eines mit n Elementen), wobei n stellvertretend für eine ganzzahlige Konstante wie beispielsweise 14 ist. Frage: Was sind die gültigen Indizes? Aufgabe 3: Speicherbelegung Wie viele Bytes belegt ein Array mit n 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 0x1018 0x1014 0x1010 0x100C 0x1008 0x1004 0x1000 Variable Typ Größe ............. ...... ......... ............. ...... ......... ............. ...... ......... ............. ...... ......... ............. ...... ......... ............. ...... ......... ............. ...... ......... Einführung in die Praktische Informatik, Wintersemester 2017/18 14-1 Teil II: Quiz Aufgabe 1: Standard“ Arrays ” Gegeben seien die folgenden vier Definitionen: 1. 2. 3. 4. int char double int a[ b[ c[ d[ 3 4 2 1 ]; ]; ]; ]; Welche Indizes sind bei den jeweiligen Arrays erlaubt und welche Werte haben die ArrayElemente unmittelbar nach der Definition? Array a b c d Indizes Werte ................... .......................... ................... .......................... ................... .......................... ................... .......................... Aufgabe 2: Implizit definierte Arrays Die Größe eines Arrays kann man auch implizit“ durch eine zusätzliche Initialisierung ” definieren. Gegeben seien die folgenden vier Definitionen: 1. 2. 3. 4. int int double double e[] f[] g[] h[] = = = = { { { { 3, 4, 5 }; -1, -3 }; , , 23.0, }; -3,0 , , 2.0 }; Welche Größen haben die Arrays, welche Indizes sind jeweils erlaubt und welche Werte haben die einzelnen Elemente unmittelbar nach der Definition? Array e f g h Größe Indizes Werte ......... ................... .......................................... ......... ................... .......................................... ......... ................... .......................................... ......... ................... .......................................... n.i. = ˆ nicht initialisiert 14-2 Wintersemester 2017/18, Einführung in die Praktische Informatik 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 hat Dr. One-Neuron wieder diverse Fehler gemacht, die ihr finden und korrigieren sollt. 1 # include < stdioh > 2 3 # define N =10 4 5 int man ( int argc , char ** argv ) 6 { 7 int i , sum , a [ N ]; 8 for ( i = 0 , i < N , i = i + 1 ) 9 { 10 printf ( Bitte Wert fuer a [ % d ] eingeben : , i ) ; 11 scanf ( " % d " , & ( a [ ] ) ) ; 12 } 13 for ( i = 1; sum = 0; i <= N ; i = i + 1 ) 14 sum = sum + a { i }; 15 printf ( " Die Summe der Zahlen betraegt % d \ n " , N , sum ) ; 16 } Einführung in die Praktische Informatik, Wintersemester 2017/18 14-3 Teil IV: Anwendungen Aufgabe 1: Deklaration einfacher Arrays Die folgende Übungsaufgabe ist nicht wirklich sinnvoll, sondern dient hauptsächlich dem Einüben des Hantierens mit eindimensionalen Arrays. 1. Aufgabenstellung Ziel der Aufgabe ist es, ein Programm zu erstellen, das folgende Arrays enthählt: 1. ein Array mit 10 Elementen vom Typ int, 2. ein Array mit 3 Elementen vom Typ char und 3. ein Array mit 100 Elementen vom Typ double. Des Weiteren sollen die Elemente dieser drei Arrays initialisiert werden. Dies geschieht vorzugsweise in einer Schleife. Diese Schleife soll so aufgebaut sein, dass eine Größenänderung des Arrays keine weiteren Änderungen in den Initialisierungsschleifen nach sich ziehen sollte; mit anderen Worten: Eine Größenänderung sollte durch eine einzige Modifikation vollständig realisiert sein. 2. Kodierung 14-4 Wintersemester 2017/18, Einführung in die Praktische Informatik Aufgabe 2: Implizite Größendefinitionen Wir haben gelernt, dass man in der Programmiersprache C die Größe eines Arrays auch indirekt und zwar durch die initialisierte Definition festlegen kann. Gegenstand dieser Aufgabe ist das aktive Einüben dieses Konzeptes. 1. Aufgabenstellung Entwickle ein kleines C-Programm, in dem die Größen von mindestens vier Arrays implizit durch ihre Initialisierung definiert werden. Zwei Beispieldefinitionen sind bereits weiter unten angegeben. Zur weiteren Verwendung der Größen, beispielsweise in Initialisierungsschleifen, ist die Größe jedes Arrays durch ein geeignetes #define-Makro zu berechnen“. ” Zur Bestätigung, dass alles korrekt abgelaufen ist, sind die einzelnen Elemente mittels geeigneter Schleifen auszugeben. In diesen Schleifen sind natürlich oben erwähnte #define-Makros zu verwenden. 2. Pflichtenheft: Aufgabe, Eingabe, Ausgabe, Sonderfälle 3. Testdaten Array Typ Initialwerte a int 1, 2, 3, 4 x double 1.0, 2.0 .......... ............. ........................ .......... ............. ........................ C-Definitionen ............................................................................. ............................................................................. ............................................................................. ............................................................................. ............................................................................. ............................................................................. ............................................................................. ............................................................................. Einführung in die Praktische Informatik, Wintersemester 2017/18 14-5 4. Kodierung 14-6 Wintersemester 2017/18, Einführung in die Praktische Informatik