Per l'uni dovevo fare un programma in grado di risolvere un sistema lineare..
lo ammetto..l'ho copiato un bel po da piu siti diversi ma una grossa parte l'ho fatta io per infilarci le sintassi che avevamo fatto a lezione..
mi sapete dire se un programma così lo giudichereste accettabile?
grazie mille
PS: non fate gli antipatici se non è corretto ho molti altri esami piu importanti questo lo ho lasciato un po' indietro
//Commenti sul progetto tipo autore, titolo ecc
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
using std::cerr;
#include <exception>
using std::exception;
#include <vector>
using std::vector;
int main(){
int vars, eq;
try{
cout<<"Inserire il numero di variabili"<<endl;
cin>>vars;
cout<<"Inserire il numero di equazioni"<<endl;
cin>>eq;
}
catch(exception& e){
cerr<<e.what()<<endl;
cerr<<"Errore, il valore inserito non è un numero valido!"<<endl;
cerr<<"Ne segue che il programma verrà chiuso"<<endl;
return 1;
}
const int RIG = eq; //numero di righe
const int COL = eq+1; //numero di colonne
double matrix[RIG][COL]; //array della matrice
double coefficients[RIG*COL]; //array totale dei coefficenti
if(vars==eq){
if(vars>0){
//Input dei coefficenti
for(int i=0;i<RIG;i++){
for(int j=0;j<COL;j++){
if(j==COL-1){
cout<<"Inserire il termine noto della "<<(i+1)<<"^ equazione"<<endl;
}
else{
cout<<"Inserire il "<<(j+1)<<" coefficente della "<<(i+1)<<"^ equazione"<<endl;
}
try{
cin>>coefficients[j+COL*i];
}
catch(exception& e){
cerr<<e.what()<<endl;
cerr<<"Errore! Il valore inserito non è un numero valido!"<<endl;
cerr<<"Il programma verrà chiuso"<<endl;
return 1;
}
}
}
//Inserimento dei coefficneti nella matrice
for(int i=0;i<RIG*COL;i++){
matrix[i/COL][i%COL]=coefficients[i];
}
/*Output di controllo della matrice
for(int a = 0; a < ROWS; ++a){
for(int b = 0; b < COLUMNS; ++b){
cout << matrix[a][b]<<" ";
}
cout<<endl;
}
cout<<endl;
*/
//Risoluzione del sistema lineare col metodo di Gauss-Jordan
for(int i=0;i<RIG;i++){
int divisor = matrix[i][i]; //Imposto il divisore della riga
if(divisor==0){
if(matrix[i][COL-1]==0){
cout<<"Sistema indeterminato"<<endl;
return 0;
}
else{
cout<<"Sistema impossibile"<<endl;
return 0;
}
}
for(int l=0;l<COL;l++){ //Divido tutti gli elementi della riga per il divisore
matrix[i][l]=matrix[i][l]/divisor;
}
for(int k=0;k<RIG;k++){
if(k!=i){
int factor = matrix[k][i]; //Imposto il fattore per cui va moltiplicata la riga da sottrarre
for(int j=0;j<COL;j++){ //Sottraggo la riga moltiplicata a un'altra riga
matrix[k][j]=matrix[k][j]- factor *matrix[i][j];
}
}
}
}
//Output della soluzione
cout<<"Soluzione: { ";
for(int i=0;i<RIG;i++){
cout<<matrix[i][COL-1]<<" ";
}
cout<<"}"<<endl;
int x; //io uso questo metodo molto semplice perchè altrimenti non vedrei l'output
cin>>x; //perchè mi chiude la console subito dopo il return (è da eliminare ma l'ho lasciato perchè così vedi l'output)
return 0;
}
else{
cout<<"Numero di equazioni non valido"<<endl;
cout<<"Il programma verrà chiuso"<<endl;
return 1;
}
}
else{
cout<<"Sistema indeterminato o impossibile"<<endl;
//devo ancora fare bene
//questa parte
}
}
}