segunda-feira, 18 de junho de 2007

Gerando números aleatórios

Ontem estava programando e tive a necessidade de gerar uma sequência de números aleatórios. Logo pensei no srand ou então em criar minha própria função para isso. Para não re-inventar a roda resolvi dar uma pesquisada sobre a existência da função rand para Symbian e a encontrei na biblioteca de funções matemáticas E32Math.h (inclusive vale a pena checar o documento sobre as funções dessa biblioteca Link aqui!), de fato encontrei outra função rand, na verdade as dos padrões C , mas preferi fazer uso da biblioteca matemática.

Para quem já utilizou essa função no C/C++ sabe que a melhor forma de se gerar um número aleatório é baseado na hora do sistema, em Symbian não será diferente. Iremos utilizar a classe TTime para pegar a hora do sistema, essa hora será convertida para um inteiro64 e então passada como argumento na função Math::Rand(TInt64& aSeed); Para gerar vários números aleatórios basta fazer várias chamadas a essa função e passando como argumento sempre o mesmo Seed. Você não deve mudar isto! Vamos ao exemplo:

== MinhaApliacacaoAppView.h ==
class CMinhaAplicacaoAppView : public CCoeControl
{
private:
//inteiro que será utilizado para gerar os números aleatórios
TInt64 iSeed;
public:
TInt GerarNumeroAleatorio();
};

== MinhaApliacacaoAppView.cpp==
#include "MinhaApliacacaoAppView.h"
#include E32Math.h //(OBS: adicione < > entre E32Math.h , o blog não me permite fazer isto)


void CMinhaApliacaoAppView::ConstructL()
{
//instancia da classe TTime
TTime tempo;
//Recebendo a hora do sistema
tempo.HomeTime();
//Convertendo para inteiro
iSeed = tempo.Int64();
}

TInt CMinhaApliacacaoAppView::GerarNumeroAleatorio()
{
//Gerando número aleatorio de 0 à 100

TInt numeroAleatorio = Math::Rand(iSeed)%101;
return numeroAleatorio;
}
Ehhhhhh, ok está sem identação mas é que não existe um padrão para postar código de programação aqui! (pelo menos não que eu conheça)

Nenhum comentário: