Liczby losowe PDF Drukuj Email
Wpisał doctor   
Środa, 21. Luty 2007 02:14
Liczby losowe w C++

   W środowsiku C++ Builder mamy do dyspozycji pseudolosowy generator o cyklu 232.
Pseudolosowy dlatego, że komputer jako maszyna deterministyczna generuje ciągi liczb ze skończonego przedziału wartości.
Pamięc komputera, jaka by ona nie była, jest zawsze ograniczona.
Generator tego typu jest wystarczający do mniej złożonych symulacji.
Jeśli chcemy generować liczby ze znacznie większego przedziału oraz większej zmienności
jesteśmy zmuszeni korzystać ze specjalizowanych generatorów pseudolosowych.
Do najpopularniejszych należą: tezuka.c czy uni.c o cyklu 2^144.



A teraz konkrety. Aby wylosować liczbę o dużej zmienności należy generator zainicjować.
W C++ służy do tego funkcja Randomize(), umieszczana zwykle w zdarzeniu OnCreate aplikacji.
{viewonly=registered}
Do generowania liczb wykorzystywana jest funkcja
int random(int num), gdzie num jest zakresem generowanych liczb.
Funkcja ta zwraca liczbę typu int z przedziału [0, num - 1].

Przykład
Kładziemy na formę komponent Label oraz Button. Następnie uzupełniamy zdarzenia.

void __fastcall TForm1::FormCreate(TObject *Sender)
{
randomize();
}


void __fastcall TForm1::Button1Click(TObject *Sender)
{
Label1->Caption = IntToStr(random(5));
}

W ten prosty sposób będziemy generować liczby z przedziału [0, 4].


Następną funkcją jest
int RandomRange(const int AFrom, constint ATo) zwracającą liczbę z podanego zakresu [AFrom, Ato).

Przykład

Uwaga: aby używać tej funkcji trzeba dołączyć bibliotekę math.hpp.



 #include <vcl.h>
#pragma hdrstop

#include <math.hpp>
#include "Unit1.h"


void __fastcall TForm1::FormCreate(TObject *Sender)
{
randomize();
}


void __fastcall TForm1::Button1Click(TObject *Sender)
{
int liczba = RandomRange(10, 31);
Label1->Caption = IntToStr(liczba);
}


Kolejną przydatną funkcją jest
double RandomFrom(const double *AValues, int AValues_Size) która zwraca element tablicy o rozmiarze AValues_Size.
A więc jako argument przekazujemy tej funkcji tablicę elementów.
Tu tak samo jak wyżej dołączamy bibliotekę math.hpp.

Przykład


void __fastcall TForm1::FormCreate(TObject *Sender)
{
randomize();
}


 void __fastcall TForm1::Button1Click(TObject *Sender)
{
int *tab = new int[5];
// stworzenie dyn. tablicy
// i zainicjowanie jej
tab[0] = 15;
tab[1] = 3;
tab[2] = 7;
tab[3] = 77;
tab[4] = 9;

int liczba = RandomFrom(tab, ARRAYSIZE(tab) );
Label1->Caption = IntToStr(liczba);
}


Jedyną nowością było tu użycie funkcji ARRAYSIZE, która pobiera jako argument nazwę tablicy a zwraca jej rozmiar.

{/viewonly}
Komentarze
Dodaj nowy Szukaj
+/-
Napisz komentarz
Nick:
E-mail:
 
Strona www:
Tytuł:
UBBCode:
[b] [i] [u] [url] [quote] [code] [img] 
 
 
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch:
:(:shock::X:side::):P:unsure::woohoo::huh::whistle:;):s
:!::?::idea::arrow:
 
Proszę wpisać kod antyspamowy widoczny na obrazku.

3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."

Ostatnia aktualizacja: Piątek, 02. Październik 2009 13:17
 
 

Losowy obraz

b4.jpg

Gościmy

Naszą witrynę przegląda teraz 31 gości 




| | | |