Úloha 1.3
Napíšte program, zdrojový kód, v jazyku C++ použitím štandardu C++17, ktorý realizuje nasledovnú činnosť.
Program načíta celé číslo n
zo štandardného vstupu, ktoré predstavuje počet riadkov a stĺpcov štvorcovej matice.
Následne alokuje dynamickú dvojrozmernú maticu veľkosti n x n
a načíta do nej celé čísla po riadkoch (t.j. načíta n
čísel prvého riadku, potom ďalší atď.). Program potom transponuje túto maticu (vymení riadky za stĺpce) a vypíše
transponovanú maticu na štandardný výstup.
Príklady vstupov / výstupov programu
Vstup
3
3 1 2
3 4 5
6 7 8
Výstup
3 3 6
1 4 7
2 5 8
Rozbaľ pre ukážku riešenia
#include <iostream>
int main() {
int n;
std::cout << "Zadajte počet riadkov a stĺpcov matice (n): ";
std::cin >> n;
if (n <= 0) {
std::cerr << "Počet riadkov a stĺpcov musí byť kladné celé číslo." << std::endl;
return 1;
}
// Dynamická alokácia dvojrozmerného poľa
int** matica = new int*[n];
for (int i = 0; i < n; ++i) {
matica[i] = new int[n];
}
std::cout << "Zadajte prvky matice po riadkoch:" << std::endl;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
std::cin >> matica[i][j];
}
}
// Transponovanie matice
for (int i = 0; i < n; ++i) {
for (int j = i + 1; j < n; ++j) {
std::swap(matica[i][j], matica[j][i]);
}
}
std::cout << "Transponovaná matica:" << std::endl;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
std::cout << matica[i][j] << " ";
}
std::cout << std::endl;
}
// Uvoľnenie dynamicky alokovanej pamäte
for (int i = 0; i < n; ++i) {
delete[] matica[i];
}
delete[] matica;
return 0;
}
Vysvetlenie
- Načítanie veľkosti matice: Program načíta celé číslo
n
, ktoré určuje počet riadkov a stĺpcov štvorcovej matice. Ak jen
neplatné (napríklad záporné alebo nulové), program vypíše chybové hlásenie a ukončí sa. - Dynamická alokácia dvojrozmerného poľa: Program alokuje pole ukazovateľov
int** matica
, kde každý ukazovateľ smeruje na jednorozmerné pole celých čísel s veľkosťoun
. Týmto spôsobom vznikne dvojrozmerné pole reprezentujúce maticu. - Načítanie prvkov matice: Program načíta
n x n
celých čísel od používateľa a uloží ich do matice po riadkoch. - Transponovanie matice: Program prechádza hornú trojuholníkovú časť matice (nad hlavnou diagonálou) a pre každý prvok
matica[i][j]
vymení jeho hodnotu s prvkommatica[j][i]
. Tým sa dosiahne transpozícia matice. - Výpis transponovanej matice: Program vypíše transponovanú maticu na štandardný výstup.
- Uvoľnenie dynamicky alokovanej pamäte: Program uvoľní pamäť alokovanú pre každý riadok matice pomocou
delete[]
a následne uvoľní aj pole ukazovateľov.