Está en la página 1de 9

1

Funciones.
Una funcin es una entidad formada por un grupo de sentencias destinadas a hacer un trabajo concreto.
Los objetivos bsicos de la utilizacin de funciones son tres:

1. Evitar repeticiones de cdigo.


Supongamos que en uno de sus programas tiene una seccin de cdigo destinado a calcular la
potencia de un nmero. Si despus, en el mismo programa necesita calcular la potencia de otro
nmero, seria deseable, en lugar de escribir otra vez las sentencias que calculan la potencia,
poder saltar hacia la seccin que calcula la potencia y volver, una vez hecho el clculo, hacia el
flujo normal del programa,. Observe el esquema siguiente, en el cuadro de su izquierda se
observa que hay cdigo repetido (podra ser el cdigo que calcula la potencia de un nmero),
mientras que en el cuadro de su izquierda el cdigo solo aparece una vez, cuando este es
requerido se llama y punto.

main()
{
..........;
.............;
********;
********;
*********;
---------;
------------;
********;
********;
*******;
----------;
-----------;
}

main()
{

Cdigo repetidoo

............;
................;
funcin();
----------;
--------------;
funcin();
---------;
-------------;

}
funcin()
{
*******;
*******;
*****;
}

2. Organizacin del programa.


La utilizacin de funciones permite dividir el programa en actividades. Cada funcin realiza una
tarea determinada, y cada funcin puede comprobarse, ms o menos, de forma independiente,
facilitando as el diseo, la comprensin de los programas, y la deteccin de errores.

3. Independencia.
Utilizar funciones independientes del programa principal y entre si, permite su reutilizacin en
diferentes programas. En el ejemplo de calcular la potencia de un nmero, se podra coger la
funcin que hace esta operacin, y incluirla en cualquier programa que la necesite sin tenerla que
escribir cada vez.

Ejemplo de un programa con una funcin.


Funcin que genera un sonido.
#include <stdio.h>
#include <conio.h>
void sonido(void);
main()
{

// Prototipo de la funcin

printf(Ejemplo de funcin );
printf(Se llama a la funcin );
sonido();
// Llama la funcin
printf(Se vuelve a llamar a la funcin);
sonido();
// Llama la funcin
printf(Final de programa; pulse una tecla);
getch();

}
// Funcin sonido. Emite un beep y muestra un mensaje.
void sonido(void)
// Declaracin de la funcin
{
printf(\x7);
printf(Est dentro de la funcin sonido, pulse una tecla para
volver a funcin main());
getch();
}

Estructura de las funciones.


El programa anterior est formado por dos funciones: la funcin main(), y la funcin sonido().
Recuerde del primer tema que la funcin main() siempre es la que primero se ejecuta. Desde la
funcin main() se llama a la funcin sonido() (llamar a una funcin significa que se ejecuta el
cdigo de la funcin y despus se vuelve a la lnea siguiente desde donde se ha hecho la llamada
para continuar con el flujo normal del programa). Para poder utilizar una funcin, se han de
definir tres elementos en el programa,
Definicin de la funcin.
Prototipo de la funcin.
Llamada a la funcin.

Definicin de funcin.
Se llama definicin de funcin a la funcin misma. La funcin siempre empieza con una lnea
que incluye, entre otros elementos, el nombre de la funcin, en el ejemplo anterior,
void sonido (void)

Esta lnea se llama declarador de la funcin. El void inicial significa que la funcin no devuelve
nada, y el void que va entre el parntesis, que la funcin no recibe ningn parmetro; es una
funcin sin argumentos. Se vern las funciones que devuelven valores y los argumentos, un poco
ms adelante.
Fjese que el declarador de funcin no acaba en punto y coma, no es una instruccin, sirve para
indicar al compilador que en este punto empieza la definicin de la funcin. A continuacin del
declarador de la funcin se encuentra el cuerpo de la funcin, que son todas las lneas de cdigo
que incluye.

Prototipo de la funcin.
Es la lnea que hay antes de la funcin main()
void sonido(void);
El prototipo (tambin llamado declaracin de funcin), sirve para declarar la funcin, de la
misma manera que se han de declarar les variables antes de poder ser utilizadas. Esta lnea le
indica al compilador el nombre de la funcin, el tipo de dato que devuelve (ninguno en el
ejemplo), y el tipo de argumentos que se le pasan (ninguno en el ejemplo), de esta manera cuando
el compilador llegue a las lneas que llaman a la funcin, comprobar que esta llamada sea
sintcticamente correcta (que el tipo de funcin y el tipo y nmero de argumentos coincidan con
la declaracin del prototipo).
El prototipo est escrito antes de la funcin main(), esto provoca que esta funcin pueda ser
llamada desde todas les funciones del programa.
Observe que la lnea del prototipo acaba con punto y coma.

Llamar a la funcin.
Para llamar a la funcin sonido se utiliza la misma sintaxis que cuando es llama cualquier
funcin de C, como por ejemplo printf(), getche() o clrscr(), es decir, el nombre de la funcin
seguido de parntesis. Estos son necesarios para que el compilador sepa que nos referimos a una
funcin. La llamada a una funcin es una instruccin o sentencia, por tanto ha de acabar en punto
y coma.

Utilizacin de argumentos para pasar datos a una funcin.


La funcin sonido sencillamente emite un pitido, muestra un mensaje y vuelve. Podra ser
interesante que se pudiera controlar la duracin del pitido, dicho de otra manera, que se pudiera
indicar a la funcin el nmero de pitidos que tiene que ejecutar. El mecanismo que permite
comunicar informacin a una funcin son los argumentos o parmetros. Ya ha utilizado funciones
con argumentos en algunas funciones como printf() o scanf(); por ejemplo, en la funcin printf(),
el texto que se cierra entre comillas es un argumento. Vea el programa siguiente
#Include <stdio.h>
#include <conio.h>
void sonido(int );
main()
{

int veces;
clrscr();
sonido(2);
printf(Entre el nmero de veces que ha de pitar : );
scanf(%d,&veces);

4
sonido(veces);
}
void sonido(int veces)
{
int i;

for (i=1 ; y <= veces ; i++)


printf(\x7);

Prototipo de la funcin.
void sonido (int );
Cuando se especifica el prototipo, se indica que la funcin tiene un parmetro del tipo int.
Cuando el compilador encuentre las diferentes llamadas a la funcin, comprobar s estas
incluyen como parmetro un valor o una variable tipo int; si no es as, se mostrar un error.
Too few parameters in call to nombre de funcin llamada in function nombre de la
funcin que llama.
Significa que se ha llamado a la funcin con menos parmetros de los que se han
especificado en el prototipo.
Extra parameter in call to nombre de la funcin llamada in function nombre de la
funcin que llama.
Significa que se ha llamado a la funcin con ms parmetros de los especificados en el
prototipo.
En lugar de void sonido(int) es recomendable poner tambin el nombre de la variable receptora
de la funcin. As el prototipo quedara void sonido(int veces); sencillamente para dejar el
programa ms claro.

Definicin de funcin.
void sonido(int veces)
Observe en la definicin de funcin el parmetro int veces. En este apartado se declara la variable
veces de tipo int, esta variable recibir los valores pasados en las diferentes llamadas que se hace
a la funcin.
sonido(2);
sonido(veces);

la variable veces recibir el valor 2.


la variable veces recibir el valor de la variable veces declarada en main.

Variables locales.
La variable i definida dentro de la funcin sonido slo se conoce dentro de esta funcin, no se
puede utilizar en la funcin main().
La variable veces definida en main() slo es conocida en main(). La variable veces definida como
argumento de la funcin sonido, slo es conocida dentro de la funcin sonido. Evidentemente, la
variable veces declarada en main() no es la misma variable que veces declarada como argumento
de funcin sonido.
Una variable slo se conoce en la funcin donde se declara, y slo puede utilizarse en esta
funcin. Vea el siguiente ejemplo donde se utiliza una funcin para sumar dos nmeros:
#Include <stdio.h>
#include <conio.h>
void suma (int a, int b);
main()
{
int a, b;
clrscr();
suma(3, 5);
printf(Entre el primer valor a sumar : );
scanf(%d,&a);
printf(Entre el segundo valor a sumar : );
scanf(%d,&b);
suma(a,b);
}
void suma (int a, int b)
{
int total;
total = a + b;
printf(El valor de la suma es : %d \n , total);
}
Esquema de memoria.
a
b

Variables de funcin main()

a
b
total

Variables de funcin suma()

En la funcin main() se han declarado dos variables a y b, y en la funcin suma se han declarado
tres a, b y total; a y b son adems variables que reciben valores externos. Insistimos en que a y b
declaradas en main() no son las mismas variables que a y b declaradas en suma, vea el esquema
de memoria.

Funcionamiento del programa.

Cuando el programa llega a la sentencia suma(3,5), se pasa a ejecutar la funcin suma.


La variable a de funcin suma recibe el valor 3.
La variable b de funcin suma recibe el valor 5.
Se ejecuta la funcin suma y se vuelve a main().
Se ejecutan las sentencias printf y scanf en las cuales se entran valores desde teclado, que
se guardan en les variables a y b de funcin main().
El programa llega a la sentencia suma(a, b), y se pasa otra vez a ejecutar la funcin suma.
La variable a de funcin suma recibe el valor de la variable a de funcin main.
La variable b de funcin suma recibe el valor de la variable b de funcin main.
Se ejecuta la funcin suma y se vuelve a main().
Finaliza el programa.

Variables externas o globales. mbito de una variable.


Ya se ha comentado que las variables declaradas dentro de una funcin, solo se pueden utilizar
dentro de esta funcin. EL mbito de las variables locales es la funcin donde se declaran.
Una variable externa o global, es aquella que se declara fuera de cualquier funcin (normalmente
antes de la sentencia main()); esta variable es visible desde todas las funciones, todas pueden
utilizarla. El mbito de estas variables es todo el programa.

Copie el programa siguiente y ejectelo para acabar de comprender los conceptos global,
local y mbito de una variable.
#include <stdio.h>
#include <conio.h>
void prueba(int a, int b);
int global;
main()
{

// Esta variable la conocen todas las funciones

int a, b;
// Variables locales a main, solo conocida en funcin
//main.
a = 10;
b = 20;
global = 20;
prueba(a, b);
printf(%d, a);
// Escribe 10
printf(%d, b);
// Escribe 20
printf(%d, global); // Escribe 31, el valor que se le ha dado en funcin prueba.

}
void prueba(int Pepe, int Paco)
{
printf(%d, Pepe);

// Escribe 10 que es el valor que recibe de variable a de

printf(%d, Paco);

// Escribe 20 que es el valor que recibe de variable b de

Pepe = 5;
Paco = 5;

// Asigna 5 a variable local Pepe


// Asigna 5 a variable local Paco

main
main

7
global = 31;

// Asigna 31 a la variable global

Funciones que devuelven un valor.


Estas son un tipo de funciones que devuelven algn valor hacia a la funcin desde donde se han
llamado. Una funcin de este tipo es getche(). Observe que cuando utiliza esta funcin la
sentencia tiene este aspecto:
tecla = getch();
El programa llama a la funcin getche(), esta espera a que se entre un valor desde teclado, y
entonces devuelve este valor sobre la variable tecla.
Las funciones que devuelven valores han de ser del mismo tipo que el valor que devuelven. Vea a
continuacin una funcin que suma dos nmeros enteros y devuelve la suma de estos valores:
#include <stdio.h>
#include <conio.h>
int suma (int a, int b);
main()
{

int a, b, total;
clrscr();
printf(Entre el primer valor : );
scanf(%d, &a);
printf(Entre el segundo valor : );
scanf(%d, &b);
total = suma (a,b);
printf(%d,total);

}
int suma(int a, int b)
{
int total;

total = a + b;
return(total);

La sentencia return es la que se utiliza para devolver el valor.


Observe que cuando la funcin devuelve un valor tipo int (la variable total es de este tipo), la
funcin ha sido declarada como int, no como void.

Funcin que devuelve el mayor de dos nmeros entrados desde teclado.


#include <stdio.h>
#include <conio.h>
int mayor(int a, int b);
main()
{
int a, b, nummayor;

clrscr();
printf(Entre el primer valor : );
scanf(%d, &a);
printf(Entre el segundo valor : );
scanf(%d, &b);
nummayor = mayor(a, b);
printf(El valor mayor %d, nummayor);
}
int mayor(int a, int b)
{
if (a > b)
return (a);
return(b);
}

Las dos lneas


nummayor = mayor(a, b);
printf(El valor mayor es : %d );
Se hubiera podido sustituir por la sentencia
printf(El valor mayor es : %d , mayor(a,b));

Programa que calcula la suma de los factoriales de dos nmeros entrados desde teclado.
#include <stdio.h>
#include <conio.h>
long int factorial(int numero);
main()
{

int numero1, numero2;


long int total;
clrscr();
printf(Entre el primer valor : );
scanf(%d, &nmero1);
printf(Entre el segundo valor : );
scanf(%d, &nmero2);
total = factorial(numero1) + factorial (numero2);
printf(El total es : %ld , total);

long int factorial(int numero)


{
int i;
long int total = 1;
for (i=numero; y >= 1; i--)
total = total * i;
return(total);
}
Se ha hecho la funcin tipo long int, porque el factorial crece muy rpidamente.

También podría gustarte