C/C++-Übungen für Einsteiger

Eine Matrix in C und C++ transponieren

In dieser Lektion gibst du die transponierte Matrix aus, indem du die Rollen von Zeilen und Spalten tauschst.

Einführung

Eine Matrix zu transponieren heißt, aus Zeilen Spalten und aus Spalten Zeilen zu machen: Der Wert in Zeile i, Spalte j wandert in Zeile j, Spalte i. Eine Matrix mit 2 Zeilen und 3 Spalten hat nach dem Transponieren 3 Zeilen und 2 Spalten.

Wichtige Punkte

  • Schalte die Compiler-Warnungen (compiler warnings) ein und behebe alle.
  • Verstehe den Datentyp und die Lebensdauer (lifetime) jedes Werts genau.
  • Prüfe immer die Eingabedaten und die Grenzen von Array-Indizes.

So funktioniert es

Klicke auf transpose, um Zeilen und Spalten zu tauschen. Zeige auf eine Zelle, um ihre neue Position und den Speicher-Offset zu sehen.

Codebeispiele in C und C++

C
Code ausführen →
main.c
#include <stdio.h>
int main(void) {
    int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}};
    // Visit columns first to print the transposed shape.
    for (int column = 0; column < 3; ++column) { for (int row = 0; row < 2; ++row) printf("%s%d", row ? " " : "", matrix[row][column]); puts(""); }
}
Ergebnis der Ausführung
1 4
2 5
3 6
C++
Code ausführen →
main.cpp
#include <array>
#include <iostream>
int main() {
    std::array<std::array<int, 3>, 2> matrix{{{{1, 2, 3}}, {{4, 5, 6}}}};
    // Visit columns first to print the transposed shape.
    for (size_t column = 0; column < 3; ++column) { for (size_t row = 0; row < 2; ++row) std::cout << (row ? " " : "") << matrix[row][column]; std::cout << '\n'; }
}
Ergebnis der Ausführung
1 4
2 5
3 6

C und C++ im Vergleich

Statt eine neue Matrix anzulegen, vertauscht das Programm die Reihenfolge der beiden Schleifen: Die äußere läuft über die Spalten, die innere über die Zeilen. So wird jede Spalte der ursprünglichen Matrix als Zeile ausgegeben, das Ergebnis ist 1 4, 2 5 und 3 6.

C

C verwendet kleine prozedurale Funktionen und zeigt offen, wie Daten im Speicher dargestellt werden.

C++

C++ erlaubt weiterhin Arbeit auf niedriger Ebene, ergänzt aber Bibliothekstypen und sicherere Abstraktionen.

Übungen zur Vertiefung

Führe beide Versionen aus und ändere dann den Code, um zu beobachten, welche Sicherheit jede Sprache bietet.

  • Teste ungültige Eingaben und Grenzwerte.
  • Kompiliere mit den Flags -Wall -Wextra -Wpedantic, um zusätzliche Warnungen einzuschalten.
  • Lagere gemeinsame Deklarationen in eine Header-Datei und die Implementierung in eine eigene Datei aus.

Mit einer Challenge üben

Nutze den Inhalt dieser Lektion, um ein echtes Problem zu lösen. Jede Challenge läuft im Browser, mit sofortigen Tests und einem KI-Review.

Alle Challenges