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
/
parte1-2.c
< prev
next >
Wrap
C/C++ Source or Header
|
2001-01-29
|
2KB
|
151 lines
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
/* implementazione insiemi ordinati,
* con array */
/* tipi */
typedef unsigned char bool;
typedef int elem;
typedef struct tset {
elem info[MAX];
int lg;
} set;
/* prototipi */
set empty();
void insert(elem,set *);
void print(set);
void my_delete(elem,set*);
/* main*/
main()
{
set s = empty();
int m;
FILE *fp;
char nome_f[20];
printf("\nInserire il nome del file ");
scanf("%s",nome_f);
fp=fopen(nome_f,"r");
while (fscanf(fp,"%d",&m) && (m!=-1))
{
insert(m,&s);
}
printf("\nL'insieme e': ");
print(s);
printf("\nFornisci valore: ");
scanf("%d",&m);
my_delete(m,&s);
printf("\nEcco il nuovo insieme: ");
print(s);
}
/* definizione funzioni */
set empty()
{
set s;
s.lg = 0;
return s;
}
void insert(elem el,set *s)
{
int i,k;
if (s->lg == MAX)
{
printf("Errore: spazio insufficiente");
exit(EXIT_FAILURE);
}
/* cerco la posizione (avanzo fino a trovare un elemento >= el o fine
* array)*/
for (i=0;(i<s->lg) && (s->info[i] < el) ;i++);
/* se sono arrivato in fondo o se
* l'elemento su cui ci siamo fermati e' > el,
* l'elemento non e' presente e quindi lo posso aggiungere
* (non vogliamo ripetizioni) e possiamo effettuare l'inserimento */
if ((i == s->lg) || (s->info[i] != el))
{
/* prima di aggiungere l'elemento sposto in avanti tutti gli elementi successivi */
for (k=s->lg-1;k>=i; k--)
s->info[k+1] = s->info[k];
/* aggiungo l'elemento */
s->info[i] = el;
s->lg++;
}
}
void my_delete(elem el,set *s)
{
int j,k;
bool trovato = 0;
/* cerco elemento usando una scansione sequenziale */
for (j=0; (j < s->lg && !trovato) ; j++)
{
if (s->info[j] == el) trovato = 1;
}
/* sposto indietro di una posizione gli elementi successivi a quello cancellato */
if (j <s->lg)
{for (k=j;k<= s->lg-2; k++)
s->info[k] = s->info[k+1];
/* modifico lg */
(s->lg) --;
}
}
void print(set s)
{
int i;
printf("{ ");
for (i=0;i< s.lg;i++)
{
printf("%d ",s.info[i]);
}
printf("}\n");
}