[ Foro de Pascal ]

No ingresar letras (duda)

04-Apr-2014 01:07
Invitado (wind)
3 Respuestas

Saludos.

Busco modificar el programa.
Problema:
Si ingreso un numero con dos decimales, el programa se cierra. (Porque actualmente mi programa, carece de lógica)
Si ingreso una letra o varias letras, el programa se cierra.
¿Qué modificación le harías al programa?

 
program Temperature;
var
F,C,R,K:real;
begin
(*Presentación del programa*)
writeln('Convertidor de temperatura');
writeln('Programa creado por wind.');
(*Captura de datos*)
write('Escribe la temperatura en grados celcius:');
readln(C);
F:=1.8*C+32;
R:=F+459.67;
K:=C+273.15;
writeln('La temperatura en grados Fahrenheit es:',F:2:2);
writeln('La temperatura en grados Rankine es:',R:2:2);
writeln('La temperatura en grados Kelvin es:',K:2:2);
readln;
end.
 



04-Apr-2014 01:58
Nacho Cabanes (+30)

Los números con dos decimales deberían funcionar.

Las letras, obviamente, no van a funcionar, si tu tipo de datos es "real". Si lo que pretendes es que el programa sea robusto, deberías pedir un "string", convertirlo a número usando "val", y volver a pedir (con un "repeat..until") en caso de que no se puede hallar ese valor numérico.


10-Apr-2014 22:22
Invitado (wind)

He estado investigando aquellos comandos que has mencionado.
También sirve el try,  except, para el manejo de errores.
Me gustaría ver algún día aquella información en el curso de pascal. (Try, Except)
Gracias por tus respuesta!
Saludos.


10-Apr-2014 23:51
Luis Torres (+12)

No necesitas usar try - except para validar tu programa, con la recomendación del profesor de leer datos en variables tipo cadena y luego convertirlos a números es suficiente. El procedimiento val(Cadena,Numero,Codigo_error) te permite realizar la conversión de una Cadena Numérica a un Número, la cadena deberá estar almacenada en la variable Cadena y el número se generará en la variable Numero, si todo se realizó sin ningún problema Codigo_error tomará el valor cero. Un ejemplo de su uso te lo dejo a continuación, el número estará almacenado en la variable Cr, o sea que, con Cr podrás realizar las operaciones de conversión a grados Farenheit, y no con la variabe C:

 
var 
   C: string[20];
   Cr: boolean;
   error: integer;
   valido: boolean;
Begin
   valido:= false;
   repeat
       write('Temperatura en Celcius: ');
       readln(C);
       val(C,Cr,error);
       if error<>0 then
         writeln('Usted ingreso un dato incorrecto.')
       else
         valido:= true; 
   until valido;
   readln;
End.
 


Saludos.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)