Documente Academic
Documente Profesional
Documente Cultură
Funciones
Qu son?Para qu sirven?
Son un grupo de sentencias bajo el
mismo nombre que realizan una tarea
especfica.
Sirven para facilitar la resolucin de
problemas mediante la aplicacin del
paradigma Dividir y Conquistar.
Diferencia entre
El Programa y las Funciones
Conceptos Bsicos
Funcin
Funciones
Vamos a conocer tres cosas muy
importantes sobre las funciones:
Cmo se declaran?
Cmo se implementan?, y
Cmo se usan?
Declaracin de Funciones
De forma similar a las variables, las
funciones deben ser declaradas:
La forma de declarar una funcin es
siguiendo la forma predefinida:
tipoDatoRetorno nombreFuncion(lista parmetros);
Por ejemplo:
int potencia(int base, int exponente);
float farenheitACelsius(double celsius);
Implementacin de Funciones
int potencia(int base, int exponente)
{
sentencias;
}
Cmo Retornar?
Si la funcin debe generar un valor, lo retornar usando
la sentencia return dentro del cuerpo de la funcin.
La forma de usarla es:
return (variable o expresin que se debe retornar);
Esto especifica que la funcin debe terminar, retornando
el valor calculado.
Hay funciones que no retornan datos, en este caso, se
puede usar return, pero sin mencionar una expresin.
return;
Uso de Funciones
Como las funciones siempre retornan un
valor, el uso de una funcin consiste en
utilizar el valor de retorno.
Se lo puede hacer de dos formas:
Almacenar el valor de retorno en una
variable que deber ser del mismo tipo de
dato que el tipo de dato de retorno de la
funcin.
Utilizar el valor de retorno en una
expresin.
void main( )
{
float c;
.
c = farenheitACelsius(f);
void main( )
{
.
printf(%d, potencia(a,b));
void main( )
{
.
printf(%f, farenheitACelsius(f));
Nmeros Pseudoaleatorios
Secuencia pre-establecida de nmeros aleatorios
La misma secuencia para cada llamada a la funcin
Librera MATH
La librera math.h permite al programador efectuar
clculos matemticos comunes a travs de funciones.
Numero
ceil(x)
floor(x)
fabs(x)
fmod(x,y)
sqrt(x)
pow(x,y)
log(x)
log10(x)
exp(x)
sin(x)
cos(x)
tan(x)
Descripcion
redondea x al entero mas pequeo no menor
que x
redondea x al entero mas grande no mayor que
x
valor absoluto de x
residuo de x/y como numero de punto flotante
raiz cuadrada de x
x elevado a la potencia y
logaritmo natural de x(base e)
logaritmo de x(base 10)
funcion exponencial
seno trigonometrico de x(en radianes)
coseno trigonometrico de x(en radianes)
tangente trigonometrico de x(en radianes)
Ejemplo
ceil(9.2) es 10.0
ceil(-9.8) es 9.0
floor(9.2) es 9.0
floor(-9.8) es 10.0
fabs(-9.5) es 9.5
fmod(13.657, 2.333) es
1.992
sqrt(9.0) es 3.0
pow(2,7) es 128
log10(x)
log(2.718282) es 1
exp(0.1) es 2.71828
sin(0.0) es 0.0
cos(0.0) es 1
tan(0.0) es 0
Funciones Predicado
Las funciones que retornan valores
lgicos se conocen como funciones
predicado.
Llamar a una funcin de predicado es
equivalente a hacer una pregunta donde
la respuesta puede ser Verdadera (TRUE)
o Falsa (FALSE).
//Declaracin de funciones
int Factorial(int n);
void main()
{
int i;
for (i = 0; i < 10; i ++)
printf(%d\n, Factorial(i));
}
int Factorial (int n)
{
int fact, i;
fact = 1;
for(i = 1; i <=n; i++)
fact = fact * i;
return (fact);
}
Si vemos slo la
funcin, tiene sentido,
pues se encarga de
calcular el factorial de
la variable n
Paso de Argumentos a
Funciones
En el programa principal, se calcula el
factorial de i.
En la funcin se calcula el factorial de n
Cmo es que hay diferentes
identificadores para el mismo
valor?
La respuesta esta muy relacionada con
el concepto de argumento:
#include <stdio.h>
#include <simpio.h>
//Declaracin de funciones
int Factorial (int n);
void main()
{
int i;
for (i = 0; i < 10; i ++)
printf(%d\n, Factorial(i));
}
int Factorial (int n)
{
int fact, i;
fact = 1;
for(i = 1; i <=n; i++)
fact = fact * i;
return (fact);
}
#include <stdio.h>
int Factorial(int n);
1
2
6
void main()
{
int i;
for (i = 0; i < 10; i ++)
{
printf(%d\n, Factorial(i));
}
}
Factorial(1)
Factorial(0)
Factorial(2)
Factorial(3
)
int Factorial(int n)
{
int fact, i;
fact = 1;
for(i = 1; i <=n; i++)
{
fact = fact * i;
}
return (fact);
}
n
0
1
2
3
expr
exp
r
1
2
6
Variables Locales
En la funcin Factorial se usa una variable i, y en el
programa principal se usa otra variable i, pero no parece
que se usaran para lo mismo, son diferentes?.
De hecho, si son diferentes.
Cada funcin puede usar sus propias variables, y
estas slo sern vlidas dentro de la funcin, se
conocen como variables locales.
La variable i es local
a la funcion main
main
i
Factorial
n
fact
Ms sobre
Un tipo especial de funciones:
Procedimientos
Procedimientos
Existen funciones que no retornan ningn valor, como printf:
Implementacin de Procedimientos
void mostrarMenu (void)
{
printf
printf
printf
printf
printf
}
(1.
(2.
(3.
(4.
(5.
Tabla de Sumar\n);
Tabla de Restar\n);
Tabla de Multiplicar\n);
Tabla de Dividir\n);
Salir\n);
Paso de Parmetros
Ahora que conocemos de funciones, y sabemos crearlas, podemos crear una funcin que reciba dos valores y los
retorne, intercambiados.
Podramos decir que el prototipo sera:
void main()
{
main
x
y
a4
3
4
Intercambiar
tmp
4
3
int x, y;
printf(Ingrese x:);
scanf(%d,&x);
printf(Ingrese y:);
scanf(%d,&y);
printf(x = %d, y= %d, x, y);
intercambiar(x,y);
printf(x = %d, y= %d, x, y);
}
void intercambiar(int a, int b)
{
int tmp;
tmp = a;
a = b;
b = tmp;
}
main
x
3
4
4
3
a
Intercambiar
b
3
4
tmp
3
4
void main()
{
int x, y;
printf(Ingrese x:);
scanf(%d,&x);
printf(Ingrese y:);
scanf(%d,&y);
printf(x = %d, y= %d, x, y);
intercambiar(&x,&y);
printf(x = %d, y= %d, x, y);
}
void intercambiar(int *a, int *b)
{
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
Refinamiento
Cuando un problema es muy grande, se busca separarlo,
para resolver todo por partes. Esto es ventajoso:
Las partes ms pequeas son mas fciles de entender
Si algo falla, el error es mas fcil de encontrar.
Al escribir un programa, usualmente se piensa en el
programa principal (main),y se piensa en las tareas ms
importantes.
Se piensa en dividir el programa en componentes
individuales, los cuales pueden ser a su vez, divididos en
piezas ms pequeas.
Esto se conoce como diseo top-down, o refinamiento
paso a paso.
Un Problema ms Grande
Se requiere escribir un programa que
el calendario completo
Darmuestre
Instrucciones
de un ao dado, que no puede ser menor a 1900.
Imprimir Mes
Mostrar Nombre
del Mes
Ingreso y
Validacion de
Ao
Dar el respectivo
marqen para el
primer dia del
mes
Determinar que
dia de la semana
fue el primer dia
del mes
Calendario
Dar Instrucciones
Pedir Ao
Imprimir Calendario
Imprimir Calendario de c/ Mes
Imprimir
Nombre del Mes
Determinar cuantos
das trae el mes
Dependiendo del
mes y de si es
bisiesto, elegir
total de das
Determinar el dia
de la semana
donde cayo el
primer dia
Calcular el dia de la
semana del primer
dia del ao,
contando el total de
das desde 1900
hasta el ao actual,
considerando los
aos bisiestos
Imprimir el Margen
para el primer dia del
mes
Calcular el dia de la
semana del primer dia
del mes, sumndole al
primer dia del ao, el
total de das hasta el
mes actual,
considerando el total de
das de cada mes
Imprimir
el resto de
das