Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [C++] Matrice trasposta

    Salve a tutti spero di postare correttamente visto che è il primo msg che invio su questo forum
    Passo ad illustrare il mio problema
    Devo creare la trasposta di una matrice(quadrata) generica e salvarla e non capisco perchè il mio codice non funziona

    codice:
    #include <cstdlib>
    #include <iostream>
    using namespace std;
    
    #define max 10
    
    void trasposta(int a[][max],int &x);
    
    
    
    
    
    
    int main(){
    
    int n;
    cout<<"inserisci l'ordine della matrice quadrata da traspore: ";
    cin>>n;
    int m[max][max];
    
    for(int i=0; i<n;i++)
     for(int j=0; j<n;j++){
     cout<<"inserisci l'elemento"<<"[ "<<i<<" , "<<j<<" ] ";
     cin>> m[i][j];
    cout<<endl;
    }
     
     
     cout<<" La matrice inserita è: \n";
    for(int i=0; i<n;i++){
     for(int j=0; j<n;j++)
     cout<<m[i][j]<<" ";
     cout<<endl;}
     trasposta(m,n);                  
    
    
    
    
          system("PAUSE");
          return EXIT_SUCCESS;
          }
    
    
    
    void trasposta(int a[][max],int &x){
    
    
    {int tmp,i,j;
    
    for(i=0; i<x;i++){
     for(j=0; j<x;j++){
     
      tmp=a[i][j];
      a[i][j]=a[j][i];
      a[j][i]=tmp;
    
    }}} 
    
    cout<<" La matrice inserita trasposta e :\n";
    for(int i=0; i<x;i++){
     for(int j=0; j<x;j++)
     cout<<a[i][j]<<" ";
     cout<<endl;}
     
    }
    sono arrivato ad soluzione alternativa ma vorrei capire perchè la prima non funziona grazie in anticipo per le vostre risposte

    Posto anche la soluzione alternativa
    codice:
    #include <cstdlib>
    #include <iostream>
    using namespace std;
    
    typedef int matrix[10][10];
    void trasposta(matrix m,int &x);
    
    
    
    
    
    
    int main(){
    
    int n;
    cout<<"inserisci l'ordine della matrice quadrata da traspore: ";
    cin>>n;
    matrix m;
    
    for(int i=0; i<n;i++)
     for(int j=0; j<n;j++){
     cout<<"inserisci l'elemento"<<"[ "<<i<<" , "<<j<<" ] ";
     cin>> m[i][j];
    cout<<endl;
    }
     
     
     cout<<" La matrice inserita è: \n";
    for(int i=0; i<n;i++){
     for(int j=0; j<n;j++)
     cout<<m[i][j]<<" ";
     cout<<endl;}
     
     trasposta(m,n);                  
    
    
    
    
          system("PAUSE");
          return EXIT_SUCCESS;
          }
    
    
    
    void trasposta(matrix a,int &x){
    matrix t;
    
    
    {
    
    for(int i=0; i<x;i++){
     for(int j=0; j<x;j++){
     
      t[j][i]=a[i][j];
      
     
                       }
       } 
          
         }
    
    cout<<" La matrice inserita trasposta e :\n";
    for(int i=0; i<x;i++){
     for(int j=0; j<x;j++)
     cout<<t[i][j]<<" ";
     cout<<endl;}
     
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    12
    Ciao!
    La prima soluzione non funziona perchè il doppio ciclo scambia i valori posizionati correttamente al primo giro. Mi spiego meglio con un esempio. Se prendiamo una matrice quadrata 2x2, quando i=0 e j=1 abbiamo la trasposizione esatta, quando i=1 e j=0, il programma effettua nuovamente una trasposizione, riportando la matrice di partenza. Quindi è questo doppio ciclo che non ti porta alla giusta conclusione (e secondo me l'alternativa è molto buona).
    Spero di esserti stato d'aiuto. Ciao!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.