Funzione booleana su matrice diagonale in c++

di il
9 risposte

Funzione booleana su matrice diagonale in c++

Come posso scrivere il codice di una funzione booleana che da true se la matrice che immetto è diagonale (cioè ha tutti valori zero tranne che sulla diagonale principale)??

9 Risposte

  • Re: Funzione booleana su matrice diagonale in c++

    Il corpo della funzione potrebbe essere qualcosa del genere, alla funzione dovrai passare la matrice (a meno che non la dichiari globale) specificandone almeno la seconda dimensione (numero di colonne)
    for (int i=0;i<nr;i++)
    	{
    		for (int j=0;j<nc;j++)
    		{
    			if (i==j)
    			{
    				if (m[i][j]!=1)
    					return false;
    			}
    			else
    			{
    				if (m[i][j]!=0)
    					return false;
    			}
    		}
    	}
  • Re: Funzione booleana su matrice diagonale in c++

    Io avevo scritto questo codice, ma mi da errori..Nel main avevo scritto un esempio per vedere se partiva, ma non va:

    #include <iostream>

    using namespace std;
    int const k=100;
    bool matrice_diagonale(int tab[][100], int dim)
    {
    int i,j;
    for(i=0;i<dim;i++)
    {for(j=0;j<dim;i++)
    if(i==j) {if(tab[j]==0) return true;
    else return false;}};
    int main()
    { int const g=3;
    int a[g][g]={1,2,3,4,5,6,7,8,8};
    cout<<matrice_diagonale(int a[][g],int g);
    }
    return 0;
    }
  • Re: Funzione booleana su matrice diagonale in c++

    Ho scritto male... Ecco quello "corretto"

    #include <iostream>

    using namespace std;
    int const k=100;
    bool matrice_diagonale(int tab[][100], int dim)
    {
    int i,j;
    for(i=0;i<dim;i++){for(j=0;j<dim;i++) if(i!=j){if(tab[j]!=0) return false;
    else return true;}};

    int main()
    { int const g=3;
    int a[g][g]={1,2,3,4,5,6,7,8,8};
    cout<<matrice_diagonale(int a[][g],int g);

    return 0;
    }
    Ma non va uguale -.-
  • Re: Funzione booleana su matrice diagonale in c++

    C'è qualcosa di strano in questa for

    for(j=0;j<dim;i++)
  • Re: Funzione booleana su matrice diagonale in c++

    oregon ha scritto:


    C'è qualcosa di strano in questa for

    for(j=0;j<dim;i++)
    Questo neanche me lo segnalava come errore! Infatti, correggendolo, non parte lo stesso
  • Re: Funzione booleana su matrice diagonale in c++

    Non doveva essere segnalato come errore (nella for le 3 parti non sono necessariamente collegate e il compilatore non ti deve avvisare se sbagli tu ...).

    La correzione era necessaria, questo non vuol dire che il tuo problema sia quello.

    Infatti vedo nel main che chiami la funzione con

    cout<<matrice_diagonale(int a[][g],int g);

    e invece dovrebbe essere

    cout<<matrice_diagonale(a, 3);

    se 3 è la dimensione della matrice (100 è quella massima ed è il valore che devi usare per g )

    Anche i valori della matrice non sono impostati correttamente nel main e nella funzione manca una parentesi } alla fine. Inoltre la funzione esegue subito un return (true o false) senza esaminare tutti i valori ... dovrai rivederla.
  • Re: Funzione booleana su matrice diagonale in c++

    oregon ha scritto:


    Non doveva essere segnalato come errore (nella for le 3 parti non sono necessariamente collegate e il compilatore non ti deve avvisare se sbagli tu ...).

    La correzione era necessaria, questo non vuol dire che il tuo problema sia quello.

    Infatti vedo nel main che chiami la funzione con

    cout<<matrice_diagonale(int a[][g],int g);

    e invece dovrebbe essere

    cout<<matrice_diagonale(a, 3);

    se 3 è la dimensione della matrice (100 è quella massima ed è il valore che devi usare per g )

    Anche i valori della matrice non sono impostati correttamente nel main e nella funzione manca una parentesi } alla fine.

    Correggendo tutto, parte, ma mi stampa semplicemente 0.

    Inoltre la funzione esegue subito un return (true o false) senza esaminare tutti i valori ... dovrai rivederla.
    Quale parte di codice devo rivedere? I for o gli if?
  • Re: Funzione booleana su matrice diagonale in c++

    Devi rivedere l'algoritmo ...
  • Re: Funzione booleana su matrice diagonale in c++

    Risolto! Grazie!
Devi accedere o registrarti per scrivere nel forum
9 risposte