home *** CD-ROM | disk | FTP | other *** search
/ ftp.disi.unige.it / 2015-02-11.ftp.disi.unige.it.tar / ftp.disi.unige.it / pub / .person / CataniaB / teach-act / testi-esami / labo-6.00 / turno4 / parte2.c < prev    next >
C/C++ Source or Header  |  2000-06-20  |  2KB  |  100 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct cell* set;
  5.  
  6. struct cell{
  7.     float info;
  8.     set next;
  9. };
  10.  
  11.  
  12. set empty(void);
  13. void insert(float,set *);
  14. void print(set);
  15. float med_val(set);
  16.  
  17. void main ()
  18. {
  19.     float c;
  20.     char fname[20];
  21.     set s=empty();
  22.     FILE *fp=NULL;
  23.     printf ("Inserisci il nome del file di input: ");
  24.     scanf ("%s",fname);
  25.     if (fp=fopen(fname, "r"))
  26.     {
  27.         while ((fscanf(fp, "%f",&c)) && (c!=0))
  28.             insert (c, &s);
  29.     }
  30.     else 
  31.        {
  32.         printf("\nErrore nell'apertura del file!\n");
  33.         exit(EXIT_FAILURE);
  34.         }
  35.         
  36.      printf ("Insieme:");
  37.      print (s);
  38.      printf("\nIl valore medio dell'insieme e': %.2f\n\n",med_val(s));
  39.      fclose (fp);    
  40. }
  41.  
  42.  
  43. set empty()
  44. {
  45.     return NULL;
  46. }
  47.  
  48. void insert (float x, set *s)
  49. {
  50.     set prec=NULL;
  51.     set corr=*s;
  52.     set aux;
  53.     aux=(set) malloc (sizeof(struct cell));
  54.     aux->info=x;
  55.     aux->next=NULL;
  56.     
  57.     while((corr!=NULL) && (x<corr->info))
  58.     {
  59.         prec=corr;
  60.         corr=corr->next;
  61.     }
  62.     
  63.     if ((prec==NULL)&&(corr==NULL || x!=corr->info)) /*inserimento  in testa */
  64.     {
  65.         aux->next=*s;
  66.         *s=aux;
  67.     }
  68.     else if (corr==NULL) /* inserimento in coda */
  69.     {
  70.         prec->next=aux;
  71.         return;
  72.     }
  73.     else if (x!=corr->info) /* inserimento in mezzo */
  74.     {
  75.         prec->next=aux;
  76.         aux->next=corr;
  77.     }
  78. }
  79.  
  80.  
  81.  
  82. void print (set s)
  83. {
  84.     for (; s!=NULL; s=s->next)
  85.         printf ("%.2f ",s->info);
  86.     printf("\n\n");    
  87. }
  88.  
  89. float med_val(set s)
  90. {
  91.     float med=0;
  92.     int n=0;
  93.     for(;s!=empty();s=s->next,n++)
  94.             med=med+(s->info);
  95.     if (n!=0)
  96.         return med=med/n;
  97.     else
  98.         return 0;
  99. }
  100.