sábado, 19 de enero de 2008

Eliminar de un Lista el primer valor repetido del pasado por parámetro en lenguaje ADA

Implemente un procedimiento llamado Eliminar, con dos parámetros, el primero de de tipo P_Nodo_Simple que representa las dirección de comienzo de una lista simplemente encadena y el segundo de tipo Integer. La función debe eliminar el primer nodo de la lista cuyo campo Info coincida con el valor del segundo parámetro.

La declaración de la lista sería la siguiente:

package Listas is
-- Tipos para construir una lista simplemente encadenada
type Nodo_Simple;
type P_Nodo_Simple is access Nodo_Simple;
type Nodo_Simple is record
Info : Integer;
Siguiente : P_Nodo_Simple;
end record;
end Listas;


procedure Eliminar (Lista : in out P_Nodo_Simple; V : Integer) is
Iterador : P_Nodo_Simple := Lista;
Eliminado : P_Nodo_Simple := null;
begin
-- Mientras haya lista
if Iterador /= null then
-- en caso de que el valor sea el del primer nodo
if Iterador.Info = V then
-- avanzamos lista
Lista := Lista.Siguiente;
-- y liberamos iterador
Liberar (Iterador);
else
-- mientras no llegemos al final y no sea el valor
while Iterador.Siguiente /= null and then Iterador.Siguiente.Info /= V
loop
-- avanzamos iterador
Iterador := Iterador.Siguiente;
end loop;
-- preguntamos por la condicion critica, si es esta, es que se ha
-- encontrado el valor
if Iterador.Siguiente /= null then
-- Guardamos la direccion que queremos eliminar
Eliminado := Iterador.Siguiente;
-- avanzamos iterador al siguiente nodo
Iterador.Siguiente := Eliminado.Siguiente;
-- y liberamos
Liberar (Eliminado);
end if;
end if;
end if;
end Eliminar;