With Ada.Text_IO; SELECT `desciption` FROM `db_blogs` WHERE `author` = 'SkG';

15dic/080

Ejemplo sencillo de listas

Para medio explicar el uso de las listas voy a usar la practica que hicimos hoy en clase.

Una lista es un conjunto de datos agrupados los cuales manejamos a través de funciones y procedimientos para obtener un determinado resultado. [Mas sobre listas]

Para ilustrar este ejemplo partimos de la siguiente situación: Tenemos una lista de numero naturales (1,7,14,72,103) y queremos obtener el primer numero de esa lista que es redondo.


Este sería el código fuente a usar, en los comentarios explico cada cosa y el porque de ello para que lo comprendáis mejor.

----------------------------------------------------------------
-- Nombre: Primer redondo
-- Fecha: 15/12/2008
-- Descripción: Comprobación de los elementos de una lista hasta
-- obtener el primer numero redondo e imprimirlo en pantalla.
-- Requiere: Modulo de manejo de listas (lista.ads y lista.adb)
----------------------------------------------------------------
-- Autor: [SkG]
----------------------------------------------------------------
-- Llamamos a los módulos de manejo de texto y de números
with Ada.Text_IO, Ada.Integer_Text_IO; use Ada.Text_IO, Ada.Integer_Text_IO;
-- Llamamos al modulo de manejo de listas
with Lista;

procedure primer_redondo is
   ----------------------------------------------------------------
   -- Declaración de tipos y paquetes
   ----------------------------------------------------------------
   -- Estas dos lineas SIEMPRE las usaremos cuando tengamos que
   -- manejar listas, normalmente con poca variación.
   -- Declaramos una 'ListaCol' como una Lista de números naturales
   package ListaCol is new Lista(natural); use ListaCol;
   -- Creamos un tipo para manejar elementos de esa lista
   subtype TLista is ListaCol.Tipo;

   ----------------------------------------------------------------
   -- Declaración de funciones y procedimientos
   ----------------------------------------------------------------
   -- Esto es una función sencilla para ver si un numero es redondo
   function Redondo(N:Natural) return boolean is
   -- PRE: NºRedondo Div 2,8,9
   begin
      return ((N mod 2 = 0) and (N mod 8 = 0) and (N mod 9 = 0));
   end Redondo;

   -- En esta función lo que hacemos es comprobar elemento
   -- a elemento si es redondo, si no lo es continua con el resto
   -- de elementos existentes en la lista.
   function PQC(Col:TLista) return natural is
   begin
      if Es_Vacia(Resto(Col)) then
         return Primero(Col);
      elsif Redondo(Primero(Col)) then
         return Primero(Col);
      else
         return PQC(Resto(Col));
      end if;
   end PQC;

   -- Estas son otras funciones importantes si queremos imprimir
   -- la lista en la pantalla.
   -- Aquí especificamos como debe salir los datos, como si fuera
   -- la parte ejecutiva del programa.
   procedure ImprElemento(N:natural) is
   begin
      Put(N,0);
   end ImprElemento;
   -- Esta es la función a la que llamaremos para imprimir la lista
   -- a cual ordena 'Escribir' la lista como se dice en la anterior
   procedure ImprLista is new Escribir(ImprElemento);
   ----------------------------------------------------------------
   -- Delcaración de variables y/o constantes
   ----------------------------------------------------------------
   -- Esto es una lista de prueba
   Col: constant TLista := Lista_Cons((1,7,14,72,103));
   ----------------------------------------------------------------
   -- Parte ejecutiva
   ----------------------------------------------------------------
begin
   -- Aquí es donde ya se pone todo lo que debe suceder.
   -- En este caso Imprimimos la lista que tenemos y luego
   -- comprobamos cual es el primer redondo con nuestra función
   Put("De la lista "); ImprLista(Col);
   Put(" el primer redondo es: "); Put(PQC(Col),0);
end primer_redondo;

En serio, si no os leéis los comentarios de poco os va a servir.
Podéis copiar simplemente, pero no siempre voy a poner las practicas completas, solo alguna parte para que completéis el resto o las partes conflictivas.

¿Te gustó este artículo?

¡Suscríbete a nuestro feed RSS!

Comentarios (0) Trackbacks (0)

Aún no hay comentarios.


Leave a comment

(required)

Aún no hay trackbacks.