SoloCodigo

Programación General => Pascal => Mensaje iniciado por: Ryusaki N en Lunes 28 de Septiembre de 2009, 08:59

Título: Parametros por valor
Publicado por: Ryusaki N en Lunes 28 de Septiembre de 2009, 08:59
Ok tengo esta interface montada que consta de 3 menus con opciones para generar unos cuantos calculos. El pequeño sistema esta muy bien ya que los menus se cambian sin problema y se accesa a las secciones muy facilmente pero he probado pasar parametros por valor en unos procedimientos para unas cuantas operaciones y la interface se me desarma. Apreciaria si me despejaran la duda de como tratar la llamada o invocacion de estos desde el programa principal cuya sintaxis es la siguiente:
Código: Text
  1.  Begin
  2.           clrscr;
  3.           graficas;
  4.           seleccion;
  5.           End.
  6. (*En donde quisiera hacer la llamada del procedimiento calculo3(x,y: integer);*)
  7.          
  8.  

Gracias de antemano por su ayuda, saludos.
Título: Re: Parametros por valor
Publicado por: m0skit0 en Lunes 28 de Septiembre de 2009, 11:26
¿Por valor? ¿O quieres decir por referencia? Te aclaro la diferencia por si las moscas:

Por valor: se pasa una copia del valor de la variable, así los cambios de valor en el código llamado no afectan a los valore del llamante. Esto es, si modificamos el valor de la variable en la función/procedimiento, a la vuelta la variable retoma el valor original, y no el modificado.

Por referencia: se pasa un puntero a la variable. Los cambios del valor de la variable son permanentes. Esto es, si modificamos el valor de la variable en la función/procedimiento, a la vuelta la variable retiene el nuevo valor.
Título: Re: Parametros por valor
Publicado por: epayan en Lunes 28 de Septiembre de 2009, 15:51
un ejemplos para ser mas explicitos esperemos que sea de ayuda

Código: Pascal
  1.  
  2. program nombre_del_programa;
  3. uses crt;
  4. {------------------*----------------------------------*---------------------}
  5. {en este ejemplo el X y el Y no se modificarán}
  6. procedure calculo1(x,y:integer);
  7. begin
  8.        {lo que se quiera hacer con X}
  9.         X:=x+1;
  10.        {lo que se quiera hacer con Y}
  11.         y:=Y+1;
  12. end;
  13.  
  14. {------------------*----------------------------------*---------------------}
  15. {en este ejemplo el X y el Y se modificarán}
  16. procedure calculo3(var x,y:integer);
  17. begin
  18.        {lo que se quiera hacer con X modificandolo}
  19.         X:=x+1;
  20.        {lo que se quiera hacer con Y modificandolo}
  21.         y:=Y+1;
  22. end;
  23. var x,y:integer;
  24. begin
  25.     clrscr;
  26.      x:=0;
  27.      y:=0;
  28.      calculo1(x,y); {en este procedimiento no se modifican los valores de X Y}
  29.      writeln('valor de X : ',x,' Valor de Y ',y);
  30.      calculo3(x,y); {en este procedimiento se modifican los valores X Y}
  31.      writeln('valor de X : ',x,' Valor de Y ',y);
  32. end.
  33.  
  34.  
Título: Re: Parametros por valor
Publicado por: Ryusaki N en Lunes 28 de Septiembre de 2009, 17:27
Bueno lo he intentado como ha dicho epayan, el problema es que la interface se altera, entras al programa y en vez de ver el menu principal ves la pantalla del calculo de golpe, y es que vale decir que he declarado los procedimientos de todos los calculos con forward de la siguiente forma:
Código: Pascal
  1.  
  2. procedure calculo(a:char); forward;
  3.  

Lo he definido para que me sirva la invocacion (Es decir quite el forward y puse el procedimiento) pero como te digo la interface se me viene abajo. Es necesario invocar el procedure antes de los demas que tengo invocados en el principal?
Título: Re: Parametros por valor
Publicado por: epayan en Lunes 28 de Septiembre de 2009, 17:30
podriamos ver el codigo para ayudarte mejor
 podría ser una variable global que este controlando tu menú , que te hace entrar de golpe a la opcion calcular
por lo que se procedimientos y funciones van antes de:
Código: Pascal
  1.  
  2. procedimientos
  3. funciones
  4. {cuerpo del programa}
  5. begin
  6. end.
  7.  
  8.  
  9.  

tal vez con un poco de orden y esctructuracion de tus funciones y procedimientos corrijas el problema