elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Una ayuda simple (visual basic, 2017)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Una ayuda simple (visual basic, 2017)  (Leído 4,311 veces)
DSREY

Desconectado Desconectado

Mensajes: 28


Ver Perfil
Una ayuda simple (visual basic, 2017)
« en: 15 Agosto 2017, 01:19 am »

hola, lo que pasa es q me enviaron a hacer un algoritmo donde llame por un sub proceso a la fecha, y ponerle rangos a la fecha, se q hay una variable q se llama "DATE" y con eso ya se pone el formato fecha y ademas ya tiene los rangos establecidos, pero aca la tarea es hacerlo con "integer" el proposito es q me de cuenta como funcionan los rangos, para otros usos. en fin eh diseñado aqui el algoritmo para llamar a la fecha, pero no se como colocarle los rangos, si me pueden guiar un poco en esto se los agradeceria, y si tienen alguna idea para q se vea mas estetico mi algoritmo o la presentacion agradeceria cualquier idea, aprendo de todo lo que practico.

Código:
Imports System.Console
Module Module1

    Sub Main()
        FechaRangos()


        ReadLine()
    End Sub
    Sub FechaRangos()
        Dim dia, mes, año As Integer

        WriteLine("ingrese la fecha")
        WriteLine("Dia:")
        dia = ReadLine()
        'Necesito que almacene el dia, solo si se coloca un numero entre 1 y 31

        WriteLine("Mes:")
        mes = ReadLine()
        'Necesito que almacene el mes, solo si se coloca un numero entre 1 y 12

        WriteLine("Año")
        año = ReadLine()
        'Necesito que almacene el año, solo si se coloca un numero mayor a 1800 y menor a 2020

        WriteLine("|dia|mes|año|")

        WriteLine("{0}-{1}-{2}", dia, mes, año)

    End Sub

End Module


En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Una ayuda simple (visual basic, 2017)
« Respuesta #1 en: 15 Agosto 2017, 02:24 am »

Piensa un poco... Cómo lo resolverías de 'forma humana'?. Supongamos que me pides el año y yo te doy por respuesta: 1518 ... qué harías tú, para asegurarte que te dé un valor en el rango 1800-2020?


En línea

DSREY

Desconectado Desconectado

Mensajes: 28


Ver Perfil
Re: Una ayuda simple (visual basic, 2017)
« Respuesta #2 en: 15 Agosto 2017, 02:29 am »

bueno estuve pensando como hacer lo de los rangos y se me ocurre algo como

año  = readline() si año >1800 y año <2020, caso contrario (preguntar año nuevamente)
 
el problema es q nose como plantear eso en el algoritmo

y bueno claro previamente ingresar un mensaje q diga solo puede ingresar años entre 1800 y 2020, y ademas luego de eso tengo q aumentar try and catch para q me envie el mensaje de la falla en lo q ingrese
« Última modificación: 15 Agosto 2017, 02:32 am por DSREY » En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Una ayuda simple (visual basic, 2017)
« Respuesta #3 en: 15 Agosto 2017, 04:17 am »

Bien. Ves com te has respondido tú mismo?.

Efectivamente si lo piensas... al yo darte respuesta, tu deber es comprobarla, y si yo te doy una fecha errada, tu deber es indicarme que un mensaje 'no es correcto, proporciones un valor en el rango x-y y volverme a pedir de nuevo el dato... y repetir hasta que 'aborte' o dé un valor correcto. (el problema de las consolas, cuando se dispone de interfaz de usuario, se pone un control y los valores mínimo y maximo ajustan el rango, entonces no hay posibilidad de salirse del rango).

Entonces del pensamiento, de la idea, pasamos al pseudocódigo:

Código:
Hacer
    Pedir entrada 'x' con el mensaje 'm'
    Comprobar si 'x' está en el rango
Repetir mientras x fuera de rango

Ese pseudocódigo, representa la idea, y es breve porque es 'genérico', pero se puede expandir, desde el momento en que conocemos ciertos detalles, y podemos hacerlo más 'específico':

Código:
buleano EnRango = FALSE //declaración de una variable...
Hacer
    Pedir 'año' al usuario con el mensaje "Ingrese un año entre los límites: 1800 y 2020 (ambos incluído)"
    Si ((año mayor o igual que 1800) y (año es igual o menor que 2020)) luego
        EnRango = TRUE
    Fin si
Repetir mientras (EnRango=FALSE)

...y esto debieras tu ya poder traducirlo a algo más específco como es el lenguaje que quieras usar...
No hay nada complejo, un bucle do...while, entrada de datos, condicional y comparación matemática...

p.d.: dejemos de lado la posibilidad de que el usuario aborte, se trata de un simple ejercicio..
En línea

DSREY

Desconectado Desconectado

Mensajes: 28


Ver Perfil
Re: Una ayuda simple (visual basic, 2017)
« Respuesta #4 en: 15 Agosto 2017, 05:49 am »

gracias, lo hice tal cual, y si me salio ya lo de los rangos... mira quedo asi:

Código:
Imports System.Console

Module Module1

    Sub Main()
        rangos()

        ReadLine()
    End Sub
    Sub rangos()
        Dim dia, mes, año As Integer
        Dim rango As Boolean = False

        Try
            WriteLine("ingrese la fecha")
            Do
                WriteLine("Dia:")

                dia = ReadLine()
                If dia >= 1 And dia < 32 Then
                    rango = True

                Else
                    WriteLine("'Ingrese un dia entre el rango: 1 - 31'")
                End If
            Loop While rango = False
            Do
                WriteLine("Mes:")
                mes = ReadLine()
                If mes >= 1 And mes < 13 Then
                    rango = False

                Else
                    WriteLine("'Ingrese un mes entre el rango: 1 - 12'")
                End If
            Loop While rango = True

            Do
                WriteLine("Año")
                año = ReadLine()
                If año >= 1800 And año < 2020 Then
                    rango = True

                Else
                    WriteLine("'Ingrese un año entre el rango: 1800 - 2020'")
                End If
            Loop While rango = False
        Catch e As Exception
            WriteLine(e.Message)
        End Try

        WriteLine("|dia|mes|año|")

        WriteLine("{0}-{1}-{2}", dia, mes, año)

    End Sub

End Module


ahora tengo otra duda...
como vez utilice un try y catch para ver el mesaje de error cuando en lugar de ingresar un numero ingresan una letra, y bueno cuando eso pasa no se cierra la ejecucion pero si la lleva al final,

la pregunta es:

como hago para q cuando ingresen una letra en lugar de un numero me bote el mesaje de error al ingresar letra en lugar de numero (eso ya esta) y ademas se pueda volver a repetir la accion.?

Código:
ingrese la fecha
Dia:
r
La conversión de la cadena "r" en el tipo 'Integer' no es válida.
|dia|mes|año|
0-0-0

asi es como sale ahorita,
pero en lugar de llevarme al final q me permita volver a ingresar los datos del dia o mes o año, en donde haya el error...
xq sino corre asi:
Código:
ingrese la fecha
Dia:
21
Mes:
14
'Ingrese un mes entre el rango: 1 - 12'
Mes:
12
Año
r
La conversión de la cadena "r" en el tipo 'Integer' no es válida.
|dia|mes|año|
21-12-0
« Última modificación: 15 Agosto 2017, 05:59 am por DSREY » En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Una ayuda simple (visual basic, 2017)
« Respuesta #5 en: 15 Agosto 2017, 06:31 am »

es lo mismo... un bucle do...


Código:
Cazado = FALSE
Hacer
   Intentar
       EnRango = FALSE
       Hacer
          ... dia ' Hacemos la idea de que esta línea representa el ´codigo para el día
        Repetir mientras EnRango = FALSE       
 
       Cazado = TRUE
   Cazar error
       Mensaje "Escriba solo números 'porfaplis'..."
   Final intento
Repetir mientras Cazado = FALSE

Esto solo para el día, haz lo mismo para mes y lo mismo para año, si quieres generar un solo bucle para todos, crea una función para devolver el valor correcto en el rango:



Código:
Entero = Funcion PedirValorEnRango(Maximo, minimo, MensajeRango, MensajeError) 
    Intentar
          EnRango=FALSE
          Hacer
              Pedir valor
              si (Valor >=Minimo) y (valor <=Maximo) luego
                   EnRango=TRUE
              Sino
                   Mostrar MensajeRango
              Fin si
          Repetir mientras EnRango=False
          Devolver Valor
    Cazar Error
         Mostrar MensajeError
         Devolver -1
   Final intento
Fin Funcion

Y esta función se llamaríamás simple desde un código similar a:
Código:
    Hacer
        Dia = PedirValorEnRango(1,31, "Números delmes entre 1 y 31", "Por favor solo números, no letras ni palabras.")
    Repetir mientras Dia = -1

    Hacer
        Mes = PedirValorEnRango(1,12, "Mes debe ser un número entre 1 y 12", "Por favor solo números, no letras ni palabras.")
    Repetir mientras Mes = -1

    Hacer
        Año = PedirValorEnRango(1800,2020, "Año debe ser entre 2800 y 2020", "Por favor solo números, no letras ni palabras.")
    Repetir mientras Año = -1

    Mostrar día, mes y año
       
 
En línea

DSREY

Desconectado Desconectado

Mensajes: 28


Ver Perfil
Re: Una ayuda simple (visual basic, 2017)
« Respuesta #6 en: 16 Agosto 2017, 05:29 am »

Gracias NEBIRE,

Todo  esto ha sido de mucha utilidad... tengo examen de programacion en dos semanas asi q me estoy alistando para la prueba xq mi profesor siempre nos plantea ejercicios de cosas q no ha explicado... como por ejemplo esto del "do" "loop while" anidado con boolean true-false
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines