FAQ | Points | Add... | Recent posts | Search | Register | Log in


Generator liczb losowych Visual C++


Post new topic  Reply to topic      Main Page -> Forum Index -> Programming Generally -> Beginners Programming -> Generator liczb losowych Visual C++
Author
Message
Krzychu ADC
Poziom 12
Poziom 12


Joined: 13 Sep 2003
Posts: 95
Location: Poznań

Post#1 Post from the author of the topic 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

Google Adsense


Post# Post from the author of the topic 04 Jun 2004 19:47   





Back to top
   
taniel
Poziom 14
Poziom 14


Joined: 03 May 2004
Posts: 154

Post#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
Poziom 6


Joined: 30 May 2004
Posts: 18

Post#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
Poziom 24


Joined: 10 Jun 2003
Posts: 4887
Location: Toruń

Post#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
Poziom 26


Joined: 25 Apr 2002
Posts: 11092

Post#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
Poziom 6


Joined: 11 Aug 2004
Posts: 19
Location: Warszawa

Post#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

Google Adsense


Post# 11 Aug 2004 11:40   





Back to top
   
kancior
Poziom 11
Poziom 11


Joined: 28 Feb 2004
Posts: 63

Post#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

Google Adsense


Post# 23 Nov 2004 23:32   





Back to top
   
Woloszar
Poziom 6
Poziom 6


Joined: 21 Nov 2004
Posts: 18
Location: Łódź

Post#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
Poziom 1


Joined: 18 Nov 2008
Posts: 1
Location: Warszawa

Post#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
Poziom 15


Joined: 13 Mar 2010
Posts: 269
Location: Acheront

Post#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
Poziom 22


Joined: 30 May 2009
Posts: 1630
Location: Neverland

Post#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
Poziom 13


Joined: 11 Jan 2010
Posts: 122
Location: Łódz

Post#12 11 Sep 2011 17:04   

Re: Generator liczb losowych Visual C++


Code C++ - [expand]
 
#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
Poziom 3


Joined: 15 Sep 2011
Posts: 6

Post#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

Google Adsense


Post# 15 Sep 2011 14:32   





Back to top
   
Elektronik9
Poziom 22
Poziom 22


Joined: 30 May 2009
Posts: 1630
Location: Neverland

Post#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
Poziom 10


Joined: 28 Feb 2011
Posts: 58

Post#15 16 Sep 2011 08:02   

Re: Generator liczb losowych Visual C++


Windows: funkcja CryptGenRandom() -- przykład

Linux: czytanie z /dev/urandom (nie random, tylko urandom), lub użycie wektora inicjalizacyjnego AT_RANDOM (opis wektorów inicjalizacyjnych, opis AT_RANDOM na końcu posta)
Back to top
   
Post new topic  Reply to topic      Main Page -> Forum Index -> Programming Generally -> Beginners Programming -> Generator liczb losowych Visual C++
Page 1 of 1
Similar topics
Sprzętowy generator liczb losowych (9)
[C]Generator liczb losowych + wykres (1)
Generator Prawdziwych Liczb Losowych (4)
Sprzętowy generator liczb losowych (5)
Generator liczb losowych z programowalnym zakresem. (8)
[ATmega32][C/AVRStudio] generator liczb losowych (4)
generator liczb losowych na atmega48 <basic> (2)
generator liczb losowych oparty na ciągu fibonacciego (1)
MATLAB - generator liczb losowych metodą inv cdf (1)
[C++] Generowanie liczb losowych. (2)

Page generation time: 0.58 seconds


FAQ || Administrator || Moderators || Widgets and banners || Contact
elektroda.pl topic RSS feed