>
> You have an error at line 42.
Sorry, this is he code
#include<stdlib.h>
#include<stdio.h>
typedef struct {
int *ptrSet;
int elementi;
}Set;
int pot(int base,int esponente);
void stamparesti( int *resti, int n);
int main()
{
Set *ptrPDS=NULL;
int *ptr2Set=NULL;
int *resti=NULL;
int *set=NULL;
int n,m;
int i=0,j=0;
int N,Q=0;
int card=0;
printf("Inserisci il numero di elementi di S\n");
scanf("%d",&n);
m=pot(2,n);
printf("L'insieme dei sottoinsiemi di un insieme S ha %d sottoinsiemi
\n",m);
ptrPDS=(Set *)malloc(sizeof(Set)*m);
if(ptrPDS==NULL)
{
printf("Impossibile allocare spazio per l'insieme PDS: memoria
insufficiente\n");
free(ptrPDS);
exit(1);
}
set=malloc(sizeof(int)*n);
// Verifica se esiste abbastanza memoria per l'allocazione dell'insieme
if(set==NULL)
{
printf("Impossibile allocare spazio per l'insieme S: memoria
insufficiente\n");
free(set);
exit(1);
}
printf("Iserire gli elementi di S\n");
for(i=0;i<n;i++)
{
printf("\nInserire elemento %d",i);scanf("%d",set+i);
}
for(i=0;i<m;i++)
{
printf("i=%d\n",i);
resti=malloc(sizeof(int)*n);
if(resti==NULL)
{
printf("Impossibile allocare spazio per l'insieme S:
memoria insufficiente\n");
free(resti);
exit(1);
}
N=i;
//Conversione in binario del numero i
for(j=0;j<n;j++)
{
Q=N/2;
*(resti+j)=N%2;
N=Q;
}
stamparesti(resti,n);
ptr2Set=malloc(sizeof(int));
if(ptr2Set==NULL)
{
printf("Allocazione di memoria non riuscita\n");
free(ptr2Set);
exit(1);
}
card=0;
for(j=0;j<n;j++)
{
printf("j=%d card=%d\t",j,card);
if(*(resti+j)==1)
{
ptr2Set=realloc(ptr2Set,++card);
if(ptr2Set==NULL)
{
printf("Allocazione di memoria non riuscita\n");
free(ptr2Set);
exit(1);
}
*(ptr2Set+card-1)=*(set+j);
}
}
free(resti);
(ptrPDS+i)->elementi=card;
(ptrPDS+i)->ptrSet=ptr2Set;
printf("i=%d\telementi=%d\tptrSet=%p\n",i,card,ptr2Set);
}
// Stampa elementi sottoinsieme.
for(i=0;i<m;i++)
{
ptr2Set=(ptrPDS+i)->ptrSet;
printf("S%d={",i);
card=(ptrPDS+i)->elementi;
if (card==0) printf("}\n");
else
{
for(j=0;j<card-1;j++) printf("%d,",*(ptr2Set+j));
printf("%d}\n",*(ptr2Set+j));
}
printf("\n");
}
free(ptrPDS);
free(ptr2Set);
free(set);
return 0;
}
// Funzione per il calcolo della potenza di un numero intero n ad un
esponente
int pot(int base,int esponente)
{
int p=1;
int i=0;
while(i++<esponente)
p=p*base;
return p;
}
// Stampa dei resti
void stamparesti( int *resti, int n)
{
int j;
for(j=0;j<n;j++)
{
printf("\t%d",*(resti+j));
}
printf("\n");
}
I use Open Suse Linux 12.2, gcc compiler 4.7.1
Francesco