Zurück zur Startseite

Labor 6

Algorithmen Grundlagen: Tauschen, Extremwerte und Akkumulieren
Grundlagen der Programmierung in C - HTW Berlin - WiSe 2025/26
Dauer: ca. 180 Minuten

Lernziele

In diesem Labor werden Sie:

Wichtige Konzepte

Teil 1: Tauschen & Extremwerte (ca. 90 Min)

1 Werte tauschen (Swap)

Aufgabenstellung

Schreiben Sie ein Programm, das zwei int-Variablen hat und deren Werte tauscht.

Der Swap-Algorithmus

Um zwei Werte zu tauschen, brauchen wir eine temporäre Variable:

// FALSCH (Wert geht verloren!): a = b; // a wird überschrieben! b = a; // beide haben jetzt den gleichen Wert // RICHTIG (mit temp): temp = a; // Schritt 1: a zwischenspeichern a = b; // Schritt 2: b nach a b = temp; // Schritt 3: alten a-Wert nach b

Anforderungen

Beispielausgabe

Vor dem Tausch: a = 5, b = 10 Nach dem Tausch: a = 10, b = 5
Musterlösung Falsches Passwort!
#include <stdio.h>

int main() {
    int a = 5;
    int b = 10;

    printf("Vor dem Tausch: a = %d, b = %d\n", a, b);

    // Swap-Algorithmus
    int temp = a;  // Schritt 1: a speichern
    a = b;          // Schritt 2: b nach a
    b = temp;       // Schritt 3: altes a nach b

    printf("Nach dem Tausch: a = %d, b = %d\n", a, b);

    return 0;
}

2 Array-Elemente tauschen

Aufgabenstellung

Erstellen Sie ein Array mit 5 Zahlen und tauschen Sie das erste und letzte Element.

Anforderungen

Beispielausgabe

Vorher: 10 20 30 40 50 Nachher: 50 20 30 40 10
Musterlösung Falsches Passwort!
#include <stdio.h>

int main() {
    int zahlen[5] = {10, 20, 30, 40, 50};

    // Vorher ausgeben
    printf("Vorher: ");
    for (int i = 0; i < 5; i++) {
        printf("%d ", zahlen[i]);
    }
    printf("\n");

    // Swap: erstes und letztes Element
    int temp = zahlen[0];
    zahlen[0] = zahlen[4];
    zahlen[4] = temp;

    // Nachher ausgeben
    printf("Nachher: ");
    for (int i = 0; i < 5; i++) {
        printf("%d ", zahlen[i]);
    }
    printf("\n");

    return 0;
}

3 Maximum finden

Aufgabenstellung

Finden Sie das Maximum in einem Array mit 6 Zahlen.

Maximum-Algorithmus

Idee: Wir nehmen das erste Element als "bisher größtes" und vergleichen mit allen anderen.

max = zahlen[0]; // Erstes Element als Start for (i = 1; i < n; i++) { // Ab dem zweiten Element if (zahlen[i] > max) { // Größer als bisheriges Maximum? max = zahlen[i]; // Neues Maximum gefunden! } }

Anforderungen

Beispielausgabe

Array: 34 78 12 89 45 23 Maximum: 89
Musterlösung Falsches Passwort!
#include <stdio.h>

int main() {
    int zahlen[6] = {34, 78, 12, 89, 45, 23};
    int n = 6;

    // Array ausgeben
    printf("Array: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", zahlen[i]);
    }
    printf("\n");

    // Maximum finden
    int max = zahlen[0];  // Start mit erstem Element

    for (int i = 1; i < n; i++) {
        if (zahlen[i] > max) {
            max = zahlen[i];
        }
    }

    printf("Maximum: %d\n", max);

    return 0;
}

4 Minimum finden

Aufgabenstellung

Finden Sie das Minimum in einem Array mit 5 Zahlen.

Anforderungen

Hinweis

Der Algorithmus ist fast identisch zum Maximum - nur die Vergleichsrichtung ändert sich (< statt >).

Beispielausgabe

Array: 45 12 67 8 34 Minimum: 8
Musterlösung Falsches Passwort!
#include <stdio.h>

int main() {
    int zahlen[5] = {45, 12, 67, 8, 34};
    int n = 5;

    // Array ausgeben
    printf("Array: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", zahlen[i]);
    }
    printf("\n");

    // Minimum finden
    int min = zahlen[0];  // Start mit erstem Element

    for (int i = 1; i < n; i++) {
        if (zahlen[i] < min) {  // Kleiner als bisheriges Minimum?
            min = zahlen[i];
        }
    }

    printf("Minimum: %d\n", min);

    return 0;
}

5 Position des Maximums

Aufgabenstellung

Finden Sie nicht nur das Maximum, sondern auch seine Position (Index) im Array.

Position merken

Zusätzlich zum Wert speichern wir auch den Index, an dem wir das Maximum gefunden haben:

int maxPos = 0; // Position des Maximums for (i = 1; i < n; i++) { if (zahlen[i] > zahlen[maxPos]) { maxPos = i; // Neue Position merken } } // Maximum ist: zahlen[maxPos]

Anforderungen

Beispielausgabe

Array: 15 42 8 99 23 67 Maximum: 99 an Position 3
Musterlösung Falsches Passwort!
#include <stdio.h>

int main() {
    int zahlen[6] = {15, 42, 8, 99, 23, 67};
    int n = 6;

    // Array ausgeben
    printf("Array: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", zahlen[i]);
    }
    printf("\n");

    // Maximum und Position finden
    int maxPos = 0;  // Startposition

    for (int i = 1; i < n; i++) {
        if (zahlen[i] > zahlen[maxPos]) {
            maxPos = i;  // Neue Position des Maximums
        }
    }

    printf("Maximum: %d an Position %d\n", zahlen[maxPos], maxPos);

    return 0;
}

Teil 2: Akkumulieren & Zählen (ca. 90 Min)

6 Summe berechnen

Aufgabenstellung

Berechnen Sie die Summe aller Zahlen in einem Array.

Das Akkumulator-Muster

Ein Akkumulator sammelt Werte auf. Für die Summe:

int summe = 0; // Startwert für Summe ist 0! for (i = 0; i < n; i++) { summe += zahlen[i]; // Jedes Element dazu addieren } // summe enthält jetzt die Gesamtsumme

Anforderungen

Beispielausgabe

Array: 10 20 30 40 50 Summe: 150
Musterlösung Falsches Passwort!
#include <stdio.h>

int main() {
    int zahlen[5] = {10, 20, 30, 40, 50};
    int n = 5;

    // Array ausgeben
    printf("Array: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", zahlen[i]);
    }
    printf("\n");

    // Summe berechnen
    int summe = 0;  // Startwert 0!

    for (int i = 0; i < n; i++) {
        summe += zahlen[i];
    }

    printf("Summe: %d\n", summe);

    return 0;
}

7 Durchschnitt berechnen

Aufgabenstellung

Berechnen Sie den Durchschnitt aller Zahlen in einem Array.

Wichtig: Typumwandlung!

Für einen genauen Durchschnitt müssen wir double verwenden:

// FALSCH (Ganzzahl-Division): int durchschnitt = summe / anzahl; // 7 / 3 = 2 (nicht 2.33!) // RICHTIG (mit double): double durchschnitt = (double)summe / anzahl; // 7 / 3 = 2.33...

Anforderungen

Beispielausgabe

Noten: 85 90 78 92 88 Summe: 433 Durchschnitt: 86.60
Musterlösung Falsches Passwort!
#include <stdio.h>

int main() {
    int noten[5] = {85, 90, 78, 92, 88};
    int n = 5;

    // Array ausgeben
    printf("Noten: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", noten[i]);
    }
    printf("\n");

    // Summe berechnen
    int summe = 0;
    for (int i = 0; i < n; i++) {
        summe += noten[i];
    }
    printf("Summe: %d\n", summe);

    // Durchschnitt mit double!
    double durchschnitt = (double)summe / n;

    printf("Durchschnitt: %.2f\n", durchschnitt);

    return 0;
}

8 Elemente zählen

Aufgabenstellung

Zählen Sie, wie viele Zahlen in einem Array größer als 50 sind.

Zähler-Muster

Ähnlich wie Summe, aber wir zählen nur bei einer Bedingung:

int zaehler = 0; // Startwert 0 for (i = 0; i < n; i++) { if (zahlen[i] > 50) { // Bedingung prüfen zaehler++; // Nur dann hochzählen } }

Anforderungen

Beispielausgabe

Array: 23 67 45 89 12 78 34 91 Zahlen groesser als 50: 4
Musterlösung Falsches Passwort!
#include <stdio.h>

int main() {
    int zahlen[8] = {23, 67, 45, 89, 12, 78, 34, 91};
    int n = 8;

    // Array ausgeben
    printf("Array: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", zahlen[i]);
    }
    printf("\n");

    // Zahlen > 50 zählen
    int zaehler = 0;

    for (int i = 0; i < n; i++) {
        if (zahlen[i] > 50) {
            zaehler++;
        }
    }

    printf("Zahlen groesser als 50: %d\n", zaehler);

    return 0;
}

9 Produkt berechnen

Aufgabenstellung

Berechnen Sie das Produkt aller Zahlen in einem Array.

Wichtig: Startwert 1!

Beim Produkt ist der Startwert 1, nicht 0!

// FALSCH: int produkt = 0; // 0 * x = 0 (immer 0!) // RICHTIG: int produkt = 1; // 1 * x = x (neutrales Element)

Anforderungen

Beispielausgabe

Array: 2 3 4 5 Produkt: 120
Musterlösung Falsches Passwort!
#include <stdio.h>

int main() {
    int zahlen[4] = {2, 3, 4, 5};
    int n = 4;

    // Array ausgeben
    printf("Array: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", zahlen[i]);
    }
    printf("\n");

    // Produkt berechnen
    int produkt = 1;  // Startwert 1!

    for (int i = 0; i < n; i++) {
        produkt *= zahlen[i];
    }

    printf("Produkt: %d\n", produkt);

    return 0;
}

10 Fakultät berechnen

Aufgabenstellung

Berechnen Sie die Fakultät einer Zahl n (n! = 1 * 2 * 3 * ... * n).

Was ist Fakultät?

n! (n Fakultät) ist das Produkt aller Zahlen von 1 bis n:

  • 5! = 1 * 2 * 3 * 4 * 5 = 120
  • 4! = 1 * 2 * 3 * 4 = 24
  • 0! = 1 (per Definition)

Anforderungen

Beispielausgabe

Geben Sie n ein: 5 5! = 120
Musterlösung Falsches Passwort!
#include <stdio.h>

int main() {
    int n;

    printf("Geben Sie n ein: ");
    scanf("%d", &n);

    // Fakultät berechnen
    int fakultaet = 1;  // Startwert 1

    for (int i = 1; i <= n; i++) {
        fakultaet *= i;
    }

    printf("%d! = %d\n", n, fakultaet);

    return 0;
}

Zusammenfassung: Die wichtigsten Muster

Muster Startwert Operation Anwendung
Swap temp = a a=b, b=temp Werte tauschen
Maximum arr[0] if (arr[i] > max) Größten Wert finden
Minimum arr[0] if (arr[i] < min) Kleinsten Wert finden
Summe 0 sum += arr[i] Alle addieren
Zählen 0 if (...) count++ Bedingt zählen
Produkt 1 prod *= arr[i] Alle multiplizieren