• Domingo 22 de Diciembre de 2024, 02:06

Autor Tema:  Invocar A Una Funcion Antes De Declararla (forward  (Leído 1663 veces)

Saiyan1

  • Miembro activo
  • **
  • Mensajes: 54
    • Ver Perfil
    • http://www.anaprog.com.ar
Invocar A Una Funcion Antes De Declararla (forward
« en: Miércoles 20 de Septiembre de 2006, 00:26 »
0
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;
----------------------
Gustavo Insaurralde
Foro de Analista Programador

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Invocar A Una Funcion Antes De Declararla (forward
« Respuesta #1 en: Miércoles 20 de Septiembre de 2006, 01:46 »
0
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
  1.  
  2. TClass = class
  3. public
  4.    procedure Flop(N: Integer);
  5.    function Flip: Integer;
  6. end;
  7.  
  8. procedure TClass.Flop(N: Integer);
  9. begin
  10.   //aca se llama Flip que fue declarado pero no implementado
  11.   Result := Flip + 1;
  12. end;
  13.  
  14. function TClass.Flip: Integer;
  15. begin
  16.   Result := 0;
  17. end;
  18.  
  19.  

Recuerdo que cuando comenzaba con Turbo Pascal, Si bien entendia en teoria forward, en la practica me costaba mucho implementarlo.

Saiyan1

  • Miembro activo
  • **
  • Mensajes: 54
    • Ver Perfil
    • http://www.anaprog.com.ar
Re: Invocar A Una Funcion Antes De Declararla (forward
« Respuesta #2 en: Miércoles 20 de Septiembre de 2006, 02:01 »
0
Aca va el ejercicio donde lo implemente

Código: Text
  1. Program Paridad;
  2. uses crt;
  3. var
  4.  
  5. n:integer;
  6.  
  7. [B]Function EsImpar(a: Integer):Boolean; forward; [/B]
  8.  
  9. Function EsPar(a:integer):Boolean;
  10. Begin
  11. if a=0 then
  12. Espar:=True
  13. else
  14. Espar:=EsImpar(a-1);
  15. end;
  16.  
  17. Function EsImpar(a:integer):Boolean;
  18. Begin
  19. if a=0 then
  20. EsImpar:=False
  21. else
  22. EsImpar:=EsPar(a-1);
  23. end;
  24.  
  25. Begin
  26. ClrScr;
  27. Write('Ingrese numero y averigua si es par o no: ');
  28. Readln(n);
  29. if Espar(n) then
  30. Write('Es Par')
  31. else
  32. Write('Es Impar');
  33. Readkey;
  34. end.
  35.  


Por si no se les ocurre algun ejemplo..

aunque tb se puede de otras maneras, claro.

Saludos
----------------------
Gustavo Insaurralde
Foro de Analista Programador