| Author |
Message
|
Krzychu ADC Poziom 12

Joined: 13 Sep 2003 Posts: 95 Location: Poznań
|
#1
04 Jun 2004 19:47 Generator liczb losowych Visual C++ |
|
|
|
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.
|
|
| Back to top |
|
 |
Google

|
#
04 Jun 2004 19:47 |
|
|
|
|
|
| Back to top |
|
 |
taniel Poziom 14

Joined: 03 May 2004 Posts: 154
|
#2
05 Jun 2004 01:22 Re: Generator liczb losowych Visual C++ |
|
|
|
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
|
|
| Back to top |
|
 |
marr22 Poziom 6

Joined: 30 May 2004 Posts: 18
|
#3
05 Jun 2004 21:46 Re: Generator liczb losowych Visual C++ |
|
|
|
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 :)
|
|
| Back to top |
|
 |
ghost666 Poziom 24

Joined: 10 Jun 2003 Posts: 4887 Location: Toruń
|
#4
05 Jun 2004 21:56 Generator liczb losowych Visual C++ |
|
|
|
a czy przypadkiem random(); nie jest w math.h?
|
|
| Back to top |
|
 |
elektryk Poziom 26

Joined: 25 Apr 2002 Posts: 11092
|
#5
06 Jun 2004 03:40 Re: Generator liczb losowych Visual C++ |
|
|
|
| Krzychu ADC wrote: |
| 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)
|
|
|
| Back to top |
|
 |
PawełS Poziom 6

Joined: 11 Aug 2004 Posts: 19 Location: Warszawa
|
#6
11 Aug 2004 11:40 Re: Generator liczb losowych Visual C++ |
|
|
|
może wystarczy Ci generator liczb losowych napisany w excelu? =ZAOKR.DO.CAŁK(MAX(1;100*(LOS())))
|
|
| Back to top |
|
 |
Google

|
#
11 Aug 2004 11:40 |
|
|
|
|
|
| Back to top |
|
 |
kancior Poziom 11

Joined: 28 Feb 2004 Posts: 63
|
#7
23 Nov 2004 23:32 Re: Generator liczb losowych Visual C++ |
|
|
|
| PawełS wrote: |
| 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
|
|
| Back to top |
|
 |
Google

|
#
23 Nov 2004 23:32 |
|
|
|
|
|
| Back to top |
|
 |
Woloszar Poziom 6

Joined: 21 Nov 2004 Posts: 18 Location: Łódź
|
#8
25 Nov 2004 09:48 Re: Generator liczb losowych Visual C++ |
|
|
|
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;
}
|
|
| Back to top |
|
 |
extrajareks Poziom 1

Joined: 18 Nov 2008 Posts: 1 Location: Warszawa
|
#9
09 Sep 2011 12:13 Re: Generator liczb losowych Visual C++ |
|
|
|
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
|
|
| Back to top |
|
 |
beluosus Poziom 15

Joined: 13 Mar 2010 Posts: 269 Location: Acheront
|
#10
09 Sep 2011 19:10 Re: Generator liczb losowych Visual C++ |
|
|
|
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.
|
|
| Back to top |
|
 |
Elektronik9 Poziom 22

Joined: 30 May 2009 Posts: 1630 Location: Neverland
|
#11
09 Sep 2011 19:22 Re: Generator liczb losowych Visual C++ |
|
|
|
Można napisać własny generator liczb pseudolosowych w oparciu o znane algorytmy.
Proponuję zajrzeć tutaj:
http://www.invocom.et.put.poznan.pl/~invocom/C/P1-2/pl/p1-2/p1-2_5_1.htm
Są tam omówione algorytmy na różne generatory: o rozkładzie równomiernym, wykładniczym, Gaussa, Poissona, Bernoulliego i inne.
Najlepiej zrobić to obiektowo, w klasach.
Pozdrawiam.
|
|
| Back to top |
|
 |
lolcio Poziom 13

Joined: 11 Jan 2010 Posts: 122 Location: Łódz
|
#12
11 Sep 2011 17:04 Re: Generator liczb losowych Visual C++ |
|
|
|
#include <boost/random/mersenne_twister.hpp> #include <boost/random/uniform_int.hpp> #include <boost/random/variate_generator.hpp> boost::mt19937 gen; int roll_die() { boost::uniform_int<> dist(0, 1); boost::variate_generator<boost::mt19937&, boost::uniform_int<> > die(gen, dist); return die(); }
Wywolanie roll_die() zwroci Ci liczbe losową...Zmień sobie zakres w pierwszej linijce funkcji
i powinieneś dostawać wyniki tak jak tego oczekujesz...
|
|
| Back to top |
|
 |
Kolekcjonel Poziom 3

Joined: 15 Sep 2011 Posts: 6
|
#13
15 Sep 2011 14:32 Re: Generator liczb losowych Visual C++ |
|
|
|
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().
|
|
| Back to top |
|
 |
Google

|
#
15 Sep 2011 14:32 |
|
|
|
|
|
| Back to top |
|
 |
Elektronik9 Poziom 22

Joined: 30 May 2009 Posts: 1630 Location: Neverland
|
#14
15 Sep 2011 14:38 Re: Generator liczb losowych Visual C++ |
|
|
|
| Kolekcjonel wrote: |
| 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.
|
|
| Back to top |
|
 |
antekone Poziom 10

Joined: 28 Feb 2011 Posts: 58
|
|
| Back to top |
|
 |