Autor Tema: ayuda con MAX y Random  (Leído 2021 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado HEIMDAL13

  • PIC10
  • *
  • Mensajes: 26
ayuda con MAX y Random
« en: 04 de Abril de 2009, 09:35:18 »
Hola, estoy aciendo un programa que cree un numero aleatorio del 1 al 10 con random, habia el problema es que random crea numeros aleatorios entre 65535, y yo solo quiero uno aleatorio entre 10, he intentado con ese programa, usando max:

prueba var word
prueba2 var word
menu:
high PORTB.2 'enciende el led para avisar que empezara a contar de nuevo
pause 500
low PORTB.2
prueba = prueba MAX 10 'intento que prueba no sea mayor de 10
random prueba
for prueba2 = 0 to prueba 'un bucle que hace parpadear el led conectado en PORTB.0 y se repite tantas vezes como sea el numero aleatorio
high PORTB.0
pause 500
low PORTB.0
pause 500
NEXT
goto menu

pero no me funciona, que falla o como lo tengo que hacer?
« Última modificación: 11 de Abril de 2009, 23:43:19 por un Moderador »

Desconectado MarquesSalsero

  • PIC18
  • ****
  • Mensajes: 467
Re: ayuda con MAX i Random
« Respuesta #1 en: 10 de Abril de 2009, 08:50:22 »
Hola, voy a ver si te puedo echar una mano
Suponiendo que estés trabajando con PBPpro

lo primero es que

prueba = prueba MAX 10

guardará en prueba el valor mayor de los dos a comparar es decir guardará diez  si prueba es menor de dicho valor y si prueba es mayor guardará el valor de prueba, es decir justo lo contrario de lo que deseas.

Ademas de eso, si pones los comandos en este orden

prueba = prueba MAX 10 'intento que prueba no sea mayor de 10
random prueba

siempre vas a tener en prueba el valor generado por random

si hicieras

random prueba
prueba = prueba MIN 10 'intento que prueba no sea mayor de 10

entonces si, prueba nunca sería mayor de 10 pero la distribución de resultados sería muy desigual ya que el valor de random será 10 ocurrencias menor de 10 y 65525 ( 65535-10) ocurrencias serán mayores de 10

una manera mejor de hacerlo es generar un valor random que de por si tendrá un valor entre 1 y 65535 y luego escalarlo para que sea entre 1 y 10 , vamos dividirlo por 6553 lo que nos dará un valor entre 0 y 10

o tambien

Random prueba3
prueba=(prueba3//10)+1

vamos que para escalar un valor hay muchas formas de hacerlo

aún así en este sistema hay un pequeñisimo defecto pero te dejo que descubras tu solito, ese defecto solo te afectaría si de verdad necesitaras una aleatoriedad perfectamente distribuida, pero si ese fuera el caso tampoco deberías usar random ya que sus resultados no son realmente aleatorios sino secuenciales.

prueba y nos cuentas

Saludos: MarquesSalsero
« Última modificación: 10 de Abril de 2009, 09:01:38 por MarquesSalsero »
Hay 10 tipos de personas las que entienden binario y las que no

Desconectado HEIMDAL13

  • PIC10
  • *
  • Mensajes: 26
Re: ayuda con MAX i Random
« Respuesta #2 en: 10 de Abril de 2009, 15:11:09 »
ok muchas gracias por la informacion

Desconectado HEIMDAL13

  • PIC10
  • *
  • Mensajes: 26
Re: ayuda con MAX i Random
« Respuesta #3 en: 11 de Abril de 2009, 17:44:24 »
Hola de nuevo, he probado otro metoda para lograr una variable aleatoria del 1 al diez con las mismas posiblidades de cada una aqui esta el codigo: (no se si esta bien XD)

prueva1 var word
prueva2 var word
prueva3 var word
repetir var byte

prueva2 = 0

for repetir = 0 to 10 'repite el numero aleatorio 10 vezes
random prueva1 'escoje el numero aleatorio
if prueva1 > 32767 Then ' mira si el numero aleatorio creado es mas grande que la mitad
prueva2 = prueva2 + 1 'si lo es le suma 1 a prueva 2
endif 'si no lo es no pasa nada
next

for prueva3 = 0 to prueva2 ' repite el proseso de encender el led tantas vezes como a sido la suma total de los numeros aleatorios
high PORTB.0
pause 500
low PORTB.0
next

esta bien? falta algo?


 

anything