Classe ESTRAZIONE
Una classe che crea oggetti in grado di gestire estrazioni a sorte tra una serie di valori numerici progressivi senza che venga mai riproposto lo stesso valore prima che siano stati estratti tutti gli altri. Inoltre, lo stesso valore non viene mai riproposto in due estrazioni immediatamente consecutive neppure quando, esauriti i valori della lista, la lista stessa viene ripristinata.
NOTA: sostituire la chiamata alle API di Win32 GetTickCount() con la chiamata alla funzione standard del C clock() nella funzione membro inizializza(), permette di utilizzare la classe anche su piattaforme operative non Win32.
Funzioni membro:
Codice sorgente - presumibilmente C++ |
// funzioni creatrici
ESTRAZIONE();
ESTRAZIONE( short nEl );
// funzioni "di impostazione"
void inizializza( short nEl );
void reset( void );
// funzioni "di esercizio"
short estrai( void );
short ultimo_estratto( void );
|
Esempio d'uso:
Codice sorgente - presumibilmente C++ |
#include <stdio.h>
#include <stdlib.h>
#include "estrazione.h"
void Presenta( void );
short ChiediNumeroElementi( void );
void SvuotaStdin( void );
bool Esci( void );
int main() {
short i, totEl;
ESTRAZIONE e;
do {
Presenta();
totEl = ChiediNumeroElementi();
e.inizializza( totEl );
for( printf("\n"), i=0; i<totEl; ++i )
printf( "%d ", e.estrai() );
} while( !Esci() );
return 0;
}
void Presenta( void ) {
printf( "Classe ESTRAZIONE\nprogramma d'esempio\n\n" );
}
short ChiediNumeroElementi( void ) {
const int kDimBuff = 16;
char buff[kDimBuff];
short totEl;
printf( "Quanti elementi vuoi nella lista? " );
fgets( buff, kDimBuff, stdin );
totEl = atoi( buff );
totEl = totEl>1 ? totEl : 2; // almeno 2 elementi
return totEl;
}
void SvuotaStdin( void ) {
int c;
do {
c = getchar();
} while( c!=EOF && c!='\n' );
}
bool Esci( void ) {
char buff[4];
printf( "\n\n(digita \"e\" per uscire) " );
fgets( buff, 2, stdin );
SvuotaStdin();
system( "CLS" );
return (*buff=='e' || *buff=='E');
}
|
Data: 23/01/2015
A proposito dell'autore
Amatore, autodidatta dai tardi anni '90. Prime esperienze in HyperTalk. Successivamente, C con qualche infarinatura di C++.
|
Aggiungi un commento