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 

Entradas relacionadas: