Grundlagen der Programmierung
Suchen ist eine der häufigsten Operationen in der Programmierung!
Aufgabe: Ist die Zahl 7 im Array?
Suche nach 7 in {3, 9, 5, 7, 2, 8}
#include <stdio.h> int main() { int zahlen[6] = {3, 9, 5, 7, 2, 8}; int gesucht = 7; int gefunden = 0; // 0 = false, 1 = true for (int i = 0; i < 6; i++) { if (zahlen[i] == gesucht) { gefunden = 1; break; // Schleife abbrechen - Element gefunden! } } if (gefunden) printf("%d wurde gefunden!\n", gesucht); else printf("%d wurde NICHT gefunden.\n", gesucht); return 0; }
break?
break
beendet die Schleife sofort.
Wenn bei i=3 gefunden → nur 4 Durchläufe
Läuft immer alle 1000 Durchläufe
Manchmal brauchen wir nicht nur "gefunden", sondern wo:
#include <stdio.h> int main() { int zahlen[6] = {3, 9, 5, 7, 2, 8}; int gesucht = 7; int position = -1; // -1 bedeutet "nicht gefunden" for (int i = 0; i < 6; i++) { if (zahlen[i] == gesucht) { position = i; break; } } if (position != -1) printf("%d gefunden an Position %d\n", gesucht, position); else printf("%d nicht gefunden\n", gesucht); return 0; }
Array-Indizes sind immer ≥ 0 (0, 1, 2, 3, ...)
Deshalb nutzen wir -1 als "ungültigen" Wert = "nicht gefunden"
Gültige Positionen: 0, 1, 2, 3, 4, 5
indexOf(), Python find())
#include <stdio.h> int main() { int noten[8] = {3, 2, 4, 2, 1, 3, 2, 5}; int position = -1; for (int i = 0; i < 8; i++) { if (noten[i] == 1) { position = i; break; } } if (position != -1) printf("Beste Note! Student %d hat eine 1.\n", position + 1); else printf("Niemand hat eine 1 bekommen.\n"); return 0; }
position + 1 weil Menschen ab 1 zählen, Arrays ab 0
Ohne break finden wir alle Positionen:
#include <stdio.h> int main() { int zahlen[8] = {3, 7, 5, 7, 2, 7, 8, 1}; int gesucht = 7; int anzahl = 0; printf("%d gefunden an Position(en): ", gesucht); for (int i = 0; i < 8; i++) { if (zahlen[i] == gesucht) { printf("%d ", i); anzahl++; // KEIN break! Weiter suchen } } printf("\nInsgesamt: %d mal\n", anzahl); return 0; }
Sortierte Daten sind einfacher zu verarbeiten!
Vergleiche benachbarte Elemente und tausche wenn falsch herum!
5 > 3? Ja! → Tauschen!
🫧 Wie Blasen: Große Werte "steigen" nach oben (ans Ende), kleine "sinken" nach unten (an den Anfang).
Sortiere: {5, 3, 8, 1}
Nach Durchlauf 1: {3, 5, 1, 8}
Nach Durchlauf 2: {3, 1, 5, 8}
#include <stdio.h> int main() { int zahlen[4] = {5, 3, 8, 1}; int n = 4; int temp; /* Äußere Schleife: Anzahl der Durchläufe */ for (int i = 0; i < n - 1; i++) { /* Innere Schleife: Vergleiche Nachbarn */ for (int j = 0; j < n - 1 - i; j++) { if (zahlen[j] > zahlen[j + 1]) { /* Tauschen (Swap) */ temp = zahlen[j]; zahlen[j] = zahlen[j + 1]; zahlen[j + 1] = temp; } } } printf("Sortiert: %d %d %d %d\n", zahlen[0], zahlen[1], zahlen[2], zahlen[3]); return 0; }
j < n - 1 - i?Nach jedem Durchlauf ist das größte Element am Ende → wir müssen es nicht mehr prüfen!
| Durchlauf (i) | Vergleiche bis Index | Bereits sortiert |
|---|---|---|
| i = 0 | j < 3 (bis Index 2) | - |
| i = 1 | j < 2 (bis Index 1) | Index 3 |
| i = 2 | j < 1 (bis Index 0) | Index 2, 3 |
j < n - 1 funktioniert auch,
ist aber langsamer weil bereits sortierte Elemente nochmal geprüft werden.
Nur das Vergleichszeichen ändern!
Ergebnis: {1, 3, 5, 8}
Ergebnis: {8, 5, 3, 1}
> für aufsteigend, < für absteigend
Was ist der Wert von pos nach diesem Code?
A) -1
B) 1
C) 3
D) 2
Die erste 2 steht an Position 1 (Index beginnt bei 0!)
break nicht gefunden!
Nach dem ersten Durchlauf von Bubble Sort (aufsteigend), was ist garantiert?
Array: {3, 1, 4, 2}
A) Das kleinste Element ist vorne
B) Das größte Element ist hinten
C) Das Array ist halb sortiert
D) Alle Elemente sind sortiert
→ Die 4 (größtes Element) ist jetzt am Ende!
Was fehlt in diesem Bubble Sort Code?
A) Nichts, der Code ist korrekt
B) Es fehlt die Hilfsvariable (temp)
C) Das Vergleichszeichen ist falsch
D) Es fehlt ein break
> zu <
| Algorithmus | Schleifen | Wichtige Elemente |
|---|---|---|
| 🔄 Swap | 0 | temp Variable |
| ⬆️⬇️ Min/Max | 1 | Startwert arr[0], Vergleich |
| ➕ Summe | 1 | Startwert 0, += |
| 🔢 Zählen | 1 | Startwert 0, if + ++ |
| 🔍 Suche | 1 | position = -1, break |
| 🫧 Bubble Sort | 2 (verschachtelt) | Nachbarn vergleichen + Swap |
Aufgabe: Array sortieren, dann Durchschnitt und Maximum ausgeben
int zahlen[5] = {7, 2, 9, 4, 5}; int n = 5, summe = 0, temp; /* 1. Bubble Sort */ for (int i = 0; i < n - 1; i++) for (int j = 0; j < n - 1 - i; j++) if (zahlen[j] > zahlen[j+1]) { temp = zahlen[j]; zahlen[j] = zahlen[j+1]; zahlen[j+1] = temp; } /* 2. Summe berechnen */ for (int i = 0; i < n; i++) summe += zahlen[i]; /* 3. Nach Sortierung: Min = erstes, Max = letztes Element! */ printf("Sortiert: %d %d %d %d %d\n", ...); printf("Min: %d, Max: %d\n", zahlen[0], zahlen[n-1]); printf("Durchschnitt: %.2f\n", (double)summe / n);
🎉 Glückwunsch! Sie kennen jetzt die wichtigsten Algorithmen-Bausteine!
💪 Übung macht den Meister!
Probieren Sie die Algorithmen mit eigenen Arrays aus!