Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Generator liczb losowych Visual C++

Krzychu ADC 04 Cze 2004 19:47 18073 14
  • #1 04 Cze 2004 19:47
    Krzychu ADC
    Poziom 14  

    W jaki sposób (z jakiej funkcji skożystać) aby zrealizować w Visual C++ generator liczb losowych. Funkcja rand(); mnie nie satysfakcjonuje ponieważ zwraca bardzo duże wyniki a ja chcę ograniczyć zakres generowanych liczb do np 0 - 100. Pragnę nadmienić że wyczerpałem zdroworozsądkowy limit poszukiwań :crazyeyes: . Z góry dziękuje za pomoc.

    0 14
  • #2 05 Cze 2004 01:22
    taniel
    Poziom 14  

    mój kumpel ma taką prace licencjacką na podobny temat, musi napisać programik, ma czas do 21 czerwca, ale cus kombinuje, jak nie znajdziesz odpowiedzi to postaram sie podrzucić ten programik na te forum.

    czymajta sie

    0
  • #3 05 Cze 2004 21:46
    marr22
    Poziom 11  

    Witam

    Nie wiem jak to jest dokładnie w Visual C++ bo sie nim akurat nie zajmuje, ale w C++ Builderze najprościej jest to zrobic tak:
    1. dołączyć bibliteke <stdlib.h> (myśle, że VC++ też ja ma)
    2. wywołać funkcję random (x) gdzie x to maksymalna liczba z jakiej bedą generowane liczby np. int liczba = random (100); :)

    jeśli to nie zadziała to przykro mi, ale nie wiem jak Ci pomóc...

    Pozdrawiam :)

    P.S. Spróbój w swojej funkcji rand() wstawic jakąś liczbę np rand(100) może to zadziała :)

    0
  • #4 05 Cze 2004 21:56
    ghost666
    Tłumacz Redaktor

    a czy przypadkiem random(); nie jest w math.h?

    0
  • #5 06 Cze 2004 03:40
    elektryk
    Poziom 42  

    Krzychu ADC napisał:
    Funkcja rand(); mnie nie satysfakcjonuje ponieważ zwraca bardzo duże wyniki a ja chcę ograniczyć zakres generowanych liczb do np 0 - 100.
    Myśli że tekst z manuala linuxowego wyjaśni jak rozwiązać ten problem:
    Code:
    RAND(3)             Linux Programmer's Manual             RAND(3)
    



    NAME
           rand, srand - random number generator.

    SYNOPSIS
           #include <stdlib.h>

           int rand(void);

           void srand(unsigned int seed);

    DESCRIPTION
           The   rand()  function  returns  a  pseudo-random  integer
           between 0 and RAND_MAX.

           The srand() function sets its argument as the seed  for  a
           new  sequence  of pseudo-random integers to be returned by
           rand().  These sequences are repeatable by calling srand()
           with the same seed value.

           If no seed value is provided, the rand() function is auto-
           matically seeded with a value of 1.

    RETURN VALUE
           The  rand()  function  returns  a  value  between  0   and
           RAND_MAX.  The srand() returns no value.

    NOTES
           The  versions of rand() and srand() in the Linux C Library
           use the same random number generator as random() and sran-
           dom(),  so the lower-order bits should be as random as the
           higher-order bits.  However, on older  rand()  implementa-
           tions,  the lower-order bits are much less random than the
           higher-order bits.

           In Numerical Recipes in C: The Art of Scientific Computing
           (William  H.  Press, Brian P. Flannery, Saul A. Teukolsky,
           William T.  Vetterling;  New  York:  Cambridge  University
           Press, 1992 (2nd ed., p. 277)), the following comments are
           made:
                  "If you want to generate a random integer between 1
                  and 10, you should always do it by using high-order
                  bits, as in

                         j=1+(int) (10.0*rand()/(RAND_MAX+1.0));

                  and never by anything resembling

                         j=1+(rand() % 10);

                  (which uses lower-order bits)."

           Random-number generation is a complex topic.  The  Numeri-
           cal  Recipes  in  C book (see reference above) provides an
           excellent discussion of practical random-number generation
           issues in Chapter 7 (Random Numbers).

           For  a  more theoretical discussion which also covers many
           practical issues in depth, please see  Chapter  3  (Random
           Numbers) in Donald E. Knuth's The Art of Computer Program-
           ming, volume 2 (Seminumerical Algorithms), 2nd ed.;  Read-
           ing,  Massachusetts:  Addison-Wesley  Publishing  Company,
           1981.

    CONFORMING TO
           SVID 3, BSD 4.3, ISO 9899

    SEE ALSO
           random(3), srandom(3), initstate(3), setstate(3)

    0
  • #6 11 Sie 2004 11:40
    PawełS
    Poziom 11  

    może wystarczy Ci generator liczb losowych napisany w excelu? =ZAOKR.DO.CAŁK(MAX(1;100*(LOS())))

    0
  • #7 23 Lis 2004 22:32
    kancior
    Poziom 11  

    PawełS napisał:
    może wystarczy Ci generator liczb losowych napisany w excelu? =ZAOKR.DO.CAŁK(MAX(1;100*(LOS())))


    potrzebuje coś podobnego tylko żeby mi podmieniał / zamieniał /nadpisywał liczby podaje przykład 2254993na 6764792 następny 1528581na4585556 dalej 2226570na6679522 potrzebuje coś takiego wpisująć kod 2254993 wyszło 6764792 może jakieś podstawianie liczb zamiana dodawanie odejmowanie te przykłady co podałem działają
    dzięki za odpowiedź pisać na gg najlepiej 6923676 jestem cały czas niewidoczny lub na maila

    0
  • #8 25 Lis 2004 08:48
    Woloszar
    Poziom 10  

    Witam
    (rand()%10)
    Jest to zastosowanie funkcji rand, która bedzie wybierać liczby od 0 do 10, uważam jednak że nie jest to dobre rozwiązanie gdyż funkcja rand jest tylko imitacją generatora liczb losowych (czyli za każdym razem losuje te same liczby). Lepiej skorzystać z funkcji srand() i oprzeć ją o parametr czasu. Wtedy zawsze będzie losowało różne liczby.
    A oto przykład z pomocy:
    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>

    int main(void)
    {
    int i;
    time_t t;

    srand((unsigned) time(&t));
    printf("Ten random numbers from 0 to 99\n\n");
    for(i=0; i<10; i++)
    printf("%d\n", rand() % 100);
    return 0;
    }

    0
  • #9 09 Wrz 2011 12:13
    extrajareks
    Poziom 1  

    Witam.
    czy ktoś próbował uruchomić program kilka razy w ciągu sekundy? Niestety jeżeli taki eksperyment się wykona widać ze program losuje dokładnie te same wartości. Wniosek: funkcje srand() i rand() nie potrafią generować liczb charakteryzujących się jakąkolwiek entropią. Można te funkcje stosować tylko w programach o niewygórowanych potrzebach.

    Czy ktoś zna inne metody znaczy funkcje do generowania liczb losowych

    pozdrawiam wszystkich uczestników

    0
  • #10 09 Wrz 2011 19:10
    beluosus
    Poziom 25  

    Po pierwsze: temat z 2004 roku, po drugie: dla srand() można podać jakiekolwiek ziarno, np. milisekundy od czasu uruchomienia komputera albo nawet cykle procesora. Co nie zmienia faktu, że rand() jest słabą metodą. Chcesz czegoś lepszego niż rand? Może być boost albo wiele innych bibliotek.

    0
  • #12 11 Wrz 2011 17:04
    lolcio
    Poziom 16  

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    Wywolanie roll_die() zwroci Ci liczbe losową...Zmień sobie zakres w pierwszej linijce funkcji
    i powinieneś dostawać wyniki tak jak tego oczekujesz...

    0
  • #13 15 Wrz 2011 14:32
    Kolekcjonel
    Poziom 10  

    Nie polecam boosta, ponieważ jest to zewnętrza biblioteka i zajmuje dość dużo. Najlepiej jest zastosować działanie modulo ( % ) na wartości zwróconej przez rand().

    0
  • #14 15 Wrz 2011 14:38
    Elektronik9
    Poziom 30  

    Kolekcjonel napisał:
    Nie polecam boosta, ponieważ jest to zewnętrza biblioteka i zajmuje dość dużo. Najlepiej jest zastosować działanie modulo ( % ) na wartości zwróconej przez rand().

    A znasz histogram randa? Lepiej i pewniej samemu napisać generator i przetestować jego rozkład.

    0