1. • Archivos Cabecera
• Librería Matemática
• Definición, Implementación y Uso
• Generación de Números Aleatorios
• Paso de Parámetros:
Por Valor e Introducción por Referencia
2. Archivos Cabecera
• Los problemas que buscamos resolver por el computador
usualmente son bastante complejos, siempre
buscaremos dividir un problema grande en
subproblemas.
• Las funciones son la herramienta que nos ayudara en la
técnica de “dividir y conquistar”
• Cada función se encarga de resolver un problema mas
pequeño.
• Ya hemos utilizado funciones, pues existen funciones que
ya han sido creadas y están incluidas en las librerías
• Por ejemplo printf(), de la librería estandar stdio.h, para
mostrar información en pantalla
• De hecho, el programa principal es una función: main()
3. Librería Matemática
• La librería math.h permite al programador
efectuar cálculos matemáticos comunes
Prototipo Descripción Ejemplo
ceil(x) redondea x al entero mas pequeño no menor ceil(9.2) es 10.0
que x ceil(-9.8) es –9.0
floor(x) redondea x al entero mas grande no mayor que floor(9.2) es 9.0
x floor(-9.8) es –10.0
fabs(x) valor absoluto de x fabs(-9.5) es 9.5
fmod(x,y) residuo de x/y como numero de punto flotante fmod(13.657, 2.333) es
1.992
sqrt(x) raiz cuadrada de x sqrt(9.0) es 3.0
pow(x,y) x elevado a la potencia y pow(2,7) es 128
log(x) logaritmo natural de x(base e) log10(x)
log10(x) logaritmo de x(base 10) log(2.718282) es 1
exp(x) funcion exponencial exp(0.1) es 2.71828
sin(x) seno trigonometrico de x(en radianes) sin(0.0) es 0.0
cos(x) coseno trigonometrico de x(en radianes) cos(0.0) es 1
tan(x) tangente trigonometrico de x(en radianes) tan(0.0) es 0
4. Definición de Funciones
Grupo de sentencias bajo un mismo nombre que
solucionan un problema especifico
• Llamar a una función es pedir que se ejecute para obtener su resultado
• Se escribe el nombre de la función, seguida por una lista de
expresiones separadas por coma y encerradas entre paréntesis.
• Ejemplo
• printf(“%d”, a);
• e = abs(x-y)/ abs(x);
– Las funciones son utilizadas o creadas por un programador, y solo él
conoce cómo funciona
– Los programas son usados por un usuario externo, el cual no conoce
cómo trabajan las funciones
5. Implementación de Funciones
Para crear una nueva función se debe seguir los pasos:
• Declaración
– Luego de las líneas de #include, y antes del programa principal
• Argumentos
– Para lograr resolver un problema necesita que le entreguen datos
de entrada
– Existen funciones que no necesitan argumentos
• Implementación
– Se especifica los pasos de la función, y cómo ésta llevará a cabo
su tarea
• Retorno
– Al llamar a una función, esperamos que regrese con un resultado
– Al regresar y entregar el resultado se dice que
• La función ha “retornado” al punto de llamada
6. Declaración y Prototipos
• Al escribir una nueva función, debe ser
declarada, igual como declaramos una
variable
• La declaración de una función, debe incluir:
– El tipo de dato del valor que va a retornar
– El nombre de la función
– El tipo de dato de cada argumento, y un nombre
para cada uno.
• El prototipo se refiere a la declaración de una
función
double sqrt(double x);
7. Uso de Funciones
• Los datos de entrada de una función son obtenidos por el
programa principal, ya sea por teclado o de alguna otra forma.
La función solo debe recibirlos, no obtenerlos
• El resultado que genera una función es obtenido por ella y
retornado al programa donde fue llamada.
• No es deber de la función imprimir datos por pantalla, eso lo
decidirá el programa principal
void main()
{
double x, y;
E/S de datos permiten printf(“Ingrese un real:”); Argumentos y retorno
a un programa scanf(“%f”, &x); permiten a una función
comunicarse con su comunicarse con el
y = sin(x); programa que la llama
usuario externo
printf(“El seno de x es: %.2f”, y);
}
8. Definición de Funciones:
Analogía
• Un programa principal es similar a un jefe, y una función
a un empleado en una oficina
– Si el jefe necesita resolver un cierto problema, lo divide en varias tareas
y llama a sus empleados, para que cada uno resuelva una tarea
– Dependiendo de la tarea, el jefe entrega al empleado los datos que este
necesita para resolverla. Estos son equivalentes a los argumentos para
una función
– Para resolver su tarea especifica, el empleado podría a su vez, delegar
subtareas a otros empleados
– Una vez encargada la resolución de una tarea, el jefe solo espera que el
empleado retorne con el resultado deseado. Esto es equivalente al valor
de retorno de una función
– El jefe nunca se entera de los detalles de cómo el empleado resolvió la
tarea
9. Ejercicio de Ejemplo
Escribir un programa que muestre las
respectivas conversiones de Celsius a
Fahrenheit de las temperaturas de 0 a 100,
de 5 en 5
Esto se logra con la fórmula:
9
F C 32
5
Podríamos crear una función que solo se
encargue de convertir de Celsius a
Fahrenheit, y luego podremos usarla en el
programa deseado
10. Implementación: Prototipo
– Qué necesitamos que la función genere:
• La temperatura en Fahrenheit(real)
– Qué necesita la función para resolver el problema:
• La temperatura en Celsius(real)
double CelsiusAFahrenheit (double c);
• La implementación se compone de dos partes:
– La cabecera es igual que el prototipo. El cuerpo es un bloque de sentencias,
encerrado entre llaves. Si se van a necesitar variables, se declaran en el
bloque.
double CelsiusAFahrenheit(double c)
{ /*Cuerpo*/
}
11. Implementación: Retorno
El retorno de la función especifica que debe terminar y
devolver el valor calculado.
return (expresión que se debe retornar);
Hay funciones que no retornan datos, se usa return pero sin
mencionar valor de retorno: return;
double CelsiusAFahrenheit(double c)
{ return (9.0 / 5.0 * c + 32);
}
Una vez implementada, la función puede ser usada por
cualquier otro programa o función, es decir, puede ser
LLAMADA
12. Llamada a la función
#include <stdio.h>
#define LIMITEINF 0
#define LIMITESUP 100
#define PASO 5
// Prototipos de Funciones
double CelsiusAFahrenheit(double c);
/* Programa Principal */
void main()
{
int c=0;
printf(“Tabla de conversión de Celsius a Fahrenheit.n”);
printf(“C Fn”);
for(c = LIMITEINF; c <= LIMITESUP; c = c + PASO)
printf(“%3d %3fn”, c, CelsiusAFahrenheit(c));
}
/* Esta función retorna el equivalente en Fahrenheit del valor c
en Celsius */
double CelsiusAFahrenheit(double c)
{
return (9.0 / 5.0 * c + 32);
}
13. Ejercicio
• Escribir la función Factorial en C que permita
calcular el factorial de un numero dado.
– El factorial de 0 es 1
– El factorial de 1 es 1(1x1)
– El factorial de 2 es 2(1x2)
– El factorial de 3 es 6(1x2x3)
– El factorial de 4 es 24(1x2x3x4)
– El factorial de un número dado es la multiplicación de todos los
números desde el 1 hasta el mismo.
14. Solución
int Factorial(int n)
Inicio
{
Recibir n
int fact, i=0;
fact = 1;
Fact = 1;
i = 1; if (n==0)
return 1;
i >=n Retornar fact
for(i = 1; i <=n; i++)
fact = fact * i; Fin fact = fact * i;
i = i +1;
return (fact);
}
15. Paso de Parámetros
a Funciones
#include <stdio.h>
//Declaración de funciones
int Factorial(int n);
Si vemos el programa
principal y la función
como un todo, puede void main()
resultar un tanto { Si vemos sólo el programa
confuso: int i; principal, tiene sentido, pues se
• Hay dos variables for (i = 0; i < 10; i ++) imprime el factorial de todos los
con nombre i printf(“%dn”, Factorial(i)); números hasta el 10
• En el programa se }
usa la variable i como
el número al que se le int Factorial (int n)
calcula el factorial. {
• En la función la int fact, i; Si vemos sólo la función,
variable a la que se le fact = 1; tiene sentido, pues se
calcula el factorial se for(i = 1; i <=n; i++) encarga de calcular el
llama n fact = fact * i; factorial de la variable n
return (fact);
}
16. Paso de Parámetros
a Funciones
• Se evalúan las expresiones #include <stdio.h>
enviadas como argumentos int Factorial(int n);
• El valor de cada argumento es main()
{
1
2
6
copiado en cada parámetro de int i;
for (i = 0; i < 10; i ++)
la función llamada. {
printf(“%dn”, Factorial(i));
• Se ejecutan una a una las }
}
sentencias de la función hasta
que aparece la sentencia return
• Se evalúa la expresión de la
Factorial(3)
Factorial(2)
Factorial(1)
Factorial(0)
sentencia return. n
• El programa que llamó a la
int Factorial(int n)
función continúa, reemplazando {
int fact, i;
3
2
1
0
en el lugar de la llamada, por el fact = 1;
for(i = 1; i <=n; i++)
valor retornado {
fact = fact * i;
expr
}
return (fact);
} 6
2
1
17. Paso de Parámetros
Por Valor
Crearemos una funcion que reciba dos valores y los intercambie
Podríamos decir que el prototipo sería:
void Intercambiar(int a, int b); void main()
{
Esta función no efectuará el cambio, como se int x, y;
printf(“Ingrese x:”);
espera.
scanf(“%d”,&x);
Al pasar parámetros, se efectúa una copia de printf(“Ingrese y:”);
los valores. Este tipo se conoce como PASO DE scanf(“%d”,&y);
PARAMETROS POR VALOR. printf(“x = %d, y= %d”, x, y);
Intercambiar(x, y);
printf(“x = %d, y= %d”, x, y);
main }
void Intercambiar(int a, int b)
x y Intercambiar {
3 4
a b tmp
int tmp;
tmp = a;
a = b;
4
3 4
3 3 b = tmp;
}
18. Paso de Parámetros
Por Referencia
• Para modificar directamente los datos que se reciben como parámetros, se usa
la llamada POR REFERENCIA
• El prototipo sería:
void main()
• void Intercambiar(int *a, int *b); {
int x, y;
printf(“Ingrese x:”);
scanf(“%d”,&x);
Al retornar la función si habrá printf(“Ingrese y:”);
efectuado el cambio sobre las scanf(“%d”,&y);
variables que se pasaron por printf(“x = %d, y= %d”, x, y);
Intercambiar(&x, &y);
referencia. printf(“x = %d, y= %d”, x, y);
main }
void Intercambiar(int *a, int *b)
x y {
int tmp;
4
3 3
4 Intercambiar tmp = a;
a = b;
a b tmp b = tmp;
}
3
4 3
4 3
19. Procedimientos
• Existen funciones que no retornan ningún valor:
printf (“Hola Mundon”);
• Una función que no retorna nada, y que se llama únicamente
para que ejecute su código, se llama procedimiento
• C trata de igual forma a las funciones y a los procedimientos
• Un procedimiento en C, es una función sin valor de
retorno
void DarInstrucciones(void);
• Los procedimientos pueden recibir tantos argumentos necesite
20. Implementación de un
Procedimiento
void ImprimirMenu (void)
{
printf (“1. Tabla de Sumarn”);
printf (“2. Tabla de Restarn”);
printf (“3. Tabla de Multiplicarn”);
printf (“4. Tabla de Dividirn”);
printf (“5. Salirn”);
}
21. Generación de Números
Aleatorios
• Para introducir el factor “suerte” en los programas en C, tenemos
la función rand() que genera números aleatorios.
• Los números obtenidos son enteros entre 0 y RAND_MAX (32767).
• Si ejecutamos varias veces el programa, la secuencia de
números aleatorios se repite. Si un programa genera 3
números aleatorios entre 0 y 10. Lo ejecutamos una vez y
obtenemos por ejemplo 4, 7 y 9. Lo ejecutamos por segunda
vez y vuelve a salir 4, 7 y 9. Y siempre se repetirá este
resultado.
• Esto sucede porque rand() "calcula" los números aleatorios
partiendo de un número inicial llamado semilla.
• Si volvemos a ejecutar el programa desde el principio, el
número inicial (la semilla) que usa rand() es el mismo, por lo
tanto, la secuencia de números aleatorios se repetirá.
22. Función rand()
• aleatorio = rand(); // Aleatorio entre 0 y 32767
• La operación módulo (%) nos da el residuo de dividir rand() entre cualquier
número. Este residuo puede ir de 0 a N-1.
aleatorio = rand () % N; // Aleatorio entre 0 y N-1
aleatorio = rand () % 6; // Aleatorio entre 0 y 5
aleatorio = rand () % N+1; // Aleatorio entre 1 y N
aleatorio = rand () % 7; // Aleatorio entre 1 y 6
aleatorio = N + rand() % (M-N+1) ; // Aleatorio entre N y M
aleatorio = 20 + rand () % 11; // Aleatorio entre 20 y 30
23. Función srand()
• Para evitar el problema de obtener siempre los mismos números
aleatorios, tenemos la función srand()
• A esta función se le pasa un parámetro que se utilizará como número
semilla para el cálculo. No se debe poner un número fijo como
semilla, porque entonces se repite el problema.
• Podemos utiliza la fecha/hora del sistema, pues este valor cambia si
ejecutamos el programa en distintos instantes de tiempo.
• En C se obtiene con la función time()
srand (time(NULL));
• A la función srand() sólo debemos llamarla una vez en nuestro
programa, antes de utilizar la función rand()
• Para utilizar las funciones se debe declarar las librerías:
#include <stdlib.h>
#include <time.h>