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

[0] Índice de Mensajes

Ir a la versión completa