Sei sulla pagina 1di 9

Lenguajes de programacin

UNIDAD II: Funciones


- Introduccin
- Definicin
- Vida de una variable

1. Introduccin
Vamos a dar un paso ms en la complejidad de nuestros programas. Vamos a empezar a usar
funciones creadas por nosotros. Las funciones son de una gran utilidad en los programas. Nos
ayudan a que sean ms legibles y ms cortos. Con ellos estructuramos mejor los programas.

Una funcin sirve para realizar tareas concretas y simplificar el programa. Nos sirve para evitar
tener que escribir el mismo cdigo varias veces. Ya hemos visto en el curso algunas funciones
como printf, gotoxy, scanf y clrscr. Algunas de stas estn definidas en una biblioteca (la biblioteca
estndar de C). No tenemos que preocuparnos de ella porque el compilador se encarga de ella
automticamente.

Sin embargo nosotros tambin podemos definir nuestras propias funciones. Pocas veces se ve un
programa un poco complejo que no use funciones. Una de ellas, que usamos siempre, es la
funcin main.

2. Definicin de una funcin


Una funcin tiene el siguiente formato:

tipo_de_variable nombre_de_la_funcin( argumentos )


{
definicin de variables;

cuerpo de la funcin;

return 0;
}

Poco a poco, empecemos por el nombre_de_la_funcin. Para el nombre no se pueden usar mas
que letras, nmeros y el smbolo '_'. No se pueden usar ni acentos ni espacios. Adems el nombre
de la funcin debe empezar por una letra, no puede empezar con un nmero. El nombre de la
funcin se usa para llamarla dentro del programa.

El tipo_de_variable: Cuando una funcin se ejecuta y termina debe devolver un valor. Este valor
puede ser cualquiera de los tipos de variables que hemos visto en el captulo de Tipos de datos
(int, char, float, double) o un tipo de dato definido por nosotros (esto lo veremos ms tarde). El valor
que devuelve la funcin suele ser el resultado de las operaciones que se realizan en la funcin, o si
han tenido xito o no.

Tambin podemos usar el tipo void. Este nos permite que podamos devolver cualquier tipo de
variable o ninguna.

Definicin de variables: Dentro de la funcin podemos definir variables que slo tendrn validez
dentro de la propia funcin. Si declaramos una variable en una funcin no podemos usarla en otra.

_______________________________________________________________
1
Unidad II: Funciones
Lenguajes de programacin

Cuerpo de la funcin: Aqu es donde va el cdigo de la funcin.

Return: Antes hemos indicado que la funcin devuelve un valor. La sentencia return se usa para
esto. El dato que se pone despues de return es el dato que se devuelve. Puede ser una constante
o una variable. Debe ser del mismo tipo que tipo_de_variable.

Argumentos: Estos son variables que se pasan como datos a una funcin. Deben ir separados por
una coma. Cada variable debe ir con su tipo de variable.

Las funciones deben definirse antes de ser llamadas. En los ejemplos a continuacin se llama a la
funcin desde main, as que tenemos que definirlas antes que main. Esto lo veremos en el
apartado siguiente.

Ejemplo 1. Funcin sin argumentos que no devuelve nada:

Este programa llama a la funcin prepara pantalla que borra la pantalla y muestra el mensaje "la
pantalla est limpia". Por supuesto es de nula utilidad pero nos sirve para empezar.

#include <stdio.h>
#include <conio.h>
void prepara_pantalla(void);

main()
{
prepara_pantalla();/* Llamamos a la funcin */
getch();

}
void prepara_pantalla(void) /* No se debe poner punto y coma aqu */
{
clrscr();
printf( "La pantalla esta limpia\n" );

_______________________________________________________________
2
Unidad II: Funciones
Lenguajes de programacin

Ejemplo 2. Funcin con argumentos, no devuelve ningn valor:

En este ejemplo la funcin compara toma dos nmeros, los compara y nos dice cual es mayor.

#include <stdio.h>
#include <conio.h>

void compara(int,int); /*funcin prototipo*/

main()
{
int num1, num2;

printf( "Introduzca dos nmeros: " );


scanf( "%d %d", &num1, &num2 );

compara( num1, num2 );/* Llamamos a la funcin con sus dos


argumentos */
getch();

/*Definicin de la funcin compara*/

void compara(int a,int b ) /* Metemos los parmetros a y b a la


funcin */
{
if ( a > b )
printf( "%d es mayor que %d\n" , a, b );
else printf( "%d es mayor que %d\n", b, a );
}

_______________________________________________________________
3
Unidad II: Funciones
Lenguajes de programacin

Ejemplo 3. Funcin con argumentos que devuelve un valor.

Este ejemplo es como el anterior pero devuelve como resultado el mayor de los dos nmeros.

#include <stdio.h>
#include <conio.h>
int compara( int a, int b);/*Funcin prototipo*/

main()
{
int num1, num2;
int resultado;

printf( "Introduzca dos nmeros: " );


scanf( "%d %d", &num1, &num2 );

resultado = compara( num1, num2 );/* Recogemos el valor que devuelve


la funcin en resultado */
printf( "El mayor de los dos es %d\n", resultado );

getch();
}

/*Definicin de la funcin*/

int compara( int a, int b ) /* Metemos los parmetros a y b a la


funcin */
{
int mayor; /* Esta funcin define su propia variable, esta
variable slo se puede usar aqu */

if ( a > b )
mayor = a;
else mayor = b;

return(mayor); /*Retorna el valor*/


}

_______________________________________________________________
4
Unidad II: Funciones
Lenguajes de programacin

CIRCUITO1_CODIGO1.C
#include <conio.h>
#include <stdio.h>
#include <math.h>
#define CIRCUITO_VOLTAJE 18
#define RESISTENCIA 6
void main(void)
{
double corriente,voltaje,potencia,potencia_total,resistencia;
int numero_resistencia,contador;
clrscr();
printf("Ingresar el voltaje\n");
scanf("%lf",&voltaje);
if(voltaje>=CIRCUITO_VOLTAJE)
{
printf("Cantidad de resistencia");
scanf("%d",&numero_resistencia);
contador=1;
while(numero_resistencia>=contador)
{
printf("Ingresar el valor - Resistencia:%d\n",contador);
scanf("%lf",&resistencia);
corriente=CIRCUITO_VOLTAJE/resistencia;
printf("\t--------------------------------------------------");
printf("\n\tFormula: Intensidad=Voltajes/nResistencia");
printf("\n\tLa Intensidad - Resistencia%d
es:%lfAmperios",contador,corriente);
potencia=pow(corriente,2);
potencia_total=potencia*resistencia;
printf("\n\t--------------------------------------------------");
printf("\n\tFormula: Potencia=Intensidad ^2*Resistencia");
printf("\n\tLa potencia - corriente%d
es:%lfWatts\n",contador,potencia_total);
contador++;
} /*fin wheli*/
} /*fin if*/
else
{
corriente= CIRCUITO_VOLTAJE/RESISTENCIA;
printf("\tFormula: Intensidad=Voltajes/Resistencia");
printf("\n\tLa Intensidad - Resistencia
es:%lfAmperios",corriente);
} /*fin else*/
getch();
} /*fin mail*/

_______________________________________________________________
5
Unidad II: Funciones
Lenguajes de programacin

CIRCUITO2_CODIGO2.C

#include <conio.h>
#include <stdio.h>
#include <math.h>
#define CIRCUITO_VOLTAJE 28.5
#define RESISTENCIA 6
void circuito (void);
void main(void)
{
int numero;
do
{
circuito();
printf("\nPara salir(0),Continuar (1)");
scanf("%d",&numero);
} while(numero!=0);

} /*fin mail*/

/*/////////FUNCION///////////*/
void circuito(void)
{
double corriente,voltaje,potencia,potencia_total,resistencia;
int numero_resistencia,contador,cont=0;
clrscr();
printf("Ingresar el voltaje\n");
scanf("%lf",&voltaje);
if(voltaje==CIRCUITO_VOLTAJE)
{
printf("Cantidad de resistencia");
scanf("%d",&numero_resistencia);
for(contador=1;numero_resistencia>=contador;contador++)
{
printf("Ingresar el valor - Resistencia:%d\n",cont+1);
scanf("%lf",&resistencia);
corriente=CIRCUITO_VOLTAJE/resistencia;
printf("\n\tLa Intensidad - Resistencia%d
es:%lfAmperios",cont+1,corriente);
potencia=pow(corriente,2);
potencia_total=potencia*resistencia;
printf("\n\tLa potencia - corriente%d
es:%lfWatts\n",cont+1,potencia_total);
cont++;
} /*for*/
} /*fin if*/
else
{
corriente= CIRCUITO_VOLTAJE/RESISTENCIA;
printf("\n\tLa Intensidad - Resistencia
es:%lfAmperios",corriente);
} /*fin else*/
getch();

}/*fin circuito*/

_______________________________________________________________
6
Unidad II: Funciones
Lenguajes de programacin

En este ejemplo podamos haber hecho tambin:

printf( "El mayor de los dos es %i\n", compara( num1, num2 ) );

De esta forma nos ahorramos tener que definir la variable 'resultado'.

Las funciones deben definirse siempre antes de donde se usan. Lo habitual en un programa es:

Seccin Descripcin
Includes Aqu se indican qu ficheros externos se usan
Definiciones Aqu se definen las constantes que se usan en el programa
Definicin de Aqu se definen las variables globales (las que se pueden usar en TODAS
variables las funciones)
Definicin de
Aqu es donde se definen las funciones
funciones
Funcin main Aqu se define la funcin main.

Esta es una forma muy habitual de estructurar un programa. Sin embargo esto no es algo rgido, no
tiene por qu hacerse as, pero es recomendable.

Se puede hacer de otra forma, tambin aconsejable. Consiste en definir despus de las variables
las cabeceras de las funciones, sin escribir su cdigo. Esto nos permite luego poner las funciones
en cualquier orden. Ejemplos:

#include <stdio.h>
#include <conio.h>

void compara( int a, int b ); /* Definimos la cabecera de la funcin */

main()
{
int num1, num2, resultado;

printf( "Introduzca dos nmeros: " );


scanf( "%d %d", &num1, &num2 );

resultado = compara( num1, num2 );


printf( "El mayor de los dos es %i\n", resultado );

getch();
}

int compara( int a, int b ) /* Ahora podemos poner el cuerpo de la


funcion donde queramos. */
/* Incluso despus de donde la llamamos (main) */
{
int mayor;
if ( a > b )
mayor = a;
else mayor = b;

_______________________________________________________________
7
Unidad II: Funciones
Lenguajes de programacin

return(mayor);
}

Cuando se define la cabecera de la funcin sin su cuerpo (o cdigo) debemos poner un ';' al final.
Cuando definamos el cuerpo ms tarde no debemos poner el ';', se hace como una funcin normal.

La definicin debe ser igual cuando definimos slo la cabecera y cuando definimos el cuerpo.
Mismo nombre, mismo nmero y tipo de parmetros y mismo tipo de valor devuelto.

3. Vida de una variable


Cuando definimos una variable dentro de una funcin, esa variable slo es vlida dentro de la
funcin. Si definimos una variable dentro de main slo podremos usarla dentro de main. Si por el
contrario la definimos como variable global, antes de las funciones, se puede usar en todas las
funciones.

Podemos crear una variable global y en una funcin una variable local con el mismo nombre.
Dentro de la funcin cuando llamamos a esa variable llamamos a la local, no a la global. Esto no da
errores pero puede crear confusin al programar y al analizar el cdigo.

Ejercicio 1: Descubre los errores:

#include <stdio.h>
#include <conio.h>

main()
{
int num1, num2;
int resultado,

printf( "Introduzca dos nmeros: " );


scanf( "%d %d", &num1, &num2 );
resultado = compara( num1, num2 );
printf( "El mayor de los dos es %d\n", resultado );

getch();
}

int compara( int a, int b );


{
int mayor;
if ( a>b )mayor = a;
else mayor = b;
return (mayor);
}

Solucin:

Hay una coma despus de int resultado en vez de un punto y coma.


Llamamos a la funcin compara dentro de main antes de definirla.
Cuando definimos la funcin compara con su cuerpo hemos puesto un punto y coma al
final, eso es un error.

_______________________________________________________________
8
Unidad II: Funciones
Lenguajes de programacin

Ejercicio 2: Busca los errores.

#include <stdio.h>

int resultado( int parametro )

int main()
{
int a, b;

a = 2; b = 3;
printf( "%d", resultado( a );

getch();
}

char resultado( int parametro )


{
return (parmetro+b);
}

Solucin:

Hemos definido la cabecera de resultado sin punto y coma.


Cuando definimos el cuerpo de resultado en su cabecera hemos puesto char, que no
coincide con la definicin que hemos hecho al principio.
En la funcin resultado estamos usando la variable 'b' que est definida slo en main. Por
lo tanto es como si no existiera para resultado.
En printf nos hemos dejado un parntesis al final.

_______________________________________________________________
9
Unidad II: Funciones

Potrebbero piacerti anche