Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    10

    [C] Problema funzione con Matrice Dinamica

    La richiesta dell' esercizio dice cosi:
    Scrivere il programma che, letta da tastiera una matrice 3x3 di interi, stampa a video il vettore
    che contiene la somma degli elementi di ogni colonna. L'operazione di calcolo e generazione del
    vettore devono avvenire in una apposita funzione che riceve come parametro la matrice. Inoltre, la
    funzione deve essere valida anche per matrici di dimensioni diverse da 3x3. La lettura della matrice
    e la stampa del vettore devono avvenire in main, e la memoria occupata dal vettore deve essere
    liberata prima della ne del programma, avvertendo poi l'utente con un messaggio di conferma
    dell'avvenuta liberazione.

    Il codice che ho scritto è questo:
    codice:
    #include<stdio.h>   
    
    //Prototipo della funzione; 
    float* diag(float **m,int Ri,int Co); 
    
    int main() 
    {      
    float **m; int r,c,i,Ri,Co; float *vet;  
    printf("Inserisci il numero delle righe(colonne) della matrice quadrata:\n"); 
    scanf("%d",&Ri);  
    
    Ri=Co;  
    
    vet = (float *)malloc(Co * sizeof(float));  
    
    /* allocazione della matrice dinamica */ 
    m = (float **)malloc(Ri * sizeof(float*)); 
    for (r = 0; r < Ri; i++)     
                                 m[i] = malloc(Ri*sizeof(float));  
    //Inizializzazione della matrice 
    printf("\nInserisci gli elementi della matrice %dx%d:\n",Ri,Ri); 
    for(r=0;r<Ri;r++){    
                           for(c=0;c<Co;c++){                     
                                                      scanf("%f",&m[c][r]);                    
                                                      }                  
                             }     
    //Stampa della matrice for(r=0;r<Ri;r++){     
                                                          for(c=0;c<Co;c++){
                                                                       printf("%f\t",m[c][r]);       
                                                                                      }
                                                                        printf("\n");                  
                                                              }  
    vet = diag(m,Ri,Co);                   
    for(i=0;i<Co;i++){
     printf("La somma delle colonne e': %f \n",vet[i]);}
    free(vet);
    printf("La memoria occupata dal vettore e' stata liberata"); 
     getchar();getchar(); return 0;
     }  
    
    //Definizione della funzione;
    float* diag(float **m,int Ri,int Co){
    int i,j;             
    float somma_colonne[Co];                     
    
    for(i=0;i<Ri;i++){  
                           somma_colonne[0] = 0;                         
                           for (j=0;j<Co;j++)      
                                                   somma_colonne[i]=somma_colonne[i]+m[i][j];  
                           } 
    return somma_colonne;
    }
    Potete spigarmi dove sono gli errori cosi che posso studiarmeli per bene?
    Io penso che sia la funzione ad essere fatta male.
    Il warning che mi dà è che che la funzione restituisce l'indirizzo di una variabile locale ed appena inserisco il numero delle righe
    il programma si impalla e non si muove!
    Grazie mille!!!

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    10
    Ho apportato alcune modifiche al codice ma continua a non funzionare com deve!

    codice:
    #include<stdio.h>
    
    
    //Prototipo della funzione;
    void diag(float **m,int Ri,int Co, float *somma_colonne);
    
    int main()
    {
        
    float **m;
    int r,c,i;
    float *v,Ri,Co;
    
    printf("Inserisci il numero delle righe(colonne) della matrice quadrata:\n");
    scanf("%f",&Ri);
    
    Ri=Co;
    
    v = (float *)malloc(Ri * sizeof(float));
    
    /* allocazione della matrice dinamica */
    m = (float **)malloc(Ri * sizeof(float*));
    for (r = 0; r < Ri; r++){
        m[r] = malloc(Ri*sizeof(float));}
    
    //Inizializzazione della matrice
    printf("\nInserisci gli elementi della matrice %f X %f:\n",Ri,Ri);
    for(r=0;r<Ri;r++){
       for(c=0;c<Co;c++){
                        scanf("%f",&m[c][r]);
                        }
                     }   
    
    //Stampa della matrice
    for(r=0;r<Ri;r++){
       for(c=0;c<Co;c++){
                        printf("%f\t",m[c][r]);
                        }
                        printf("\n");
                     }
    
    diag(m,Ri,Co,v);                 
    
    for(i=0;i<Co;i++){
    printf("La somma delle colonne e': %f \n",v[i]);}                                 
    
    free(v);
    printf("La memoria occupata dal vettore e' stata liberata");
    
    getchar();getchar();
    return 0;
    }
    
    //Definizione della funzione;    
    void diag(float **m,int Ri,int Co,float *somma_colonne){
          int i,j;
          
          for(i=0;i<Ri;i++){
                            somma_colonne[i] =m[i][0] ;
                            for (j=0;j<Co;j++)
                                             somma_colonne[i] =somma_colonne[i] + m[i][j]; 
                           }
                           
    
    }

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non funziona come deve non aiuta chi ti vuole rispondere ...

    Devi essere più preciso ... cosa fornisci in input, cosa succede, errori, messaggi, quando, più o meno in quale riga ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    10
    Eh lo so scusa per la poca precisione comunque ho appena risolto;facevo degli errori stupidi da chi è alle prime armi come me!

    Posto il codice che gira correttamente:
    codice:
    #include<stdio.h>
    
    
    //Prototipo della funzione;
    void diag(float **m,int Ri,int Co, float *somma_colonne);
    
    int main()
    {
        
    float **m;
    int r,c,i;
    float *v,Ri,Co;
    
    printf("Inserisci il numero delle righe(colonne) della matrice quadrata:\n");
    scanf("%f",&Ri);
    
    Co = Ri;
    
    v = (float *)malloc(Ri * sizeof(float));
    
    /* allocazione della matrice dinamica */
    m = (float **)malloc(Ri * sizeof(float*));
    for (r = 0; r < Ri; r++){
        m[r] = malloc(Ri*sizeof(float));}
    
    //Inizializzazione della matrice
    printf("\nInserisci gli elementi della matrice %f X %f:\n",Ri,Ri);
    for(r=0;r<Ri;r++){
       for(c=0;c<Co;c++){
                        scanf("%f",&m[c][r]);
                        }
                     }   
    
    //Stampa della matrice
    for(r=0;r<Ri;r++){
       for(c=0;c<Co;c++){
                        printf("%f\t",m[c][r]);
                        }
                        printf("\n");
                     }
    
    diag(m,Ri,Co,v);                 
    
    for(i=0;i<Co;i++){
    printf("La somma delle colonne e': %f \n",v[i]);}                                 
    
    free(v);
    printf("La memoria occupata dal vettore e' stata liberata");
    
    getchar();getchar();
    return 0;
    }
    
    //Definizione della funzione;    
    void diag(float **m,int Ri,int Co,float *somma_colonne){
          int i,j;
          
          for(i=0;i<Ri;i++){
                            somma_colonne[i] =0 ;
                            for (j=0;j<Co;j++)
                                             somma_colonne[i] =somma_colonne[i] + m[i][j]; 
                           }
                           
    
    }

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.