Pascal/Turbo Pascal - Ayuda Seguimiento!!

 
Vista:

Ayuda Seguimiento!!

Publicado por delfin (2 intervenciones) el 22/10/2006 21:33:14
program mm;
var
a,b:integer;

procedure nn (i:integer; var j:integer);

begin

i:=i+10;
j:=j+10;
write (i,j);

end;

begin

read (a,b);
nn(a+b,b-a); (ME TIRA ERROR EN ESTA LINEA, NO SE PUEDE PASAR ASI LaS VARIABLES?)
write (a,b);

end.

gracias por la rta de mi duda anterior :)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda Seguimiento!!

Publicado por Diego Romero (996 intervenciones) el 22/10/2006 22:01:09
Supongo que al menos tienes una idea de cómo funcionan los parámetros por referencia (var). Al querer pasar un parámetro por referencia éste sí o sí debe ser una variable, no puede ser una expresión como lo que estás haciendo, porque, cuando el procedimiento debe enviar el parámetro ¿a cuál de las dos variables irá a parar?.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda Seguimiento!!

Publicado por delfin (2 intervenciones) el 23/10/2006 00:01:32
pero porque si pongo la siguiente forma

nn(a+b,b); si me la toma.??
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda Seguimiento!!

Publicado por Carlos Guimaraenz (265 intervenciones) el 23/10/2006 04:17:20
Hola Delfín!
El asunto es que el parámetro que pasas por referencia (con la palabra VAR antes) es el segundo.
nn(a+b,b);
El tema de los parámetros es muy importante conocerlo. Cuando tienes un parámetro pasado por valor (sin la palabra VAR), se crea una variable local en el procedimiento, pero no devuelve ningún valor, es por eso que en la llamada al módulo puedes poner una expresión como puede ser una suma, o una constante. Dicha variable local, al terminar el módulo se destruye, es por eso que los cambios no son reflejados fuera del mismo.
Pero al pasar parámetros por referencia (con la palabra VAR) lo que se pasa es la referencia a la dirección de memoria donde está ubicada la variable, por lo cual si le pasas una constante por ejemplo, no existe una dirección de memoria donde guardar las modificaciones.
Obviamente éste es un tema más largo que deberías ver en algún tutorial (puedes encontrar muy buenos tutoriales en este sitio) pero como introducción puede servirte.

Un abrazo y cualquier otra duda consulta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda Seguimiento!!

Publicado por Diego Romero (996 intervenciones) el 24/10/2006 02:43:31
Exactamente, tal como te dice Carlos, cuando declaras un parámetro por referencia (con var) cuando invocas el procedimiento lo que se le pasa es la dirección de memoria de la variable, una expresión por definición no es una variable, por lo tanto no tiene dirección de memoria alguna (aunque las variables que forman la expresión sí la tienen). Me parece que esto responde tu pregunta de por qué funciona con (a+b,b) y por qué no funciona con (a+b,a+b).

PD para Carlos: las constantes sí tienen una dirección de memoria pero es de solo lectura.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda Seguimiento!!

Publicado por Carlos Guimaraenz (265 intervenciones) el 25/10/2006 19:22:09
Es cierto, Diego, las constantes tienen una dirección de memoria... en realidad a lo que me refería con constante era un número constante (pasándole como parámetro en la llamada al procedimiento directamente un número), pero igualmente vale la aclaración.
Un abrazo grande!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar