Advertisement
Tankado95

Esercitazione Pre esame 3

Jun 2nd, 2015
256
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.27 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct {
  5.     int tempi[10]; /* Tempi misurati ogni 100 metri */
  6.     char nome[20]; /* Nome dell'atleta */
  7. } corridore;
  8.  
  9. /* Funzioni da implementare */
  10. corridore *leggi_input(int *dim){
  11. int n=0,i=0,j=0,k=0;
  12.     scanf("%d",&n);
  13. corridore * new=malloc(sizeof(corridore)*n);
  14.  
  15.     for (i=0;i<n;i++){
  16.         scanf("%s",new[i].nome);
  17.         for (j=0;j<10;j++)
  18.             scanf("%d",&new[i].tempi[j]);
  19.     }
  20. *dim=n;
  21. return new;
  22. }
  23.  
  24.  
  25. int trova_vincitore(corridore *vect, int dim){
  26. int min=vect[1].tempi[10], vincitore=1,i=0;
  27.     for(i=1;i<dim;i++){
  28.         if (min>vect[i].tempi[10]){
  29.             min=vect[i].tempi[10];
  30.             vincitore=i;
  31.         }
  32.     }
  33. return vincitore;
  34. }  
  35.  
  36.  
  37.  
  38.  
  39. int* tempi_to_intervalli(corridore c){
  40. int i=1,j=0;
  41. int *a=malloc(sizeof(int)*10);
  42. a[0]=c.tempi[j];
  43.     while(i<10){
  44.        
  45.         a[i]=c.tempi[i]-c.tempi[j];
  46.         j++;
  47.         i++;
  48.        
  49.     }
  50.    
  51. return a;
  52. }
  53.  
  54.    
  55.  
  56.  
  57. int* trova_sprint(corridore c){
  58. int i=0,j=0;
  59. float media=0;
  60. int * intervalli=tempi_to_intervalli(c);
  61. int *a=malloc(sizeof(int)*10);
  62.     for (i=0;i<10;i++){
  63.         j=0;
  64.         media=0;
  65.         while(j<10){
  66.             if (j!=i)
  67.                 media=media+intervalli[j];
  68.             j++;
  69.         }
  70.         media=media/9;
  71.         if (intervalli[i]<(media/2))
  72.             a[i]=1;
  73.         else a[i]=0;
  74.     }
  75.  
  76. return a;
  77. }
  78.  
  79. int main()
  80. {
  81.     corridore *input;
  82.     int dim, dim_sprint, vincitore, i, j;
  83.     int* intervalli, *sprint;
  84.  
  85.     /* Legge l'input */
  86.     input=leggi_input(&dim);
  87.     printf("Stampa dei valori in input: (%d atleti)\n", dim);
  88.     for (i=0; i<dim; i++){
  89.         printf("Tempi per l'atleta %s:", input[i].nome);
  90.         for (j=0; j<10; j++)
  91.             printf(" %d",input[i].tempi[j]);
  92.         printf("\n");
  93.     }
  94.  
  95.     // Trova il vincitore
  96.     vincitore = trova_vincitore(input, dim);
  97.     printf("Nome del vincitore: %s (miglior tempo: %d secondi)\n", input[vincitore].nome, input[vincitore].tempi[9]);
  98.  
  99.     // Converti da tempi ad intervalli
  100.     for (i=0; i<dim; i++){
  101.         intervalli = tempi_to_intervalli(input[i]);
  102.         printf("Intervalli per l'atleta %s:", input[i].nome);
  103.         for (j=0; j<10; j++)
  104.             printf(" %d",intervalli[j]);
  105.         printf("\n");
  106.         free(intervalli);
  107.     }
  108.  
  109.     // Trova gli sprint
  110.     for (i=0; i<dim; i++){
  111.         sprint = trova_sprint(input[i]);
  112.         printf("Sprint per l'atleta %s:", input[i].nome);
  113.         for (j=0; j<10; j++)
  114.             printf(" %d", sprint[j]);
  115.         printf("\n");
  116.         free(sprint);
  117.     }
  118.  
  119.     return 0;
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement