Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it L'avatar di Lupin
    Registrato dal
    May 2005
    Messaggi
    45

    C++ numero random ?

    Salve !
    Sono un appassionato del C++ e da un pò di tempo sto cercando di capirci qualcosa, ho comprato da poco un bel libro intitolato fondamenti di c++ della Mc Graw Hill e nel capitolo tre ho trovato questa esercitazione ma penso che abbia un bug in quanto il numero che dovrebbe essere random è sempre il 41 come è possibile? Ed inoltre come si può rimediare.
    Un'altra domanda come si fà ad impostare un numero random dandogli un valore massimo cioè che non superi per esempio 100
    ho pensato forse con un ciclo for, ma non sono ancora così bravo da impostarlo in maniera corretta.
    Vi ringrazio anticipatamente.
    Il listato è il seguente:

    #include <iostream>
    #include <cstdlib>
    using namespace std;

    int main()
    {
    int magic; // numero magico
    int guess; // tentativo del giocatore

    magic = rand(); // sceglie un numero a caso

    do {
    cout << "Scrivi il tuo numero: ";
    cin >> guess;
    if(guess == magic) {
    cout << "** Giusto ** ";
    cout << magic << " è il numero magico.\n";
    }
    else {
    cout << "...Mi dispiace, hai sbagliato.";
    if(guess > magic)
    cout << " Il tuo numero è troppo alto.\n";
    else cout << " Il tuo numero è troppo basso.\n";
    }
    } while(guess != magic);

    return 0;
    }
    _____________________________________
    La libertà è una strada che raramente viene percorsa dalla moltitudine !
    _____________________________________

  2. #2
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    codice:
    #include <iostream> 
    #include <cstdlib> 
    #include <ctime>
    using namespace std; 
    
    int main() 
    { 
    int magic; // numero magico 
    int guess; // tentativo del giocatore 
    
    srand(time(0));//seleziona il seme
    
    magic = rand();
    //così è troppo difficile trovare il numero, puoi fare fra 1 e 100 
    //così:
    //magic = 1 + rand() % 100;
    
    
    do { 
    cout << "Scrivi il tuo numero: "; 
    cin >> guess; 
    if(guess == magic) { 
    cout << "** Giusto ** "; 
    cout << magic << " è il numero magico.\n"; 
    } 
    else { 
    cout << "...Mi dispiace, hai sbagliato."; 
    if(guess > magic) 
    cout << " Il tuo numero è troppo alto.\n"; 
    else cout << " Il tuo numero è troppo basso.\n"; 
    } 
    } while(guess != magic); 
    
    return 0; 
    }
    Con srand crei un seme per generare numeri casuali, se vuoi creare un numero fra x e y devi fare:

    rand = x + rand() % y

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  3. #3
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772
    per avere un seme sempre diverso potresti anche dargli
    srand(static_cast<unsigned int>(time(NULL)));

    Tanto pero alla fine son sempre numeri pseudocasuali
    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

  4. #4
    Utente di HTML.it L'avatar di Lupin
    Registrato dal
    May 2005
    Messaggi
    45
    Grazie per la celerità !
    Ho appena cercato di modificare e compilare il listato ma non funziona, sicuramente ho commesso un altro errore.



    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    using namespace std;

    int main()
    {
    int magic; // numero magico
    int guess; // tentativo del giocatore
    srand(time(0));
    rand = 1 + rand() % 100 //seleziona il seme


    //così è troppo difficile trovare il numero, puoi fare fra 1 e 100
    //così:
    //magic = 1 + rand() % 100;


    do {
    cout << "Scrivi il tuo numero: ";
    cin >> guess;
    if(guess == magic) {
    cout << "** Giusto ** ";
    cout << magic << " è il numero magico.\n";
    }
    else {
    cout << "...Mi dispiace, hai sbagliato.";
    if(guess > magic)
    cout << " Il tuo numero è troppo alto.\n";
    else cout << " Il tuo numero è troppo basso.\n";
    }
    } while(guess != magic);

    return 0;
    }

    Ho cercato di dare un valore massimo di 100 se no diventa molto difficile !
    _____________________________________
    La libertà è una strada che raramente viene percorsa dalla moltitudine !
    _____________________________________

  5. #5
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772
    Prova a dre un'occhiata a questo...

    void main(){

    srand(static_cast<int>(time(NULL)));

    int guess = 0;
    int magic = rand() % 100 + 1;

    while(guess != magic){
    std::cout << "Inserisci il numero magico: ";
    std::cin >> guess;

    if(guess == magic){
    std::cout << "Corretto" << std::endl;
    break;
    }

    else{
    std::cout << "Sbagliato" << std::endl;
    if(guess > magic)
    std::cout << "Il tuo numero e\' troppo alto.";
    else
    std::cout << "Il tuo numero e\' troppo basso.";

    std::cout << "Il numero corretto e\': " << magic << std::endl;
    break;
    }
    }
    }


    Ho messo dei break per far uscire il ciclo while in caso di numero corretto o sbagliato. Se pero si esce subito al primo errore non ha nemmeno senso in realtà fare un ciclo... cmq cosi funzia
    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

  6. #6
    Utente di HTML.it L'avatar di Lupin
    Registrato dal
    May 2005
    Messaggi
    45
    Ok funziona il tuo programma !
    Ora faccio una piccola modifica per far inoltrare vari tentativi fino alla risposta esatta.
    Grazie
    _____________________________________
    La libertà è una strada che raramente viene percorsa dalla moltitudine !
    _____________________________________

  7. #7
    Originariamente inviato da infinitejustice
    Prova a dre un'occhiata a questo...

    [FONT=courier new]void main(){

    srand(static_cast<int>(time(NULL)));
    .....

    Scusate la domanda da perfetto neofita ma se io metto void main()...
    il compilatore mi da errore e dice che main deve restituire solo numeri interi...

    Perchè a voi funziona con void?
    3/6/2003 è morto l'angelo della mia vita..
    www.markwebinformatica.net
    My BLOG

  8. #8
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772
    Usi Dev-Cpp ?
    Dovrebbe darti un warning cmq, non un errore.

    edit: il valore viene restituito al sistema operativo. Alcuni compilatori ti fanno delle storie se metti void, altri no.
    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

  9. #9
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Originariamente inviato da Barman@83
    Scusate la domanda da perfetto neofita ma se io metto void main()...
    il compilatore mi da errore e dice che main deve restituire solo numeri interi...

    Perchè a voi funziona con void?
    perchè il

    void main()

    non è più c++ standard e il mingw (il compilatpre di devcpp) non te lo accetta e no ndovresti usarlo. Il main deve ritornare un int.

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  10. #10
    ma cosa cambia su uso int e se uso void?
    a parte la tipologia di numeri (interi o a virgola mobile)
    3/6/2003 è morto l'angelo della mia vita..
    www.markwebinformatica.net
    My BLOG

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 © 2024 vBulletin Solutions, Inc. All rights reserved.