jueves, 27 de noviembre de 2008

PRÁCTICA - Números Aleatorios

1.- Hacer un programa que genere un número entre 1 y 100 e intentar adivinarlo. Si el número que se le da es mayor o menor, que el VB avise y si se acierta que lo comunique y finalice el programa.

Para que el VB Comunique

Para preguntarle el número y guardarlo en la variable N:

      N = Val(InputBox(“Escribe un número entre 1 y 100”))

El InputBox muestra una pantalla preguntando y devuelve lo que se escriba o una cadena vacía si se pulsa en cancelar. El Val convierte esta cadena en un número.
Para avisar que el número N introducido es menor o mayor:

       MsgBox “El número “ &CStr(N) & “es xxxx” 

Option Explicit
Private Sub Form_Load()
Dim n As Integer
Dim x As Integer

Randomize Timer
x = Int(Rnd * 100) + 1
Do
n = Val(InputBox$("Escribe un numero del 1 al 100"))
If n = x Then Exit Do
If n < x Then
MsgBox "El número " & CStr(n) & " es menor"
Else
MsgBox "El número " & CStr(n) & " es mayor"
End If
Loop
MsgBox "Lo has acertado"
End Sub
2.- Comprobar que el número introducido en el InputBox esté entre 1 y 100, en caso de que no sea así, volver a preguntar:

Option Explicit
Private Sub Form_Load()
Dim n As Integer
Dim x As Integer

Randomize Timer
x = Int(Rnd * 100) + 1
Do
Do
n = Val(InputBox$("Escribe un numero del 1 al 100"))
Loop While n < 1 Or n > 100
If n = x Then Exit Do
If n < x Then
MsgBox "El número " & CStr(n) & " es menor"
Else
MsgBox "El número " & CStr(n) & " es mayor"
End If
Loop
MsgBox "Lo has acertado"
End Sub
3.- Si se escribe CERO mostrar el número que el VB había “pensado” y terminar
Option Explicit
Private Sub Form_Load()
Dim n As Integer
Dim x As Integer

Randomize Timer
x = Int(Rnd * 100) + 1
Do
Do
n = Val(InputBox$("Escribe un numero del 1 al 100"))
If n = 0 Then
MsgBox "Mi número era el " & CStr(x)
Unload Me
End If
Loop While n < 1 Or n > 100
If n = x Then Exit Do
If n < x Then
MsgBox "El número " & CStr(n) & " es menor"
Else
MsgBox "El número " & CStr(n) & " es mayor"
End If
Loop
MsgBox "Lo has acertado"
End Sub
4.- Cuando se acierte el número indicar en cuantos aciertos se ha conseguido:
Option Explicit
Private Sub Form_Load()
Dim n As Integer
Dim x As Integer
Dim v As Integer

Randomize Timer
x = Int(Rnd * 100) + 1
Do
Do
n = Val(InputBox$("Escribe un numero del 1 al 100"))
If n = 0 Then
MsgBox "Mi número era el " & CStr(x)
Unload Me
End If
Loop While n < 1 Or n > 100
v = v + 1
If n = x Then Exit Do
If n < x Then
MsgBox "El número " & CStr(n) & " es menor"
Else
MsgBox "El número " & CStr(n) & " es mayor"
End If
Loop
MsgBox "Lo has acertado en " & CStr(v) & " veces"
End Sub
5.- Ahora al revés, es decir: que el usuario piense el número del 1 al 100 y el VB intente adivinarlo, para ello deberá mostrar un número y el usuario indicarle si lo ha acertado:
Option Explicit
Private Sub Form_Load()
Dim x As Integer
Dim v As Integer

Randomize Timer
Do
x = Int(Rnd * 100) + 1
v = v + 1
If MsgBox("Mi número es: " & CStr(x) & Chr$(13) & "¿He acertado", 4) = 6 Then
MsgBox "Lo he acertado en " & CStr(v) & " veces"
Exit Do
End If
Loop
End Sub
6.- Otro igual pero indicándole si el numero pensado por el usuario es Menor, Mayor o es Correcto…. habrá que darle las mismas oportunidades (este es el que tiene el truco del divide y vencerás….
Private Sub Form_Load()
Dim x As Integer
Dim v As Integer
Dim a As Integer
Dim z As Integer

a = 1
z = 100
' En este caso no se necesitan numeros aleatorios
Do
x = (z - a) / 2 + a
v = v + 1
If MsgBox("Mi número es: " & CStr(x) & Chr$(13) & "¿He acertado?", 4) = 6 Then
MsgBox "Lo he acertado en " & CStr(v) & " veces"
Exit Do
Else
If MsgBox("Entonces.... ¿ " & CStr(x) & " es mayor?", 4) = 6 Then
'El número del computador es mayor
'debe estar entre x-1 y a
z = x - 1
Else
'El número del computador es menor
'debe estar entre x+1 y z
a = x + 1
End If
End If
Loop

End Sub


No hay comentarios: