Programación General > Pascal
Parametros por valor
(1/1)
Ryusaki N:
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 --- Begin clrscr; graficas; seleccion; End.(*En donde quisiera hacer la llamada del procedimiento calculo3(x,y: integer);*)
Gracias de antemano por su ayuda, saludos.
m0skit0:
¿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.
epayan:
un ejemplos para ser mas explicitos esperemos que sea de ayuda
--- Código: Pascal --- program nombre_del_programa;uses crt;{------------------*----------------------------------*---------------------}{en este ejemplo el X y el Y no se modificarán}procedure calculo1(x,y:integer);begin {lo que se quiera hacer con X} X:=x+1; {lo que se quiera hacer con Y} y:=Y+1;end; {------------------*----------------------------------*---------------------}{en este ejemplo el X y el Y se modificarán}procedure calculo3(var x,y:integer);begin {lo que se quiera hacer con X modificandolo} X:=x+1; {lo que se quiera hacer con Y modificandolo} y:=Y+1;end;var x,y:integer;begin clrscr; x:=0; y:=0; calculo1(x,y); {en este procedimiento no se modifican los valores de X Y} writeln('valor de X : ',x,' Valor de Y ',y); calculo3(x,y); {en este procedimiento se modifican los valores X Y} writeln('valor de X : ',x,' Valor de Y ',y);end.
Ryusaki N:
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 --- procedure calculo(a:char); forward;
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?
epayan:
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 --- procedimientosfunciones{cuerpo del programa}beginend.
tal vez con un poco de orden y esctructuracion de tus funciones y procedimientos corrijas el problema
Navegación
Ir a la versión completa