Eli ajattelin tässä että mikä on paras tyyli oppia ja totesin että se on kokeilu joten päätin alkaa väsäämään pientä teksti pohjaista peli... Tässä suunnittelu vaiheessa kuitenkin tuli semmoinen pulma vastaan että kun pelin pitäisi arpoa vihu, mutta en nyt oikeen ole keksinyt kuinka sen toteuttaisin...
Selailin tuossa noita vanhoja keskusteluja, mutta ei oikeen apua ole kun kaikissa eri selitykset ja eri koodit ja itsellä olisi tarkoituksena vain 1-3 saada arvottua.
Kiitos jo näin etukäteen.
#include <ctime> #include <iostream> #include <cstdlib> int arvo_luku(int ala, int yla); int main(int kpl, char** argumentit){ std::srand(std::time(NULL)); int arvottu_luku = arvo_luku(1, 3); std::cout << arvottu_luku << std::endl; return EXIT_SUCCESS; } int arvo_luku(int ala, int yla){ int tmp_luku; tmp_luku = ala + rand() % (ala + yla); return tmp_luku; }
Teuron koodissa on bugi: vaihtoehtojen lukumäärä on (yla - ala + 1) eikä (ala + yla).
int arvo_luku(int ala, int yla) { return ala + rand() % (yla - ala + 1); }
Apumuuttujan käytöstä ei tässä ole minusta hyötyä, mutta se on toki makuasia.
Edit: Niin ja jos tuon toiminta ei ole täysin selvää, kannattaa lukea manuaalista mitä srand()
ja rand()
tekevät.
Hups niin onkin väärin. Testasin pari kertaa ja sattumalta tuli tuolle välille numerot. Apumuuttujien tarkoitus oli hiukan selventää tuon "satunnaisen" luvun sijoitusta. Makuasia ehdottomasti kuitenkin.
Koodi ilmeisesti alustaa satunnaisluku generaattorin sekunti-arvolla, jolloin sekunnin aikana tuloksena on sama luku, ei siis kovin satunnainen.
tkok kirjoitti:
Koodi ilmeisesti alustaa satunnaisluku generaattorin sekunti-arvolla, jolloin sekunnin aikana tuloksena on sama luku, ei siis kovin satunnainen.
Vain jos tuo tosiaan alustettaisiin ennen jokaista arvontaa, niin kyllä juuri näin.
#include <ctime> #include <iostream> #include <cstdlib> int arvo_luku(int ala, int yla); int main(int kpl, char** argumentit){ std::srand(std::time(NULL)); int arvottu_luku; int a = 0; while(a < 10){ arvottu_luku = arvo_luku(10, 100); std::cout << arvottu_luku << std::endl; ++a; } return EXIT_SUCCESS; } int arvo_luku(int ala, int yla){ int tmp_luku; tmp_luku = ala + rand() % (yla - ala + 1); return tmp_luku; }
Tulos: 10, 20, 71, 59, 43, 33, 80, 73, 37, 54
Sitten uusi veto
#include <ctime> #include <iostream> #include <cstdlib> int arvo_luku(int ala, int yla); int main(int kpl, char** argumentit){ int arvottu_luku; int a = 0; while(a < 10){ std::srand(std::time(NULL)); arvottu_luku = arvo_luku(10, 100); std::cout << arvottu_luku << std::endl; ++a; } return EXIT_SUCCESS; } int arvo_luku(int ala, int yla){ int tmp_luku; tmp_luku = ala + rand() % (yla - ala + 1); return tmp_luku; }
nyt tuloste on 10 kertaa 73
Joo kiitos vastauksista! Pelastitte päiväni :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.