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++
#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(""); }
}
1 4
2 5
3 6
#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'; }
}
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 verwendet kleine prozedurale Funktionen und zeigt offen, wie Daten im Speicher dargestellt werden.
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.
- Row Sums Add up every row of a grid. Einfach
- Matrizenmultiplikation Multipliziere zwei Matrizen, die Operation hinter jeder Schicht eines neuronalen Netzes. Einfach