|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Apr 2010
Messaggi: 15
|
[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;
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];
}
}
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!!! Ultima modifica di icarota : 24-01-2012 alle 09:04. |
|
|
|
|
|
#2 |
|
Junior Member
Iscritto dal: Apr 2010
Messaggi: 15
|
Ho risolto....praticamente qualche errore stupido da uno che è alle prime armi come me!!!
Il codice esatto è: 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];
}
}
Ciao a tutti!!
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:15.



















