/****************************************************/ /* The Cell Suppression Problem (CSP) */ /* in Statistical Disclosure Control (SDC) */ /* */ /* SDCGEN.c */ /* Version 0.0.1 */ /* */ /* Matteo FISCHETTI & Juan Jose SALAZAR GONZALEZ */ /* */ /* Last modified 15 July 1995 */ /****************************************************/ #include #include #define OBJ0 /*******************************************/ #define Cell(i,j,k) (i)*(N2+1)*(N3+1)+(j)*(N3+1)+(k) #define MAX 500 #define MIN 5 #define SEN 5 main(argc,argv) int argc; char *argv[]; { int N1,N2,N3,PER,DEN,i,j,k,l,r1,r2,r3; FILE *file; unsigned seed; int *data,*weight; if( argc < 8 ){ puts(" Program to generate a 3-dim table for SDC:"); printf(" introduce SEED N1 N2 N3 FILE PERCENTAGE DENSITY after '%s'\n",argv[0]); return(1); } seed = atoi( argv[1] ); N1 = atoi( argv[2] ); N2 = atoi( argv[3] ); N3 = atoi( argv[4] ); PER = atoi( argv[6] ); DEN = atoi( argv[7] ); printf(" N1=%ld N2=%ld N3=%ld file=%s (PER=%d , DEN=%d, seed=%d <<)\n",N1,N2,N3,argv[5],PER,DEN,seed); srand(seed); file = fopen(argv[5],"w"); if( file==NULL ){ printf("ERROR: it is not possible to open file %s\n",argv[4]); return(1); } data = (int *)calloc( (N1+1)*(N2+1)*(N3+1) , sizeof(int) ); weight = (int *)calloc( (N1+1)*(N2+1)*(N3+1) , sizeof(int) ); for(i=1;i<=N1;i++) for(j=1;j<=N2;j++) for(k=1;k<=N3;k++){ r1 = rand()*rand(); r2 = rand(); r3 = rand(); if( r1%100 >= DEN ) l = 0; else if( r2%100 < PER ) l = 1+ r3%MIN; else l = 1+ MIN + ( r3 % (MAX-MIN) ); data[Cell(i,j,k)] = l; data[Cell(0,j,k)] += l; data[Cell(i,0,k)] += l; data[Cell(i,j,0)] += l; data[Cell(i,0,0)] += l; data[Cell(0,j,0)] += l; data[Cell(0,0,k)] += l; data[0] += l; } for(i=0;i<=N1;i++) for(j=0;j<=N2;j++) for(k=0;k<=N3;k++) weight[ Cell(i,j,k) ] = #ifdef OBJ0 data[ Cell(i,j,k) ]; #endif #ifdef OBJ1 1; #endif #ifdef OBJ2 MIN + ( rand() % (MAX-MIN) ); #endif fprintf(file,"3\n %ld %ld %ld\n",N1,N2,N3); for(i=0;i<=N1;i++) for(j=0;j<=N2;j++) for(k=0;k<=N3;k++){ l = data[ Cell(i,j,k) ]; fprintf(file,"%ld %ld %ld %ld %ld ",i,j,k,l,l); if(l==0) fprintf(file,"z 0.0 10000000.0 0 0 0\n"); else if(l<=SEN) fprintf(file,"u 0.0 10000000.0 %d %d 0\n",0,2*l); else fprintf(file,"s 0.0 10000000.0 0 0 0\n"); } fclose(file); free( (void *)data ); free( (void *)weight ); file = fopen("csp.sta","a"); fprintf(file,"\n %3d %3d %3d %3d %3d %3d ",N1,N2,N3,1,PER,DEN); fclose(file); return(0); }