Tema 5 Subprogramas Divide y venceras Divide y venceras en Ada

Anuncio
28/09/2002 19:22
28/09/2002 19:22
28/09/2002 19:22
Divide y venceras
Divide y venceras en Ada
Tema 5
with . . . ; -- Uso de otros algoritmos
procedure Problema_Principal is
function Subproblema_1
return Tipo is
begin
...
end Subproblema_1;
Problema principal
Subprogramas
Javier Miranda, Francisco Guerra
jmiranda@iuma.ulpgc.es
fguerra@iuma.ulpgc.es
Subproblema 1
(función)
*1
Parámetros Formales
(Nombre_Parámetro_1 : modo Tipo_Parámetro_1;
Nombre_Parámetro_2 : modo Tipo_Parámetro_2;
...)
Parámetros Reales
(Valor_Parámetro_1,
Valor_Parámetro_2,
...)
*4
*3
28/09/2002 19:22
Funciones
Modos de parámetros
procedure Ejemplo_Función is
A, B, C : Integer;
function Cuadrado -- Sustantivo asociado al resultado
(X : in Integer)
-- Entrada
return Integer
-- Salida
is
-- Zona de declaraciones
begin
return X * X;
end Cuadrado;
begin
A := Cuadrado (3);
B := Cuadrado (A);
C := 3 * Cuadrado (4) - 2 * Cuadrado (B - 4);
end Ejemplo_Función;
*5
28/09/2002 19:22
Paso de parámetros
Parámetros de entrada
Parámetro_Formal : in Tipo
28/09/2002 19:22
*2
Parámetros de salida
Parámetro_Formal : out Tipo
E.T.S.I. Telecomunicación
Universidad de Las Palmas de Gran Canaria
procedure Subproblema_2 is
begin
...
end Subproblema_2
begin
...
end Problema_Principal;
Subproblema 2
(procedimiento)
Parámetros de entrada-salida
Parámetro_Formal : in out Tipo
*6
28/09/2002 19:22
procedure Ejemplo_Procedimiento is
P, Q : Integer := 5;
procedure Sumar -- Verbo asociado a la acción
(Sumando_1 : in
Integer;
-- Entrada
Sumando_2 : in
Integer;
-- Entrada
Suma
:
out Integer) is -- Salida
begin
Suma := Sumando_1 + Sumando_2;
end Sumar;
begin
Sumar
(2 + P,
37,
Q);
end Ejemplo_Procedimiento;
*7
28/09/2002 19:22
procedure Ejemplo_Procedimiento is
P, Q : Integer := 5;
procedure Sumar
(Sumando_1 : in
Integer;
Sumando_2 : in
Integer;
Suma
: out Integer) is . . .
begin
Sumar
(2+P, 37, Q); -- Posicional
Sumar
(Sumando_1 => 2+P,
-- Nombrado
Sumando_2 => 37,
Suma
=> Q);
end Ejemplo_Procedimiento;
* 10
Métodos de paso de
parámetros
procedure Ejemplo_Procedimiento_Bis is
P : Integer := 5;
Métodos para establecer la asociación:
Posicional
Nombrado
Métodos de paso de parámetros:
Por valor
Por referencia
Parámetros por omisión
procedure Incrementar
(X : in out Integer)
is
Auxiliar : Integer := X + 1;
begin
X := Auxiliar;
end Incrementar;
begin
Incrementar (P);
end Ejemplo_Procedimiento_Bis;
*8
28/09/2002 19:22
Asociación de parámetros
28/09/2002 19:22
Procedimientos
Procedimientos
28/09/2002 19:22
28/09/2002 19:22
Parámetros por omisión
procedure Ejemplo3_Procedimiento is
P : Integer := 5;
procedure Incrementar
(X
: in out Integer;
Cantidad : in
Positive := 1) is
begin
X := X + Cantidad;
end Incrementar;
begin
Incrementar
(P);
Incrementar
(X
=> P,
Cantidad => 12);
end Ejemplo3_Procedimiento;
*9
Estilo -gnatg
Interfaz
function Nombre
( . . . );
return T_Nombre_Tipo;
procedure Verbo
( . . . );
Cuerpo
function Nombre
(...)
return T_Nombre_Tipo
is
begin
end Nombre;
procedure Verbo
(...)
is
begin
end Verbo;
* 11
* 12
28/09/2002 19:22
Interfaz
package Ejemplo is
function Nombre
( . . . );
return T_Nombre_Tipo;
procedure Verbo
( . . . );
end Ejemplo;
Uso del paquete
with Ejemplo;
procedure Uso_Ejemplo is
begin
end Uso_Ejemplo;
Anidación
y
ámbito
28/09/2002 19:22
Paquetes
Cuerpo
package body Ejemplo is
function Nombre
(...)
return T_Nombre_Tipo
is
begin
end Nombre;
A
B
C
D
procedure Verbo
(...)
is
begin
end Verbo;
end Ejemplo;
E
F
G
* 13
28/09/2002 19:22
procedure A is
function B is
procedure C is
...
end C;
...
end B;
procedure D is
procedure E is
procedure F is
...
end F;
procedure G is
...
end G;
...
end E;
...
end D;
...
end A;
28/09/2002 19:22
Sobrecarga de operadores
=
+
*
* 14
Recursión
Fact (3) = 6
function Factorial
(N : in Positive)
3 * Fact (2) = 6
return Positive is
begin
if N = 0 then
2 * Fact (1) = 2
return 1;
else
return N * Factorial (N - 1);
end if;
1 * Fact (0) = 1
end Factorial;
procedure Ejemplo_Sobrecarga is
A, B, C : Integer;
X, Y, Z : Float;
R, S, T : T_Tipo;
function *
(Factor_1 : in T_Tipo;
Factor_2 : in T_Tipo) return T_Tipo is
begin
...
end *
begin
C := A * B;
Z := X * Y;
T := R * S;
end Ejemplo_Sobrecarga;
1
* 16
xor
>
abs
rem
>=
not
**
Operadores de Ada
28/09/2002 19:22
Ejemplo de Sobrecarga
and or
<
<=
&
/
mod
* 17
function ''+'' (X,Y: in T_Complejo)
return T_Complejo is
begin
function ''*'' (A,B: T_Vector
return Integer is
begin
end ''+'';
end ''*'';
25/09/02 1
Descargar