Grundlagen der Programmierung
Prof. Dr. Alexandra Mikityuk
HTW Berlin
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 — gefunden!
}
}
if (gefunden) printf("%d wurde gefunden!\n", gesucht);
else printf("%d wurde NICHT gefunden.\n", gesucht);
return 0;
}
break beendet die Schleife sofort.
for (i = 0; i < 1000; i++) {
if (arr[i] == gesucht) {
gefunden = 1;
break; // sofort aufhören!
}
}
Wenn bei i=3 gefunden → nur 4 Durchläufe
for (i = 0; i < 1000; i++) {
if (arr[i] == gesucht) {
gefunden = 1;
// läuft weiter...
}
}
Läuft immer alle 1000 Durchläufe
Manchmal brauchen wir nicht nur „gefunden", sondern wo:
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);
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
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");
Ohne break finden wir alle Positionen:
int zahlen[8] = {3, 7, 5, 7, 2, 7, 8, 1};
int gesucht = 7, 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);
Sortierte Daten sind einfacher zu verarbeiten!
Vergleiche benachbarte Elemente und tausche, wenn falsch herum!
5 > 3? Ja! → Tauschen!
Sortiere: {5, 3, 8, 1}
Nach Durchlauf 1: {3, 5, 1, 8}
Nach Durchlauf 2: {3, 1, 5, 8}
int zahlen[4] = {5, 3, 8, 1};
int n = 4, temp;
/* Äußere Schleife: Anzahl der Durchläufe */
for (int i = 0; i < n - 1; i++) {
/* Innere Schleife: Nachbarn vergleichen */
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;
}
}
}
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 |
Nur das Vergleichszeichen ändern!
if (zahlen[j] > zahlen[j+1])
// tauschen
Ergebnis: {1, 3, 5, 8}
if (zahlen[j] < zahlen[j+1])
// tauschen
Ergebnis: {8, 5, 3, 1}
Was ist der Wert von pos nach diesem Code?
int arr[5] = {4, 2, 7, 2, 9};
int pos = -1;
for (int i = 0; i < 5; i++) {
if (arr[i] == 2) { pos = i; break; }
}
Nach dem ersten Durchlauf von Bubble Sort (aufsteigend) auf {3, 1, 4, 2} — was ist garantiert?
Was fehlt in diesem Bubble-Sort-Code?
if (arr[j] > arr[j+1]) {
arr[j] = arr[j+1];
arr[j+1] = arr[j];
}
int position = -1; // -1 = nicht gefunden
for (int i = 0; i < n; i++) {
if (arr[i] == gesucht) {
position = i;
break; // gefunden → aufhören
}
}
if (position != -1) // gefunden an "position"
else // nicht gefunden
for (int i = 0; i < n - 1; i++) { // Durchläufe
for (int j = 0; j < n - 1 - i; j++) { // Vergleiche
if (arr[j] > arr[j + 1]) { // Nachbarn
int temp = arr[j]; // Swap
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
| 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 Min, Max & Durchschnitt 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 */
for (int i = 0; i < n; i++) summe += zahlen[i];
/* 3. Nach Sortierung: Min = erstes, Max = letztes Element! */
printf("Min: %d, Max: %d\n", zahlen[0], zahlen[n-1]);
printf("Durchschnitt: %.2f\n", (double)summe / n);
🎉 Glückwunsch! Ihr kennt jetzt die wichtigsten Algorithmen-Bausteine.