Vorrei chiedervi un parere su questo testo:
Io l'ho realizzato cosi:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
double boom();
int pioggia(int i, double v[]);
int main() {
srand(time(NULL));
int n, i=0, j=0, rain;
do {
printf("Inserire il numero di giorni di maltempo per ogni mese: ");
scanf("%d",&n);
if (n < 3 || n > 12)
printf("ERRORE: il numero di giorni di maltempo appartiene all'intervallo [3,12]\n");
} while (n < 3 || n > 12);
double stagione[4], l, diff = 57000.0;
stagione[0] = 0.92*n/30.0;
stagione[1] = 0.94*n/30.0;
stagione[2] = 0.65*n/30.0;
stagione[3] = 0.58*n/30.0;
do {
l = boom();
diff -= l;
i++;
j++;
if (j%360 == 0)
i = 0;
rain = pioggia(i,stagione);
if (rain == 1) {
do {
i++;
j++;
if (j%360 == 0)
i = 0;
rain = pioggia(i,stagione);
} while (rain == 1);
}
if (j%30 == 0) {
printf("Sono trascorsi %d giorni\n",j+1);
printf("Rimane da scavare %lf km\n",(diff)/1000.0);
}
} while (diff > 0);
printf("Il tunnel e' terminato, sono trascorsi %d giorni dall'inizio dell'operazione\n",j+1);
}
double boom() {
return 24.0*rand()/((double)RAND_MAX) + 24;
}
int pioggia(int i, double v[]) {
double p = rand()/((double)RAND_MAX);
if (i >= 0 || i < 90) {
if (p > v[1])
return 0;
else
return 1;
}
else if (i >= 90 || i < 180) {
if (p > v[2])
return 0;
else
return 1;
}
else if (i >= 180 || i < 270) {
if (p > v[3])
return 0;
else
return 1;
}
else if (i >= 270 || i < 360) {
if (p > v[4])
return 0;
else
return 1;
}
}
Quale potrebbe essere un modo migliore di farlo? Alcune scelte mi sembrano un pò "macchinose"