Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Ejemplo Con Sumas
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje 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

 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Ejemplo De Estructura Shell General 2 Jueves, 20 Junio 2013, 14:47 Ver último mensaje
jguardon
No hay nuevos mensajes Ejemplo Con Enum Shell General 4 Martes, 09 Junio 2015, 08:10 Ver último mensaje
Shell
No hay nuevos mensajes Ejemplo Con Dos Timers Shell General 5 Martes, 09 Febrero 2016, 00:28 Ver último mensaje
Shell
No hay nuevos mensajes Ejemplo De Red Neuronal jsbsan Aplicaciones/Fragmentos de Código 4 Lunes, 27 Febrero 2017, 20:44 Ver último mensaje
tincho
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
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



  

 

cron