Autor
|
Tema: Una ayuda simple (visual basic, 2017) (Leído 4,311 veces)
|
DSREY
Desconectado
Mensajes: 28
|
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
|
|
|
En línea
|
|
|
|
Serapis
|
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
Mensajes: 28
|
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
|
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..
|
|
|
En línea
|
|
|
|
DSREY
Desconectado
Mensajes: 28
|
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
|
|
« Última modificación: 15 Agosto 2017, 05:59 am por DSREY »
|
En línea
|
|
|
|
Serapis
|
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
|
|
|
En línea
|
|
|
|
DSREY
Desconectado
Mensajes: 28
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ayuda Simple.. Visual Basic.
Programación Visual Basic
|
SpRiTeR
|
5
|
2,022
|
4 Abril 2006, 16:28 pm
por Cicklow
|
|
|
Ayuda en BASIC... no visual basic
Ejercicios
|
mike_soto
|
3
|
5,186
|
19 Junio 2007, 23:40 pm
por mike_soto
|
|
|
Ejemplo de Virus algo simple en visual basic... (a quien le interesa)
« 1 2 »
Programación Visual Basic
|
_alexander
|
19
|
6,939
|
11 Enero 2008, 22:52 pm
por Mad Antrax
|
|
|
[Ayuda] Sniffer en visual basic, para visual basic
Programación Visual Basic
|
The_Shakah
|
8
|
10,632
|
18 Agosto 2010, 19:35 pm
por _katze_
|
|
|
Formulario en excel con visual basic 2017 para profesores
Dudas Generales
|
danielg26
|
1
|
2,397
|
26 Abril 2017, 15:25 pm
por PalitroqueZ
|
|