Título: Una ayuda simple (visual basic, 2017) Publicado por: DSREY 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 Título: Re: Una ayuda simple (visual basic, 2017) Publicado por: Serapis 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?
Título: Re: Una ayuda simple (visual basic, 2017) Publicado por: DSREY 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 Título: Re: Una ayuda simple (visual basic, 2017) Publicado por: Serapis 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.. Título: Re: Una ayuda simple (visual basic, 2017) Publicado por: DSREY 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 Título: Re: Una ayuda simple (visual basic, 2017) Publicado por: Serapis 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 Título: Re: Una ayuda simple (visual basic, 2017) Publicado por: DSREY 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 |