C++ :: Aufgabe #354
1 Lösung
Prüfen auf Toeplitz-Matrix
Fortgeschrittener - C++
von JKooP
- 16.04.2021 um 17:07 Uhr
Von einer Toeplitz-Matrix spricht man, wenn alle Diagonalen von links oben nach rechts unten die gleichen Zahlen enthalten.
Beispiel 1:
matrix = { {4, 5, 6, 7, 8}, {3, 4, 5, 6, 7 }, {2, 3, 4, 5, 6}, {1, 2, 3, 4, 5} }
Lösung: wahr, denn alle Diagonalen enthalten die gleichen Zahlen =>
{1}, {2, 2}, {3, 3, 3}, {4, 4, 4, 4}, {5, 5, 5, 5}, {6, 6, 6}, {7, 7}, {8}
Beispiel 2:
matrix = { {1, 2}, {2, 2} }
Lösung: falsch, denn die zweite Diagonale enthält unterschiedliche Zahlen =>
{1}, {1, 2}, {2}
Erstelle eine Methode/Funktion, die jede Matrix größer 2x2 dahingehend prüft, ob es sich um eine Toeplitz-Matrix handelt.
Viel Spaß
Beispiel 1:
matrix = { {4, 5, 6, 7, 8}, {3, 4, 5, 6, 7 }, {2, 3, 4, 5, 6}, {1, 2, 3, 4, 5} }
Lösung: wahr, denn alle Diagonalen enthalten die gleichen Zahlen =>
{1}, {2, 2}, {3, 3, 3}, {4, 4, 4, 4}, {5, 5, 5, 5}, {6, 6, 6}, {7, 7}, {8}
Beispiel 2:
matrix = { {1, 2}, {2, 2} }
Lösung: falsch, denn die zweite Diagonale enthält unterschiedliche Zahlen =>
{1}, {1, 2}, {2}
Erstelle eine Methode/Funktion, die jede Matrix größer 2x2 dahingehend prüft, ob es sich um eine Toeplitz-Matrix handelt.
Viel Spaß
Lösungen:
C++ 17
C-Code
#include <iostream>
#include <vector>
using namespace std;
template<typename T>
bool is_toeplitz_matrix(const vector<vector<T>>& m) {
auto i{ 0 }, k{ 1 };
while (k < m[0].size() - 1) {
vector<T> c, n;
for (size_t x = 0; x < m[i].size()-1; x++)
c.push_back(m[i][x]); i++;
for (size_t y = 1; y < m[k].size(); y++)
n.push_back(m[k][y]); k++;
if (c != n) return false;
}
return true;
}
int main()
{
vector<vector<int>>m { { 4, 5, 6, 7, 8 }, { 3, 4, 5, 6, 7 }, { 2, 3, 4, 5, 6 }, { 1, 2, 3, 4, 5 } };
cout << "Toeplitz-Matrix: " << (is_toeplitz_matrix(m) ? "wahr" : "falsch") << "\n";
}
