codice:
#include <time.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
# include <string.h>
char *data()
{
time_t t;
char *data;
int i;
t = time(&t);
data = asctime(localtime(&t));
data[strlen(data)-1]='\0';
return(data);
}
void intestazioneFile(FILE *fp, int popolazione[], int cardinalita, int dimPop,char *nomeFile,int ampCamp)
{ int i;
fprintf(fp,"Anna Motta matricola:701489 \n\n");
fprintf(fp,"Esercizio 1 (%s)\n",data());
fprintf(fp,"Output dell'algoritmo PrimaEsercitazione.c\n");
fprintf(fp,"Nome file uscita: %s\n", nomeFile);
fprintf(fp,"Genera lo spazio campionario che comprende i possibili campioni \n");
fprintf(fp,"di dimensione n=%d con campionamento casuale semplice tratti\n", ampCamp);
fprintf(fp,"da una popolazione finita di numerosità N=%d \n", dimPop);
fprintf(fp,"La popolazione di riferimento è: \n");
for(i=1;i<=dimPop;i++)
fprintf(fp,"%2d\t",popolazione[i-1]);
fprintf(fp,"\n Lo spazio campionario ha dimensione: %d\n", cardinalita);
fprintf(fp,"\n\n i Possibili campioni sono: \n\n");
}
void gestioneRiporti(int cp[], int dimVt, int valUltimo)
{ int j;
for(j=dimVt-1;j>0;j--)
if(cp[j] == valUltimo+1)
{cp[j] = 1;
cp[j-1]++;}
}
int main()
{
FILE *fUscita;
char nomeFile[]="esercizio1.txt";
int *popolazione,
*campione,
dimSpazioCamp,i,j, ampCamp,elemPop;
printf("inserisci la numerosità della popolazione: ");
scanf("%d",&elemPop);
popolazione=(int*)calloc(elemPop,sizeof(int));
do{
printf("ampiezza campione: ");
scanf("%d",&Camp);
} while(ampCamp<1 || ampCamp>elemPop);
campione = (int *)calloc(ampCamp, sizeof(int));
for(i=1;i<=elemPop;i++)
popolazione[i-1] = i;
for(i=0;i<ampCamp;i++)
campione[i] = 1;
if ((fUscita=fopen(nomeFile,"w")) == NULL)
{
printf("errore apertura file %s!\n",nomeFile);
exit(-1);
}
dimSpazioCamp = (int) pow(elemPop,ampCamp);
intestazioneFile(fUscita,popolazione,dimSpazioCamp,elemPop,nomeFile,ampCamp);
for(j=0; j<dimSpazioCamp; j++)
{
fprintf(fUscita, "%4d: {", j+1);
for (i=0; i<ampCamp-1; i++)
fprintf(fUscita,"%d, ",popolazione[campione[i]-1]);
fprintf(fUscita,"%d}\n",popolazione[campione[i]-1]);
campione[ampCamp-1]++;
gestioneRiporti(campione,ampCamp,elemPop);
}
fclose(fUscita);
system("pause");
return 0;
}