Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Procedimientos Funciones
Procedimientos Funciones
Objetivos
Motivacin
En los programas que hemos hecho hasta ahora todo el cdigo se encuentra en el
programa principal (a partir del void main). Esta estrategia resulta problemtica
cuando tenemos programas grandes, porque al encontrarse todo el cdigo en el
programa principal es ms difcil de entender, detectar errores, hacer modificaciones,
etc.
Todos los lenguajes de programacin tienen algn mecanismo que permite definir
bloques de cdigo que se escriben aparte del programa principal. Cada bloque realiza
una cierta operacin con entidad lgica (por ejemplo, ordenar un vector, o escribir unos
datos en pantalla), y el programa principal activa los bloques de cdigo cuando necesita
realizar esas operaciones.
Organizar los programas usando bloques hace que el cdigo est mejor organizado y sea
ms fcil de entender (y por tanto, de mantener). Incluso en algunas ocasiones, el
programa principal activa un mismo bloques varias veces, con lo cual, aunque el cdigo
ejecuta varias veces, slo hay que escribirlo una vez.
Las funciones en C
#include <stdio.h>
void main ()
{
int a,b;
int max;
(Escribe los numeros:\n); #include <stdio.h>
#includeprintf
<stdio.h>
scanf (%d %d,&a,&b);
int maximo (int x, int y)
if ()
(a>b)
void main
{
max = a;
{
if (x>y )
else
int a,b;
return x ;
int max;max = b;
else
return y ;
printf (Escribe los numeros:\n);
} ;
scanf (%d %d,&a,&b);
if (a > b)
void main ()
max = a;
{
else
int a,b;
max = b;
int max;
printf (El maximo es %d\n,max);
}
printf (Escribe los numeros:\n);
scanf (%d %d,&a,&b);
max = maximo (a,b);
printf (El maximo es %d\n,max);
}
Habrs observado que a veces hemos avanzado en la ejecucin con F10 y otras veces
con F11. Ambas opciones sirven para avanzar la ejecucin paso a paso, pero hay una
diferencia muy importante. Si avanzas con F10 entonces, cuando el computador llegue a
una funcin la ejecutar de golpe sin ensearte paso a paso las sentencias que hay
dentro de la funcin. En cambio, si avanzas con F11 el computador te mostrar paso a
paso las sentencias que hay dentro de la funcin.
2.
Ejecuta de nuevo paso a paso el programa anterior, avanzando siempre con F10. Vers
como la funcin se ejecuta de golpe en un solo paso, sin mostrarte las sentencias que hay
dentro de la funcin.
3. Ejecuta ahora de nuevo el programa paso a paso pero avanzando siempre con F11. Vers
que justo cuanto das la orden de ejecutar la sentencia printf el computador te muestra
una ventana con la imagen de la izquierda. Si cierras esa ventana aparecer una pantalla
con la imagen de la derecha. Lo que ha pasado es que, puesto que ests usando F11, el
computador est intentando mostrarte la ejecucin paso a paso de la funcin printf, que
es una funcin como cualquier otra, aunque ya programada previamente. La imagen de la
derecha te muestra las instrucciones de la funcin printf escritas en el lenguaje
ensamblador del computador.
Escribe un programa principal que use la funcin maximo para calcular el mayor de 4
nmeros enteros, usando el menor nmero posible de sentencias.
Procedimientos
A veces es necesario realizar una tarea que no produce ningn resultado. Esa tarea
tambin se puede escribir en forma de bloque, pero en ese caso, en vez de llamarla
funcin la llamamos procedimiento. Fjate en el siguiente ejemplo.
#include <stdio.h>
int maximo (int x, int y)
{
if (x>y )
return x ;
else
return y ;
} ;
void escribir (int r)
{
printf (El resultado es %d\n,r);
};
void main ()
{
int a,b;
int max;
printf (Escribe los numeros:\n);
scanf (%d %d,&a,&b);
max = maximo (a,b);
escribir (max);
}
Normalmente, una funcin (o un procedimiento) hace tareas ms complejas que las que
hace la funcin maximo. Para realizar esas tareas la funcin necesitar algunas
variables de apoyo, que llamaremos variables locales. Las variables locales se crean en
el momento en que se activa la funcin, y desaparecen en el momento en que la funcin
termina. Veamos un ejemplo.
#include <stdio.h>
int suma_d (int x)
{
int d, suma;
suma=0;
d = x%10;
while (x >0)
{
suma = suma + d;
x = x/10;
d = x%10;
}
return suma;
} ;
void main ()
{
int a;
printf ("Escribe el numero:\n");
scanf ("%d",&a);
printf ("La suma de digitos es %d\n",suma_d(a));
}
La funcin suma_d calcula la suma de los dgitos del nmero entero que recibe como
parmetro. Para ello necesita las variables locales d y suma.
4. Ejecuta el programa y comprueba que funciona correctamente. Ejectalo despus paso a
paso, observando las variables d y suma en la ventana del watch. Comprueba que antes de
llamar a la funcin suma_d, el computador no reconoce las variables d y suma (puesto que
son locales a la funcin, y todava no se han creado). Justo cuando se inicia la funcin se
crean las variables, que vuelven a desaparecer cuando la funcin ha acabado.
Por otra parte, la funcin suma_primos calcula la suma de los nmeros primos que
hay en el vector que recibe como parmetro. Para ello, usa la funcin es_primo.
Por ltimo, el programa principal lee de teclado un vector de nmeros, y calcula la suma
de los que son primos, usando la funcin suma_primos.
5.
Ejercicios