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-1.c
next >
Wrap
C/C++ Source or Header
|
2001-01-29
|
2KB
|
109 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);
/* 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("L'insieme e': ");
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 print(set s)
{
int i;
printf("{ ");
for (i=0;i< s.lg;i++)
{
printf("%d ",s.info[i]);
}
printf("}\n");
}