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-7.00 / parte2-4.c < prev    next >
C/C++ Source or Header  |  2001-01-29  |  2KB  |  132 lines

  1.  
  2.  
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #define MAX 100
  7.  
  8.  
  9. /* tipi */
  10.  
  11. typedef unsigned char bool;
  12. typedef int elem;
  13.  
  14. typedef struct tsucc {
  15.                         elem info[MAX];
  16.                         int lg;
  17.                     } succ;
  18.  
  19. /* prototipi */
  20.  
  21. succ empty();
  22. void insert(elem,succ *);
  23. void print(succ);
  24. void order(succ,succ,succ*);
  25.  
  26. /* main */
  27.  
  28. int main()
  29. {
  30.     succ s1 = empty(), s2 =empty(),so;
  31.     int m;
  32.     FILE *fp;
  33.     char nome_f[20];
  34.     
  35.     printf("\nInserire il nome del file ");
  36.     scanf("%s",nome_f);
  37.  
  38.     fp=fopen(nome_f,"r");
  39.  
  40.     while (fscanf(fp,"%d",&m) && (m!=-1))
  41.     {
  42.         insert(m,&s1);
  43.     }
  44.     while (fscanf(fp,"%d",&m) && (m!=-1))
  45.     {
  46.         insert(m,&s2);
  47.     }
  48.  
  49.     printf("\nLa prima successione e': ");
  50.     print(s1);
  51.     printf("\nLa seconda successione e': ");
  52.     print(s2);
  53.  
  54.     order(s1,s2,&so);
  55.  
  56.     printf("\nLa concatenazione ordinata e': ");
  57.     print(so);
  58.  
  59.  
  60. }
  61.  
  62.  
  63.  
  64.  
  65. succ empty()
  66. {
  67.   succ s;
  68.   s.lg = 0;
  69.   return s;
  70. }
  71.  
  72. void insert(elem el,succ *s)
  73. {
  74.     if (s->lg == MAX)
  75.         {
  76.             printf("Errore: spazio insufficiente");
  77.             exit(EXIT_FAILURE);
  78.         }
  79.   s->info[s->lg] = el;
  80.   s->lg++;
  81. }
  82.  
  83.  
  84. void print(succ s)
  85. {
  86.   int i;
  87.   printf("{ ");
  88.   for (i=0;i< s.lg;i++)
  89.     { 
  90.         printf("%d ",s.info[i]);
  91.     }
  92.   printf("}\n");
  93. }
  94.  
  95.  
  96.  
  97. void order(succ s1,succ s2, succ *so)
  98.  
  99. {
  100.     int i,j,imin,aux;
  101.     
  102.      *so = empty();
  103.  
  104.     /* copio s1 in so */
  105.  
  106.     for (i=0;i<s1.lg;i++)
  107.     insert(s1.info[i],so);
  108.  
  109.  
  110.     /* copio s2 in so */
  111.  
  112.     for (i=0;i<s2.lg;i++)
  113.     insert(s2.info[i],so);
  114.  
  115.     /* ordino so usando Selection Sort*/
  116.  
  117.     for (i=0;i<so->lg -1;i++)
  118.     {
  119.         imin =i;
  120.          for(j=i+1;j<so->lg;j++)
  121.             if (so->info[j] < so->info[imin]) imin=j;
  122.  
  123.         aux = so->info[i];
  124.         so->info[i] = so->info[imin];
  125.         so->info[imin] = aux;
  126.  
  127.     }
  128.  
  129.  
  130.  
  131. }
  132.