Sunteți pe pagina 1din 2

#include <iostream>

#include <cmath>
using namespace std;

int main() {
int n, i, j, k, p, q;
float mat[10][10];

cout << "Dati numarul de linii si coloane: ";


cin >> n;

cout << "Dati elementele matricei: " << endl;


for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
cin >> mat[i][j];
}
}

for (k = 0; k < n - 1; k++) {


// Determinarea elementului de valoare absolută maximă și a poziției sale
(p, q)
float max_val = abs(mat[k][k]);
p = k;
q = k;
for (i = k; i < n; i++) {
for (j = k; j < n; j++) {
if (abs(mat[i][j]) > max_val) {
max_val = abs(mat[i][j]);
p = i;
q = j;
}
}
}

if (mat[p][q] != 0) {
// Permutarea liniilor p și k dacă sunt diferite
if (p != k) {
for (j = 0; j < n; j++) {
float temp = mat[k][j];
mat[k][j] = mat[p][j];
mat[p][j] = temp;
}
}

// Permutarea coloanelor q și k dacă sunt diferite


if (q != k) {
for (i = 0; i < n; i++) {
float temp = mat[i][k];
mat[i][k] = mat[i][q];
mat[i][q] = temp;
}
}

// Triangularizarea
for (i = k + 1; i < n; i++) {
float factor = mat[i][k] / mat[k][k];
for (j = k; j < n; j++) {
mat[i][j] -= factor * mat[k][j];
}
mat[i][k] = 0; // Pentru a evita erorile de rotunjire
}
} else {
cout << "Matricea A este deja superior triunghiulara." << endl;
return 0; // Oprire dacă matricea este deja superior triunghiulară
}
}

cout << "Matricea rezultata este:" << endl;


for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
cout << mat[i][j] << " ";
}
cout << endl;
}

return 0;
}

S-ar putea să vă placă și