Sempre C...
ci credete che non riesco a inizializzare un array di dimensione 3 con 3 numeri casuali compresi tra 1 e 3, tutti diversi da loro?
mi date una mano?
grazieeeeeeeeee
mi date una mano?
grazieeeeeeeeee
Risposte
Puoi postare il tuo codice, oppure la tue idea? Cosi lavoriamo su quella.
Ciao.
Ciao.
Comunque sia, questo può essere un esempio fatto al volo:
Poi bisogna vedere se ti serve qualcosa di più elaborato.
Ciao.
#include <stdlib.h> #include <time.h> #include <stdio.h> int vettore[3] = {0, 0, 0}; int main(int argc, char* argv[]) { srand((unsigned) time(NULL)); for(int i = 0; i < 3; i++) { vettore[i] = ((rand() % 3) + 1); printf("Valore %d: %d\n", i, vettore[i]); } }
Poi bisogna vedere se ti serve qualcosa di più elaborato.
Ciao.
"enigmagame":
Comunque sia, questo può essere un esempio fatto al volo:
#include <stdlib.h> #include <time.h> #include <stdio.h> int vettore[3] = {0, 0, 0}; int main(int argc, char* argv[]) { srand((unsigned) time(NULL)); for(int i = 0; i < 3; i++) { vettore[i] = ((rand() % 3) + 1); printf("Valore %d: %d\n", i, vettore[i]); } }
Poi bisogna vedere se ti serve qualcosa di più elaborato.
Ciao.
ho provato il listato, ma non è garantito che i numeri siano sempre diversi...gia' al secondo tentativo mi ha dato la serie 3, 2, 3...a me serve un listato che mi garantisca che i 3 numeri siano differenti tra loro a ogni tentativo...ho provato 30000 tipi di controlli diversi, ma non c'è verso...capita sempre, prima o poi, il giro in cui almeno 2 numeri sono identici...
"STL87":
ho provato il listato, ma non è garantito che i numeri siano sempre diversi...gia' al secondo tentativo mi ha dato la serie 3, 2, 3...a me serve un listato che mi garantisca che i 3 numeri siano differenti tra loro a ogni tentativo...ho provato 30000 tipi di controlli diversi, ma non c'è verso...capita sempre, prima o poi, il giro in cui almeno 2 numeri sono identici...
Scusami, mi sono dimenticato del pezzo in cui dicevi "tutti diversi da loro". In effetti questo non va bene, provo a pensarci, ma non saprei nemmeno io ora.
"enigmagame":
[quote="STL87"]
ho provato il listato, ma non è garantito che i numeri siano sempre diversi...gia' al secondo tentativo mi ha dato la serie 3, 2, 3...a me serve un listato che mi garantisca che i 3 numeri siano differenti tra loro a ogni tentativo...ho provato 30000 tipi di controlli diversi, ma non c'è verso...capita sempre, prima o poi, il giro in cui almeno 2 numeri sono identici...
Scusami, mi sono dimenticato del pezzo in cui dicevi "tutti diversi da loro". In effetti questo non va bene, provo a pensarci, ma non saprei nemmeno io ora.[/quote]
ti ringrazio!
"Sergio":
[quote="STL87"]ci credete che non riesco a inizializzare un array di dimensione 3 con 3 numeri casuali compresi tra 1 e 3, tutti diversi da loro?
Vediamo se ho capito: hai bisogno di 3 numeri compresi tra 1 e 3 diversi tra loro. Cioè hai bisogno di una delle $3! =6$ permutazioni di $(1,2,3)$.
Quindi:
a) definisci un array con le 6 permutazioni;
b) estrai un numero casuale compreso tra 0 e 5, con rand() % 6, per accedere ad una particolare permutazione.[/quote]
nooooooo, calma calma...meno complesso!!!utilizzando semplicemente 1+rand()%3...le permutazioni non so neanche cosa siano!!!sorry
"Sergio":
[quote="STL87"]nooooooo, calma calma...meno complesso!!!utilizzando semplicemente 1+rand()%3...le permutazioni non so neanche cosa siano!!!sorry
Le 6 permutazioni dei primi tre numeri sono:
1) 1,2,3
2) 1,3,2
3) 2,1,3
4) 2,3,1
5) 3,1,2
6) 3,2,1
Ciascuna di loro costituisce un possibile risultato del tuo problema, e ce ne sono solo 6.
Quindi piazzi quelle terne in un array e ne estrai una a caso...
Semplice e veloce

ok, ma volendo creare un pezzo di codice che si possa generalizzare a più di 3 numeri?
Propongo un altro modo, più semplice a livello di concetto forse, per estrarre $n$ numeri diversi fra loro.
1)definisci e inizializzi un array estratti di $n$ elementi col valore di un elemento non presente nel range dei numeri da estrarre.
2) ogni volta che estrai un numero, controlli se è presente nell'array estratti. Se si, ripeti l'estrazione, altrimenti memorizzi nell'array il numero estratto.
Esempio per estrarre numero cimpresi fra $1$ e $n$.
#include
#include
int main () {
int i,j,estratto,trovato;
int estratti[n] = {0};
srand(time(NULL));//inizializza il generatore
for (i=0; i
do{
estratto = rand()%n +1;
trovato = 0;
for(j=0;j<=i;j++)
if (estratti ==estratto){ trovato=1;
break;}
} while (trovato==1);//ripete il ciclo se l'elemento era già presente
cartella=estratto; //se esce dal do-while significa che l'elemento non era già stato estratto, e quindi
//lo memorizza
}
for(i=0;i
printf("%d ", estratti);
}
return 0; }
1)definisci e inizializzi un array estratti di $n$ elementi col valore di un elemento non presente nel range dei numeri da estrarre.
2) ogni volta che estrai un numero, controlli se è presente nell'array estratti. Se si, ripeti l'estrazione, altrimenti memorizzi nell'array il numero estratto.
Esempio per estrarre numero cimpresi fra $1$ e $n$.
#include
#include
int main () {
int i,j,estratto,trovato;
int estratti[n] = {0};
srand(time(NULL));//inizializza il generatore
for (i=0; i
do{
estratto = rand()%n +1;
trovato = 0;
for(j=0;j<=i;j++)
if (estratti ==estratto){ trovato=1;
break;}
} while (trovato==1);//ripete il ciclo se l'elemento era già presente
cartella=estratto; //se esce dal do-while significa che l'elemento non era già stato estratto, e quindi
//lo memorizza
}
for(i=0;i
}
return 0; }