lunes, 23 de julio de 2012

Números aleatorios


Dependiendo de nuestra aplicación usaremos los números aleatorios.
Números al azar, para los juegos, para una aplicación de calculo,estadística

Los llamamos números aleatorios, pero no existen como tales en Gambas,
el nombre mas adecuado es pseudo-aleatorio. Llega un momento que
se pueden repetir, entonces dejan de ser tan aleatorios.

Tenemos dos funciones principales para el manejo de estos números.

  • Randomize
  • Rnd

Randomize:

Randomize inicia el generador de números pseudo-aleatorios.
Podemos darles un número a esta función.

Randomize Numero Entero

Con lo que generación de los números siempre serian iguales. Se repetirían
O dejarlo sin el valor, lo que lo hace diferente en cada generación.

Randomize

Solemos usar la función Randomize solamente una vez en la aplicación.
Al inicio en Form_Open() por ejemplo.

Rnd:

De por si sola, la función nos devuelve un número decimal 0 y 1.

Ejemplo:

---código---
Public Sub Form_Open()
   Dim x As Integer

   Randomize
  'Generar 5 números decimales entre 0 y 1
   For x = 1 To 5
       Print Rnd
   Next
End
---código---

Si nosotros hubiésemos asignado el resultado de la función RND a un número entero.
Estaríamos diciendo que la salida va ser del tipo entero. Estamos creando
unas propiedades para la variable de salida y lo más normal que su
valor hubiera sido siempre 0.Al decir que el tipo es entero.

Ahora bien, la función RND permite la generación de un número dentro de un intervalo.

RND(mínimo,máximo)

Cuando decimos

---código---

PRINT RND(1,10) 'Entre 1 y 9

--código---

Le decimos realmente que el número generado es entre 1 y 9. Así que si queremos
que el número generado este realmente entre 1 y 10 debemos usar

---código---

PRINT RND(1,11) 'Entre 1 y 10

--código---

Para la generación de números enteros debemos hacer uso de la función INT.
Comprobar la diferencia a no usar la función INT a usarla.

---código---

PRINT RND(1,11) 'Número decimal

PRINT INT (RND(1,11)) 'Número entero

---código---

El caso más típico de la generación de un dado de 6 caras.

---código---
Public Sub Form_Open()
   Dim x As Integer
 
   Randomize
   For x = 1 To 6
      Print Int(Rnd(1, 7))
   Next
End
---código---

Ejemplo de la tirada de un dado con imágenes



---código---
' Gambas class file

Private dado As PictureBox 'Definimos un objeto del tipo PictureBox

Public Sub _new()
End

Public Sub Form_Open()
   Me.Title = "DADO"
   Me.Center
End

Public Sub BtnDado_Click()

dado = New PictureBox(Me) 'Creamos el objeto picturebox que contendrá la imagen del dado

'Damos propiedades al objeto dado
With dado
   .x = 56
   .y = 24
   .Height = 64
   .Width = 64
   .Stretch = True
   .Border = Border.Sunken
   .Picture = Picture[muestradados() & ".gif"]
End With
End

Public Function muestradados() As Integer

Dim i As Integer
Dim cara As Integer
'Estamos generando 6 veces el dado. Para que el dado cambie su imagen
'Si este número se repite no percibimos el cambio de cara
   For i = 1 To 6
      cara = Int(Rnd(0, 6))
      dado.Picture = Picture[cara & ".gif"]
      Wait 0.3 'Añadimos un retardo para percibir ese cambio de cara del dado
  Next
  Return cara

End
---código---


Mas información en:


No hay comentarios:

Publicar un comentario