[ Foro de Pascal ]

[Duda]Definicion de tipos, ¿Porque falla el programa?

11-Oct-2009 03:14
Pedro Pérez
2 Respuestas

Hola, tengo un programa que tengo que hacer para clase, y resulta que al definir los tipos para una variable de esta manera:

type
fecha = record
dia : 1..31;
mes : 1..12;
ano : 1..9999;
end;
jugad = record
dorsal : 1..25;
canast : smallint;
altura : real;
asistn : smallint;
rebots : smallint;
valorj : smallint;
end;
infequip = record
nombre : string;
fundac : fecha;
puesto : smallint;
ptsmed : real;
copary : char;
jugads : array [1..2] of jugad;
end;
arrequip = array [1..2] of infequip;
var
equipos: arrequip;

los records no almacenan los datos correctamente, es decir, si hago " readln (equipos[1].fundac.dia);" y pongo un número superior al 31, me lo guarda igualmente y el programa no falla. Espero que podais resolver este gran problema mio, muchas gracias. ^^


18-Oct-2009 18:48
Nacho Cabanes (+83)

No es que el programa falle, sino que se comporta "de forma normal": la mayoría de compiladores no comprueba en tiempo real que los datos que introducen tengan valores adecuados, especialmente en algunos tipos de datos "avanzados" como los subrangos.

De modo que el usar subrangos como 1..31 hace tu programa más legible, pero no te garantiza que se provoque un error en tiempo de ejecución si introduces el valor 32.

Algunos compiladores permiten que indiques opciones para que se genere el código de las comprobaciones valores fuera de rango, pero... por una parte quizá funcione en tipos nativos, como "byte" y no en subrangos... y por otra parte, no es bueno que generes errores en tiempo de ejecución, sino que deberías ser tú quien lo filtrara (con un "if" o un "repeat") para dar un aviso "amigable" al usuario y permitirle volver a introducir el valor.


19-Oct-2009 10:41
Pedro Pérez

Muchas gracias por su respuesta ^^, la razón para crear un error en tiempo de ejecucion era que en clase no nos dejaban usar otro tipo de sentencias que permitieran corregir ese error, Sin embargo, me preocupaba más que no lo diera. Muchas gracias por su tiempo y su curso, es excelente ^^.






(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.)