Pascal/Turbo Pascal - Consulta sobre captura de errores en Pascal.

 
Vista:

Consulta sobre captura de errores en Pascal.

Publicado por Alejandro (1 intervención) el 27/07/2010 20:20:20
Tengo una consulta y necesito de alguien que me ayude u oriente en el tema errores...

Un ejemplo muy simple:

var
N : byte;

begin
readln(N);
write(n)
end.

Declaro una variable N del tipo byte, luego el programa me pide leer un numero para despues mostrarlo como indica el algoritmo... Ese numero que cargo en N no puede ser mayor a 255 por ser byte. Si ingreso por ejemplo 354 me tira un error runtime y cierra el programa.
Lo que quiero haceres: En caso de ingresar 354 me diga que el numero no es valido y vuelta a pedirme un numero... O, si agrego un caracter como la letra "E" me diga: "no se ingreso un numero" y me vuelva a pedirme el numero. Se entiende?

Existe algo que capture los errores y pueda actuar a mi gusto ante la presencia de uno?.. Por ejemplo, en el trabajo con archivos usando {$I-}, IOResult y {$I+}. IOResult captura los errores y puedo trabaja con ellos... Existe algo parecido a "IOResult" cuando ingreso un valor que excede un rango, o cuando ingreso una letra cuando me piden un numero?? y pueda actuar a mi gusto usando por ejemplo un if Error = 201then.....

muchas gracias!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Consulta sobre captura de errores en Pascal.

Publicado por micropais (209 intervenciones) el 17/08/2010 12:36:11
readln(X); donde x sea un longint por ejemplo , luego compuebas que no sea
mayor de 255 y lo igualas a N , es lo mas sencillo que se me ocurre .

otra que deberás investigar
con {$R-} read(N); {$R+} evitas la comprobacion de rango pero tambien la recogida de datos , que será cero en caso de fallo , no podras diferenciar
un fallo del byte 0 ,

hay mas opciones , mas complicadas claro , entre ellas pasa por recoger los datos en un array de cracteres y comprobar limites y tranformar .
- otra, uso de la funcion val , esta pose la variable error en caso de fallo
- otra , captura de la pulsaciones del teclado y recogida antes y de asignar dato

seguro que hay mas ... , si estas estudiando pascal seguro que os han dado material para hacer lo que pides , compruebalo .
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Consulta sobre captura de errores en Pascal.

Publicado por Willy De León (177 intervenciones) el 17/08/2010 21:17:17
readln(X); donde x sea un longint por ejemplo , luego compuebas que no sea
mayor de 255 y lo igualas a N , hmmm.. ¿Y si el usuario teclea: 'hola'?

Corrí el programa para encontrar posibles soluciones y busqué las directivas en la ayuda pero no encontré nada.

La directiva {$R+} solo te dice en el editor: Error: 201 "Range check error", además creo que por defecto siempre es {$R-} o sea desactivada la comprobación de rango por que ralentiza el programa, debe usarse solo para depurar según leí.

El problema real es que tampoco puedes recoger los datos en un array de cracteres y comprobar limites y tranformar porque si el usuario teclea por ejemplo: '14.2' nos fletamos.

La única forma que me parece atinada es una de las que mensionó micropais:
"captura de la pulsaciones del teclado y recogida antes"

A mi se me ocurrió esto:
-------------------------------------------------------------------------------

var
Teclazo : char;
cadena: string;

begin

Cadena := ''; {Inicializamos a cadena nula}
writeln('ingrese numero menor a 256');

repeat

if keypressed then
begin
Teclazo := ReadKey;
Cadena := Cadena + Teclazo;{Asi cada teclazo se suma a la cadena}
end; {if key..}

until Teclazo = char(13); {char(13) es la tecla Enter}

Writeln(Cadena);
-----------------------------------------------------------------------------------

Luego tendrías que procesar la cadena. Para comenzar realiza un algoritmo para que el usuario no pueda "teclear" más de 3 teclas en su entrada, así te facilitas el procesamiento de tu cadena.

Utiliza la función val que transforma un valor de cadena en su representación numérica para convertir la cadena a números.

Y si el usuario teclea 'hola' pues con solo el hecho de haber presionado 4 teclas se le deniega la entrada, si teclea 'wow' ya te las arreglarás jeje.

Deseo que tengas suerte en la solución de tu programa.
Saludos de Willy.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar