Programación General > Pascal
Invocar A Una Funcion Antes De Declararla (forward
(1/1)
Saiyan1:
Hola:
para resolver un ejercicio, me enteré que existe esto... para hacer recursividad mutua
Ej: Funcion q invoca a otra funcion, y ésta segunda, invoca a la primera.
El siguiente texto es de la ayuda de Pascal nada más. (Traducido gracias a los archivos que dejó leonbinario en este mismo foro.
forward (directiva de procedimiento)
Con una declaracion forward, se puede hacer
conocido a un procedimiento o funcion sin
especificar en ese momento su parte de
sentencias.
Desde el punto de la declaracion forward,
otros procedimientos y funciones pueden llamar
a la rutina forward, haciendo posible la
recursion mutua.
En algun lugar despues de la declaracion
forward, el procedimiento o funcion debe ser
definido por una declaracion que especifique
la parte de sentencias de la rutina.
La declaracion de definicion puede omitir la
lista de par metros de la cabecera del
procedimiento o funcion.
Ejemplo:
(* Procedimiento forward *)
procedure Flip(N: Integer); forward;
procedure Flop(N: Integer);
begin
WriteLn('Flop');
if N > 0 then Flip(N - 1);
end;
procedure Flip;
begin
WriteLn('Flip');
if N > 0 then Flop(N - 1);
end;
Enko:
En el lenguaje Object Pascal (Delphi, Free Pascal) el forward ha caído en desuso debido a la Programacion Objeto Orientado. (En las classes, todas las funciones declaradas actuan como Forward).
--- Código: Text --- TClass = classpublic procedure Flop(N: Integer); function Flip: Integer;end; procedure TClass.Flop(N: Integer);begin //aca se llama Flip que fue declarado pero no implementado Result := Flip + 1;end; function TClass.Flip: Integer;begin Result := 0;end;
Recuerdo que cuando comenzaba con Turbo Pascal, Si bien entendia en teoria forward, en la practica me costaba mucho implementarlo.
Saiyan1:
Aca va el ejercicio donde lo implemente
--- Código: Text ---Program Paridad; uses crt; var n:integer; [B]Function EsImpar(a: Integer):Boolean; forward; [/B] Function EsPar(a:integer):Boolean; Begin if a=0 then Espar:=True else Espar:=EsImpar(a-1); end; Function EsImpar(a:integer):Boolean; Begin if a=0 then EsImpar:=False else EsImpar:=EsPar(a-1); end; Begin ClrScr; Write('Ingrese numero y averigua si es par o no: '); Readln(n); if Espar(n) then Write('Es Par') else Write('Es Impar'); Readkey; end.
Por si no se les ocurre algun ejemplo..
aunque tb se puede de otras maneras, claro.
Saludos
Navegación
Ir a la versión completa