Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2015
    residenza
    Italia
    Messaggi
    23

    Matrice diagonale [PALINDROMA]!

    Buonasera ,
    ieri ho avuto l'esame di programmazione e nel primo modulo era presente questo esercizio:
    /*Scrivi una funzione che verifichi se la diagonale di una matrice e' palindroma.*/.
    Cosi' oggi ho deciso di provare a computer se il programma che avevo fatto fosse corretto, ma a quanto pare c'è un errore. Io avevo pensato di risolverlo in questo modo:

    codice:
    int palindroma(int mat[20][20], int, int);
    
    
    int main(){
    int mat[20][20], riga, colonna;
    int i, j;
    int funzione;
    
    
     do{
      printf("Quanti elementi vuoi inserire nella matrice? (masismo 20)\n");
      scanf("%d.%d", &riga, &colonna);
    
    
      if(riga<1 || riga>20 || colonna<1 || colonna>20){
        printf("ERRORE nell'inserimento!\nRIPROVA:\n");
      }
     }while(riga<1 || riga>20 || colonna<1 || colonna>20);
    
    
    
    
     for(i=0; i<riga; i++){
      for(j=0; j<colonna; j++){
      printf("Immetti elementi [%d, %d]:\n", i, j);
      scanf("%d.%d", &mat[i][j]);
      }
     }
    
    
     funzione=palindroma(mat, riga, colonna);
     if(funzione==0)
      printf("La diagonale E' palindroma\n");
     else
      printf("La diagonale NON E' palindroma\n");
    
    
    system("pause");
    return 0;
    }
    
    
    
    
    int palindroma(int mat[20][20], int riga, int colonna){
    int i, j;
    int flag=0;
    
    
      for(i=0; i<riga; i++){
       for(j=0; j<colonna; j++){
        if((i==j) == (riga-1-i==colonna-1-j))
         flag=0;
        else 
         flag=1;
       }
      }
     return flag;
    }

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Stai continuando a cambiare il valore di flag senza neanche controllare gli elementi della matrice.

    Edit. inoltre direi che visto che c'è una diagonale, la matrice deve essere quadrata. Perciò non ti servono due dimensioni ma una.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2015
    residenza
    Italia
    Messaggi
    23
    Per controllare gli elementi dovrei scrivere cosi': mat[i][j] == mat[riga-1-i][colonna-1-j]?
    Tenendo conto delle due dimensioni

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Quote Originariamente inviata da melmang Visualizza il messaggio
    Per controllare gli elementi dovrei scrivere cosi': mat[i][j] == mat[riga-1-i][colonna-1-j]?
    Tenendo conto delle due dimensioni
    Già, ma quello non è l'unico errore.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2015
    residenza
    Italia
    Messaggi
    23
    Ah interessante

  6. #6
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Quote Originariamente inviata da melmang Visualizza il messaggio
    Ah interessante
    Pensa a come viene eseguito quel for e a come cambia flag.

    Prendi un foglio e prova a eseguire a mano.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2015
    residenza
    Italia
    Messaggi
    23
    Quote Originariamente inviata da Scara95 Visualizza il messaggio
    Pensa a come viene eseguito quel for e a come cambia flag.

    Prendi un foglio e prova a eseguire a mano.
    Scrivendo la funzione in questo modo:
    codice:
    int palindroma(int mat[20][20], int riga, int colonna){int i, j;
    int flag=0;
    
    
      for(i=0; i<riga; i++){
       for(j=0; j<colonna; j++){
        if((i==j) && (riga-1-i==colonna-1-j)){
          if(mat[i][j] == mat[riga-1-i][colonna-1-j])
          flag=0;
        else
         flag=1;
        }
       }
      }
     return flag;
    }
    ho provato diversi casi e mi compila correttamente. Dandomi la giusta soluzione!

  8. #8
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Prova a mettere una matrice come

    1 0 0 0
    0 1 0 0
    0 0 1 0
    0 0 0 1

    E un'altra come

    1 0 0 0
    0 1 0 0
    0 0 0 0
    0 0 0 1
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

Tag per questa discussione

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.