CONSULTA URGENTE!!! RANDOM

CONSULTA URGENTE!!! RANDOM

Postby ozono1981 » Tue Oct 22, 2013 3:11 am

Estimados Amigos...llevo varios días programando un sin fin de cosas... y tengo el siguiente problema.

Necesito dividir un Numero X en Z partes desiguales... por ejemplo

10.000 dividirlo en 13 partes desiguales....
10.000 dividirlo en 10 partes desiguales....

Me comentaron algo de una función RANDOM o algo así pero no logro dar con un ejemplo claro... o sera que estoy muy cansado... Agradecería. una mano amiga...

Saludos.

Moisés
ozono1981
 
Posts: 39
Joined: Tue Mar 26, 2013 2:09 pm

Re: CONSULTA URGENTE!!! RANDOM

Postby antolin » Tue Oct 22, 2013 6:56 am

Amigo Ozono, no se entiende muy bien que es lo que estás preguntando. Supongo que necesitas generar un número aleatorio para tu división en partes desiguales.

Para ello está la función nRandom(x) que genera un número aleatoio entre 0 y x. Por ejemplo:
Code: Select all  Expand view
nNum := nRandom(10)

Genera un número entre 0 y 10. Si lo que quieres es, por ejemplo, un número entre 10 y 15 pues tendrás que poner:
Code: Select all  Expand view
nNum := nRandom(5)+10

nRandom(5) te dará un número aleatorio entre 0 y 5 que al sumarle 10 resultará un número entre 10 y 15.

Espero te sea de ayuda

Un saludo
Peaaaaaso de foro...
antolin
 
Posts: 492
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla

Re: CONSULTA URGENTE!!! RANDOM

Postby cnavarro » Tue Oct 22, 2013 8:21 am

ozono1981 wrote:Estimados Amigos...llevo varios días programando un sin fin de cosas... y tengo el siguiente problema.

Necesito dividir un Numero X en Z partes desiguales... por ejemplo

10.000 dividirlo en 13 partes desiguales....
10.000 dividirlo en 10 partes desiguales....

Me comentaron algo de una función RANDOM o algo así pero no logro dar con un ejemplo claro... o sera que estoy muy cansado... Agradecería. una mano amiga...

Saludos.

Moisés


Moises, a ver si me he enterado, y te puede servir esto

Code: Select all  Expand view

#include "fivewin.ch"

Function Main()
Local aNum    := {}
Local x       := 0
Local nSum    := 0
Local y       := 0
Local nNum    := 10000    // cambiar a peticion del usuario
Local nAcum   := 0
Local nPartes  := 10       // cambiar a peticion de usuario

Do while .t.

   x  = nRandom( nNum )
   if Ascan( Int( x ), aNum ) = 0
      if ( nSum + Int( x ) ) < nNum
         AADD( aNum, Int( x ) )
         nSum  += Int( x )
      endif
   endif
   if Len( aNum ) = nPartes - 1
      exit
   endif
Enddo
x := nNum - nSum
AAdd( aNum, x )

For y = 1 to Len( aNum )
    nAcum += aNum[ y ]
    ? y, aNum[ y ], nAcum
Next y

Return nil

 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6501
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: CONSULTA URGENTE!!! RANDOM

Postby cnavarro » Tue Oct 22, 2013 8:37 am

Una version mejorada (creo), seguro que se puede hacer mejor, no lo he probado a fondo

Code: Select all  Expand view

#include "fivewin.ch"

Function Main()
Local aNum    := {}
Local x       := 0
Local nSum    := 0
Local y       := 0
Local nNum    := 10000
Local nAcum   := 0
Local nPartes := 10
// Estas variables son por si las partes quieres que esten
// entre dos valores concretos. Por defecto:
// Si no se cumple la condicion: repetir la iteracion  (usar con cuidado, sino, entraria en un bucle infinito)
Local nValor1 := 1
Local nValor2 := nNum

Do While .t.
 Do while .t.

   x  = nRandom( nNum )
   if Int( x ) >= nValor1 + 1 .and. Int( x ) <= nValor2
      if Ascan( Int( x ), aNum ) = 0
         if ( nSum + Int( x ) ) < nNum
            AADD( aNum, Int( x ) )
            nSum  += Int( x )
         endif
       endif
       if Len( aNum ) = nPartes - 1
          exit
       endif
   endif
 Enddo

 x := nNum - nSum
 if Ascan( Int( x ), aNum ) = 0
    AAdd( aNum, x )
    Exit
 else
    aNum := {}
    nSum := 0
    x := 0
    nAcum := 0
 endif
Enddo

For y = 1 to Len( aNum )
    nAcum += aNum[ y ]
    ? y, aNum[ y ], nAcum
Next y

Return nil

 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6501
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: CONSULTA URGENTE!!! RANDOM

Postby Loren » Tue Oct 22, 2013 11:03 am

Ozono,

Haber si esto te puede ayudar. Escribo directamente el código sin probarlo.

Code: Select all  Expand view

funct dividir(nNum,nPartes)  && nNum=Numero a dividir (dividendo)
 Local nResultado:={0}
 Local nCocienteFijo:=0
 Local nVariacion:=0
 Local lpar
 Local nSuma:=0
 default nNum:=1, nPartes:=1
 nCocienteFijo=Round(nNum/nPartes,2)  && con 2 decimales
 if nPartes=1
  nResultado[1]=nNum
 else
  for x=1 to nPartes-1
   nResultado[x]=Random(nCocienteFijo,2)
   nSuma+=nResultado[x]
  next
 endif
 nResultado[nPartes]=nNum-nSuma
return nResultado


Espero que funcione, o en cualquier caso te de ideas.

Saludos.
Lorenzo
desde Cádiz, España.
Loren
 
Posts: 479
Joined: Fri Feb 16, 2007 10:29 am
Location: Cadiz - España

Re: CONSULTA URGENTE!!! RANDOM

Postby ozono1981 » Tue Oct 22, 2013 3:12 pm

Gracias A Todos Amigos... voy a trabajar en las pruebas y les comento, desde ya mis mas sinceras

GRACIAS!!!!

Un Abrazo.
ozono1981
 
Posts: 39
Joined: Tue Mar 26, 2013 2:09 pm

Re: CONSULTA URGENTE!!! RANDOM

Postby ozono1981 » Wed Oct 23, 2013 3:35 pm

Muchacho Muchas Gracias por la ayuda prestada, acabo de terminar lo que me tuvo pegado varios días así que muy agradecido de verdad.

Saludos Cordiales desde Chile
Moisés
ozono1981
 
Posts: 39
Joined: Tue Mar 26, 2013 2:09 pm

Re: CONSULTA URGENTE!!! RANDOM

Postby antolin » Fri Oct 25, 2013 10:44 am

Ozono, si en vez de nNum := nRandom( nRand ) escribes: nNum := nRandom( nRand )+1 te aseguras de que nunca te va a dar 0 y te quitas de complicaciones

Un saludo. Y suerte...
Peaaaaaso de foro...
antolin
 
Posts: 492
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 11 guests