Grundlagen der Programmierung
Ein Akkumulator ist eine Variable, die Werte "sammelt"
int akkumulator = startwert; // 1. Initialisieren for (int i = 0; i < n; i++) { akkumulator = akkumulator â arr[i]; // 2. Kombinieren } // â kann sein: +, *, usw.
Aufgabe: Berechne die Summe aller Zahlen im Array
summe = 0 (neutrales Element fĂźr +)Array: {3, 7, 2, 5}
| Schritt | i | arr[i] | Berechnung | summe |
|---|---|---|---|---|
| Start | - | - | - | 0 |
| 1 | 0 | 3 | 0 + 3 | 3 |
| 2 | 1 | 7 | 3 + 7 | 10 |
| 3 | 2 | 2 | 10 + 2 | 12 |
| 4 | 3 | 5 | 12 + 5 | 17 |
#include <stdio.h> int main() { int zahlen[4] = {3, 7, 2, 5}; int summe = 0; // Startwert fĂźr Addition: 0 for (int i = 0; i < 4; i++) { summe = summe + zahlen[i]; // Kurzform: summe += zahlen[i]; } printf("Die Summe ist: %d\n", summe); return 0; }
summe += zahlen[i] ist identisch mit summe = summe + zahlen[i]
0 ist das neutrale Element der Addition:
Wenn wir mit 0 starten, ist das erste Ergebnis genau das erste Array-Element.
int summe; // NICHT initialisiert! for (...) { summe += zahlen[i]; // summe hat Zufallswert! }
Ohne Initialisierung enthält summe einen zufälligen Wert â falsches Ergebnis!
Formel: Durchschnitt = Summe á Anzahl
#include <stdio.h> int main() { int zahlen[4] = {3, 7, 2, 5}; int summe = 0; int anzahl = 4; for (int i = 0; i < anzahl; i++) { summe += zahlen[i]; } double durchschnitt = (double)summe / anzahl; printf("Summe: %d\n", summe); printf("Durchschnitt: %.2f\n", durchschnitt); return 0; }
int summe = 17; int anzahl = 4; double d = summe / anzahl;
int / int = int (abgerundet!)
int summe = 17; int anzahl = 4; double d = (double)summe / anzahl;
(double)int / int = double
double casten BEVOR wir dividieren!
Aufgabe: Wie viele Zahlen sind grĂśĂer als 5?
Antwort: 3 Zahlen (7, 8, 9)
zaehler = 0#include <stdio.h> int main() { int zahlen[6] = {3, 7, 2, 8, 5, 9}; int zaehler = 0; // Startwert: 0 for (int i = 0; i < 6; i++) { if (zahlen[i] > 5) // Bedingung prĂźfen { zaehler++; // zaehler = zaehler + 1 } } printf("%d Zahlen sind grĂśĂer als 5\n", zaehler); return 0; }
if (zahlen[i] % 2 == 0) zaehler++;
if (zahlen[i] % 2 != 0) zaehler++;
if (zahlen[i] > 0) zaehler++;
if (zahlen[i] == 5) zaehler++;
if (bedingung) zaehler++;
Statt zu addieren, kĂśnnen wir auch multiplizieren:
#include <stdio.h> int main() { int zahlen[4] = {3, 7, 2, 5}; int produkt = 1; // Startwert fĂźr Multiplikation: 1 for (int i = 0; i < 4; i++) { produkt = produkt * zahlen[i]; // Kurzform: produkt *= zahlen[i]; } printf("Das Produkt ist: %d\n", produkt); return 0; }
1 ist das neutrale Element der Multiplikation:
Startwert: 0
Weil 0 + x = x
Startwert: 1
Weil 1 Ă x = x
produkt = 0 wäre das Ergebnis immer 0! (0 à x = 0)
Fakultät n! = 1 à 2 à 3 à ... à n
Beispiel: 5! = 1 Ă 2 Ă 3 Ă 4 Ă 5 = 120
#include <stdio.h> int main() { int n = 5; int fakultaet = 1; for (int i = 1; i <= n; i++) { fakultaet *= i; // 1*1, 1*2, 2*3, 6*4, 24*5 } printf("%d! = %d\n", n, fakultaet); return 0; }
Aufgabe: Berechne die Summe aller geraden Zahlen
#include <stdio.h> int main() { int zahlen[6] = {3, 8, 5, 2, 7, 4}; int summe = 0; for (int i = 0; i < 6; i++) { if (zahlen[i] % 2 == 0) // Nur gerade Zahlen { summe += zahlen[i]; } } printf("Summe der geraden Zahlen: %d\n", summe); // 8 + 2 + 4 = 14 return 0; }
#include <stdio.h> int main() { int noten[8] = {2, 1, 3, 2, 5, 1, 4, 2}; int summe = 0; int bestanden = 0; for (int i = 0; i < 8; i++) { summe += noten[i]; if (noten[i] <= 4) bestanden++; } double schnitt = (double)summe / 8; printf("Durchschnitt: %.2f\n", schnitt); printf("Bestanden: %d von 8\n", bestanden); return 0; }
Was gibt dieses Programm aus?
int arr[3] = {1, 2, 3}; int summe = 0; for (int i = 0; i < 3; i++) summe += arr[i]; printf("%d", summe);
A) 0
B) 3
C) 6
D) 123
1 + 2 + 3 = 6
| i | arr[i] | summe |
|---|---|---|
| Start | - | 0 |
| 0 | 1 | 0 + 1 = 1 |
| 1 | 2 | 1 + 2 = 3 |
| 2 | 3 | 3 + 3 = 6 |
Was gibt dieses Programm aus?
int arr[5] = {1, 4, 2, 6, 3}; int count = 0; for (int i = 0; i < 5; i++) if (arr[i] % 2 == 0) count++; printf("%d", count);
A) 1
B) 2
C) 3
D) 5
Gerade Zahlen: 4 und 6 â 2 StĂźck
| i | arr[i] | % 2 == 0? | count |
|---|---|---|---|
| 0 | 1 | â Nein | 0 |
| 1 | 4 | â Ja | 1 |
| 2 | 2 | â Ja | 2 |
| 3 | 6 | â Ja | 3 |
| 4 | 3 | â Nein | 3 |
Was ist der korrekte Startwert fĂźr ein Produkt?
int produkt = ???; for (int i = 0; i < n; i++) produkt *= arr[i];
A) 0
B) 1
C) arr[0]
D) -1
1 ist das neutrale Element der Multiplikation: 1 Ă x = x
| Operation | Startwert | Grund |
|---|---|---|
| â Summe | 0 | 0 + x = x |
| âď¸ Produkt | 1 | 1 Ă x = x |
| đ˘ Zähler | 0 | Noch nichts gezählt |
| âŹď¸ Maximum | arr[0] | Erstes Element als Vergleichswert |
| âŹď¸ Minimum | arr[0] | Erstes Element als Vergleichswert |
int summe = 0; // Startwert: 0 for (int i = 0; i < n; i++) { summe += arr[i]; // += addiert } // summe enthält die Gesamtsumme
double schnitt = (double)summe / n;
int zaehler = 0; // Startwert: 0 for (int i = 0; i < n; i++) { if (bedingung) // Wenn Bedingung erfßllt { zaehler++; // Zähler erhÜhen } } // zaehler enthält die Anzahl
arr[i] > 5, arr[i] % 2 == 0, arr[i] == wert
int produkt = 1; // Startwert: 1 (NICHT 0!) for (int i = 0; i < n; i++) { produkt *= arr[i]; // *= multipliziert } // produkt enthält das Gesamtprodukt
Heute gelernt: Summe, Durchschnitt, Zählen, Produkt
Das Akkumulator-Muster ist die Basis fĂźr viele Algorithmen!