Stavo scrivendo un piccolo programma in C in grado di generare delle stringhe di caratteri generati pseudocasualmente, con la funzione rand() e lunghezza della stringa a scelta.
Il codice scritto è questo:
- Codice: Seleziona tutto
#include <stdio.h>
#include <stdlib.h>
#include <libgen.h>
#include <time.h>
int main(int argc, char *argv[])
{
if(argc != 2)
{
printf("\nusage: %s n\n", basename(argv[0]));
printf("where \'n\' is the string lenght\n\n");
exit(1);
}
else
{
srand(time(NULL));
int i = 0;
int N = atoi(argv[1]);
while(i < N)
{
printf("%c", 32 + rand() % (127 - 33) + 1);
i++;
}
putc(10, stdout);
exit(0);
}
}
Ho successivamente testato, con la classica generazione del seme del codice precedente, quante volte potrebbe essere ripetuto lo stesso risultato per n esecuzioni, con la seguente stringa di comando:
- Codice: Seleziona tutto
$ for i in {0..300}; do echo -n "$i - "; ./file 30 ; done
La quale esegue il programma compilato con nome file 300 volte.
Il risultato è peggio di quello che mi aspettavo. Le stringhe non sono tutte diverse e viene generata una sequenza diversa ogni 100 esecuzioni circa.
Successivamente ho applicato questa modifica alla generazione del seme:
- Codice: Seleziona tutto
#include <stdio.h>
#include <stdlib.h>
#include <libgen.h>
#include <time.h>
int main(int argc, char *argv[])
{
if(argc != 2)
{
printf("\nusage: %s n\n", basename(argv[0]));
printf("where \'n\' is the string lenght\n\n");
exit(1);
}
else
{
int i = 0;
int N = atoi(argv[1]);
int *p = NULL;
unsigned n = (unsigned) &p;
srand(n);
while(i < N)
{
printf("%c", 32 + rand() % (127 - 33) + 1);
i++;
}
putc(10, stdout);
return 0;
}
}
Ho salvato il file come file2.c ed eseguendo n volte con il comando sopra riportato, si può osservare come il risultato ovviamente migliora nettamente.
Non so, magari è qualcosa che gli utenti che masticano il C da anni sapevano già da tempo, però io volevo farlo presente nel caso qualcuno volesse generare delle sequenze di numeri (e non) casuali in un lasso breve di tempo.
Se qualcuno conocesse metodi più casuali sarebbe interessante condividerli.


Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)
instead of
(Anonimo).
ain't
, right?
in lieu of
.
for
arithm.



ma già me lo aspettavo.