2. 2
Funciones
• Definición:
– Las funciones son los bloques de construcción
básicos del lenguaje C. Dentro de ellas se da toda
la actividad del programa.
• Criterios para crearlas:
– Se usa la estrategia de “Dividir y Conquistar”, en
otras palabras, es realizar la partición de la tarea
en subtareas más fáciles de abordar.
– Todo problema se puede resolver con funciones o
sin ellas, pero su uso adecuado hace que el
programa sea más eficiente, fácil de leer y probar.
3. 3
Funciones: ventajas
1.Facilita
el diseño descendente.
2.Los
procedimientos dentro de ellas se pueden
ejecutar varias veces.
3.Facilita
la división de tareas.
4.Se
pueden probar individualmente
5.Con
funciones apropiadamente diseñadas, es
posible ignorar como se realiza una tarea,
sabiendo qué es lo que hacen.
4. 4
Funciones: Especificación formal
tipo nombre_funcion(lista de parámetros){
cuerpo de la función
}
• tipo : especifica el tipo de valor que devuelve la
función. Si no se especifica tipo, el compilador asume
que es entero (int).
• lista de parámetros : es la lista de nombres de
variables separados por comas con sus tipos
asociados que reciben los valores de los argumentos
actuales de la llamada a la función.
5. 5
La sentencia return
– Fuerza la salida inmediata de la función en que se
encuentra.
– Se puede utilizar para devolver un valor.
6. 6
Funciones
– Las funcion es terminan su ejecución ya sea a
través de la ejecución de la última instrucción o
utilizando la sentencia return.
– Una función puede retornar valor sólo cuando el
tipo de retorno no es void.
– Las funciones que son de tipos distintos de void
pueden ser utilizadas como operandos en otras
expresiones del lenguaje.
7. 7
Funciones: modos de uso
1.Funciones
diseñadas para realizar
operaciones a partir de sus argumentos y
devolver un valor basado en sus cálculos.
2.Funciones
que no reciben argumentos,
realizan un proceso y devuelven un valor .
3.Funciones
que no tienen argumentos ni
valor de retorno explícito, operan sobre el
entorno de variables globales o atributos del
sistema operativo.
8. 8
Función main()
• Mediante la sentencia return, el programa
puede devolver un código de terminación al
proceso de llamada (Ej.: entero a Shell de
comandos en Unix).
• El valor devuelto puede ser 0 que indica
terminación normal o un valor que identifica
un error detectado por el programa.
• El valor devuelto puede ser usado para
ejecución condicional de comandos en shell
en Unix.
9. 9
Variables locales y globales
• Variables Locales:
– Se declaran dentro de la función y sólo están
disponibles durante su ejecución.
– Se crean cuando se entra en ejecución una
función y se destruyen cuando se termina.
• Variables globales:
– Se declaran fuera de las funciones. Pueden ser
utilizadas por todas las funciones.
– Existen durante toda la vida del programa.
10. 10
Argumentos de funciones
• Son variables locales conocidas como parámetros
formales y se utilizan como un medio para
entregarle información a la función.
• Los parámetros formales reciben sus valores
iniciales desde los parámetros reales, es decir desde
los valores que se les pasan a traveś de la llamada.
Ejemplo:
main( ){
imprimeEntero(5);
}
void imprimeEntero(int x){
printf(“%dn”, x);/* x vale 5 */
}
Parámetro real (llamada)
Parámetro formal (declaración)
11. 11
Transferencia de Información
– por valor: copia el valor de un argumento de la
llamada en el parámetro formal de la función. Por
lo tanto, los cambios en los parámetros de la
función no afectan a las variables que se usan en
la llamada.
– por referencia: se copia la dirección del
argumento en el parámetro. Los cambios hechos
a los parámetros afectan a las variables usadas
en la llamada a la función.
12. 12
Ejemplo
Construya un programa que calcule el
cuadrado de los 10 primeros números
enteros.
13. 13
Solución
#include <stdio.h>
int cuadrado(int x){
int r;
r=x*x;
return r;
}
main(){
int i,resultado;
for (i=0;i<10;i++){
resultado = cuadrado (i);
printf("Cuadrado de %d: %dn",i,resultado);
}
return 0;
}
14. 14
Ejemplo
Construya una función que calcule la suma de
los k primeros números enteros impares.
19. 19
Ejemplo
Realizar una función, en el cual se ingresa un
número entero de varias cifras y un entero
con una posición y se retorna el dígito de
dicha posición.
– Ejemplo:
• Entrada: 987 2
• Salida : 8
20. 20
Programa
#include <stdio.h>
int buscar(int x,int k){
int i,n;
if (k<=0 || x<0) return -1;
for (i=0;i<k-1;i++)
x=x/10;
return (x%10);
}
void main(){
int n,k,digito;
printf("Ingrese numero y posicion:");
scanf("%d %d",&n,&k);
digito=buscar(n,k);
if (digito<0) printf("No encontradon");
else printf("El digito encontrado es: %dn",digito);
return 0;
}
21. 21
Prototipos
• Uso:
– Identificar el tipo de retorno de la función.
– Especificar el tipo y el número de argumentos que
utiliza la función.
• El prototipo debe aparecer antes de que se
haga cualquier llamada a la función.
• No es necesario incluir los nombres reales de
los parámetros.
22. 22
Prototipo (cont.)
#include <stdio.h>
int cuadrado(int x); /*Prototipo*/
main(){
int i,resultado;
for (i=0;i<10;i++){
resultado = cuadrado (i);
printf("El cuadrado de %d es %dn",i,resultado);
}
return 0;
}
int cuadrado(int x){
int a;
a=x*x;
return a;
}
23. 23
Prototipo (cont.)
#include <stdio.h>
void intercambio(int *, int *) /*Prototipo*/
main(){
int a=5,b=3;
printf("a=%d b=%dn",a,b);
intercambio (&a,&b);
printf("a=%d b=%dn",a,b);
return 0;
}
void intercambio(int *x, int *y){
int temp;
temp=*x;
*x=*y;
*y=temp;
}
24. funciones
¿Cómo es que funcionan los Subprogramas?
A menudo, se utiliza el adjetivo de “Subprogramas”, para referirse así que, debemos familiarizarnos también
con este término.
Los subprogramas se comunican con el programa principal, que es el que contiene a las funciones, mediante
parámetros, que estos pueden ser: Parámetros Formales y Parámetros Actuales.
Cuando se da la comunicación los parámetros actuales son utilizados en lugar de los parámetros formales.
Paso de Parámetros
Existen dos formas de pasar parámetros, las cuales son:
A) Paso por Valor
También conocido como parámetros valor. Los valores se proporcionan en el orden de cálculos de entrada.
Los parámetros se tratan como variables locales y los valores iniciales se proporcionan copiando los valores
de correspondientes argumentos.
Los parámetros formales-Locales de una función reciben valores de los parámetros actuales y con ellos se
ejecutan las acciones descritas en el subprograma.
Ejemplo:
A=5;
B=7;
C=proc1(A, 18, B*3+4);
Proc1(X, Y, Z)
Explicación:
Donde, se encuentra c, se está llamando la función, denominada proc1, en la cual se están enviando como
parámetros el valor de A, que es cinco; el cual es recibido por la variable X, en la definición de la función
proc1; en la misma función, Y tendrá el valor de 18; por que ese es el valor del parámetro formal, mientras
que Z, tendrá un valor inicial de 25, ya que ese es el resultado del tercer parámetro que resulta ser una
expresión aritmética.
25. Funciones(Cont.)
Explicación:
Donde, se encuentra c, se está llamando la función,
denominada proc1, en la cual se están enviando como
parámetros el valor de A, que es cinco; el cual es recibido por
la variable X, en la definición de la función proc1; en la
misma función, Y tendrá el valor de 18; por que ese es el
valor del parámetro formal, mientras que Z, tendrá un valor
inicial de 25, ya que ese es el resultado del tercer parámetro
que resulta ser una expresión aritmética.
26. Funciones(Cont.)
b) Paso por Referencia
Cuando un argumento es una dirección, el
parámetro recibe la dirección de la variable que se
ha pasado como argumento al invocar a la función.
Por lo tanto, el parámetro deberá declararse como
un puntero y de esta forma se puede modificar el
contenido de las variables.
Si una función tiene que devolver más de un valor, lo
hará utilizando sus parámetros y necesariamente los
argumentos deben pasarse por referencia.
27. Funciones(Cont.)
Ejemplo:
Void cursor(int *, int *);
main()
{
int fila, columna;
...
cursor(&fila, &columna);
....
}
void cursor(int *x, int *y)
{
....
*x =20;
.....
}
Explicación
Paso de argumentos por referencia.
1. Declaración de 2 variables para la
posición del cursor.
2. En la llamada a la función,
los argumentos son las direcciones
(&fila, &columna).
3. En la declaración de la función,
los parámetros formales, representan
punteros a tipo int.
4. Se asigna el valor 20 al sitio
donde apunta el puntero x, que es fila.
28. Funciones(Cont.)
Ejemplo 2:
main()
{
int x = 10, y = 20;
alternar(&x, &y);
printf("x = %d, y = %d", x,y);
}
void alternar(int *px, int *py)
{
int temp;
temp = *px;
*px = *py;
*py = temp;
}
Paso de argumentos por referencia.
1. Los valores de x e y han sido
intercambiados.
29. CONCLUSIONES
Una función es visible para ella misma y otras funciones desde el momento en que se define. Es visible
para el propio cuerpo de la función, es decir, la recursividad esta permitida. El código de una función es
privado a esa función y sólo se puede acceder a él mediante una llamada a esa función. Las variables
definidas dentro de una función son locales (a no ser que las definamos globales) por lo que no
conservan su valor de una llamada a otra (excepto si se declaran como static, entonces el compilador no
las destruye y almacena su valor para la próxima llamada, aunque la variable tiene limitado el ámbito al
interior de la función).
En C, todas las funciones están al mismo nivel, es decir, no se puede definir una función dentro de otra
función. Esto es por lo que C no es técnicamente un lenguaje estructurado por bloques.
El código de una función es privado a esa función y sólo se puede acceder a él mediante una llamada a
esa función. Las variables definidas dentro de una función son locales (a no ser que las definamos
globales) por lo que no conservan su valor de una llamada a otra (excepto si se declaran como static,
entonces el compilador no las destruye y almacena su valor para la próxima llamada, aunque la variable
tiene limitado el ámbito al interior de la función).
30. CONCLUSIONES
Las funciones son estructuras autónomas similar a los módulos. La
diferencia radica en que la función se usa para devolver un solo valor de
un tipo de dato simple a su punto de referencia. La función se relaciona
especificando su nombre en una expresión, como si fuera una variable
ordinaria de tipo simple. Las funciones se dividen en estándares y
definidas por el usuario.
- Estándar: Son funciones proporcionadas por cualquier lenguaje de
programación de alto nivel, y se dividen en aritméticas y alfabéticas.
- Definidas por el usuario: son funciones que puede definirlas el
programador con el propósito de ejecutar alguna función específica, y
que por lo general se usan cuando se trata de hacer algún cálculo que
será requerido en varias ocasiones en la parte principal del programa.