Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    metodo rand

    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

    codice:
    #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;
    }

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Il linguaggio va indicato nel titolo, e il codice va formattato usando il tag [CODE].

    Ti rimando al Regolamento di cui ti suggerisco la lettura per conoscere le norme da seguire nella partecipazione a quest'area del forum per le occasioni future.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Da dove vedi che ottieni valori superiori come 100 ... ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    quando lo esguo mi da valori superiori a quelli di define

  5. #5
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219

    Re: metodo rand

    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:
    codice:
    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:
    codice:
    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.

  6. #6
    ah quindi funziona dato che vede le lettere come codice ascii

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    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]);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    we grazie mille funziona addesso era %c che ci mancava

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.