Diferencia entre revisiones de «Programación en Pascal/Funciones y procedimientos»

Contenido eliminado Contenido añadido
seccionado y con tags de sources
Línea 101:
En el próximo apartado veremos la diferencia entre pasar parámetros por valor (lo que hemos estado haciendo) y por referencia (para poder modificarlos), y jugaremos un poco con la recursividad.
 
 
===Procedimientos con parámetros (2).===
Ya habíamos visto qué era eso de los procedimientos y las funciones, pero habíamos dejado aparcados dos temas importantes: los tipos de parámetros y la recursividad.
 
Línea 113 ⟶ 114:
 
Pero vamos a ver qué ocurre si hacemos cosas como ésta:
<source lang=pascal>
 
{--------------------------}
{ Ejemplo en Pascal: }
Línea 147 ⟶ 148:
writeln( 'Después: ', dato );
end.
</source>
 
¿Qué podemos esperar que pase? Vamos a ir siguiendo cada instrucción:
Línea 165 ⟶ 167:
Pero, ¿cómo lo hacemos si realmente queremos modificar el parámetro. Pues nada más que añadir la palabra "var" delante de cada parámetro que queremos permitir que se pueda modificar...
 
Procedimientos con parámetros (3).
El programa quedaría:
 
===Procedimientos con parámetros (3).===
{--------------------------}
{ Ejemplo en Pascal: }
{ }
{ Segundo proc. que }
{ modifica variables }
{ PROCMOD2.PAS }
{ }
{ Este fuente procede de }
{ CUPAS, curso de Pascal }
{ por Nacho Cabanes }
{ }
{ Comprobado con: }
{ - Turbo Pascal 7.0 }
{ - Turbo Pascal 5.0 }
{ - Surpas 1.00 }
{--------------------------}
 
program PruebaDeParametros2;
 
var dato: integer;
 
procedure modifica( var variable : integer);
begin
variable := 3 ;
writeln( 'Dentro: ', variable );
end;
 
begin
dato := 2;
writeln( 'Antes: ', dato );
modifica( dato );
writeln( 'Después: ', dato );
end.
 
 
Esta vez la última línea del programa sí que escribe un 3 y no un 2, porque hemos permitido que los cambios hechos a la variable salgan del procedimiento (para eso hemos añadido la palabra "var"). Esto es pasar un parámetro por referencia.
 
El nombre "referencia" alude a que no se pasa realmente al procedimiento o función el valor de la variable, sino la dirección de memoria en la que se encuentra, algo que más adelante llamaremos un "puntero".
 
Una de las aplicaciones más habituales de pasar parámetros por referencia es cuando una función debe devolver más de un valor. Habíamos visto que una función era como un procedimiento, pero además devolvía un valor (pero sólo uno). Si queremos obtener más de un valor de salida, una de las formas de hacerlo es pasándolos como parámetros, precedidos por la palabra "var".
Procedimientos con parámetros (3).
El programa quedaría:
<source lang=pascal>
 
{--------------------------}
{ Ejemplo en Pascal: }
Línea 245 ⟶ 204:
writeln( 'Después: ', dato );
end.
</source>
 
 
Esta vez la última línea del programa sí que escribe un 3 y no un 2, porque hemos permitido que los cambios hechos a la variable salgan del procedimiento (para eso hemos añadido la palabra "var"). Esto es pasar un parámetro por referencia.
Línea 253 ⟶ 212:
Una de las aplicaciones más habituales de pasar parámetros por referencia es cuando una función debe devolver más de un valor. Habíamos visto que una función era como un procedimiento, pero además devolvía un valor (pero sólo uno). Si queremos obtener más de un valor de salida, una de las formas de hacerlo es pasándolos como parámetros, precedidos por la palabra "var".
Procedimientos con parámetros (4).
===Procedimientos con parámetros (34).===
Y como ejercicio queda un caso un poco más "enrevesado". Qué ocurre si el primer programa lo modificamos para que sea así:
<source lang=pascal>
 
{--------------------------}
{ Ejemplo en Pascal: }
Línea 289 ⟶ 249:
writeln( 'Después: ', dato );
end.
</source>
 
=Argumentos variables=