codice:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 50
#define M 100
// Definizione del tipo Vettore e Stringa per array di reali e caratteri
typedef double Vettore[N];
typedef char Stringa[M];
// Prototipi delle funzioni
void read_vector(Vettore v, int* n, Stringa nome_file);
void print_vector(Vettore v, int n);
double max(Vettore v,int n);
double min(Vettore v,int n);
double mean(Vettore v, int n);
double var(Vettore v, int n);
int count_null(Vettore v,int n);
void process_vector(Vettore v, int n1, int* n2);
void save_vector(Vettore v, int n, Stringa nome_file);
//Svillupo funzioni
//Funzione che legge il vettore da file
void read_vector(Vettore v, int *n, Stringa nome_file)
{
register int i;
FILE *fp;
int ret;
fp=fopen(nome_file, "r");
if(fp==NULL)
printf("Errore nell'apewrtura del file.");
else
{
ret=fscanf(fp, "%d", n);
if(ret!=EOF)
{
//printf("\nNumero elementi vettore: %d \n", *n); Ricorda di eliminare riga a salvataggio compiuto......stronzoneeeeeeeeeeee
if(*n>0)
{
for(i=0; i<*n; i++)
{
fscanf(fp, "%lf", &v[i]);
}
}
}
else
printf("\nIl file e' vuoto!!!!\n");
fclose(fp);
}
}
//Funzione che stampa a video il vettore letto precedentemente
void print_vector(Vettore v, int n)
{
register int i;
printf("[");
for(i=0;i<n;i++)
{
if(i<(n-1))
printf("%lf,", v[i]);
else
printf("%lf", v[i]);
}
printf("]\n");
}
//Funzione che ritorna il max tra gli elementi di un vettore
double max(Vettore v, int n)
{
register int i;
double max=v[0];
for(i=0;i<n;i++)
{
if (v[i]>max)
max=v[i];
}
return max;
}
//Funzione che ritorna il minimo tra gli elementi di un vettore
double min(Vettore v, int n)
{
register int i;
double min=max(v, n);
for(i=0;i<n;i++)
{
if (v[i]<min)
min=v[i];
}
return min;
}
//Funzione che ritorna la media degli elementi di un vettore
double mean(Vettore v, int n)
{
register int i;
double somma=0, media;
for(i=0; i<n; i++)
{
somma+= v[i];
}
media=(somma/n);
return media;
}
//Funzione che ritorna la varianza degli elementi di un vettore
double var(Vettore v, int n)
{
register int i;
double somma=0, var;
for(i=0; i<n; i++)
{
somma+= pow((v[i]-mean(v, n)), 2);
}
var= (somma/n);
return var;
}
//Funzione che ritorna il numero delle ricorrenze dei valori nulli all'interno di un vettore
int count_null(Vettore v,int n)
{
register int i;
int somma_nulli=0;
for(i=0;i<n;i++)
{
if(v[i]==0)
{
somma_nulli+=1;
}
}
return somma_nulli;
}
//Funzione che elimina gli 0 di un vettore e ritorna la nuova grandezza del vettore
void process_vector(Vettore v, int n1, int* n2)
{
register int i, j=0, h;
int z=0, posiz;
Vettore m;
for(i=0; i<n1;i++)
{
if(int(v[i])!=0)
{
m[j]=v[i];
j++;
}
}
for(h=0; h<j; h++)
{
v[h]=m[h];
}
*n2= j;
}
//Funzione che salva su file il nuovo vettore
void save_vector(Vettore v, int n, Stringa nome_file)
{
register int i;
FILE *fp;
fp=fopen(nome_file, "w");
if(!fp)
printf("\nIl file non può essere salvato\n");
else
{
fprintf(fp, "%d ", n);
for(i=0; i<n; i++)
fprintf(fp, "%lf ", v[i]);
}
}
//Funzione coordinatrice
int main()
{
Vettore magn, grav;
Stringa filename, filename2, filename3, filename4;
int n, m, j, k;
printf("Inserire il nome del file contenente i valori dei campi magnetici: \n");
scanf("%s", &filename);
read_vector(magn, &n, filename);
printf("Inserire il nome del file contenente i valori dei campi gravitazionali: \n");
scanf("%s", &filename2);
read_vector(grav, &m, filename2);
printf("la media e la varianza dei valori del campo magnetico sono rispettivamente. \n %lf \t %lf \n", mean(magn, n), var(magn, n));
printf("Il minimo e il massimo valore dei campi gravitazionali sono rispettivamente: \n %lf \t %lf \n", min(grav, m), max(grav, m));
printf("Gli elementi nulli presenti nel campo magnetico/gravitazionale sono rispettivamente: \n %d \t\t %d\n", count_null(magn, n), count_null(grav, m));
process_vector(magn, n, &j);
process_vector(grav, m, &k);
printf("Inserire i nomi dei file contenenti i valori dei campi magnetici e gravitazionali modificati: \n");
scanf("%s %s", &filename3, &filename4);
save_vector(magn, j, filename3);
save_vector(grav, k, filename4);
system("PAUSE");
return 0;
}
grazie mille per l'aiuto