Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    15

    [c] Trasposta matrice

    Devo effettuare la trasposta utilizzando la struttura dati matrice.. Senza usare la struttura dati non ho problemi, ma con questa struttura la matrice outupt viene azzerata stampando 0..
    A cosa è dovuto?

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #define r 100
    #define c 100
    struct matrice {
          float m[r][c];
          int righe;
          int colonne;
           };
           typedef struct matrice matrice;
           int i,j;
           void trasposta(matrice mat1, matrice mat2);
          
    
    int main(int argc, char *argv[])
    {
        matrice m_in;
        matrice m_out;
        
        printf("Numero righe: ");
        scanf("%d", &m_in.righe);
        printf("\nNumero colonne: ");
        scanf("%d", &m_in.colonne);
        printf("\nNumero righe:");
        scanf("%d", &m_out.righe);
        printf("\nNumero colonne: ");
        scanf("%d", &m_out.colonne);
         for (i=0; i<m_in.righe; i++)
         {
             for (j=0; j<m_in.colonne; j++)
             {
                 printf("a[%d][%d]",i,j);
                 scanf("%d", &m_in.m[i][j]);
                 
                 }
             }
        
      trasposta(m_in, m_out);
      for (i=0; i<m_in.righe; i++)
         {
             for (j=0; j<m_in.colonne; j++)
             {
                 printf("%5f",m_out.m[i][j]);
                 
                 }
                 printf("\n");
             }
      
      system("PAUSE");	
      return 0;
    }
    void trasposta(matrice mat1, matrice mat2)
    {
         int i,j;
         for (i=0; i<mat1.righe; i++)
         {
             for (j=0; j<mat1.colonne; j++)
             {
                 mat2.m[i][j]=mat1.m[j][i];
                 
                 }
             }
         
         }

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Devi passare la struttura mat2 per "riferimento" (cioè devi passare il suo indirizzo) altrimenti viene fatta una copia locale di tutti i suoi campi e le modifiche non sono visibili in main(). Tra l'altro, dato che passare una struttura per copia non è molto performante perché viene fatta una copia byte per byte di tutti i campi, ti consiglio di passare per riferimento anche la prima struttura, per quanto non necessario.

    Per il resto, nella scanf() usi %d ma ovviamente ci va %f dato che leggi valori float. Inoltre, perché leggi il numero di righe e di colonne di entrambe le matrici? Dovrebbe bastare per quella di input dato che la matrice trasposta deve avere le stesse dimensioni di quella di origine.
    every day above ground is a good one

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    15
    YuYevon grazie mille ho risolto tutto

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.