Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [java]Dire se una matrice è diagonale,triangolaresup o triangolareinf

    Buonasera a tutti,
    Dovevo fare un programma che mi diceva se una matrice è triangolaresup( 1 1 1 ),
    ( 0 2 2 )
    ( 0 0 3 )
    restituendo 1,poi triangolareinferiore( 1 0 0 ),restituendo -1 ed infine
    ( 2 2 0 )
    ( 3 3 3 )
    diagonale( 1 2 3 ),restituendo 2 ed se non era nulla il programma deve restituire -2
    ( 2 1 3 )
    ( 3 2 1 )
    La matrice per semplicità lo scritta io ma poi la vorrò inserire da input.
    Ecco il mio codice che mi restituisce +1, -1, 0, non so il perchè
    Saluti e grazie.
    ecco il codice
    codice:
    public class MatriceTriangInfSupDiag { public static boolean TriangSup(int[][] matrice) { for(int i=1;i<matrice.length;i++) { for(int j=0;j<matrice.length-1;i++) { if(matrice[1][0]==0) { if(matrice[2][0]==0) { if(matrice[2][1]==0) { return true; } } } } } return false; } public static boolean TriangInf(int[][] matrice) { for(int i=0;i<matrice.length;i++) { for(int j=0;j<matrice.length;j++) { if(matrice[0][1]==0) { if(matrice[0][2]==0) { if(matrice[1][2]==0) { return true; } } } } } return false; } public static boolean Diagonale(int[][] matrice) { for(int i=0;i<matrice.length;i++) { for(int j=0;j<matrice.length;j++) { if(matrice[0][0]==1) { if(matrice[1][1]==1) { if(matrice[2][2]==1) { return true; } } } } } return false; } public static void main (String[] args) { int [][] matrice = {{1,0,0},{0,1,0},{0,0,1}}; if(TriangSup(matrice)) System.out.println("+1"); if(TriangInf(matrice)) System.out.println("-1"); if(Diagonale(matrice)) System.out.println("0"); else System.out.println("2"); } }

  2. #2

    Si capisce poco

    Scrivo meglio le matrici
    1 2 3
    0 1 2 Triangolare sup
    0 0 3

    1 0 0
    3 2 0 Triangolare inf
    1 2 2

    1 2 3
    2 1 3 diagonale
    3 2 1

    Saluti.

  3. #3

    Re: [java]Dire se una matrice è diagonale,triangolaresup o triangolareinf

    Originariamente inviato da Federicot
    Buonasera a tutti,
    Dovevo fare un programma che mi diceva se una matrice è triangolaresup( 1 1 1 ),
    ( 0 2 2 )
    ( 0 0 3 )
    restituendo 1,poi triangolareinferiore( 1 0 0 ),restituendo -1 ed infine
    ( 2 2 0 )
    ( 3 3 3 )
    diagonale( 1 2 3 ),restituendo 2 ed se non era nulla il programma deve restituire -2
    ( 2 1 3 )
    ( 3 2 1 )
    Il codice che hai scritto non va bene in quanto per confrontare/verificare il contenuto delle celle devi usare gli indici e non costanti, altrimenti l'impostazione del ciclo è obsoleta.

    Ad esempio, per stampare il contenuto di un'intera matrice devi fare così:
    codice:
    int M[][] = {{1, 2, 3},
                     {4, 5, 6}};
    
    for(int i = 0; i < M.length; i++){ //dimensione delle righe
        for(int j = 0; j < M[i].length; j++) //dimensione delle colonne
            System.out.print( M[i][j] + " " );
        System.out.println();
    }

  4. #4

    Grazie della risposta

    Ciao Vincenzo grazie di un altra risposta ok, per stampare una matrice completa devo usare m.length ed anche m[i].length, però a me serve non stamparla la matrice completa ma stampare solo o 1, -1, 0, 2, io adesso gli ho corretti i cicli, ma a me stampa sempre +1,-1, 0;
    Ti ringrazio di nuovo

  5. #5

    Re: Grazie della risposta

    Originariamente inviato da Federicot
    a me serve non stamparla la matrice completa
    Si lo so, ma quel codice deve farti capire come accedere alle celle della matrice in modo generico.
    Originariamente inviato da Federicot
    stampare solo o 1, -1, 0, 2
    Spiegati meglio. Quando deve restituire 1? Quando -1? ecc..

  6. #6

    Spiegazione migliore

    io non devo stampare nessuna matrice ma soltanto:
    1 se la mia matrice salvata è triangolaresuperiore cioè solo quando sotto la diagonale ho elementi che sono tutti zero
    -1 se la mia matrice è triangolareinferiore solo quando gli elementi sopra la diagonale sono uguali a zero
    2 se la mia matrice è diagonale cioè in diagonale devo avere tutti 1(poi anche sotto e sopra la diagonale gli elementi devono essere zero ma io sugli if ancora non li ho inclusi)
    -2 non sto in nessuno dei tre casi
    Forse mi sono illuminato proprio pensando alla matrice diagonale se aggiungo che devo avere zeri sotto e sopra la diagonale mi restituisce 2 (quello che io voglio)
    Dici che è cosi?
    Spero di essermi spiegato
    ciao

  7. #7

    Re: Spiegazione migliore

    Originariamente inviato da Federicot
    1 se la mia matrice salvata è triangolaresuperiore cioè solo quando sotto la diagonale ho elementi che sono tutti zero
    -1 se la mia matrice è triangolareinferiore solo quando gli elementi sopra la diagonale sono uguali a zero
    2 se la mia matrice è diagonale cioè in diagonale devo avere tutti 1(poi anche sotto e sopra la diagonale gli elementi devono essere zero ma io sugli if ancora non li ho inclusi)
    -2 non sto in nessuno dei tre casi
    Credo tu debba farti per ogni verifica un metodo ed in particolare il metodo deve restituire un valore booleano.
    Poi in un altro tuo metodo oppure nel main costruisci i controlli:
    codice:
    if( isTriangolareInf( ... ) )
        //stampi a video o restituisci il valore -1
    else if( isTriangolareSup( ... ) )
        //stampi a video o restituisci il valore 1
    
    //e così via...

  8. #8

    Risposta al programma di matrice

    Si ok ho capito infatti io sul main ho preparato tutti gli if con triangsup stampa 1............ecc
    e poi anche i metodi confrontando le posizioni perchè in precedenza stampavo true guardando solo il primo valore e poi ho capito che questo discorso valeva soltanto se io incontro valori diversi ma con valori =0, devo andare avanti.
    Dopo varie intuizioni lo sto modificando in caso aspetterò qualche altro parere grazie ciao

  9. #9

    Ho quasi risolto

    Ecco il mio problema quasi risolto, io ho scritto una matrice ((1, 0, 0),(0, 1, 0),(0, 0, 1)) ed il mio programma scriveva tutto perchè infatti è sia triangolaresup triangolareinf e anche diagonale(adesso che so perchè fa cosi spero di risolvere il problema), cambiando la matrice infatti mi restituisce il giusto numero, devo solo mettere di stampare 2 se non rientra nei casi precedenti;
    Vi posto il codice per avere suggerimenti o consigli.

    codice:
    public class MatriceTriangInfSupDiag { public static boolean TriangSup(int[][] matrice) { for(int i=1;i<matrice.length;i++) { for(int j=0;j<matrice[i].length-1;i++) { if(matrice[1][0]==0) { if(matrice[2][0]==0) { if(matrice[2][1]==0) { return true; } } } } } return false; } public static boolean TriangInf(int[][] matrice) { for(int i=0;i<matrice.length;i++) { for(int j=0;j<matrice.length;j++) { if(matrice[0][1]==0) { if(matrice[0][2]==0) { if(matrice[1][2]==0) { return true; } } } } } return false; } public static boolean Diagonale(int[][] matrice) { for(int i=0;i<matrice.length;i++) { for(int j=0;j<matrice.length;j++) { if(matrice[0][0]==1) { if(matrice[1][1]==1) { if(matrice[2][2]==1) { if(matrice[1][0]==0) { if(matrice[1][2]==0) { if(matrice[0][1]==0) { if(matrice[0][2]==0) { if(matrice[2][0]==0) { if(matrice[2][1]==0) return true; } } } } } } } } } } return false; } public static int[][] SottoDiagonale (int[][] matrice) { if(TriangSup(matrice)) { System.out.println("E' triang sup +1"); } return matrice; } public static int[][] SopraDiagonale (int[][] matrice) { if(TriangInf(matrice)) { System.out.println("E' triang inf -1"); } return matrice; } public static int[][] SottoESopra (int[][] matrice) { if(TriangInf(matrice)) if(TriangSup(matrice)) //if(Diagonale(matrice)) { System.out.println("E' diag 0"); } return matrice; } public static void main (String[] args) { int[][] matrice = {{1,0,0},{0,1,0},{0,0,1}}; SottoDiagonale(matrice); SopraDiagonale(matrice); SottoESopra(matrice); } }

  10. #10

    Re: Ho quasi risolto

    Originariamente inviato da Federicot
    codice:
    ...
    public static boolean TriangSup(int[][] matrice) 
    { 
    for(int i=1;i<matrice.length;i++) 
    { 
    for(int j=0;j<matrice[i].length-1;i++) 
    { 
    if(matrice[1][0]==0) 
    { 
    if(matrice[2][0]==0) 
    { 
    if(matrice[2][1]==0) 
    { return true; 
    } 
    } 
    } 
    } 
    } 
    return false; 
    }
    ...
    Nella maniera più assoluta è sbagliato!

    Devi prendere spunto dal codice di esempio che ti ho postato in precedenza, se vuoi accedere correttamente alle celle della matrice, non considerando la stampa.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.