[Redeclarar procedimientos] ¿Se puede?

Para cualquier tema relacionado con la asignatura de Programación en cualquier titulación.

[Redeclarar procedimientos] ¿Se puede?

Notapor wickerman_666 » Mar, 30 Dic 2008 17:47

A ver que os pongo en situación:

Mi practica ejecuta el procedimiento menuPrincipal en el cuerpo del programa

Dentro de menuPrincipal ejecuto el procedimiento salir, que tiene estas lineas al final:
Código: Seleccionar todo
if (confirmacion='s') then begin      {Si decide salir, se termima el programa}

      writeln ('Pulse ENTER para salir');

      readln;

        end

   else if (confirmacion='S') then begin

         writeln ('Pulse ENTER para salir');

         readln;

         end

      else menuPrincipal;  {Si no vuelve al menu principal}

end;


Pero me daba error de compilacion ya que el procedimiento menuPrincipal aun no estaba declarado. Un amigo me dijo que en C eso se soluciona poniendo en la cabecera procedure menuPrincipal y asi ya no me da error ahi, pero me lo da al final del programa, en la ultima linea... El error es este:

Código: Seleccionar todo
dani@PiNHeiRo-laptop:~/Escritorio$ gpc --extended-pascal asignaturas.pas
asignaturas.pas: In procedure `menuPrincipal':
asignaturas.pas:104: error: identifier `menuPrincipal' redeclared in a scope where an outer value was used
asignaturas.pas: In procedure `menuPrincipal':
asignaturas.pas:140: error: syntax error before `.'


Y mi pregunta es: ¿Se puede redeclarar procedimientos en pascal? ¿Como? Si no es asi, ¿como hago para llamar a un procedimiento que aun no esta declarado?
Imagen
Imagen
Avatar de Usuario
wickerman_666
Achmel el Maldito
Expammer
 
Mensajes: 3631
Registrado: Mar, 07 Nov 2006 18:00
Ubicación: caldas de reis - a coruña

Re: [Redeclarar procedimientos] ¿Se puede?

Notapor Fer » Mar, 30 Dic 2008 17:57

Si no recuerdo mal, en Free Pascal sí se puede hacer (no sé en GNU Pascal), pero sólo poniendo la cabecera del procedimiento e indicando con una directiva que no recuerdo ahora mismo que está implementado después, más abajo en el código. Si lo usé en mi práctica de hace la hostia de años de EDI, te lo digo, que igual también vale.


PD: No hagas esas dos comprobaciones, alma de dios... Haz una OR de las dos y te ahorras código. :rayas:


EDITO: No lo usé en EDI, pero mira en el manual de la ISO 10200nosécuánto que fijo que te viene.
Campaña de donación de apuntes:

¡Súbelos a la sección de apuntes o deja los tuyos en el local de alumnos!
Avatar de Usuario
Fer
QG Admin
Corresponsal de guerra
 
Mensajes: 26112
Registrado: Vie, 22 Sep 2006 14:18
Ubicación: A Coruña

Re: [Redeclarar procedimientos] ¿Se puede?

Notapor wickerman_666 » Mar, 30 Dic 2008 17:58

FeR escribió:Si no recuerdo mal, en Free Pascal sí se puede hacer (no sé en GNU Pascal), pero sólo poniendo la cabecera del procedimiento e indicando con una directiva que no recuerdo ahora mismo que está implementado después, más abajo en el código. Si lo usé en mi práctica de hace la hostia de años de EDI, te lo digo, que igual también vale.


PD: No hagas esas dos comprobaciones, alma de dios... Haz una OR de las dos y te ahorras código. :rayas:


Ya, en la version actual ahi hay un OR...

¿Como es eso de indicar la directiva?
Imagen
Imagen
Avatar de Usuario
wickerman_666
Achmel el Maldito
Expammer
 
Mensajes: 3631
Registrado: Mar, 07 Nov 2006 18:00
Ubicación: caldas de reis - a coruña

Re: [Redeclarar procedimientos] ¿Se puede?

Notapor Fer » Mar, 30 Dic 2008 18:11

Buscando 5 minutos en el manual (bien podías hacerlo tú), ya vi cómo era:

Código: Seleccionar todo
function/procedure nombre [: tipo_devuelto_si_function]; forward;



Prueba a ver.
Campaña de donación de apuntes:

¡Súbelos a la sección de apuntes o deja los tuyos en el local de alumnos!
Avatar de Usuario
Fer
QG Admin
Corresponsal de guerra
 
Mensajes: 26112
Registrado: Vie, 22 Sep 2006 14:18
Ubicación: A Coruña

Re: [Redeclarar procedimientos] ¿Se puede?

Notapor wickerman_666 » Mar, 30 Dic 2008 18:24

Ok, el error pasço de esto:
Código: Seleccionar todo
dani@PiNHeiRo-laptop:~/Escritorio$ gpc --extended-pascal asignaturas.pas
asignaturas.pas: In procedure `menuPrincipal':
asignaturas.pas:104: error: identifier `menuPrincipal' redeclared in a scope where an outer value was used
asignaturas.pas: In procedure `menuPrincipal':
asignaturas.pas:140: error: syntax error before `.'


A esto:
Código: Seleccionar todo
dani@PiNHeiRo-laptop:~/Escritorio$ gpc --extended-pascal asignaturas.pas
asignaturas.pas: In procedure `menuPrincipal':
asignaturas.pas:140: error: syntax error before `.'


Error en la ultima linea, este es el cuerpo de mi programa
Código: Seleccionar todo
138 begin
139     menuPrincipal;
140 end.
Imagen
Imagen
Avatar de Usuario
wickerman_666
Achmel el Maldito
Expammer
 
Mensajes: 3631
Registrado: Mar, 07 Nov 2006 18:00
Ubicación: caldas de reis - a coruña

Re: [Redeclarar procedimientos] ¿Se puede?

Notapor erKURITA » Mar, 30 Dic 2008 18:51

Como declaraste las funciones, en ambos sitios?
Avatar de Usuario
erKURITA
Colenzo el Aniquilador
erKARAJO
 
Mensajes: 2446
Registrado: Sab, 13 Sep 2008 10:43

Re: [Redeclarar procedimientos] ¿Se puede?

Notapor wickerman_666 » Mar, 30 Dic 2008 19:00

erKURITA escribió:Como declaraste las funciones, en ambos sitios?


Asi:
Código: Seleccionar todo
procedure menuPrincipal; forward;


Y asi:
Código: Seleccionar todo
procedure menuPrincipal;
Imagen
Imagen
Avatar de Usuario
wickerman_666
Achmel el Maldito
Expammer
 
Mensajes: 3631
Registrado: Mar, 07 Nov 2006 18:00
Ubicación: caldas de reis - a coruña

Re: [Redeclarar procedimientos] ¿Se puede?

Notapor erKURITA » Mar, 30 Dic 2008 19:17

Revisa si no te comiste un END; arriba del nucleo del programa.
Avatar de Usuario
erKURITA
Colenzo el Aniquilador
erKARAJO
 
Mensajes: 2446
Registrado: Sab, 13 Sep 2008 10:43

Re: [Redeclarar procedimientos] ¿Se puede?

Notapor wickerman_666 » Mié, 31 Dic 2008 15:18

erKURITA escribió:Revisa si no te comiste un END; arriba del nucleo del programa.


Exacto, me había comido el END; del CASE...
Imagen
Imagen
Avatar de Usuario
wickerman_666
Achmel el Maldito
Expammer
 
Mensajes: 3631
Registrado: Mar, 07 Nov 2006 18:00
Ubicación: caldas de reis - a coruña

Re: [Redeclarar procedimientos] ¿Se puede?

Notapor Fer » Mié, 31 Dic 2008 15:32

wickerman_666 escribió:
erKURITA escribió:Revisa si no te comiste un END; arriba del nucleo del programa.


Exacto, me había comido el END; del CASE...


Ayer en el msn antes de caerte:

Código: Seleccionar todo
30/12/2008      18:26:31      FeR      >PiNHeiRo<      ponme el procedure menuPrincipal aquí
30/12/2008      18:27:03      >PiNHeiRo<      FeR      ok, medio min
[..]
30/12/2008      18:30:40      FeR      >PiNHeiRo<      # case opcion of # 1: nuevo_alumno; # 2: modificar_datos; # 3: borrar_alumno; # 4: mostrar_listado; # 5: salir;
30/12/2008      18:30:46      FeR      >PiNHeiRo<      no hay que cerrar el case de alguna manera?


Luego te cayeras, pero pensé que lo habías leído. :rayas:
Campaña de donación de apuntes:

¡Súbelos a la sección de apuntes o deja los tuyos en el local de alumnos!
Avatar de Usuario
Fer
QG Admin
Corresponsal de guerra
 
Mensajes: 26112
Registrado: Vie, 22 Sep 2006 14:18
Ubicación: A Coruña

Re: [Redeclarar procedimientos] ¿Se puede?

Notapor wickerman_666 » Mié, 31 Dic 2008 15:36

No, no lo leyera. Estas wifis vecinales... Pero bueno, revisando el codigo después de comer ya lo vi, es que ayer estaba empeñado en que estaba todo bien puesto y así no se ven esas cosas
Imagen
Imagen
Avatar de Usuario
wickerman_666
Achmel el Maldito
Expammer
 
Mensajes: 3631
Registrado: Mar, 07 Nov 2006 18:00
Ubicación: caldas de reis - a coruña


Volver a 1º [EI/ETIS/ETIX] Programación (Pro)

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados