Beruflich Dokumente
Kultur Dokumente
Curso
Cdigo
Profesor
CICLO :
2013-II
: LENGUAJES DE PROGRAMACIN
: ST222 V
: Ing. Csar Aldo Canelo Sotelo
FUNCIONES
Las funciones son los bloques constructores de C y el lugar donde se da toda la
actividad del programa. La forma general de una funcin es:
especificador_de_ tipo nombre_de_la_funcin(lista de parmetros)
{
definicin de variables;
// variables locales
cuerpo de la funcin;
return (valor devuelto);
}
Especificador de tipo: especifica el tipo de datos que devuelve la sentencia return de la
funcin. El valor puede ser cualquier tipo vlido de C. Si no se especifica tipo, el
compilador asume que la funcin devuelve un resultado entero.
Nombre de la funcin: se usa para llamar a la funcin dentro del programa. Est permitido
el uso de letras, nmeros y el smbolo _ para dar nombre a la funcin. No se puede
empezar con un nmero. El nombre no puede contener espacios ni signos de puntuacin.
Lista de parmetros: lista de nombre de variables, separados por comas con sus tipos
asociados, que reciben los valores de los argumentos cuando se llama a la funcin. Una
funcin puede no tener parmetros, en cuyo caso la lista de parmetros contiene solo la
palabra clave void.
SENTENCIA RETURN
Tiene dos usos importantes:
1) Fuerza una salida inmediata de la funcin en que se encuentra. O sea, hace que la
ejecucin del programa vuelva al cdigo que llam a la funcin.
2) Se puede utilizar para devolver un valor.
VUELTA DE UNA FUNCIN
Hay dos formas en que una funcin puede terminar su ejecucin y volver al lugar en que se
le llam:
Lenguajes de Programacin
Lenguajes de Programacin
Lenguajes de Programacin
scanf("%d %d", &num1, &num2);
compara(num1, num2);
}
DONDE SE DEFINEN LAS FUNCIONES
Lenguajes de Programacin
ARGUMENTOS DE FUNCIONES
Si una funcin va a usar argumentos, se debe declarar variables que acepten los valores de
los argumentos. Estas variables se llaman parmetros formales de la funcin. Se comportan
como variables locales dentro de la funcin, crendose al entrar en la funcin y
destruyndose al salir de ella. Los argumentos correspondientes en el punto de llamada a la
funcin se llaman parmetros reales. As:
funcion_escribe( char c, char d)
{
cuerpo de la funcin
}
La declaracin de parmetros aparece entre parntesis.
DECLARACIONES DE FUNCIONES PROTOTIPO
Si se quiere utilizar un funcin es suficiente con definirla para que pueda ser invocada
desde cualquier punto del programa. Para poder utilizar una funcin el compilador necesita
conocer el tipo de valor que devuelve la funcin y los parmetros que acepta, de forma que
pueda comprobar que los tipos de parmetros reales coinciden con los tipos de parmetros
formales. Cuando una funcin llama a otra definida anteriormente, el compilador ya lo
sabe, pero qu ocurre cuando se llama a una funcin que no ha sido definida
previamente ? El compilador asumir que la funcin devuelve int y que todos los
parmetros son de tipo int, lo cual puede que no se corresponda con la definicin posterior
de la llamada.
Para que el compilador pueda conocer el tipo y los parmetros de las funciones
antes de su uso se utilizan prototipo de funciones. El formato de un prototipo de funcin es:
especificador_de_ tipo nombre_de_la_funcin(lista de parmetros);
Un prototipo lo que hace es declarar una funcin, es decir, indicar al compilador que
existe una funcin con un nombre, tipo y parmetros concretos. La definicin lo que
incluye es el cdigo de la funcin.
/* Ejemplo 5. Prototipo de funcin que no tiene parmetros */
#include <stdio.h>
void mostrar(void);
main()
{ mostrar();
return 0;
}
void mostrar(void)
{ int i;
for(i=0; i<10; i++)
5
Lenguajes de Programacin
printf(%d, i);
}
LLAMADA A UNA FUNCIN
En general, se pueden pasar argumentos a las funciones de dos formas: Llamada
por valor y llamada por referencia.
a) LLAMADA POR VALOR
En la llamada por valor, se copia el valor de un argumento en el parmetro formal
de la funcin. De esta forma, los cambios en los parmetros de la funcin no afectan a las
variables que se usan en la llamada. Lo que se pasa a la funcin es una copia del valor del
argumento. Lo que ocurra dentro de la funcin no tiene efecto sobre la variable utilizada en
la llamada.
/* Ejemplo 6 */
# include <stdio.h>
# include <conio.h>
int cuadrado(int x);
int main()
{ int y =10;
printf(%d %d, cuadrado(y), y );
return 0;
}
cuadrado(int x)
{ x = x*x;
return(x);
}
En este ejemplo se copia el valor del argumento de cuadrado( ), es decir 10, en el
parmetro x. Cuando se ejecuta la asignacin x = x*x, el nico elemento que se modifica es
la variable local x. La variable y, usada para llamar a cuadrado( ), todava tiene el valor de
10. De esta forma, la salida del programa es 100 10.
/* Ejemplo 7. Llamada a una funcin con paso por valor */
# include <stdio.h>
# include <conio.h>
void intercambio(int, int);
main()
{ int a=1, b=2;
printf("Los valores iniciales son a=%d y b=%d\n", a,b);
intercambio(a,b);
printf("\nLuego del intercambio los valores son a=%d y b=%d", a,b);
printf("\nLos valores iniciales en la funcin que invoc, no han cambiado");
}
Lenguajes de Programacin
Lenguajes de Programacin
SOBRECARGA DE FUNCIONES
Por lo general es recomendable dar nombres distintos a funciones diferentes, pero, cuando
algunas funciones ejecutan la misma tarea con objetos de distinto tipo, puede ser ms
conveniente darles el mismo nombre. El empleo del mismo nombre para diferentes
operaciones con tipos de datos distintos se denomina sobrecarga. Por ejemplo:
float suma ( float a, flota b);
int suma ( int a, int b);
Para el compilador lo nico comn entre dos funciones con el mismo nombre, es el
nombre.
RECURSIVIDAD
Se llama recursividad a un proceso mediante el que una funcin se llama a s misma
de forma repetida, hasta que se satisfaga alguna determinada condicin. Las funciones en C
pueden emplearse recursivamente, es decir, una funcin puede llamarse a s misma ya sea
directa o indirectamente. El proceso se utiliza para computaciones repetitivas en las que
cada accin se determina en funcin de un resultado anterior.
Para resolver un problema recursivamente se deben satisfacer dos condiciones:
1) El problema se debe escribir en forma recursiva.
2) El programa debe incluir una sentencia de condicin de fin.
Por ejemplo, para calcular el factorial de un nmero entero positivo, el problema se
expresara as:
n! = 1 x 2 x 3 x . . . . x n
Sin embargo podemos expresar la solucin del problema de otra forma, escribiendo
n! = n x (n1)!
Esta es la forma recursiva, en la que la accin deseada (el clculo de n!) se expresa en
trminos de un resultado anterior [ el valor de (n1)! , que se supone conocido ]. Tambin
sabemos que 1!=1 por definicin. Esto ltimo proporciona una condicin de fin para el
proceso recursivo.
/* Ejemplo 9. Clculo del factorial de un nmero empleando una funcin */
#include <stdio.h>
#include <conio.h>
long int factorial(int n);
main()
8
Lenguajes de Programacin
{ int numero;
printf("Ingrese un entero positivo: ");
scanf("%d", &numero);
printf("\nEl factorial es: %ld", factorial(numero));
getch();
}
long int factorial(int n)
{
int i;
long int producto= 1;
if(n>1)
for(i=2; i<=n; i++)
producto*=i;
return(producto);
}
/* Ejemplo 10. Factorial de un nmero empleando una funcin recursiva */
#include <stdio.h>
#include <conio.h>
long int factorial(int n);
main()
{
int numero;
printf("Ingrese un entero positivo: ");
scanf("%d", &numero);
printf("\nEl factorial es: %ld", factorial(numero));
getch();
}
long int factorial(int n)
{
if(n<=1)
return(1);
else
return(n*factorial(n-1));
}
Programa Propuestos
1. Disee un programa que calcule la media de una serie de n nmeros (n<=20). El
programa debe hacer uso de una funcin para leer los nmeros y devolver su suma.
2. Disee un programa que use un men de opciones para calcular el rea de un polgono.
En cada opcin se debe invocar a una funcin que calcule el rea del un tringulo, un
cuadrado y un crculo.
Lenguajes de Programacin
3. Disee un programa que ingrese n veces por el teclado 3 nmeros enteros, y mediante
una funcin clasifique dichos nmeros en orden ascendente (n<= 10).
4. Disee un programa que ingrese varios nmeros por el teclado y para cada nmero
ingresado, invoque a una funcin que determine y muestre el factorial del nmero
ingresado.
5. Disee un programa que ingrese n nmeros (n<=10) y para cada nmero ingresado, se
invoque a una funcin que determine si el nmero ingresado es un nmero capica. Los
valores de n y nmero deben ser ledos en la funcin principal. El valor de nmero debe
ser pasado como argumento a la funcin invocada.
6. Disee un programa que determine el promedio de prcticas de los alumnos de un
curso. En el programa principal se deben ingresar las 4 notas, se debe invocar a una
funcin que reciba como argumentos las cuatro notas. La funcin debe determinar el
promedio eliminando la nota ms baja. La funcin debe retornar el promedio y ste
debe mostrarse en la funcin principal.
7. Disee un programa que implemente una funcin bisiesto, que determine si un ao es
o no bisiesto.
8. Disee un programa que utilizando una funcin, ingrese un nmero entero y luego la
imprima en forma invertida.
9. Disee un programa recursivo que calcule los n primeros elementos de la serie de
Fibonacci.
10. Disee un programa que use un men de opciones para calcular el rea de un polgono.
En cada opcin se debe invocar a una funcin que calcule el rea del un tringulo, un
cuadrado y un crculo.
11. Disee un programa que ingrese varios nmeros por el teclado y para cada nmero
ingresado, invoque a una funcin que determine y muestre el factorial del nmero
ingresado.
10