[ Foro de Pascal ]

lectura de variable tipo

07-Feb-2014 21:13
oscar gomez
3 Respuestas

Buenas noches  profesor  Nacho Cabanes .
Quería preguntarte acerca de un ejercicio que se me ocurrió hacer esta noche de viernes como jobi y me encontré con algo que desconozco en parte y quería preguntarte como podría hacer para que parte de mi programa funcione, pues me sale un error y no se como solucionarlo , si puedes echarme  una mano te lo agradeceria .
la cuestion es:


program LecturaVarTipo;
type
      tDetalles=(detUno,detDos,detTres);
      tReferencias=(refUno,refDos,refTres,refCuatro);
     tAlmacen=record
      pu:real;
      c:integer;
    end;

var
alm:tAlmacen;
det:tDetalles;
ref:tReferencias;

begin
  for det:=detUno to detTres do
   for ref:=refUno to refCuatro do
     begin
       writeln('digite el precio para : ' , det, ' y referencia:' , ref);
      read(alm.pu);
      ...


bien en este punto exactamente en el writeln , me envía un mensaje de error en compilación que me dice que no se puede leer o escribir variables de este tipo, me gustaría por favor me explicaras que es lo que esta pasando y cual es la forma de solucionar mi intencion ?

una vez mas gracias por tu atencion , tu tiempo y tu excelente ayuda.


07-Feb-2014 22:33
Invitado (Anonimo)

No se puede leer ni escribir en tipos de datos enumerados. Solo se puede asignar valores. Además, estás utilizando éstos valores como subíndices de un arreglo (cosa que está bien), pero a la vez quieres asignarle valores, eso sería más o menos como utilizar las variables "i" o "j" como subíndices de ciclos for y pretender usarlos para almacenar otro valores.
Yo creo que usted quiso almacenar los valores en una varible del tipo "tAmacen", pero se confundió.


08-Feb-2014 10:48
oscar gomez

hola anonimo, efectivamente he leido que no se pueden leer ni escribir en tipos de datos enumerados, pero no se si quiza a traves de alguna funcion se pudiera lograr y es la ayuda que me gustaria el profesor nacho me brindara.
respecto a lo que dices:"éstos valores como subíndices de un arreglo (cosa que está bien), pero a la vez quieres asignarle valores, eso sería más o menos como utilizar las variables "i" o "j" como subíndices de ciclos for y pretender usarlos para almacenar otro valores. "

bueno no es que quiera asignarles valores solo intento hacer una similitud ya que hablas de los indices i, j normales, lo siguiente:

cuando uno hace a veces:


for i:=1 to no do
write(' escriba el elemento ',i, ':');
 readln(A[i]);


como ves utilizamos el indice para escribir en pantalla informacion al usuario, mas no para alterar el valor del indice, pues de igual forma es lo que intento hacer con :


begin 
 for det:=detUno to detTres do 
  for ref:=refUno to refCuatro do 
    begin 
      writeln('digite el precio para : ' , det, ' y referencia:' , ref); 
     read(alm.pu); 


ojala puedan ayudarme , por que debe haber alguna forma de poderlo hacer, gracias anonimo y ojala el profesor nacho en su experiencia pueda ayudarme.gracias


08-Feb-2014 12:55
Nacho Cabanes (+83)

Los tipos enumerados son buenos para hacer el programa más legible, pero no tanto para la interfaz con el usuario. Del usuario podrás leer textos y números. Si quieres hacer que eso equivalga a un tipo enumerado, generalmente tendrás que hacerlo de forma manual, con "if" o "case":


var
    respuesta: string:
...
readLn(respuesta);
if respuesta = '1' then alm.pu := refUno 
else ...







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