Ejemplo Con Sumas


Objetivo: Ejemplo Con Sumas
Hola!.

Creando un ejemplo con Python, decidí hacerlo con Gambas.
Con gambas como conozco como va DateDiff no he tenido muchos problemas, con Python aun tengo
que enterarme mejor como va el modulo adecuado para esto.

El ejemplo consiste, en que el usuario debe resolver una suma ( esta vez ).
El usuario da un número de cifras para sumar dos números con el mismo numero de cifras y debe acertar la suma al azar que se
ha generado de estos dos números.

Si acierta, se le mostrara el tiempo que ha tardado en minutos y segundos.

Ejemplo de la salida de la consola:

Citar:

¿ Número de cifras ?
58 + 51 = ...
Muy bien!
Ha tardado 0 minutos y 5 segundos en responder.


Este es el código:

' gambas module file

Public Sub Main()

Dim numcifras As Integer

Randomize

Print "¿ Número de cifras ?"
Input numcifras

SumaAleatoria(numcifras)


End



Public Function GeneraNumero(numcifras As Integer) As Integer ''Genera un número de n cifras

Dim numero As String
Dim i, cifra As Integer

For i = 1 To numcifras
'No queremos que el número de la izquierda sea un 0
If i = 1 Then
cifra = Rand(1, 9)
Else
cifra = Rand(0, 9)
Endif
numero &= Str(cifra)
Next
Return numero

End

Public Sub SumaAleatoria(ncifras As Integer) ''Crea una suma aleatoria de dos números de n cifras

Dim sentrada As String
Dim ia, ib, isuma As Integer
Dim tiempo As Integer[]
Dim DHoraInicio, DHoraActual As Date

ia = GeneraNumero(ncifras)
ib = GeneraNumero(ncifras)

DHoraInicio = Time(Now)
While Not IsDigit(sentrada)
Print Subst("&{1} + &{2} = ...", ia, ib)
Input sentrada
Wend
isuma = ia + ib
If CInt(sentrada) = isuma Then
Print "Muy bien!"
DHoraActual = Time(Now)
tiempo = Ams(Abs(DateDiff(DHoraActual, DHoraInicio, gb.Second)))
Print Subst$("Ha tardado &{1} minutos y &{2} segundos en responder.", tiempo[0], tiempo[1])
Else
Print Subst("Incorrecto, la respuesta era &{1}", isuma)
Endif

End

Public Function Ams(s As Integer) As Integer[] ''Convierte de segundos a minutos y segundos
Dim minutos As Integer
Dim segundos As Integer

minutos = s \ 60
segundos = s Mod 60

Return [minutos, segundos]

End


Y aquí el código para bajarlo y probarlo.
Por ahora solo hace sumas. Mi idea es mejorarlo y que haga todas las operaciones, llevar un record, tener distintos usuarios..formularios...uuuuu.
Y sera muy simple..como proyecto para empezar no estaría mal, luego aplicar una base de datos...jugando se aprende.

Saludos


TestDeSumas.tar.gz
Descripción:  
Descargar
Nombre del archivo: TestDeSumas.tar.gz
Tamaño: 5.86 KB
Descargado: 39 veces
TestDeSumas.tar.gz
Descripción:  
Descargar
Nombre del archivo: TestDeSumas.tar.gz
Tamaño: 5.86 KB
Descargado: 39 veces
TestDeSumas.tar.gz
Descripción:  
Descargar
Nombre del archivo: TestDeSumas.tar.gz
Tamaño: 5.86 KB
Descargado: 39 veces

Objetivo: Re: Ejemplo Con Sumas
Primer problema encontrado:

Si los números devueltos son muy grandes, se debe aumentar la precisión del número y cambiar de entero a largo entero. ( es así como se dice, creo )
Si probáis a entrar un número de 10 cifras veréis que falla.

Cambiando estas dos funciones a esto:

ublic Function GeneraNumero(numcifras As Integer) As Long ''Genera un número de n cifras

Dim numero As String
Dim i, cifra As Integer

For i = 1 To numcifras
'No queremos que el número de la izquierda sea un 0
If i = 1 Then
cifra = Rand(1, 9)
Else
cifra = Rand(0, 9)
Endif
numero &= Str(cifra)
Next
Return CLong(numero)

End

Public Sub SumaAleatoria(ncifras As Integer) ''Crea una suma aleatoria de dos números de n cifras

Dim sentrada As String
Dim ia, ib, isuma As Long
Dim tiempo As Long[]
Dim DHoraInicio, DHoraActual As Date

ia = GeneraNumero(ncifras)
ib = GeneraNumero(ncifras)

DHoraInicio = Time(Now)
While Not IsDigit(sentrada)
Print Subst("&{1} + &{2} = ...", ia, ib)
Input sentrada
Wend
isuma = ia + ib
If CInt(sentrada) = isuma Then
Print "Muy bien!"
DHoraActual = Time(Now)
tiempo = Ams(Abs(DateDiff(DHoraActual, DHoraInicio, gb.Second)))
Print Subst$("Ha tardado &{1} minutos y &{2} segundos en responder.", tiempo[0], tiempo[1])
Else
Print Subst("Incorrecto, la respuesta era &{1}", isuma)
Endif

End


No me había fijado que en la función que genera el número de x cifras devolvía una cadena, cuando en la función le estaba diciendo que devolvía un entero.
Hacía la conversión automáticamente.

Saludos


Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.5656s (PHP: -73% SQL: 173%)
Consultas SQL: 47 - Debug off - GZIP Activado