• Lunes 29 de Abril de 2024, 06:57

Autor Tema:  Problemas Con Una Practica  (Leído 3386 veces)

eb8cxw

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Problemas Con Una Practica
« en: Jueves 5 de Mayo de 2005, 17:32 »
0
Hola a tod@s:

Soy estudiante de 1º de Ingenería Técnica de Informática de Gestión, y en la asignatura de Estructura de Datos I, tengo que hacer una práctica, de Listas Secuenciales y tengo problemas ya que lo que he hecho a copilarlo me da errores, les adjunto los ficheros de especificaciones y de imprementación, por si me pueden ayudar a encontrar los fallos, Bueno no se si es demasiado lo que estoy pediendo, si es así pido disculpas por ello, pero es que estoy desesperado debo entregar la practica el día 15 y solo he realizado la mitad, y esa mitad me da errores. Os doy la gracias de antemano.

Perdona parece que solo puedo adjuntar un fichero, por lo que les pongo a continuación el código de las especificaciones (fichero: listas_Secuenciales.ads) y les adjunto el de la imprementación (fichero: listas_Secuenciales.adb):

Código: Text
  1.  
  2.  
  3. generic
  4.  
  5.   type ElementoLista is private;
  6.   with function "="(ELista1 , ELista2: ElementoLista) return Boolean&#59;
  7.  
  8. package Listas_Secuenciales is
  9.  
  10.    -- Tipo Lista: Asignable (:=) y comparable (=, /=). Representa un
  11.    -- contenedor (lista secuencial) limitado en tamaño cuyo
  12.    -- contenido serán elementos no repetidos del tipo del
  13.    -- parámetro genérico del paquete. Se implementará como un
  14.    -- record variante con un parámetro de tipo Positive que
  15.    -- servirá para establecer el tamaño máximo de la lista.  
  16.    type Lista(TamañoMaximo: Positive) is private;    
  17.  
  18.    Error_Repetido: exception;  --| Se utilizará para señalar que se intenta insertar un
  19.                     -- elemento que ya está en la lista, para el caso en que se
  20.                  -- quiera sustituir.
  21.  
  22.  
  23.   procedure Insertar(Lis: in out Lista; ELista: in ElementoLista&#59; NoExiste: in Boolean)&#59;
  24.   -- El procedimiento Insertar, inserta el elemento indicado por el
  25.   -- segundo parámetro en la lista indicada por el primero. Si el
  26.   -- elemento a insertar ya se encuentra en la lista, lo sustituirá
  27.   -- por el nuevo si el tercer parámetro tiene el valor True o lanzará
  28.   -- la excepción Error_Repetido si tiene el valor False. Los elementos
  29.    -- en la lista estarán organizados secuencialmente según el orden de llegada,
  30.     -- salvo en caso de sustitución que se mantiene la posición original. El
  31.     -- elemento recién insertado se convierte en el actual a efectos de acceso. Si,
  32.     -- cuando se intenta insertar, la lista está llena, se lanza la excepción
  33.   -- predefinida Constraint_Error y la lista queda como estaba.
  34.  
  35.   procedure Inicio(Lis: in out Lista);  --|
  36.   -- El procedimiento Inicial, designa como actual al elemento
  37.   -- más antiguo de la lista. Si la lista está vacía el actual
  38.   -- queda indefinido.
  39.  
  40.   procedure Siguiente(Lis: in out Lista)&#59;                                  
  41.   -- El procedimiento Siguiente, prepara la lista para
  42.   -- acceder al elemento siguiente al actual, según el
  43.   -- orden secuencial de la misma. Si actual ya está
  44.   -- en el último elemento, queda indefinido. Si la
  45.   -- lista está vacía o el actual está indefinido, actual
  46.   -- queda indefinido.
  47.  
  48.   function Examinar(Lis: in Lista)return Lista&#59;                                  
  49.     -- la Función Examinar devuelve el elemento actual
  50.     -- de la lista. Si el elemento actual está indefinido
  51.     -- se lanzará la excepción Constraint_Error.
  52.  
  53.   function Fin_Lista(Lis: in Lista)return boolean&#59;                            
  54.     -- La función Fin_Lista, devuelve True si actual está indefinido.                
  55.  
  56.      procedure Extraer(Lis: in out Lista)&#59;                                  
  57.      -- El procedimiento Extraer, elimina de la lista el
  58.     -- elemento actual. Si actual está indefinido no se
  59.     -- producirá ningún efecto apreciable. Tras la
  60.     -- extracción, actual debe quedar situado en el
  61.     -- elemento siguiente al extraído; si el elemento
  62.     -- que se extrae es el último de la lista, actual
  63.     -- queda indefinido.
  64.  
  65.  
  66. private
  67.   -- -- Estructura de representación del tad Listas_Secuenciales
  68.  
  69.   type Nodo_Lista&#59;
  70.   type TNodo_Lista is access Nodo_Lista&#59;
  71.     type Nodo_Lista is record
  72.          dato:ElementoLista;
  73.          sig:TNodo_Lista;
  74.      end record;
  75.  
  76.   type Lista(TamañoMaximo: Positive)  is record
  77.     Actual: TNodo_Lista&#59;  
  78.     Inicio:  TNodo_Lista&#59;
  79.     Fin: TNodo_Lista &#59;
  80.     Tamaño: Natural:= 0&#59;
  81.   end record;  
  82.  
  83. end Listas_Secuenciales&#59;
  84.  
  85.  

Un cordial saludo
        José Manuel Domenech
             Gran Canaria

eb8cxw

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Problemas Con Una Practica
« Respuesta #1 en: Jueves 5 de Mayo de 2005, 17:35 »
0
Perdon, parece que no se adjunto el fichero, por lo que se lo  pongo a continuación:
Código: Text
  1.  
  2. with Unchecked_Deallocation&#59;
  3.  
  4. package body Listas_Secuenciales is
  5.  
  6.   procedure Libera is new Unchecked_Deallocation(Nodo_Lista, TNodo_Lista)&#59;
  7.  
  8.   -- El procedimiento Insertar, inserta el elemento indicado por el
  9.   -- segundo parámetro en la lista indicada por el primero. Si el
  10.   -- elemento a insertar ya se encuentra en la lista, lo sustituirá
  11.   -- por el nuevo si el tercer parámetro tiene el valor True o lanzará
  12.   -- la excepción Error_Repetido si tiene el valor False. Los elementos
  13.    -- en la lista estarán organizados secuencialmente según el orden de llegada,
  14.     -- salvo en caso de sustitución que se mantiene la posición original. El
  15.     -- elemento recién insertado se convierte en el actual a efectos de acceso. Si,
  16.     -- cuando se intenta insertar, la lista está llena, se lanza la excepción
  17.   -- predefinida Constraint_Error y la lista queda como estaba.
  18.   procedure Insertar(Lis: in out Lista; ELista: in ElementoLista&#59; NoExiste: in Boolean) is
  19.      
  20.     begin  
  21.      
  22.       if Lis.Tamaño = 0 then        
  23.         Lis.Actual:= Lis.Inicio&#59;
  24.         Lis.Fin:= Lis.Inicio&#59;
  25.         Lis.Tamaño := Lis.Tamaño + 1;
  26.        END IF&#59;
  27.      
  28.       IF lis.tamaño /= 0 THEN
  29.         if Lis.Tamaño /= Lis.TamañoMaximo then        
  30.           if NoExiste = True then
  31.             Lis.Actual:= Lis.ELista&#59;
  32.           else
  33.               raise Error_Repetido;
  34.           end if&#59;
  35.         else
  36.           raise Constraint_Error&#59;
  37.         end if&#59;
  38.       end if&#59;
  39.   end Insertar&#59;
  40.  
  41.  
  42.   -- El procedimiento Inicial, designa como actual al elemento
  43.   -- más antiguo de la lista. Si la lista está vacía el actual
  44.   -- queda indefinido.
  45.   procedure Inicio(Lis: in out Lista) is
  46.  
  47.     begin  
  48.       if Lis.Tamaño = 0 then
  49.         Lis.Actual:= Lis.Inicio&#59;
  50.       end if&#59;
  51.   end Inicio&#59;
  52.  
  53.  
  54.   -- El procedimiento Siguiente, prepara la lista para
  55.   -- acceder al elemento siguiente al actual, según el
  56.   -- orden secuencial de la misma. Si actual ya está
  57.   -- en el último elemento, queda indefinido. Si la
  58.   -- lista está vacía o el actual está indefinido, actual
  59.   -- queda indefinido.
  60.   procedure Siguiente(Lis: in out Lista) is                                
  61.      
  62.      begin  
  63.      if Lis.Tamaño /= 0 then
  64.       if Lis.Actual /= Lis.Fin then
  65.         Lis.Actual:= Nodo_Lista.sig&#59;
  66.          else
  67.           Lis.Actual:= null&#59;        
  68.       end if;
  69.      
  70.       else
  71.         Lis.Actual:= null&#59;
  72.     end if&#59;
  73.   end Siguiente&#59;
  74.  
  75.  
  76.     -- la Función Examinar devuelve el elemento actual
  77.     -- de la lista. Si el elemento actual está indefinido
  78.     -- se lanzará la excepción Constraint_Error.  
  79.   function Examinar(Lis: in Lista)return Lista is                                  
  80.    
  81.   begin        
  82.        if Lis.Actual /= null then
  83.         return Lis.Actual;
  84.         else
  85.           raise Constraint_Error&#59;
  86.     end if;
  87.  
  88.   end Examinar&#59;
  89.  
  90.  
  91.    -- La función Fin_Lista, devuelve True si actual está indefinido.    
  92.   function Fin_Lista(Lis: in Lista)return boolean is                          
  93.  
  94.      begin
  95.       if Lis.Actual = null then
  96.         return True&#59;
  97.       else
  98.           return False&#59;
  99.       end if&#59;
  100.  
  101.   end Fin_Lista&#59;
  102.  
  103.    
  104.     -- El procedimiento Extraer, elimina de la lista el
  105.     -- elemento actual. Si actual está indefinido no se
  106.     -- producirá ningún efecto apreciable. Tras la
  107.     -- extracción, actual debe quedar situado en el
  108.     -- elemento siguiente al extraído; si el elemento
  109.     -- que se extrae es el último de la lista, actual
  110.     -- queda indefinido.
  111.      procedure Extraer(Lis: in out Lista) is
  112.       Aux: Nodo_Lista&#59;                        
  113.     begin
  114.     if Lis.Actual /= null then
  115.       if Lis.Actual /= Lis.Fin then
  116.         Aux:= Nodo_Lista.sig&#59;
  117.           Libera(Lis.Actual)&#59;
  118.         Lis.Actual:= Aux&#59;
  119.         Lis.Tamaño := Lis.Tamaño - 1;
  120.       end if&#59;
  121.  
  122.       if Lis.Actual = Lis.Fin then
  123.           Libera(Lis.Actual)&#59;
  124.         Lis.Actual:= Null&#59;
  125.         Lis.Tamaño := Lis.Tamaño - 1;
  126.       end if;
  127.     end if&#59;
  128.   end Extraer&#59;
  129.  
  130. end Listas_Secuenciales&#59;
  131.  
  132.  

Un cordial saludo
        José Manuel
          Gran Canaria

gandalfelgris

  • Miembro activo
  • **
  • Mensajes: 53
    • Ver Perfil
Re: Problemas Con Una Practica
« Respuesta #2 en: Domingo 8 de Mayo de 2005, 01:32 »
0
Hola Jose Manuel,
                           Aqui te adjuto los ficheros sin errores

Comienzo por el .ads de especificacion


Aitor Fernández
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.
gandalfelgris

gandalfelgris

  • Miembro activo
  • **
  • Mensajes: 53
    • Ver Perfil
Re: Problemas Con Una Practica
« Respuesta #3 en: Domingo 8 de Mayo de 2005, 01:34 »
0
Aqui va el cuerpo .adb

Aitor
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.
gandalfelgris

eb8cxw

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Problemas Con Una Practica
« Respuesta #4 en: Viernes 20 de Mayo de 2005, 22:34 »
0
Hola Aitor

Perdona la tardanza en contestar, Gracias por la ayuda, me sirvio bastante, tenía algunos errores que con tu ayuda los corregi. reitero mi agradecimiento

Un cordial saludo
            José Manuel
             Gran Canaria/España