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

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAX 100
  4.  
  5.  
  6. /* tipi */
  7.  
  8. typedef unsigned char bool;
  9. typedef int elem;
  10.  
  11. typedef struct tsucc {
  12.                         elem info[MAX];
  13.                         int lg;
  14.                     } succ;
  15.  
  16. /* prototipi */
  17.  
  18. succ empty();
  19. void insert(elem,succ *);
  20. void print(succ);
  21. void delete(elem, succ*);
  22.  
  23. /* main */
  24.  
  25. int main()
  26. {
  27.     succ s = empty();
  28.     int m;
  29.     FILE *fp;
  30.     char nome_f[20];
  31.     
  32.     printf("\nInserire il nome del file ");
  33.     scanf("%s",nome_f);
  34.  
  35.     fp=fopen(nome_f,"r");
  36.  
  37.     while (fscanf(fp,"%d",&m) && (m!=-1))
  38.     {
  39.         insert(m,&s);
  40.     }
  41.     printf("La successione e': ");
  42.     print(s);
  43.  
  44.     printf("\nFornisci valore: ");
  45.     scanf("%d",&m);
  46.  
  47.     delete(m,&s);
  48.  
  49.     printf("\nEcco la nuova successione: ");
  50.     print(s);
  51. }
  52.  
  53.  
  54.  
  55.  
  56. succ empty()
  57. {
  58.   succ s;
  59.   s.lg = 0;
  60.   return s;
  61. }
  62.  
  63. void insert(elem el,succ *s)
  64. {
  65.     if (s->lg == MAX)
  66.         {
  67.             printf("Errore: spazio insufficiente");
  68.             exit(EXIT_FAILURE);
  69.         }
  70.   s->info[s->lg] = el;
  71.   s->lg++;
  72. }
  73.  
  74.  
  75. void print(succ s)
  76. {
  77.   int i;
  78.   printf("{ ");
  79.   for (i=0;i< s.lg;i++)
  80.     { 
  81.         printf("%d ",s.info[i]);
  82.     }
  83.   printf("}\n");
  84. }
  85.  
  86.  
  87. void delete(elem el,succ *s)
  88. {
  89.   int j,k,trovato =0;
  90.   
  91.   for (j=s->lg -1; (j >= 0) && (trovato !=2); j--) 
  92.    {
  93.  
  94.      if (s->info[j] == el)  
  95.        {  
  96.              if (trovato)
  97.             { for (k=j;k<= s->lg-2; k++)
  98.                   s->info[k] = s->info[k+1]; 
  99.                  s->lg --;
  100.                          trovato =2; }
  101.                else trovato++;
  102.        }
  103.    }        
  104. }
  105.  
  106.  
  107.  
  108.  
  109.  
  110.