nro aleatorio dentro de uma faixa
Moderador: Moderadores
nro aleatorio dentro de uma faixa
Olá,
Estou precisando gerar um numero aleatorio dentro de uma faixa de valores, a necessidade é a seguinte, preciso selecionar alguns registros aleatoriametne dentro de uma arquivo, entao pego o total de registro do arquivo atraves do reccount(), e estou usando o random(), mas nao consigo fazer que o numero aleatorio seja calculado até um determinado numero, por exemplo se o arquivo tem 999 registro, o numero aleatorio deveria ser até 999, mas já tentei "random(999)", mas ele gera um numero acima de 1000, se alguem puder me ajudar, agradeco desde já
Narlem G. A. Santos
Estou precisando gerar um numero aleatorio dentro de uma faixa de valores, a necessidade é a seguinte, preciso selecionar alguns registros aleatoriametne dentro de uma arquivo, entao pego o total de registro do arquivo atraves do reccount(), e estou usando o random(), mas nao consigo fazer que o numero aleatorio seja calculado até um determinado numero, por exemplo se o arquivo tem 999 registro, o numero aleatorio deveria ser até 999, mas já tentei "random(999)", mas ele gera um numero acima de 1000, se alguem puder me ajudar, agradeco desde já
Narlem G. A. Santos
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
nro aleatorio dentro de uma faixa
Você poderia colocar em looping a função que pega o número aleatório e condicionar a saída desse looping caso esse valor seja n.
Senão me engano ja existe alguma função que trabalha assim, vou procurar caso ache irei disponibilizar-la. Mas esse recurso que indiquei funcionaria.
Senão me engano ja existe alguma função que trabalha assim, vou procurar caso ache irei disponibilizar-la. Mas esse recurso que indiquei funcionaria.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
nro aleatorio dentro de uma faixa
O código é proveniente da biblioteca GRUMPFISH. Só basta passar o parâmetro limite. Teste e veja se serve.
Código: Selecionar todos
function GFRand(n)
static xrndseed := .123456789
if xrndseed = .123456789
xrndseed += val(substr(time(), 7, 2)) / 100
endif
xrndseed := (xrndseed * 31415821 + 1) / 1000000
return int( (xrndseed -= int(xrndseed)) * n)Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Re: nro aleatorio dentro de uma faixa
No lugar do colega eu geraria um número aleatório qualquer, bem grande, e dividiria o valor limite pelo número gerado. Ao resto, se zero, acrescenta-se um. Pronto. Este resultado sempre estará dentro da faixa desejada. Aliás, eu uso a CATools, que é mais popular.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Re: nro aleatorio dentro de uma faixa
Ja que vc usa a CATools, tenta este código:
numero=INT(RANDOM()%999 +1)
Coloquei para retornar somente números inteiros, caso queira decimal, tire a função INT().
Ate+,
numero=INT(RANDOM()%999 +1)
Coloquei para retornar somente números inteiros, caso queira decimal, tire a função INT().
Ate+,
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Re: nro aleatorio dentro de uma faixa
Foi o que sugeri. Mas a função Random() só retorna INT, entre -32768 e 32768. Portanto, não será necessário usar a função Int(). Só que eu usaria a função Rand(), que retorna apenas valores fracionados (grandes) entre 0 e 1. Mas é só multiplicar por 1.000.000, por exemplo. Algo do tipo:
Código: Selecionar todos
nReg := (Int(Rand() * 1000000) % nLimite) + 1[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Re: nro aleatorio dentro de uma faixa
No xHarbour temos a função HB_Random(nMin, nMax)
GOTO Int( HB_Random( 1, Reccount() ) )
GOTO Int( HB_Random( 1, Reccount() ) )
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Re: nro aleatorio dentro de uma faixa
Infelizmente, o caso aqui é Clipper. Pelo menos a seção destino do post faz supor que o OP quer uma solução para Clipper. E, também infelizmente, a CATools não dispõe do mesmo recurso que a biblioteca do XHarbour. Pelo menos que eu saiba. Se bem que esse é o menor dos problemas, dada a simplicidade do código envolvido.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
-
Adalberto
- Usuário Nível 3

- Mensagens: 343
- Registrado em: 01 Set 2007 01:09
- Localização: Santa Cruz de la Sierra - Bolivia
Re: nro aleatorio dentro de uma faixa
Ola narlem
Considera este código, ¡ funciona !
Um grande abrazo.
Considera este código, ¡ funciona !
Código: Selecionar todos
FUNCTION RandInt ( nDesde , nHasta ) // Leiase: nMim , nMax
//
LOCAL nUltimo , nRandom := 0 , nMult := INT( SECONDS() )
LOCAL nNumero := ( nHasta - nDesde )
LOCAL nLen := LEN( ALLTRIM( STR( nNumero ) ) )
SET DECIMAL TO 16
IF ( ( VALTYPE( nUltimo ) <> "N" ) .OR. EMPTY( nUltimo ) )
nUltimo := ( ( nMult * ( ( SECONDS() - INT( SECONDS() ) ) * 100 ) ) % 335544319 )
ENDIF
nUltimo := ( ( nMult * nUltimo ) % 335544319 )
nRandom := VAL( RIGHT( STR( nUltimo / 335544319 ) , nLen ) )
IF ( nRandom > nNumero )
nRandom := ( nNumero - VAL( RIGHT( STR( nRandom ) , LEN( ALLTRIM( STR( nNumero ) ) ) - 1 ) ) )
ENDIF
SET DECIMAL TO 2
RETURN( nDesde + INT( nRandom ) )
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Re: nro aleatorio dentro de uma faixa
Uso esta função que segue em anexo. Tem me ajudado. Peguei em algum lugar na net.
{||}s
AlxSts
{||}s
AlxSts
- Anexos
-
rand.prg- Função Random()
- (1.24 KiB) Baixado 327 vezes
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)


