8. CODURILE CU SUBMENIU
Acesta este programul complet, structurat printr-un meniu interactiv (folosind o instrucțiune repetitivă do-while și decizională switch). Cu ajutorul acestuia, poți rula și testa fiecare operațiune cu matrici învățată anterior, direct din consola Code::Blocks.
#include <iostream> #include <climits> // necesar pentru INT_MIN din optiunea 5 using namespace std; // --- OPTIUNEA 1 --- void meniu_initializare() { cout << "\n--- 1. Initializare Matrice ---\n"; int a[3][4]; // Matrice cu dimensiuni fixe (neinitializata) int b[2][3] = { {1, 2, 3}, // linia 0 {4, 5, 6} // linia 1 }; float c[4][4] = {}; // Matrice initializata cu 0 const int N = 3, M = 3; int mat[N][M]; // Buna practica: constante pentru dimensiuni cout << "Matricile au fost declarate in memorie cu succes!\n"; } // --- OPTIUNEA 2 --- void meniu_citire_afisare() { cout << "\n--- 2. Citire si Afisare ---\n"; int n, m; cout << "Numar linii: "; cin >> n; cout << "Numar coloane: "; cin >> m; int a[100][100]; // dimensiune maxima cout << "Introduceti elementele:\n"; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cout << "a[" << i << "][" << j << "] = "; cin >> a[i][j]; } } cout << "\nMatricea:\n"; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cout << a[i][j] << "\t"; // \t = tab (aliniere) } cout << "\n"; // rand nou dupa fiecare linie } } // --- OPTIUNEA 3 --- void meniu_sume() { cout << "\n--- 3. Sume in matrice ---\n"; int n = 3, m = 3; int a[3][3] = {{1,2,3}, {4,5,6}, {7,8,9}}; // Suma tuturor elementelor int suma = 0; for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) suma += a[i][j]; // Suma diagonalei principale int suma_diag = 0; for (int i = 0; i < n; i++) suma_diag += a[i][i]; // Suma liniei k int k = 1; int suma_linie = 0; for (int j = 0; j < m; j++) suma_linie += a[k][j]; cout << "Suma totala: " << suma << "\n"; // 45 cout << "Suma diagonala: " << suma_diag << "\n"; // 15 cout << "Suma linie 1: " << suma_linie << "\n"; // 15 } // --- OPTIUNEA 4 --- void meniu_transpusa() { cout << "\n--- 4. Transpusa matricii ---\n"; int n = 2, m = 3; int a[2][3] = {{1, 2, 3}, {4, 5, 6}}; int t[3][2]; // transpusa: dimensiunile se inverseaza (m x n) for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) t[j][i] = a[i][j]; // inversam indicii! cout << "Matricea originala (2x3):\n"; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) cout << a[i][j] << " "; cout << "\n"; } cout << "Transpusa (3x2):\n"; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) cout << t[i][j] << " "; cout << "\n"; } } // --- OPTIUNEA 5 --- void meniu_maxim_int_min() { cout << "\n--- 5. Maxim cu INT_MIN ---\n"; int a[3][3] = {{5,12,3}, {8,1,99}, {-4,7,42}}; int n = 3, m = 3; int maxim = INT_MIN; // cel mai mic int posibil int li, lj; // pozitia maximului for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (a[i][j] > maxim) { maxim = a[i][j]; // actualizam maximul li = i; // retinem linia lj = j; // retinem coloana } } } cout << "Maximul este: " << maxim << "\n"; cout << "Pozitia: linia " << li << ", coloana " << lj << "\n"; } // --- OPTIUNEA 6 --- void meniu_maxim_a00() { cout << "\n--- 6. Maxim cu a[0][0] ---\n"; int a[3][3] = {{5,12,3}, {8,1,99}, {-4,7,42}}; int n = 3, m = 3; int maxim = a[0][0]; // Inițializăm cu primul element int li = 0, lj = 0; // Reținem poziția for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (a[i][j] > maxim) { maxim = a[i][j]; li = i; lj = j; } } } cout << "Maximul este: " << maxim << "\n"; cout << "Pozitia: linia " << li << ", coloana " << lj << "\n"; } // --- PROGRAMUL PRINCIPAL --- int main() { int optiune; do { cout << "\n=========== MENIU MATRICI ===========\n"; cout << "1. Declarare si initializare matrice\n"; cout << "2. Citire si afisare matrice\n"; cout << "3. Sume in matrice (totala, diag, linie)\n"; cout << "4. Afisare transpusa matricii\n"; cout << "5. Cautare maxim (metoda cu INT_MIN)\n"; cout << "6. Cautare maxim (metoda cu a[0][0])\n"; cout << "0. Iesire din program\n"; cout << "=======================================\n"; cout << "Alegeti o optiune (0-6): "; cin >> optiune; switch(optiune) { case 1: meniu_initializare(); break; case 2: meniu_citire_afisare(); break; case 3: meniu_sume(); break; case 4: meniu_transpusa(); break; case 5: meniu_maxim_int_min(); break; case 6: meniu_maxim_a00(); break; case 0: cout << "Iesire din program. La revedere!\n"; break; default: cout << "Optiune invalida!\n"; } } while (optiune != 0); return 0; }