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

14Mar/090

Procedures con prametros in, out e in out

Bueno, por fin Metodología de la Programación se pone interesante desde mi punto de vista, es decir vamos a empezar a poder hacer cosas y mis pensamientos pesimistas sobre ADA se alejan xD

Visto que algunos no se aclaran con el tema de los procedures con parametros in out e in out aqui dejo una pequeña explicación.

Los parámetros definidos como in son los que hasta ahora hemos usado, se pueden usar dentro del procedure pero no se pueden modificar ni sacar fuera del procedure, un ejemplo de esto es el Put("texto") es un procedure con un parámetro in que pone en la pantalla texto, números, etc...

Los parámetros definidos como out no tienen por que recibir ningún valor y modifican la variable con la que llames al procedure, un ejemplo de esto es el Get(variable) es un procedure con un parámetro out el cual obtiene lo que pulses en el teclado.

with Ada.Text_IO, Ada.Integer_Text_IO;
use Ada.Text_IO, Ada.Integer_Text_IO;

procedure Horas is
   subtype Tipo_Horas is integer range 0..23;

   subtype Tipo_MinutosSegundos is integer range 0..59;

   type Tipo_Hora is record
      h: Tipo_Horas;
      m: Tipo_MinutosSegundos;
      s: Tipo_MinutosSegundos;
   end record;

   procedure ObtenerHora(hora: out Tipo_Hora) is
   BEGIN
      Put("Introduce una hora: "); New_Line;
      Put("Hora: "); Get(hora.h);
      Put("Minutos: "); Get(hora.m);
      Put("Segundos: "); Get(hora.s);
   end ObtenerHora;

   procedure ImprimirHora(hora: in Tipo_Hora) is
   begin
      Put("La hora introducida es: ");
      Put(hora.h,0); Put(':');  Put(hora.m,0); Put(':');  Put(hora.s,0);
   end ImprimirHora;

   HoraComida: Tipo_Hora;
begin
   ObtenerHora(HoraComida); New_Line;
   -- Ahora la variable HoraComida tiene los datos
   -- introducidos en el procedure ObtenerHora
   ImprimirHora(HoraComida);
end horas;

Y por ultimo tenemos los parámetros in out que reciben obligatoriamente un valor y modifican la variable con la que llames al procedure, aquí no tengo un ejemplo claro que usemos a si que vamos directamente a mi ejemplo.

with Ada.Text_IO, Ada.Float_Text_IO;
with Ada.Numerics.Elementary_Functions;
use Ada.Text_IO, Ada.Float_Text_IO;
use Ada.Numerics.Elementary_Functions;

procedure matematicas is
   procedure SumarUno(N: in out Float) is
   begin
      Put("Sumamos 1 a "); Put(N,0,2,0); New_Line;
      N := N+1.0;
      Put("El resultado es: "); Put(N,0,2,0); New_Line;
   end SumarUno;

   procedure Cuadrado(N: in out Float) is
   begin
      Put("Elevamos al cuadrado a "); Put(N,0,2,0); New_Line;
      N := N**2.0;
      Put("El resultado es: "); Put(N,0,2,0); New_Line;
   end Cuadrado;

   procedure MultiplicarSiete(N: in out Float) is
   begin
      Put("Multiplicamos por 7 a "); Put(N,0,2,0); New_Line;
      N := N*7.0;
      Put("El resultado es: "); Put(N,0,2,0); New_Line;
   end MultiplicarSiete;

   procedure Raiz(N: in out Float) is
   begin
      Put("Realizamos la raiz cuadrada de "); Put(N,0,2,0); New_Line;
      N := sqrt(N);
      Put("El resultado es: "); Put(N,0,2,0); New_Line;
   end Raiz;

   Numerito: Float := 25.0;
begin
   SumarUno(Numerito); New_Line;
   Cuadrado(Numerito); New_Line;
   MultiplicarSiete(Numerito); New_Line;
   Raiz(Numerito); New_Line;
end matematicas;

Como podréis ver, se va guardando en la variable Numerito el resultado de la operacion anterior, por que el parámetro definido como in out hace que entre un valor, y ese valor quede tal cual se dejo dentro del procedure, que puede ser intacto o modificado.

Espero que os sirva esto para comprender un poco mejor el tema de in, out e in out. Si tenéis alguna sugerencia, duda, aclaración, corrección dejadme un comentario.

Comentarios (0) Trackbacks (0)

Aún no hay comentarios.


Deja un comentario


Aún no hay trackbacks.