Testo:
Esecuzione:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
double genInput (double a, double b, char *str);
void genRandom (double *x, double min, double max);
void distance(double a[], double b[], int size);
void mediavarianza (double a[], int size, double v);
int main() {
int N;
double v;
srand(time(NULL));
printf("Il programma verifica se si hanno eventi distribuiti temporalmente in modo casuale con frequenza v\n");
do {
printf("Inserisci la frequenza ");
scanf("%lf",&v);
} while (v <= 0);
N = genInput (0, 10000, "il numero di eventi da generare");
double t[N], x;
int i;
for (i = 0; i < N; i++) {
genRandom (&x, 0.0, N/v);
t[i] = x;
}
double DT[N];
distance(t, DT, N);
for (i=0; i<N ; i++) {
printf("%lf\n",DT[i]);
}
mediavarianza (DT, N, v);
}
double genInput (double a, double b, char *str) {
double N;
do {
printf("Inserisci %s ",str);
scanf("%lf",&N);
} while (N < a || N > b);
return N;
}
void genRandom (double *x, double min, double max) {
double a;
a = (max - min)*rand()/((double)RAND_MAX)+min;
*x = a;
}
void distance(double a[], double b[], int size) {
int i, j, k;
double min;
b[size-1] = 0;
for (i = 0; i < size - 1; i++) {
for (j = i+1; j < size; j++) {
if (a[i] - a[j] >= 0) {
min = a[i] - a[j];
break;
}
}
for (k = 0; k < size; k++) {
if (a[i] - a[k] >= 0 && a[i] - a[k] <= min && k != i) {
min = a[i] - a[k];
}
}
b[i] = min;
}
}
void mediavarianza (double a[], int size, double v) {
double u,s;
double sum = 0.0;
int i;
for (i=0; i < size; i++) {
sum += a[i];
}
u = sum/(size - 1);
sum = 0.0;
for (i=0; i< size; i++) {
sum = (a[i] - u)*(a[i] - u);
}
s = sqrt(sum/(size-2));
printf("La media degli elementi dell' array vale %lf, la deviazione standard %lf\n",u,s);
printf("La deviazione relativa rispetto a mu vale: %lf,quella rispetto a sigma: %lf\n",(u - 1/v)/u,(s - 1/v)/s);
}
In particolare non sono sicuro della funzione creata per il punto 4 e per il fatto che le deviazioni relative spesso vengono negative (è una cosa normale questa?)