Foros-FIUBA Foros HostingPortal
 FAQ  •  Buscar  •  Wiki  •  Apuntes  •  Planet  •  Mapa  •  Eyeon  •  Chat
Preferencias  •  Grupos de Usuarios
Registrarse  •  Perfil  •  Entrá para ver tus mensajes privados  •  Login
Ver tema siguiente
Ver tema anterior

Responder al tema Ver tema anteriorEnviar por mail a un amigo.Mostrar una Lista de los Usuarios que vieron este TemaGuardar este Tema como un archivoPrintable versionEntrá para ver tus mensajes privadosVer tema siguiente
Autor Mensaje
franco379
Nivel 3


Edad: 33
Registrado: 13 Mar 2010
Mensajes: 20
Ubicación: Balvanera, Ciudad Autónoma de Buenos Aires
Carrera: Informática y Sistemas
blank.gif
MensajePublicado: Lun Dic 06, 2010 10:14 pm  Asunto: Nota Consulta relacionada con registros o pasaje por referencia Responder citandoFin de la PáginaVolver arriba

Estuve más de 4 horas escribiendo este código.
Lo tengo que entregar mañana para firmar la materia.
Usé Notepad++ para escribirlo y Free Pascal para compilarlo.

El código en cuestión es este: http://pastebin.com/es2W87X7
y esto es lo que dice el compilador cuando intento compilar: http://pastebin.com/AWYLTKty
La parte problemática está resaltada en amarillo.

Sospecho que tiene que ver con la declaración de registros o con el pasaje de variables por referencia o con las dos cosas, pero ya estoy tan quemado que no entiendo nada.

Si alguien me puede ayudar, se lo voy a agradecer.




Última edición por franco379 el Lun Dic 06, 2010 11:18 pm, editado 2 veces
Cancer Género:Masculino Caballo OfflineGalería Personal de franco379Ver perfil de usuarioEnviar mensaje privado
Kartlan
Nivel 5


Edad: 43
Registrado: 09 Ago 2005
Mensajes: 176
Ubicación: Once
Carrera: Informática
argentina.gif
MensajePublicado: Lun Dic 06, 2010 10:27 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Te falta definir todas las variables globales que le tiraste encima al programa...

Tenes arriba definidos los tipos pero no las variables.

Si tu respuesta es "pero los escribí arriba", no hiciste eso, definiste todos los tipos que queres usar... pero no las variables... es como gritarle al ejercicio de analisis "VOY A USAR REALES!!!" y esperar que los reales hagan el laburo solos...

¿como?: var ... etc etc... fuera de cualquier función..


Aries Género:Masculino Gallo OfflineGalería Personal de KartlanVer perfil de usuarioEnviar mensaje privadoEnviar emailYahoo MessengerMSN Messenger
franco379
Nivel 3


Edad: 33
Registrado: 13 Mar 2010
Mensajes: 20
Ubicación: Balvanera, Ciudad Autónoma de Buenos Aires
Carrera: Informática y Sistemas
blank.gif
MensajePublicado: Lun Dic 06, 2010 11:02 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Kartlan escribió:
Te falta definir todas las variables globales que le tiraste encima al programa...

Tenes arriba definidos los tipos pero no las variables.

Si tu respuesta es "pero los escribí arriba", no hiciste eso, definiste todos los tipos que queres usar... pero no las variables... es como gritarle al ejercicio de analisis "VOY A USAR REALES!!!" y esperar que los reales hagan el laburo solos...

¿como?: var ... etc etc... fuera de cualquier función..


Gracias por responder.

Variables globales no podemos usar. Usamos pasaje por referencia entre procedimientos.
¿No quedan ya definidas las variables si las pongo en la firma del módulo?
¿O las tengo que declarar con var dentro del subprograma también?

Revisé un par de ejemplos del apunte de Algoritmos de Fontela, pero no veo qué estoy haciendo mal todavía.


Cancer Género:Masculino Caballo OfflineGalería Personal de franco379Ver perfil de usuarioEnviar mensaje privado
Johann
Nivel 9


Edad: 34
Registrado: 04 Abr 2009
Mensajes: 1098
Ubicación: Nuñez
Carrera: Informática
CARRERA.informatica.3.jpg
MensajePublicado: Mar Dic 07, 2010 12:14 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

franco379 escribió:
Kartlan escribió:
Te falta definir todas las variables globales que le tiraste encima al programa...

Tenes arriba definidos los tipos pero no las variables.

Si tu respuesta es "pero los escribí arriba", no hiciste eso, definiste todos los tipos que queres usar... pero no las variables... es como gritarle al ejercicio de analisis "VOY A USAR REALES!!!" y esperar que los reales hagan el laburo solos...

¿como?: var ... etc etc... fuera de cualquier función..


Gracias por responder.

Variables globales no podemos usar. Usamos pasaje por referencia entre procedimientos.
¿No quedan ya definidas las variables si las pongo en la firma del módulo?
¿O las tengo que declarar con var dentro del subprograma también?

Revisé un par de ejemplos del apunte de Algoritmos de Fontela, pero no veo qué estoy haciendo mal todavía.


Como dijo Kartlan, te falta declarar las variables que usas en el main.
La firma de una función/procedimiento lo único que hace es permitir verificar que el tipo de lo que estás pasando es realmente del tipo que requiere.

Por otro lado, una variable global es una que se usa en todo el programa independientemente del módulo en que se encuentre (sin pasarla como parámetro), que definas una variable en el main no la hace global.


Capricornio Género:Masculino Serpiente OfflineGalería Personal de JohannVer perfil de usuarioEnviar mensaje privado
Torbellino
Nivel 9


Edad: 37
Registrado: 29 May 2006
Mensajes: 1742
Ubicación: Congreso
Carrera: Electrónica y Informática
CARRERA.electronica.4.gif
MensajePublicado: Mar Dic 07, 2010 12:14 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Las variables quedan declaradas dentro del procedimiento, locales de ese procedimiento. Lo que no existe es la variable RegVuelo para el programa principal. Tenés que declararla entre el último procedimiento y el begin del programa principal.

Las variables declaradas así no son globales: los procedimientos no las pueden ver. Son locales del programa principal, por decirlo de alguna manera. Para que las pueda usar un procedimiento, se la tenés que pasar por parámetro.

Para declarar las variables como globales (ya sé que no lo querés hacer, pero está bueno que sepas hacerlo para ver la diferencia) las declarás arriba de todos los procedimientos. Si hacés eso, podés usarlas sin pasarlas como parámetro, que es lo que siempre se des-recomienda enfáticamente.

Saludos

_________________
Image
No hay vuelta atrás...


Spike Spiegel escribió:
Por un lado se celebran las hazañas de San Martín, Bolivar y demases, la reforma de 1918, el cordobazo y otras tantas en Argentina, Latinoamérica y el mundo entero. No sé cuántos habrán llorado mirando Braveheart al grito de FREEDOM de Wallace y dicho "cuántos huevos, viejo", tenido ganas de cambiar el mundo cuando terminaron de ver V for Vendetta o celebrado toda la ficcionaria justicia que solía hacer El Zorro.
Y sin embargo...
"Ay, no, violencia no. Ay, no, corte de calle, no. Ay, no, piden democracia pero son antidemocráticos con sus métodos. Ay, no, a la facultad se viene a estudiar"
¡PERO QUÉ MANGA DE PUTOS!

Leo Género:Masculino Tigre OfflineGalería Personal de TorbellinoVer perfil de usuarioEnviar mensaje privadoEnviar emailMSN MessengerNúmero ICQ
franco379
Nivel 3


Edad: 33
Registrado: 13 Mar 2010
Mensajes: 20
Ubicación: Balvanera, Ciudad Autónoma de Buenos Aires
Carrera: Informática y Sistemas
blank.gif
MensajePublicado: Mar Dic 07, 2010 12:28 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Johann escribió:
franco379 escribió:
Kartlan escribió:
Te falta definir todas las variables globales que le tiraste encima al programa...

Tenes arriba definidos los tipos pero no las variables.

Si tu respuesta es "pero los escribí arriba", no hiciste eso, definiste todos los tipos que queres usar... pero no las variables... es como gritarle al ejercicio de analisis "VOY A USAR REALES!!!" y esperar que los reales hagan el laburo solos...

¿como?: var ... etc etc... fuera de cualquier función..


Gracias por responder.

Variables globales no podemos usar. Usamos pasaje por referencia entre procedimientos.
¿No quedan ya definidas las variables si las pongo en la firma del módulo?
¿O las tengo que declarar con var dentro del subprograma también?

Revisé un par de ejemplos del apunte de Algoritmos de Fontela, pero no veo qué estoy haciendo mal todavía.


Como dijo Kartlan, te falta declarar las variables que usas en el main.
La firma de una función/procedimiento lo único que hace es permitir verificar que el tipo de lo que estás pasando es realmente del tipo que requiere.

Por otro lado, una variable global es una que se usa en todo el programa independientemente del módulo en que se encuentre (sin pasarla como parámetro), que definas una variable en el main no la hace global.



Ah... ¿O sea que las tengo que declarar en la sección var del programa principal, no?
Como en mi cátedra insistieron tanto con que no usemos variables globales, pensé que esa sección del main quedaba vacía siempre.

Pero claro, las declarás igual y después apuntás la memoria al mismo lugar para esa variable en todos los subprogramas.

Gracias por la ayuda! Ahora pruebo y les digo.


Cancer Género:Masculino Caballo OfflineGalería Personal de franco379Ver perfil de usuarioEnviar mensaje privado
franco379
Nivel 3


Edad: 33
Registrado: 13 Mar 2010
Mensajes: 20
Ubicación: Balvanera, Ciudad Autónoma de Buenos Aires
Carrera: Informática y Sistemas
blank.gif
MensajePublicado: Mar Dic 07, 2010 12:30 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Torbellino escribió:
Las variables quedan declaradas dentro del procedimiento, locales de ese procedimiento. Lo que no existe es la variable RegVuelo para el programa principal. Tenés que declararla entre el último procedimiento y el begin del programa principal.

Las variables declaradas así no son globales: los procedimientos no las pueden ver. Son locales del programa principal, por decirlo de alguna manera. Para que las pueda usar un procedimiento, se la tenés que pasar por parámetro.

Para declarar las variables como globales (ya sé que no lo querés hacer, pero está bueno que sepas hacerlo para ver la diferencia) las declarás arriba de todos los procedimientos. Si hacés eso, podés usarlas sin pasarlas como parámetro, que es lo que siempre se des-recomienda enfáticamente.

Saludos


Ah, buenísimo! No había llegado a ver tu post jaja. Ahora si no me queda ninguna duda. Gracias!


Cancer Género:Masculino Caballo OfflineGalería Personal de franco379Ver perfil de usuarioEnviar mensaje privado
Kartlan
Nivel 5


Edad: 43
Registrado: 09 Ago 2005
Mensajes: 176
Ubicación: Once
Carrera: Informática
argentina.gif
MensajePublicado: Mar Dic 07, 2010 6:21 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Si te dijieron "no usen variables globales"... pones un procedure "principal", y las declaras locales a ese procedimiento y ya esta.

Código:

procedure hacer_todo();
var
   integer contador;
   tReg RegistroA;
   etc...
begin
   ...
end;

begin
   hacer_todo();
end.



Aries Género:Masculino Gallo OfflineGalería Personal de KartlanVer perfil de usuarioEnviar mensaje privadoEnviar emailYahoo MessengerMSN Messenger
Johann
Nivel 9


Edad: 34
Registrado: 04 Abr 2009
Mensajes: 1098
Ubicación: Nuñez
Carrera: Informática
CARRERA.informatica.3.jpg
MensajePublicado: Mar Dic 07, 2010 11:44 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Kartlan escribió:
Si te dijieron "no usen variables globales"... pones un procedure "principal", y las declaras locales a ese procedimiento y ya esta.

Código:

procedure hacer_todo();
var
   integer contador;
   tReg RegistroA;
   etc...
begin
   ...
end;

begin
   hacer_todo();
end.



Repito, declarar variables en el main no quiere decir que sean globales.
Son globales cuando se usan en varios módulos del programa sin pasarse por parámetro. Citando a Torbellino:

Torbellino escribió:
Para declarar las variables como globales (ya sé que no lo querés hacer, pero está bueno que sepas hacerlo para ver la diferencia) las declarás arriba de todos los procedimientos. Si hacés eso, podés usarlas sin pasarlas como parámetro, que es lo que siempre se des-recomienda enfáticamente.


Capricornio Género:Masculino Serpiente OfflineGalería Personal de JohannVer perfil de usuarioEnviar mensaje privado
franco379
Nivel 3


Edad: 33
Registrado: 13 Mar 2010
Mensajes: 20
Ubicación: Balvanera, Ciudad Autónoma de Buenos Aires
Carrera: Informática y Sistemas
blank.gif
MensajePublicado: Mar Dic 07, 2010 11:29 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Kartlan escribió:
Si te dijieron "no usen variables globales"... pones un procedure "principal", y las declaras locales a ese procedimiento y ya esta.

Código:

procedure hacer_todo();
var
   integer contador;
   tReg RegistroA;
   etc...
begin
   ...
end;

begin
   hacer_todo();
end.



JAJA pero me van a odiar si hago eso.

Al final anduvo bien. Tuve que retocar un par de partes que no hacian bien las cosas nomás.

No les pongo el código porque a nadie le importa el pascal y las aerolineas jaja.

Gracias de nuevo.


Cancer Género:Masculino Caballo OfflineGalería Personal de franco379Ver perfil de usuarioEnviar mensaje privado
Kartlan
Nivel 5


Edad: 43
Registrado: 09 Ago 2005
Mensajes: 176
Ubicación: Once
Carrera: Informática
argentina.gif
MensajePublicado: Mie Dic 08, 2010 9:54 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

El tema de las variables globales es gigante el por que no usarla pasa principalmente por el scope, si vos dejas una variable global todo pedacito de código dando vueltas puede usarla y es un problema para estar seguro donde tocas esta variable. La idea del procedure y poner los var ahí adentro es que quede claro para todo el que lea "estas variables solo se usan acá". Ya que esa es la intención que tenian las variables, no veo por que no hacerla explicita, pero si... para algo 1... alcanza y sobra con ponerlas locales al modulo, hay cosas para hacer con variables globales, para todo lo demas esta singleton... ¬¬

http://wiki.freepascal.org/Global_variables


Aries Género:Masculino Gallo OfflineGalería Personal de KartlanVer perfil de usuarioEnviar mensaje privadoEnviar emailYahoo MessengerMSN Messenger
Mostrar mensajes de anteriores:      
Responder al tema Ver tema anteriorEnviar por mail a un amigo.Mostrar una Lista de los Usuarios que vieron este TemaGuardar este Tema como un archivoPrintable versionEntrá para ver tus mensajes privadosVer tema siguiente

Ver tema siguiente
Ver tema anterior
Podés publicar nuevos temas en este foro
No podés responder a temas en este foro
No podés editar tus mensajes en este foro
No podés borrar tus mensajes en este foro
No podés votar en encuestas en este foro
No Podéspostear archivos en este foro
No Podés bajar archivos de este foro


Todas las horas son ART, ARST (GMT - 3, GMT - 2 Horas)
Protected by CBACK CrackerTracker
365 Attacks blocked.

Powered by phpBB2 Plus, phpBB Styles and Kostenloses Forum based on phpBB © 2001/6 phpBB Group :: FI Theme :: Mods y Créditos

Foros-FIUBA está hosteado en Neolo.com Cloud Hosting

[ Tiempo: 0.2923s ][ Pedidos: 20 (0.1972s) ]