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
|
|
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
|
|
|
|
|
Kartlan
Nivel 5
Edad: 43
Registrado: 09 Ago 2005
Mensajes: 176
Ubicación: Once
Carrera: Informática
|
|
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..
|
|
|
|
|
|
|
|
|
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
|
|
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.
|
|
|
|
|
|
|
|
|
Johann
Nivel 9
Edad: 34
Registrado: 04 Abr 2009
Mensajes: 1098
Ubicación: Nuñez
Carrera: Informática
|
|
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.
|
|
|
|
|
|
|
|
|
Torbellino
Nivel 9
Edad: 37
Registrado: 29 May 2006
Mensajes: 1742
Ubicación: Congreso
Carrera: Electrónica y Informática
|
|
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
|
|
|
|
_________________
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!
|
|
|
|
|
|
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
|
|
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.
|
|
|
|
|
|
|
|
|
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
|
|
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!
|
|
|
|
|
|
|
|
|
Kartlan
Nivel 5
Edad: 43
Registrado: 09 Ago 2005
Mensajes: 176
Ubicación: Once
Carrera: Informática
|
|
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.
|
|
|
|
|
|
|
|
|
|
Johann
Nivel 9
Edad: 34
Registrado: 04 Abr 2009
Mensajes: 1098
Ubicación: Nuñez
Carrera: Informática
|
|
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.
|
|
|
|
|
|
|
|
|
|
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
|
|
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.
|
|
|
|
|
|
|
|
|
Kartlan
Nivel 5
Edad: 43
Registrado: 09 Ago 2005
Mensajes: 176
Ubicación: Once
Carrera: Informática
|
|
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
|
|
|
|
|
|
|
|
|
|
|
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 CrackerTracker365 Attacks blocked.
|