Ir al contenido principal

Invocar un paquete desde Ada Lang

 


En entregas pasadas vimos como crear y ejecutar un programa en Ada. En está ocasión veremos cómo crear paquetes e invocarlos desde otro programa.

El programa es sobre el cálculo del valor futuro o interés compuesto. Donde tendremos un valor presente o monto inicial, una tasa de interés y un plazo.

Cálculo del valor futuro en Ada Lang

Creamos el proyecto:

alr init Invoca_Calculo --bin

Nos ubicamos en la carpeta creada:

cd invoca_calculo

Dentro de la carpeta del proyecto, creamos los archivos necesarios para el paquete ``Interes_Pkg `` y el programa principal.

src/interes_pkg.ads 
src/interes_pkg.adb
src/invoca_calculo.adb

interes_pkg.ads

-- Archivo: src/interes_pkg.ads
package Interes_Pkg is
   procedure Calcula_Interes;
end Interes_Pkg;


Este será la especificación del paquete.

interes_pkg.adb

-- Archivo: src/interes_pkg.adb
with Ada.Text_IO;
with Ada.Float_Text_IO;
with Ada.Numerics.Elementary_Functions;

package body Interes_Pkg is
   procedure Calcula_Interes is
      Presente : Float := 20000.00;
      Tasa     : Float := 5.0 / 100.0;
      Periodo  : Integer := 12;
      Futuro   : Float := 0.0;
      Extra    : Float := 0.0;

   begin
      Ada.Text_IO.Put_Line ("Monto original: ");
      Ada.Float_Text_IO.Put (Presente, Aft => 2, Exp => 0);
      Ada.Text_IO.New_Line;

      Ada.Text_IO.Put_Line ("Tasa de interes: ");
      Ada.Float_Text_IO.Put (Tasa * 100.0, Aft => 2, Exp => 0);
      Ada.Text_IO.Put_Line ("%");
      Ada.Text_IO.New_Line;

      Ada.Text_IO.Put_Line ("Plazo en meses: " & Integer'Image(Periodo));
      Ada.Text_IO.New_Line;

      for I in 1 .. Periodo loop
         Futuro := Presente * Ada.Numerics.Elementary_Functions."**"(1.0 + Tasa, Float(I));
         Ada.Text_IO.Put_Line ("Monto a pagar: ");
         Ada.Float_Text_IO.Put (Futuro, Aft => 2, Exp => 0);
         Ada.Text_IO.Put_Line (" en el periodo: " & Integer'Image(I));
      end loop;

      Extra := Futuro - Presente;

      Ada.Text_IO.Put_Line ("Monto total a pagar: ");
      Ada.Float_Text_IO.Put (Futuro, Aft => 2, Exp => 0);
      Ada.Text_IO.New_Line;

      Ada.Text_IO.Put_Line ("Extra a pagar: ");
      Ada.Float_Text_IO.Put (Extra, Aft => 2, Exp => 0);
      Ada.Text_IO.New_Line;
   end Calcula_Interes;
end Interes_Pkg;



Este contendrá el código que hará las operaciones del interés compuesto o valor futuro.

invoca_calculo.adb

with Interes_Pkg;

procedure Invoca_Calculo is
begin
   -- Invocar el procedimiento desde otro programa
   Interes_Pkg.Calcula_Interes;
end Invoca_Calculo;

El programa ``main``. El programa encargado de invocar el paquete de ``Interes_Pkg```.

Construimos y ejecutamos el programa:

alr build
alr run

Salida:

Note: Building invoca_calculo=0.1.0-dev/invoca_calculo.gpr...
gprbuild: "invoca_calculo.exe" up to date
Success: Build finished successfully in 11.96 seconds.
Monto original:
20000.00
Tasa de interes:
 5.00%

Plazo en meses:  12

Monto a pagar:
21000.00 en el periodo:  1
Monto a pagar:
22050.00 en el periodo:  2
Monto a pagar:
23152.50 en el periodo:  3
Monto a pagar:
24310.12 en el periodo:  4
Monto a pagar:
25525.63 en el periodo:  5
Monto a pagar:
26801.91 en el periodo:  6
Monto a pagar:
28142.00 en el periodo:  7
Monto a pagar:
29549.10 en el periodo:  8
Monto a pagar:
31026.55 en el periodo:  9
Monto a pagar:
32577.88 en el periodo:  10
Monto a pagar:
34206.77 en el periodo:  11
Monto a pagar:
35917.11 en el periodo:  12
Monto total a pagar:
35917.11
Extra a pagar:
15917.11

Con esto hemos organizado nuestro programa mediante el uso de paquetes.

Esto es todo por hoy. Continuaremos con este temas en próximas entregas.

Enlaces:

Comentarios