Übungsaufgaben zum Thema Felder
Kopieren Sie jeweils den unten angegebenen Code in Ihren Editor und
vervollständigen Sie diesen wie in den Aufgaben vorgegeben. Kompilieren
und starten Sie danach das jeweilige Programm.
Aufgabe 1: Feldelementsumme
Betrachten Sie das folgende Codesegment:
int[] val = {0, 1, 2, 3};
int sum = 0;
println("Summe aller Zahlen = " + sum);
Vervollständigen Sie den Code, sodass die Summe der Zahlen im Array mit
Hilfe einer Schleife berechnet wird.
Ausgabe des Programms:
Summe aller Zahlen = 6
Aufgabe 2: Zwei Felder
Gegeben sei ein Feld val mit vier Integerzahlen:
int val[] = {13, -4, 82, 17};
- Geben Sie die Feldelemente von
val mit Hilfe einer
Schleife aus
- Definieren Sie ein zweites Array mit Namen
twice,
welches die gleiche Anzahl an Feldelementen besitzt, wie val.
- Schreiben Sie mit Hilfe einer weiteren Schleife Werte in
twice,
die jeweils doppelt so groß sind wie die korrespondierenden Werte in val
- Geben Sie die Feldelemente von
twice mit Hilfe einer
zusätzlichen Schleife aus.
Programmausgabe:
Ursprüngliches Feld: 13 -4 82 17
Neues Feld: 26 -8 164 34
Aufgabe 3: Drei Felder
Gegeben seien drei Felder:
int valA[] = {13, -22, 82, 17};
int valB[] = {-12, 24, -79, -13};
int sum[] = { 0, 0, 0, 0};
Addieren Sie mit Hilfe einer Schleife die Werte der Feldelemente von valA
und valB, die den gleichen Index besitzen, und
schreiben Sie das Ergebnis in das korrespondierende Feldelement von sum.
-
Geben Sie die Feldelemente von sum mit Hilfe einer weiteren Schleife aus.
Programmausgabe:
Summe: 1 2 3 4
Aufgabe 4: Dieselbe Summe
Gegeben sei das folgende Feld:
int valA[] = {13, -22, 82, 17};
Definieren Sie ein neues Feld valB und beschreiben Sie
dessen Feldelemente in einer Schleife mit Werten, so dass die Summe der korrespondierenden
Feldelemente von valA und valB 25 ergibt.
Programmausgabe:
valA: [13] [-22] [82] [17]
valB: [12] [47] [-57] [8]
Sum: [25] [25] [25] [25]
Aufgabe 5: Mittelwert und unterschiedliche Summen der Feldelemente
Gegeben sei das folgende Feld:
int data[] = {3, 2, 5, 7, 9, 12, 97, 24, 54};
Schreiben Sie Programmcode, in dem mit Hilfe einer einzelnen
Schleife
folgendes berechnet wird:
-
der Mittelwert (auch: Durchschnittswert) der Feldelemente als Integerwert,
-
die Summe der Feldelemente, die einen geraden Wert
(nicht Indexwert) besitzen,
-
die Summe der Feldelemente mit
ungeradem Wert.
Hinweis: Eine gerade Zahl lässt sich ohne Rest ganzzahlig
durch zwei teilen.
Programmausgabe:
Mittelwert: 23, Summe gerader: 92, Summe ungerader: 121
Aufgabe 6: Die zwei größten Elemente
Gegeben sei das folgende Feld:
int data[] = {3, 1, 5, 7, 4, 12, -3, 8, -2};
Schreiben Sie ein Programm, dass mit Hilfe einer einzelnen Schleife, d.
h. einer einzelnen Maximumsuche, die zwei größten Elemente des Felds
findet und ausgibt.
Programmausgabe:
Größtes Element: 12
Zweitgrößtes Element: 8
Prüfen Sie Ihr Programm mit unterschiedlichen Feldern, wie z. B.:
{4, 1, 2, 3}
{4, 5, 1, 2}
Bei dieser Aufgabe steckt die größte Schwierigkeit in einer geeigneten
Initialisierung der Variablen.
Aufgabe 7: Tonfilter
Ein Tonsignal wird manchmal als Liste von int-Werten
gespeichert. Die Werte repräsentieren die Intensität des Signals in
aufeinander folgenden Zeitintervallen.
int signal[] = {1, 5, 4, 5, 7, 6, 8, 6, 5, 4, 5, 4};
Oft ist in dem Signal ein kleiner Anteil von Störgeräuschen enthalten.
Störgeräusche sind üblicherweise kleine, momentane Änderungen der
Tonhöhe. Ein Beispiel hierfür ist das Rauschen, das zusätzlich zum Ton
eines AM Radios zu hören ist.
Das Glätten des Tons unterdrückt das Störgeräusch und verbessert die
Tonqualität.
In dieser Aufgabe werden Sie die Werte eines Integerarrays glätten.
Angenommen, dass die ursprünglichen Werte in dem Array ein "Signal"
repräsentieren. Berechnen Sie zu diesem Signal geglättete Feldelemente,
indem Sie folgendes tun: Definieren Sie ein neues Feld smooth,
mit der gleichen Anzahl an Feldelementen wie signal.
Mit Ausnahme des ersten und letzten Feldelements in smooth,
ist jeder Wert smooth[N] der Durchschnitt von drei Werten:
signal[N-1], signal[N]
und signal[N+1].
Berechnen Sie für das erste Element von smooth den
Durchschnitt der ersten zwei Elemente von signal.
Berechnen Sie für das letzte Element von smooth den
Durchschnitt der letzten zwei Elemente von signal.
Verwenden Sie dafür Integerarithmetik, so dass die Werte in smooth
Integer sind.
Beziehen Sie sich in Ihrem Code auf die Länge des Felds signal.
Verwenden Sie keine festen Zahlenwerte für die Feldlänge, damit der Code
unabhängig von der Länge des real bearbeiteten Felds ist.
Programmausgabe für das Feld oben:
Original signal: 1 5 4 5 7 6 8 6 5 4 5 4
Smoothed signal: 3 3 4 5 6 7 6 6 5 4 4 4
Denken Sie daran, dass bei der Integerdivision der Rest verworfen und
kein gerundeter Wert berechnet wird.
Aufgabe 8: Datenoptimierung
Angenommen, Sie möchten den durchschnittlichen Säuregehalt von Kaffee
bestimmen, der in den Cafés Ihrer Heimatstadt serviert wird. Zu diesem
Zweck besuchen Sie eine Reihe von Cafés und tauchen Ihr PH-Messgerät in
Kaffeeproben.
Leider liefert Ihr PH-Messgerät manchmal falsche Ergebnisse. Sie
schließen daher den am weitesten vom Durchschnitt entfernten Messwert
als Fehlmessung von der Durchschnittsberechnung aus.
Berechnen Sie den Durchschnitt aller Daten im unten angegebenen Feld samples.
Durchsuchen Sie danach das Feld, um den Wert zu finden, der am weitesten
(in jeder Richtung) vom Durchschnitt entfernt ist. Korrigieren Sie
danach den Durchschnittswert, indem Sie diese Fehlmessung aus der
Summenberechnung für den Durchschnittswert ausschließen. Berechnen Sie
danach den korrigierten Durchschnittswert und geben Sie ihn aus.
double samples[] = {5.6, 6.2, 6.0, 5.5, 5.7,
6.1, 7.4, 5.5, 5.5, 6.3,
6.4, 4.0, 6.9};
Programmausgabe:
Durchschnitt: 5.930769
Entferntester Wert: 4.0
Neuer Durchschnitt: 6.091667
Definieren Sie für die Anzahl der Feldelemente wieder eine
Konstante, damit Ihr Code unabhängig von der Länge des real
bearbeiteten Felds ist.
Aufgabe 9: Histogramm
Als Histogramm
wird die grafische Darstellung der Häufigkeitsverteilung
einer Menge von Werten bezeichnet. Dies
kann z. B. die Häufigkeit sein, mit der Bitfehler der
Größe
0 Bit, 1 Bit, 2 Bit usw. bei einem bestimmten
Übertragungskanal vorkommen oder die Anzahl von Pixel
bzw. Bildelementen mit einem bestimmten Grauwert in einem
Bild oder die Anzahl von Studierenden eines bestimmten Alters
in einem Vorlesungsraum.
Gegeben sei das folgende Array,
int samples[] = {1, 1, 1, 3, 3, 6, 8, 14, 20,
19, 15, 9, 6, 3, 3, 1, 1};
welches für
die gezählte Häufigkeit bestimmter Abweichungen von
einem erwarteten Wert steht. Der erwartete Wert sei hier 0.
Der Wertebereich der Werte in samples reicht dabei von -8 bis 8, d. h.:
| 1 |
1 |
1 |
3 |
3 |
6 |
8 |
14 |
20 |
19 |
15 |
9 |
6 |
3 |
3 |
1 |
1 |
| -8 |
-7 |
-6 |
-5 |
-4 |
-3 |
-2 |
-1 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
Der Wert 0 kommt dabei z. B. mit 20 Zählungen am häufigsten vor.
Der Wert 1 mit 19 Zählungen fast genauso oft.
Es könnte sich bei diesen Werten z. B. um die Häufigkeit von
Mehrbitfehlern auf einem bestimmten Übertragungskanal handeln,
wobei Wechsel von 1 nach 0 z. B. negative Vorzeichen besitzen
und Wechsel von 0 nach 1 positive Vorzeichen. Die Güte
dieses Übertragungskanals wäre dann nicht besonders hoch, da Mehrbitfehler recht häufig auftreten.
0 würde einer fehlerfreien Übertragung entsprechen. ±1 einem einzelnen Bitfehler.
Schreiben Sie ein Programm, welches mit Hilfe einer geschachtelten for-Schleife das oben gegebene Feld in der folgenden Weise grafisch im Ausgabefenster darstellt:
20 #
19 # #
18 # #
17 # #
16 # #
15 # # #
14 # # # #
13 # # # #
12 # # # #
11 # # # #
10 # # # #
9 # # # # #
8 # # # # # #
7 # # # # # #
6 # # # # # # # #
5 # # # # # # # #
4 # # # # # # # #
3 # # # # # # # # # # # #
2 # # # # # # # # # # # #
1 # # # # # # # # # # # # # # # # #
-8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8
Bestimmen Sie die Anzahl der erforderlichen Zeilen mit Hilfe einer Maximumsuche.
Geben Sie die Beschriftung [-8;8] auf der x-Achse mit Hilfe einer weiteren for-Schleife aus.