I
Clasificado en Matemáticas
Escrito el en
español con un tamaño de 2,88 KB
{
long n1, n2;
do
{
printf("Introduzca el valor de n1 ... ");
scanf("%ld", &n1);
printf("Introduzca el valor de n2 ... ");
scanf("%ld", &n2);
if(n2 != 0)
printf("\nEl mcd de %ld y %ld ",n1, n2);
printf("es %ld\n", Euclides(n1,n2));
}while(n2 != 0);
return 0;
}
long Euclides(long a, long b)
{
static short cont = 0;
long mcd;
while(b)
{
mcd = b;
b = a % b;
a = mcd;
}
printf("Invocaciones a la función ... %hd\n", ++cont);
return mcd;
}
En esta ocasión, además, hemos incluido una variable static en la función Euclides. Esta variable nos
informará de cuántas veces se ha ejecutado la función.
Las variables n1 y n2, de main, dejan de estar accesibles cuando se invoca a la función Euclides. En
ese momento se copian sus valores en las variables a y b que comienzan a existir precisamente en el
momento de la invocación de la función. Además de esas variables locales, y de la variable local mcd,
se ha creado otra, llamada cont, que es también local a Euclides pero que, a diferencia de las demás
variables locales, no desaparecerá cuando se ejecute la sentencia return y se devuelva el control de la
aplicación a la función main: es una variable declarada static. Cuando eso ocurra, perderá la variable
cont su ámbito, y no podrá ser accedida, pero en cuanto se invoque de nuevo a la función Euclides,
allí estará la variable, ya creada, accesible para cuando la función la requiera.
3.7 LLAMADAS POR VALOR Y LLAMADAS POR REFERENCIA
Estos dos nuevos conceptos son tradicionales al hablar de funciones. Y muy importantes. Hacen
referencia al modo en que la función recibe los parámetros.
Hasta ahora, en todos los ejemplos previos presentados, hemos trabajado haciendo llamadas “por
valor”. Decimos que una función es llamada por valor cuando se copia el valor del argumento en el
parámetro formal de la función. Una variable está en la función que llama; y otra variable, distinta, es
la que recibe el valor en la función llamada. La función llamada no puede alterar el valor del
argumento original de la función que llama. Únicamente puede cambiar el valor de su variable local
que ha recibido por asignación el valor de esa variable en el momento en que se realizó la llamada a