Corretto?

di il
2 risposte

Corretto?

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
	}

}



}

2 Risposte

  • Re: Corretto?

    
    #include <iostream>
    
    using std::cin;
    
    using std::cout;
    
    using std::endl;
    
    using std::cerr;
    
    #include <exception>
    
    using std::exception;
    
    #include <vector>
    
    using std::vector;
    
    uquivalente a:
    
    #include <iostream>
    #include <exception>
    
    using namespace std;
    
    Ti ho tolto il vector perche non lo usi nel programma.
    
    const int RIG = eq;     //numero di righe
    
    const int COL = eq+1;   //numero di colonne
    
    questa parte non sono sicuro che funzioni su tutti i compilatori. il tuo è per caso gcc con estensioni C99?

    Perche usi exception non l'ho ancora capito. il cin non usa l'exception se non è riuscito a formattare il valore in ingresso. Mette solo il suo status in fail almeno che tu non li dici di fare ciò con la funzione ios::exceptions.
  • Re: Corretto?

    In realtà io la parte exception non l'ho nemmeno capita molto bene..l'ho tirata giu pari da un coso su internet, pensavo fosse apposta per identificare gli errori ma non l'avevo mai sentita.
    se conosci un'alternativa meglio
Devi accedere o registrarti per scrivere nel forum
2 risposte