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.
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
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?
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
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:
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':
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..
gracias, lo hice tal cual, y si me salio ya lo de los rangos... mira quedo asi:
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.?
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:
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
es lo mismo... un bucle do...
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:
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:
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
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