Hinamarth

Turtle vs Hare

Feb 24th, 2012
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.19 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <math.h>
  4.  
  5. void distance( int, double, double, double[] );
  6.  
  7. void max_min( int, double[] );
  8.  
  9. void distance( int i, double XTarta, double XLepre, double Distacchi[] ){
  10.   Distacchi[i]=fabs(XTarta-XLepre);
  11. }
  12.  
  13. void max_min( int Ngare, double Distacchi[] ){
  14.   int i, gara_max, gara_min;
  15.   double max=0, min=600;
  16.   for(i=0; i<Ngare; i++){
  17.     if(max<Distacchi[i]){
  18.       max=Distacchi[i];
  19.       gara_max=i;
  20.     }    
  21.     if(min>Distacchi[i]){
  22.       min=Distacchi[i];
  23.       gara_min=i;
  24.     }
  25.   }
  26.   printf("Il distacco maggiore si è avuto nella gara numero %i ed è stato di %lf.\n", gara_max, max);
  27.   printf("\n");
  28.   printf("Il distacco minore si è avuto nella gara numero %i ed è stato di %lf\n", gara_min, min);
  29.   printf("\n");
  30. }
  31.  
  32. main(){
  33.   int Ngare, i, j=0, prob, Lvittoria=0, Tvittoria=0, Pareggi=0, Ronf, c, k;
  34.   double Maxsalto, Traguardo, Distacchi[100], XTarta, XLepre, Ruga, E, X;
  35.   srand48(time(0));
  36.   printf("Il programma simula l'andamento di alcune gare a cui parteciperanno una lepre ed una tartaruga. \nPer fare questo ho bisogno che tu inserisca il numero di gare che queste dovranno svolgere, compreso tra 1 e 100.\nNgare = ");
  37.   scanf("%d", &Ngare);
  38.   while(Ngare<1 || Ngare>100){
  39.     printf("Il numero inserito è errato! Reinseriscilo!\nNgare = ");
  40.     scanf("%d", &Ngare);
  41.   }
  42.   printf("Adesso devo conoscere meglio uno dei due concorrenti, la lepre. Quanto può saltare lontano? Il numero che inserisci deve essere compreso tra 3 e 6.\nMaxsalto = ");
  43.   scanf("%lf", &Maxsalto);
  44.   while(Maxsalto<3. || Maxsalto>6.){
  45.     printf("Il numero inserito è errato! Reinseriscilo!\nMaxsalto = ");
  46.     scanf("%lf", &Maxsalto);
  47.   }
  48.   printf("Ora inserisci la lunghezza del tragitto compresa tra 100 e %lf.\nTraguardo = ", 100*Maxsalto);
  49.   scanf("%lf", &Traguardo);
  50.   while(Traguardo<100 || Traguardo>100*Maxsalto){
  51.     printf("Il numero inserito è errato! Reinseriscilo!\nTraguardo = ");
  52.     scanf("%lf", &Traguardo);
  53.   }
  54.   Ruga=Maxsalto/3.;
  55.   for(i=0; i<Ngare; i++){
  56.     XTarta=0;
  57.     XLepre=0;
  58.     X=0;
  59.     k=0;
  60.     Ronf=0;
  61.     while( X<Traguardo ){
  62.       XTarta+=Ruga;
  63.       if(j%10==0){
  64.     prob=lrand48()%2;
  65.     if(prob==0){
  66.       XLepre+=(((double)lrand48()+1)/RAND_MAX)*Maxsalto;
  67.     }
  68.     else{
  69.       Ronf=lrand48()%10+1;
  70.       k=2;}
  71.       }
  72.       else{
  73.     if(k<Ronf){
  74.       k++;
  75.     }
  76.     else{ XLepre+=(((double)lrand48()+1)/RAND_MAX)*Maxsalto; }
  77.       }
  78.       if(XLepre>XTarta){
  79.     X=XLepre;
  80.       }
  81.       else{ X=XTarta; }
  82.       j++;
  83.     }
  84.     distance( i, XTarta, XLepre, Distacchi );
  85.     if(XTarta>XLepre){
  86.       printf("Ha vinto la gara numero %i la Tartaruga con un distacco di %lf sulla Lepre!\n", i, Distacchi[i]);
  87.       Tvittoria++;
  88.     }
  89.     else{ printf("Ha vinto la gara numero %i la Lepre con un distacco di %lf sulla Tartaruga!\n", i, Distacchi[i]);
  90.       Lvittoria++;
  91.     }
  92.     if(XTarta==XLepre){
  93.       printf("I due corridori hanno pareggiato nella gara numero %i!\n", i);
  94.       Pareggi++;
  95.     }
  96.   }
  97.   printf("\n");
  98.   max_min( Ngare, Distacchi );
  99.   printf("La Lepre ha vinto %i volte.\n", Lvittoria);
  100.   printf("La Tartaruga ha vinto %i volte.\n", Tvittoria);
  101.   printf("Ci sono stati %i pareggi.\n", Pareggi);
  102. }
Advertisement
Add Comment
Please, Sign In to add comment