Programación General > ADA

 Problemas Con Una Practica

(1/1)

eb8cxw:
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 ---  generic    type ElementoLista is private;  with function "="(ELista1 , ELista2: ElementoLista) return Boolean&#59; package Listas_Secuenciales is    -- Tipo Lista: Asignable (:=) y comparable (=, /=). Representa un   -- contenedor (lista secuencial) limitado en tamaño cuyo   -- contenido serán elementos no repetidos del tipo del   -- parámetro genérico del paquete. Se implementará como un   -- record variante con un parámetro de tipo Positive que   -- servirá para establecer el tamaño máximo de la lista.     type Lista(TamañoMaximo: Positive) is private;        Error_Repetido: exception;  --| Se utilizará para señalar que se intenta insertar un                    -- elemento que ya está en la lista, para el caso en que se                 -- quiera sustituir.    procedure Insertar(Lis: in out Lista; ELista: in ElementoLista&#59; NoExiste: in Boolean)&#59;   -- El procedimiento Insertar, inserta el elemento indicado por el  -- segundo parámetro en la lista indicada por el primero. Si el  -- elemento a insertar ya se encuentra en la lista, lo sustituirá  -- por el nuevo si el tercer parámetro tiene el valor True o lanzará  -- la excepción Error_Repetido si tiene el valor False. Los elementos   -- en la lista estarán organizados secuencialmente según el orden de llegada,    -- salvo en caso de sustitución que se mantiene la posición original. El    -- elemento recién insertado se convierte en el actual a efectos de acceso. Si,    -- cuando se intenta insertar, la lista está llena, se lanza la excepción   -- predefinida Constraint_Error y la lista queda como estaba.   procedure Inicio(Lis: in out Lista);  --|  -- El procedimiento Inicial, designa como actual al elemento  -- más antiguo de la lista. Si la lista está vacía el actual  -- queda indefinido.   procedure Siguiente(Lis: in out Lista)&#59;                                    -- El procedimiento Siguiente, prepara la lista para  -- acceder al elemento siguiente al actual, según el  -- orden secuencial de la misma. Si actual ya está  -- en el último elemento, queda indefinido. Si la  -- lista está vacía o el actual está indefinido, actual  -- queda indefinido.    function Examinar(Lis: in Lista)return Lista&#59;                                       -- la Función Examinar devuelve el elemento actual    -- de la lista. Si el elemento actual está indefinido    -- se lanzará la excepción Constraint_Error.     function Fin_Lista(Lis: in Lista)return boolean&#59;                                 -- La función Fin_Lista, devuelve True si actual está indefinido.                      procedure Extraer(Lis: in out Lista)&#59;                                        -- El procedimiento Extraer, elimina de la lista el    -- elemento actual. Si actual está indefinido no se    -- producirá ningún efecto apreciable. Tras la    -- extracción, actual debe quedar situado en el    -- elemento siguiente al extraído; si el elemento    -- que se extrae es el último de la lista, actual    -- queda indefinido.   private  -- -- Estructura de representación del tad Listas_Secuenciales   type Nodo_Lista&#59;  type TNodo_Lista is access Nodo_Lista&#59;    type Nodo_Lista is record         dato:ElementoLista;         sig:TNodo_Lista;     end record;   type Lista(TamañoMaximo: Positive)  is record    Actual: TNodo_Lista&#59;      Inicio:  TNodo_Lista&#59;    Fin: TNodo_Lista &#59;    Tamaño: Natural:= 0&#59;  end record;   end Listas_Secuenciales&#59;  
Un cordial saludo
        José Manuel Domenech
             Gran Canaria

eb8cxw:
Perdon, parece que no se adjunto el fichero, por lo que se lo  pongo a continuación:

--- Código: Text --- with Unchecked_Deallocation&#59; package body Listas_Secuenciales is    procedure Libera is new Unchecked_Deallocation(Nodo_Lista, TNodo_Lista)&#59;   -- El procedimiento Insertar, inserta el elemento indicado por el  -- segundo parámetro en la lista indicada por el primero. Si el  -- elemento a insertar ya se encuentra en la lista, lo sustituirá  -- por el nuevo si el tercer parámetro tiene el valor True o lanzará  -- la excepción Error_Repetido si tiene el valor False. Los elementos   -- en la lista estarán organizados secuencialmente según el orden de llegada,    -- salvo en caso de sustitución que se mantiene la posición original. El    -- elemento recién insertado se convierte en el actual a efectos de acceso. Si,    -- cuando se intenta insertar, la lista está llena, se lanza la excepción   -- predefinida Constraint_Error y la lista queda como estaba.  procedure Insertar(Lis: in out Lista; ELista: in ElementoLista&#59; NoExiste: in Boolean) is         begin             if Lis.Tamaño = 0 then                Lis.Actual:= Lis.Inicio&#59;        Lis.Fin:= Lis.Inicio&#59;        Lis.Tamaño := Lis.Tamaño + 1;       END IF&#59;            IF lis.tamaño /= 0 THEN        if Lis.Tamaño /= Lis.TamañoMaximo then                  if NoExiste = True then            Lis.Actual:= Lis.ELista&#59;          else              raise Error_Repetido;          end if&#59;        else          raise Constraint_Error&#59;        end if&#59;      end if&#59;  end Insertar&#59;    -- El procedimiento Inicial, designa como actual al elemento  -- más antiguo de la lista. Si la lista está vacía el actual  -- queda indefinido.  procedure Inicio(Lis: in out Lista) is      begin        if Lis.Tamaño = 0 then        Lis.Actual:= Lis.Inicio&#59;      end if&#59;  end Inicio&#59;    -- El procedimiento Siguiente, prepara la lista para  -- acceder al elemento siguiente al actual, según el  -- orden secuencial de la misma. Si actual ya está  -- en el último elemento, queda indefinido. Si la  -- lista está vacía o el actual está indefinido, actual  -- queda indefinido.  procedure Siguiente(Lis: in out Lista) is                                           begin        if Lis.Tamaño /= 0 then      if Lis.Actual /= Lis.Fin then        Lis.Actual:= Nodo_Lista.sig&#59;         else          Lis.Actual:= null&#59;              end if;            else        Lis.Actual:= null&#59;    end if&#59;  end Siguiente&#59;      -- la Función Examinar devuelve el elemento actual    -- de la lista. Si el elemento actual está indefinido    -- se lanzará la excepción Constraint_Error.    function Examinar(Lis: in Lista)return Lista is                                        begin                if Lis.Actual /= null then        return Lis.Actual;        else          raise Constraint_Error&#59;    end if;   end Examinar&#59;     -- La función Fin_Lista, devuelve True si actual está indefinido.       function Fin_Lista(Lis: in Lista)return boolean is                                 begin      if Lis.Actual = null then        return True&#59;      else          return False&#59;      end if&#59;   end Fin_Lista&#59;          -- El procedimiento Extraer, elimina de la lista el    -- elemento actual. Si actual está indefinido no se    -- producirá ningún efecto apreciable. Tras la    -- extracción, actual debe quedar situado en el    -- elemento siguiente al extraído; si el elemento    -- que se extrae es el último de la lista, actual    -- queda indefinido.     procedure Extraer(Lis: in out Lista) is       Aux: Nodo_Lista&#59;                             begin    if Lis.Actual /= null then      if Lis.Actual /= Lis.Fin then        Aux:= Nodo_Lista.sig&#59;          Libera(Lis.Actual)&#59;        Lis.Actual:= Aux&#59;        Lis.Tamaño := Lis.Tamaño - 1;      end if&#59;       if Lis.Actual = Lis.Fin then          Libera(Lis.Actual)&#59;        Lis.Actual:= Null&#59;        Lis.Tamaño := Lis.Tamaño - 1;      end if;    end if&#59;  end Extraer&#59; end Listas_Secuenciales&#59;  
Un cordial saludo
        José Manuel
          Gran Canaria

gandalfelgris:
Hola Jose Manuel,
                           Aqui te adjuto los ficheros sin errores

Comienzo por el .ads de especificacion


Aitor Fernández

gandalfelgris:
Aqui va el cuerpo .adb

Aitor

eb8cxw:
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

Navegación

[0] Índice de Mensajes

Ir a la versión completa