PDA

Visualizza la versione completa : [C] vettori e numeri casuali


lucianad
08-08-2010, 21:44
Ciao a tutti!
E' la prima volta che scrivo e mi servirebbe un aiuto con la generazione di numeri casuali in un vettore.
Devo generare 32 vettori composti da 5 elementi i cui valori devono essere interi compresi tra 0 e 1. (Ad esempio 00001 00010 etc etc)
Io ho scritto :



#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main()
{
int i,j,n, codice[5];

for (i=0;i<32;i++)
{
for (j=0;j<5;j++)
{
srand((unsigned)time(NULL));
codice[j]=rand()%2;
printf("%d",codice[j]);
}


printf("\n");
}
}


ma tutto quello che ottengo è una serie di vettori che hanno o tutti 0 o tutti 1 e non riesco proprio a capire dove sto sbagliando.

Grazie
Luciana

Alex'87
08-08-2010, 22:19
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
int i, j, n;
int codice[5];

srand((unsigned) time(NULL));

for (i = 0; i < 32; i++) {
for (j = 0; j < 5; j++) {
codice[j] = rand() % 2;
printf("%d", codice[j]);
}

printf("\n");
}

return 0;
}


edit


Originariamente inviato da lucianad
ma tutto quello che ottengo è una serie di vettori che hanno o tutti 0 o tutti 1 e non riesco proprio a capire dove sto sbagliando. Nel codice che hai fornito hai un solo vettore che ogni volta sovrascrivi, lo sai vero? È solo del codice di test questo?

lucianad
08-08-2010, 22:42
unsigned non ci stava, ho sbagliato a scrivere..
ma con il primo for non genero i 32 vettori che mi servono?
come faccio a generarne uno diverso per 32 volte? :dhò:

edit: ho fatto una cavolata..mi bastava spostarlo all'inizio.. maledetta me!

scusate!

Luciana

Alex'87
08-08-2010, 22:55
Originariamente inviato da lucianad
unsigned non ci stava, ho sbagliato a scrivere..Più che altro il problema era la chiamata a srand, che serve a inizializzare il generatore di numeri pseudo-casuali. Nel tuo caso ad ogni iterazione reinizializzavi il generatore con l'istante corrente... ma una iterazione impiega pochissimo e quindi l'istante temporale (preciso al millisecondo) non cambiava, inizializzando il generatore sempre con lo stesso valore... Per questo avevi tutti 0 o tutti 1.

Originariamente inviato da lucianad
ma con il primo for non genero i 32 vettori che mi servono?
come faccio a generarne uno diverso per 32 volte? :dhò: Il vettore lo dichiari una volta sola:

int codice[5];
Il primo ciclo non fa altro che scriverci sopra 32 volte e alla fine avrai solo i valori dell'ultima iterazione. Se vuoi 32 vettori di 5 elementi ciascuno ti serve una matrice:


int codice[32][5];

lucianad
08-08-2010, 23:01
ups!
non avevo visto che era stata inserita la nuova risposta!
grazie comunque..

sta roba mi sta facendo impazzire.. :dhò:

LeaderGL
08-08-2010, 23:27
il tuo problema fondamentale è tutto in questa riga:


codice[j] = rand() % 2;


qualsiasi numero generato da rand() modulo 2 potrà diventare solo uno 0 o un 1.

O elimini quel "% 2" oppure cambi quel "2" con un numero più alto.

lucianad
08-08-2010, 23:38
Originariamente inviato da LeaderGL


O elimini quel "% 2" oppure cambi quel "2" con un numero più alto.

io volevo ottenere o 0 o 1..
risolto questo problema, se ne presenta un altro:
quando passo un vettore ad una funzione, cosa significa l'errore


declaration of ‘int ....’ shadows a parameter

MacApp
09-08-2010, 13:03
Originariamente inviato da lucianad
io volevo ottenere o 0 o 1..
risolto questo problema, se ne presenta un altro:
quando passo un vettore ad una funzione, cosa significa l'errore


declaration of ‘int ....’ shadows a parameter


stai dichiarando una variabile locale che nasconde un parametro... probabilmente il nome di un parametro della funzione coincide con il nome di una variabile locale.

Certo è che se ci fosse il codice sorgente, sarebbe più semplice diagnosticare il problema, non credi?
;-)

lucianad
09-08-2010, 14:07
ciao e grazie per aver risposto.. era una curiosità su un errore che poi ho risolto..avevo dimenticato di dichiarare una variabile che poi veniva richiamata .. errori da programmazione a mezzanotte!
scusate il disturbo !
:)

Loading