Página 1 de 1

Função rnd() no Clipper

Enviado: 01 Ago 2010 15:40
por Antonio Job
Gostaria de uma .lib ou como faço para simular uma Funçlão RND() função randômica no Clipper? Grato: Antonio Job


Nota de Moderação:
por Maligno: Uma vez que o questionamento acima poderia ser também respondido na seção "Bate-Papo", onde o tópico foi publicado originalmente, achei melhor movê-lo para a seção "CA-Clipper", já que assim ele ficará melhor classificado no fórum, o que poderá futuramente ajudar outros usuários a resolverem questões semelhantes.

Re: Função rnd() no Clipper

Enviado: 01 Ago 2010 15:58
por Maligno
Olá.
Seja bem-vindo ao fórum. :)


Mesmo sendo possível codificar esse tipo de função, já existem soluções prontas. De momento, só me lembro da biblioteca CA-Tools, que tem essa função pronta.

Função rnd() no Clipper

Enviado: 01 Ago 2010 18:15
por Pablo César
lembro da biblioteca CA-Tools, que tem essa função pronta
Precisamente na CT.LIB existem duas: RAND() e RANDOM()

Existem outras como:
RANDOMIZE() // Power Tools (Ptool52.lib)
GFRAND() // Grumpfish

Também uma função em puro Clipper na internet: Random

Outro exemplo:

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)

Função rnd() no Clipper

Enviado: 20 Mai 2022 12:17
por Augusto
Pessoal...
Desculpem voltar a esse assunto depois de tanto tempo mas estou mexendo num PRG ainda em CLIPPER 5.3 e preciso da função RND().
Já tentei com RAND() e RANDOM() e continua o mesmo erro.
Estou com as bibliotecas CT.LIB e CTP.LIB dentro da pasta \CLIP53\LIB usando:

SET INCLUDE=C:\CLIP53
SET LIB=C:\CLIP53
SET OBJ=C:\CLIP53
SET PLL=C:\CLIP53
\CLIP53\CLIPPER GREDUZ /M /O
\CLIP53\BLINKER FI GREDUZ

E o resultado é:

Imagem

Alguém me dar uma "luz" ??
Obrigado

Função rnd() no Clipper

Enviado: 20 Mai 2022 14:09
por Itamar M. Lins Jr.
Olá!
Procura no fonte, e coloca aqui para vermos. Como ela é chamada pelo menos. rnd(...
Pode ser qualquer coisa, e tem a passagem de parâmetros...

Saudações,
Itamar M. Lins Jr.

Função rnd() no Clipper

Enviado: 20 Mai 2022 14:51
por Augusto
Itamar... Mandei na MP
Abraços

Função rnd() no Clipper

Enviado: 20 Mai 2022 15:03
por Itamar M. Lins Jr.
Olá!
Baseado nisso aqui...
mreduz = substr(mconta,1,1)+strzero(rnd(0,999),3,0)

Código: Selecionar todos

Function rnd(nInicio,nFim)
return INT(RANDOM()%nFim + nInicio)
Adaptei aqui do forum mesmo, sendo clipper.

Saudações,
Itamar M. Lins Jr.

Função rnd() no Clipper

Enviado: 20 Mai 2022 18:18
por alxsts
Olá!
Augusto escreveu:Estou com as bibliotecas CT.LIB e CTP.LIB dentro da pasta \CLIP53\LIB usando:

SET INCLUDE=C:\CLIP53
SET LIB=C:\CLIP53
SET OBJ=C:\CLIP53
SET PLL=C:\CLIP53
\CLIP53\CLIPPER GREDUZ /M /O
\CLIP53\BLINKER FI GREDUZ
Não está encontrando a LIB.

Ajuste o comando:

De SET LIB=C:\CLIP53
Para SET LIB=C:\CLIP53\Lib

Função rnd() no Clipper

Enviado: 20 Mai 2022 20:42
por Augusto
Amigo... obrigado pela dica MASSSSS continua dando o mesmo erro.
Inclusive, por via das dúvidas, antes mesmo de vc responder eu já havia copiado as LIBS (CT e CTP) para a pasta CLIP53 e não resolveu.
Coloquei do jeitinho que vc falou e ERRO!!

Mais alguma ideia??

Abraços

Função rnd() no Clipper

Enviado: 20 Mai 2022 20:50
por Augusto
Alguém poderia compilar um PRG prá mim no CLIPPER 5.3 usando a função RND()??
Não estou conseguindo... sniff sniff sniff

Aguardo!!

Função rnd() no Clipper

Enviado: 20 Mai 2022 21:05
por alxsts
Olá!

Está incluindo a lib no teu arquivo de compilação?
Poste os teus arquivos de compilação (.rmk, .lnk, .bat) que está usando.

Função rnd() no Clipper

Enviado: 20 Mai 2022 21:55
por Itamar M. Lins Jr.
Olá!
usando a função RND()??
Copia e cola ai no prg a função que fiz.
Já testou ?

Saudações,
Itamar M. Lins Jr.

Função rnd() no Clipper

Enviado: 20 Mai 2022 22:05
por Augusto
Itamar eu não programo em Clipper há mais de 20 anos.... nem lembro como chamar uma função dentro do PRG.
Se vc quiser e puder, te mando o PRG via qqr coisa (wapp sei lá) e aí vc me ajuda nisso... pode ser?

Consegui compilar no HARBOUR a partir de um outro programa que eu tinha aqui (q inclusive foi o Toledo que fez prá mim) mas está dando erro na função MAIN()...
Pensei nisso pois pelo menos rodaria em x64 tbm...

Aguardo seu retorno, obrigado!

Função rnd() no Clipper

Enviado: 22 Mai 2022 19:04
por alxsts
Olá!
Augusto escreveu:Já tentei com RAND() e RANDOM() e continua o mesmo erro.
Estou com as bibliotecas CT.LIB e CTP.LIB dentro da pasta \CLIP53\LIB usando
Se realmente está linkando a CT.LIB, não teria como dar erro. Na CT.LIB, não existe a função RND(). Existem as funções Rand() e Random(), conforme consta no CA Clipper Tools - Books 1 - 3 Norton Guide
RAND()
Generates random numbers

------------------------------------------------------------------------------
Syntax

RAND([<nStartValue>]) --> nRandomValue

Argument

<nStartValue> Designates a beginning value for the random number
generator.

Returns

RAND() returns a random number between 0 and 1.

Description

In contrast to RANDOM(), this function works with a seed algorithm.
Multiple calls always returns the same random number sequence when it
has the same start value. When you first call RANDOM() without a
parameter, it starts as if 100001 is specified as a parameter.
Subsequent random numbers can then be influenced by the < nStartValue>.
If this value is less than or equal to 0, the clock time is brought into
the process.

If you call the function with 100001 as a parameter, it allows you to
restart the generator. Then, if you call the function several times
without parameter, it returns the "standard sequence" of numbers.

Examples

. Call after program start:

? STR(RAND(), 18, 15) // 0.831051100158447
? STR(RAND(), 18, 15) // 0.557946857971956

. If the parameter equals 0, the clock time is incorporated.
Even if the clock has not yet advanced, subsequent values are still
different:

? STR(RAND(), 18, 15) // Time dependent
? STR(RAND(), 18, 15) // Subsequent time
// dependent value

. Use a number greater than 0:

? STR(RAND(23), 18, 15) // 0.121169930053736
? STR(RAND(23), 18, 15) // 0.121169930053736

. Show a "new start":

? STR(RAND(100001), 18, 15) // 0.831051100158447
? STR(RAND(), 18, 15) // 0.557946857971956

See Also: RANDOM()
RANDOM()
Generates random numbers
------------------------------------------------------------------------------
Syntax

RANDOM([<lMode>]) --> nRandomWORD

Argument

<lMode> Designates whether or not to return negative numbers. The
default creates only positive numbers.

Returns

RANDOM() returns a random number in the range of 0 to 65535 or when
<lMode> is designated as .T., in the range of -32768 to +32767.

Description

RANDOM() produces random numbers to create a random distribution of test
data for DEMO programs or any other application.

Note

. If the <lMode> parameter is not specified, only positive
numbers are returned. When < lMode> is set to .T., the function
returns the same number of positive and negative numbers.

Examples

. Create a random number between 0 and 65535:

? RANDOM()

. Create a random number between 0 and 1:

? RANDOM()/65535

. Create a random whole number between 1 and 16:

? RANDOM()%16 +1

. Create a random number between -32768 and +32767:

? RANDOM(.T.)

See Also: RAND()

Função rnd() no Clipper

Enviado: 25 Mai 2022 21:43
por Adalberto
Caro amigo, boa noite.

você pode tentar esta função, para mim funciona muito bem, me ajuda a resolver a questão dos números aleatórios

Código: Selecionar todos

FUNCTION RandInt(nDesde, nHasta)
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))
Um grande abrazo desde Bolivia.

Adalberto.