#include #include #include #include #define MAX_GARE 100 int RandInt(int,int); double RandDouble(double,double); void ComputeDist(double[],int,double,double); void AnalysisAndPrint(double[],int); main(){ double seed; int n,ContaPassi; int VinceLepre=0,VinceTarta=0,Pari; int NGare, Ronf, Sonno, Dormo; double MaxSalto, Traguardo; double Distacchi[MAX_GARE]; double XTarta, Ruga, XLepre; seed=time(0); srand48(seed); printf("Questo programma fa gareggiare una lepre pigra ed una tartaruga costante \n\n"); do{ printf("\n\nInserire il numero di gare\n\n"); scanf("%d",&NGare); if(NGare<=0)printf("Il numero deve essere positivo"); if(NGare>100)printf("Il numero deve essere minore di cento"); }while(NGare<=0 || NGare>100); do{ printf("\n\nInserire la lunghezza massima del salto della lepre\n\n"); scanf("%lf",&MaxSalto); if(MaxSalto<3.)printf("Troppo corto, salta almeno di tre!"); if(MaxSalto>6.)printf("Troppo lungo, salta al massimo di sei!"); }while(MaxSalto<3. || MaxSalto>6.); Ruga=MaxSalto/3.; do{ printf("\n\nInserire la distanza su cui si gareggia\n\n"); scanf("%lf",&Traguardo); if(Traguardo<100)printf("Il numero deve essere essere almeno cento"); if(Traguardo>100.*MaxSalto)printf("Troppo grande: non si corre per piu' di 100*%lf",MaxSalto); }while(Traguardo<100|| Traguardo>100.*MaxSalto); for(n=1;n<=NGare;n++){ ContaPassi=0; XTarta=0.; XLepre=0.; Sonno=1; do{ XTarta=XTarta+Ruga; if((ContaPassi%10)==0){ Sonno=RandInt(2,0); Ronf=RandInt(10,1); Dormo=0; } if(Sonno==0 && Dormo<=Ronf){ Dormo++; }else{ XLepre=XLepre+RandDouble(0,MaxSalto); } ContaPassi++; }while((XLepreXTarta){ printf("\n La lepre ha vinto la gara numero %d\n",n); VinceLepre++;} if(XTarta>XLepre){ printf("\n La tartaruga ha vinto la gara numero %d\n",n); VinceTarta++;} if(XLepre==XTarta)printf("\n Pareggio nella gara numero %d!",n); } AnalysisAndPrint(Distacchi,NGare); Pari=NGare-VinceLepre-VinceTarta; printf("\nLa lepre ha vinto %d gare, la tartaruga ne ha vinte %d, ci sono stati %d pareggi\n\n",VinceLepre,VinceTarta,Pari); } /* DEFINIZIONE DELLE FUNZIONI */ int RandInt(int Divido, int Minimo){ int Dado; Dado=lrand48()%Divido+Minimo; return Dado; } double RandDouble(double Max, double Min){ double random; random=(double)lrand48()/(RAND_MAX+1.)*(Max-Min)+Min; return random; } void ComputeDist(double Vector[], int k, double Lepre, double Tarta){ *(Vector+k)=fabs(Lepre-Tarta); } void AnalysisAndPrint(double Vector[], int N){ int m, IMin=0, IMax=0; double MaxDis, MinDis; MinDis=RAND_MAX; MaxDis=0; for(m=0;mMaxDis){ MaxDis=Vector[m]; IMax=m+1; } } printf("\n\nIl distacco piu' piccolo si e' avuto nella gara %d e valeva %lf\n\n",IMin,MinDis); printf("\n\nIl distacco piu' grande si e' avuto nella gara %d e valeva %lf\n\n",IMax,MaxDis); }