PDA

Visualizza la versione completa : [C++] Metodo rand() e generazione di valori oltre al range prestabilito


errico951
05-01-2012, 14:49
vi posto questo programma dovrebbe generare dei semi e dei numeri casuale dato un certo numero di carte che decidiamo di dare a ogni mano..ma il metodo rand va oltre il range che gli do io..a me il massimo č 13 lui va anche a 100 ecc aiutatemi



#include<stdbool.h>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define NUM_SUITS 4
#define NUM_RANKS 13
int main(void){
bool in_hand[NUM_SUITS][NUM_RANKS]={false};
int num_cards,rank,suit;
const char rank_code[]={'2','3','4','5','6','7','8','9','t','j','q','k', 'a'};
const char suit_code[]={'c','d','h','a'};
srand((unsigned)time(NULL));//serve per non generare sempre gli stessi numeri casuali
printf("metti il numero di carte per mano");
scanf("%d",&num_cards);
printf("mano:\n");
while(num_cards>0){
suit=rand()%NUM_SUITS;//genera semi casuali da 1 a num_suits
rank=rand()%NUM_RANKS;//sceglie un valore casuale massimo uguale al valore num_ranks
if(!in_hand[suit][rank]){
in_hand[suit][rank]=true;
num_cards--;
printf("%d %d\n",rank_code[rank],suit_code[suit]);
}
}
printf("\n");
system("PAUSE");
return 0;
}

alka
05-01-2012, 15:05
Il linguaggio va indicato nel titolo, e il codice va formattato usando il tag [CODE].

Ti rimando al Regolamento (http://forum.html.it/forum/showthread.php?s=&threadid=973887) di cui ti suggerisco la lettura per conoscere le norme da seguire nella partecipazione a quest'area del forum per le occasioni future.

oregon
05-01-2012, 15:26
Da dove vedi che ottieni valori superiori come 100 ... ?

errico951
05-01-2012, 15:27
quando lo esguo mi da valori superiori a quelli di define

ramy89
05-01-2012, 15:52
Prima cosa: rand()%N da un valore pseudocasuale compreso tra 0 e N-1.
Poi tu stampi rank_code[rank] e suit_code[suit],a ma sei sicuro che questi sono array inizializzati con valori casuali?
Questa č la dichiarazione:


const char rank_code[]={'2','3','4','5','6','7','8','9','t','j','q','k', 'a'};
const char suit_code[]={'c','d','h','a'};

Dopodichč tu gli array non li tocchi pių.
Mi sembra logico che ti stampa valori maggiori di cento, ad esempio la lettera 'k' ha come valore ascii 107, per cui ti stampa un 107.
Insomma, agli array non gli hai dato valori casuali, scegli casualmente solo quale valore dell' array stampare.
Poi hai dichiarato:


bool in_hand[NUM_SUITS][NUM_RANKS]={false};

E non capisco cosa volevi fare, volevi tutti i valori a false?
Il compilatore da un warning per questo.
Meglio inizializzarli con un for o con calloc.

errico951
05-01-2012, 15:56
ah quindi funziona dato che vede le lettere come codice ascii

oregon
05-01-2012, 15:56
Il problema č che i dati selezionati sono dei char e quindi devi usare la linea

printf("%c %c\n",rank_code[rank],suit_code[suit]);

errico951
05-01-2012, 15:58
we grazie mille funziona addesso era %c che ci mancava

Loading