Задача такая: В колоде(52 карты), рассчитать экспериментально (метод Монте-Карло) вероятность того, что сверху лежат две одинаковых карты. Количество раундов подается с ключом.
Создаю поток, в котором вызываю функцию generator, но она не выводит на экран 2 случайные карты. В чем может быть проблема?
#include <assert.h>
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <pthread.h>
#define ARRAY_SIZE(a) (sizeof (a) / sizeof *(a))
#define COMPARE(a, b) (((a) > (b)) - ((a) < (b)))
const char RANKS[] = "23456789TJQKA";
const char SUITS[] = "SHDC"; /* Spades, Hearts, Diamonds, Clubs */
#define N_RANKS (13)
#define N_SUITS (4)
#define ERROR_CREATE_THREAD -11
#define ERROR_JOIN_THREAD -12
#define SUCCESS 0
typedef struct Card{
unsigned suit, rank;
} Card;
typedef Card Cards[52];
void init_cards(Cards *cards){
assert(cards != NULL);
Card *card = *cards;
unsigned suit;
unsigned rank;
for (suit = 0; suit < N_SUITS; ++suit)
for (rank = 0; rank < N_RANKS; ++rank)
{
card->suit = suit;
card->rank = rank;
++card;
}
assert(card == *cards + ARRAY_SIZE(*cards));
}
void shuffle_cards(Cards *cards, unsigned limit_size){
assert(cards != NULL);
assert(limit_size <= ARRAY_SIZE(*cards));
unsigned i;
for (i = 0; i < limit_size; ++i)
{
unsigned j = rand() % (ARRAY_SIZE(*cards) - i) + i;
Card temp = (*cards)[i];
(*cards)[i] = (*cards)[j];
(*cards)[j] = temp;
}
}
void print_cards(const Card cards[], unsigned n){
const Card *card;
const Card *card_end = cards + n;
for (card = cards; card != card_end; ++card)
printf("%c%c ", SUITS[card->suit], RANKS[card->rank]);
printf("\n");
}
/*int compare_cards(const Card cards[], unsigned n)
{
}*/
void* generator(void *args){
srand((unsigned) time(NULL));
Cards cards;
init_cards(&cards);
shuffle_cards(&cards, 2);
Card *player = cards;
print_cards(player, 2);
}
int main(int argc, char* argv[]){
int q,i,size,result;
pthread_t thread;
if (argc < 2){
printf("Please enter int\n");
return 1;
}
q=atoi(argv[2]);
printf("Q=%d\n",q);
result = pthread_create(&thread, NULL, generator, NULL);
if (result != 0) {
printf("main error: can't create thread, status = %d\n", result);
exit(ERROR_CREATE_THREAD);
}
}