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
/
laboratorio
/
lab-26-4-99
/
subset.c
< prev
Wrap
C/C++ Source or Header
|
1999-05-25
|
2KB
|
55 lines
/* Programma per generare tutti i sottinsiemi di {1,..,n}
* In questa versione si usano array a dimensione fissa MAX +1
* Provare a modificarlo per ottenere i sottoinsiemi di {a,...,n}, dove
* 1 <= a <=n
*/
#include <stdio.h>
/* #include <stdlib.h> */
#define MAX 10
main()
{
int n, k;
int subset [MAX];
/* subset ha 11 elementi (poiche` si parte da 0)
* l'elemento di posto 0 serve "per controllo"
* quindi il valore massimo per n e` 10 !!
*
* i valori nell'array saranno solo 0 e 1
*
* tutto funziona anche usando char al posto di int
* e senza cambiare niente altro
* (si continua a leggere e scrivere in formato intero !!)
*/
scanf("%d", &n); /* legge il valore per n; notare che bisogna usare
* l'indirizzo di n : &n
*/
if ( (n > MAX) || (n < 1)) printf("input errato");
else {
for(k=0; k <= n ; k++) subset[k] = 0;
while (subset[0] == 0) {
/* stampa il sottinsieme corrente */
printf("{ ");
for(k=1; k <= n ; k++) if (subset[k]) printf("%d ", k);
printf(" } \n"); /* si usa \n per andare a capo nell'output */
/* somma 1 al numero contenuto nell'array, con aritmetica binaria */
k = n;
while (subset[k]) { subset[k]= 0; k-- ;};
subset[k] = 1;
} /* chiude il while (subset[0] == 0) */
} /* chiude l'else */
} /* chiude il main */