l'esercizio che devo fare è il seguente:
si consideri un file che contiene una matrice (massimo 50 * 50) di valori reali.La prima riga del file contiene il numero di righe e il numero di colonne della matrice. Le righe successive del file contengono le righe della matrice con i valori separati da uno o più spazi.
Come esempio si consideri il seguente file che contiene una matrice di 5 righe e 6 colonne.
5 6
1.2 2.33 1.4 0.34 0.032 0.02
1.2 4.55 1.1 1 0 0
0 0 0.3 0.3 0.4 -10.3
0 1 0 0.3 -0.4 5.5
0 0 1.4 0.32 0.41 -1.31
Si scriva una funzione C che prenda come parametro il nome di un file contenente una matrice e restituisca, in un'opportuna struttura dati, i 4 valori corrispondenti a:
-indice della colonna di somma minima
-somma minima
- indice della colonna di somma massima
- somma massima
(gli indici partono da 0)
Quello che ho fatto io ma che purtroppo non funziona è il seguente:
#include<stdio.h>
#define MAX_DIM 50
struct Dati
{
int colonna_min;
float somma_min;
int colonna_max;
float somma_max;
};
struct Dati Somma(char nome_file[]);
int main()
{
char nome_file[] = "matrice.txt";
struct Dati risultato;
risultato= Somma(nome_file);
printf("La colonna della somma minima è %d\nla somma minima è %f\nla colonna della somma massima è %d\nla somma massima è %f",&risultato.colonna_min,&risultato.somma_min,&r isultato.colonna_max,&risultato.somma_max);
return 0;
}
struct Dati Somma(char nome_file[])
{
FILE*fp;
int i,j,righe,colonne;
float M[MAX_DIM][MAX_DIM];
struct Dati ris={0,0,0,0};
float somma=0;
fp=fopen(nome_file,"r");
fscanf(fp,"%d%d",&righe, &colonne);
for (i=0;i<righe;i++)
for(j=0;j<colonne;j++)
fscanf (fp,"%f", &M[i][j]);
for(i=0;i<righe;i++)
{
ris.colonna_min = 0;
ris.somma_min += M[i][0];
ris.colonna_max = 0;
ris.somma_max += M[i][0];
}
for (j=1;j<colonne;j++)
{
for (i=0;i<righe;i++)
somma += M[i][j];
if(somma<ris.somma_min)
{
ris.somma_min = somma;
ris.colonna_min = j;
}
else if(somma>ris.somma_max)
{
ris.somma_max = somma;
ris.colonna_max = j;
}
}
return ris;
}