/****************************************************/ /* 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,s) (i)*(N2+1)*(N3+1)*(N4+1)+(j)*(N3+1)*(N4+1)+(k)*(N4+1)+(s) #define MAX 500 #define MIN 5 #define SEN 5 main(argc,argv) int argc; char *argv[]; { int N1,N2,N3,N4,PER,DEN,i,j,k,l,s,r1,r2,r3; FILE *file; unsigned seed; int *data,*weight; if( argc < 8 ){ puts(" Program to generate a 4-dim table for SDC:"); printf(" introduce SEED N1 N2 N3 N4 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] ); N4 = atoi( argv[5] ); PER = atoi( argv[7] ); DEN = atoi( argv[8] ); printf(" N1=%ld N2=%ld N3=%ld N4=%ld file=%s (PER=%d DEN=%d seed=%d)\n",N1,N2,N3,N4,argv[6],PER,DEN,seed); srand(seed); file = fopen(argv[6],"w"); if( file==NULL ){ printf("ERROR: it is not possible to open file %s\n",argv[6]); return(1); } data = (int *)calloc( (N1+1)*(N2+1)*(N3+1)*(N4+1) , sizeof(int) ); weight = (int *)calloc( (N1+1)*(N2+1)*(N3+1)*(N4+1) , sizeof(int) ); for(i=1;i<=N1;i++) for(j=1;j<=N2;j++) for(k=1;k<=N3;k++) for(s=1;s<=N4;s++){ 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,s)] = l; data[Cell(0,j,k,s)] += l; data[Cell(i,0,k,s)] += l; data[Cell(i,j,0,s)] += l; data[Cell(i,j,k,0)] += l; data[Cell(0,0,k,s)] += l; data[Cell(0,j,0,s)] += l; data[Cell(0,j,k,0)] += l; data[Cell(i,0,0,s)] += l; data[Cell(i,0,k,0)] += l; data[Cell(i,j,0,0)] += l; data[Cell(i,0,0,0)] += l; data[Cell(0,j,0,0)] += l; data[Cell(0,0,k,0)] += l; data[Cell(0,0,0,s)] += l; data[0] += l; } for(i=0;i<=N1;i++) for(j=0;j<=N2;j++) for(k=0;k<=N3;k++) for(s=0;s<=N4;s++) weight[ Cell(i,j,k,s) ] = #ifdef OBJ0 data[ Cell(i,j,k,s) ]; #endif #ifdef OBJ1 1; #endif #ifdef OBJ2 MIN + ( rand() % (MAX-MIN) ); #endif fprintf(file,"4\n %ld %ld %ld %ld\n",N1,N2,N3,N4); for(i=0;i<=N1;i++) for(j=0;j<=N2;j++) for(k=0;k<=N3;k++) for(s=0;s<=N4;s++){ l = data[ Cell(i,j,k,s) ]; fprintf(file,"%ld %ld %ld %ld %d %d ",i,j,k,s,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,N4,PER,DEN); fclose(file); return(0); }