Triangolare inferiore

di Anonimizzato11044 il
13 risposte
Potrà sembrare stupido per molti, ma non capisco per quale motivo non mi torna l'esercizio...
devo farlo con la condizione di maggiore per forza, in ogni caso non mi torna..
#include <iostream>
#include <fstream>
using namespace std;

const int N=3;





void leggiMatrice(int mat[N][N]) {
cout << "inserisci matrice "<<N<<"x"<<N<<" "<<endl;
int i, j;
for (i = 0; i< N; i++) {
    for(j = 0; j < N; j++) {
        cin >> mat[i][j];
}
    }
return;
}

void stampaMatrice(int mat[N][N]) {

int i, j;
for (i = 0; i< N; i++) {
    for(j = 0; j < N; j++) {
        cout << mat[i][j] << "\t";
}
             cout << "\n";
    }
return;
}


bool maggiore (int b,int a) {
     return b>a;

}

bool triangolare (int m[N][N]) {
     int i,j;
     bool condizione;
     condizione=false;
     
     for(i=0;i<N-1;i++){
         for(j=1;j<N;j++){
             if( maggiore(j,i) && m[i][j]==0 ) {
                condizione=true;
                cout<<" "<<m[i][j]<<endl;
             }
             else {
                  condizione = false;
                  }
         }
     }
     return condizione;
}



int main () {
    int m[N][N];
    
    leggiMatrice(m);
    stampaMatrice(m);
    
    if(triangolare(m)==true) {
        cout<<"condizione verificata"<<endl;
    } else {
           cout<<"condizione non verificata"<<endl;
           
      }
      system("pause");
}
Edit skynet: inserimento tag code

13 Risposte

  • Che ne dici di inserire i tag code così possiamo comprendere meglio il tuo codice?
  • Da una rapida visita devi vedere quante volte la condizione divewnta true. Se diventa N volte la matrice è triangolare quindi rivedi la funzione triangolare
  • Il problema è che se inserisco una matrice simile : 1 0 2
    3 4 0
    3 4 5
    mi dice condizione verificata ... e non è così..
  • Perche non ascolti quello che ti si è stato detto
    
    #include <iostream>
    #include <fstream>
    using namespace std;
    
    const int N=3;
    
    
    
    
    
    void leggiMatrice(int mat[N][N]) {
    	cout << "inserisci matrice "<<N<<"x"<<N<<" "<<endl;
    	int i, j;
    	for (i = 0; i< N; i++) {
    		for(j = 0; j < N; j++) {
    			cin >> mat[i][j];
    		}
    	}
    	return;
    }
    
    void stampaMatrice(int mat[N][N]) {
    
    	int i, j;
    	for (i = 0; i< N; i++) {
    		for(j = 0; j < N; j++) {
    			cout << mat[i][j] << "\t";
    		}
    		cout << "\n";
    	}
    	return;
    }
    
    
    bool maggiore (int b,int a) {
    	return b>a;
    
    }
    
    bool triangolare (int m[N][N]) {
    	int i,j;
    	int counter = 0;
    
    	for(i=0;i<N-1;i++){
    		for(j=1;j<N;j++){
    			if( maggiore(j,i) && m[i][j]==0 ) {
    				counter++;
    			}
    		}
    	}
    	return (counter == N);
    }
    
    
    
    int main () {
    	int m[N][N];
    
    	leggiMatrice(m);
    	stampaMatrice(m);
    
    	if(triangolare(m)) {
    		cout<<"condizione verificata"<<endl;
    	} else {
    		cout<<"condizione non verificata"<<endl;
    
    	}
    	system("pause");
    }
    
  • Grazie ma un minimo di gentilezza!!! lo dicevo perchè non penso si possa fare solo così, ma calmo ripeto!
  • Chiedo scusa se sembro a volte irrascibile ma se uno ti chiede ti inserire i tag code e di rivedere una parte del codice almeno provarci no.Cmq in buona fede, ciao
  • Ma ti ho spiegato perchè non l'ho fatto... comunque ma se ora volessi indicare quale numero non è uguale a zero se la posizione non è verificata?
  • Bisogna decidere se lo vuoi fare tutto in un passaggio oppure creare una nuova funzione. Se la prima devi almeno creare un vettore dove piazzi gli indici per recuperarli dopo, se la seconda nella nuova funzione splitti l'if. Quindi se j > i ma m[j] non é uguale a zero stampi su schermo le posizioni.
  • Ho provato una cosa simile..ma non viene

    void vettore (int v[N][N]) {
         int i,j;
              
             for(i=0;i<N-1;i++) {
                 for(j=1;j<N;j++) {
                     if(maggiore(j,i) &&  v[N][N]!=0) {
                         cout<<"il numero di posizione:"<<i+1<<","<<j+1<<"non e' uguale a zero"<<endl;
                     }
                 }
             }
             return;
    }
  • Scusa se sono ripetitivo: Puoi mettere i tag code?
    L'if bisogna spezzarlo in due, e cioe valutare prima se j > i e poi dentro il corpo dell'if valutare se é diverso da zero.
  • Ah si scusa è che premevo risposta rapida e non c'era!comunque ora viene, anche se non capisco perchè in un if solo non va..
  • Forse va anche (non ho provato sul compilatore) ma non devi controllare v[N][N]!=0 ma V[j]!=0.
  • Sisi ho visto l'errore ,stavo scrivendo velocemente, l'ho corretto ma senza spezzare l'if non viene!
Devi accedere o registrarti per scrivere nel forum
13 risposte