Академический Документы
Профессиональный Документы
Культура Документы
Tema 5:
Programación Modular:
Funciones y Procedimientos
Profesor
John Ledgard Trujillo Trejo
3.1 Introducción
3.2 Componentes de un Programa en C++
3.3 Funciones
- Funciones de la Biblioteca Matemática
- Definición de Funciones
- Prototipos de Funciones
3.4 Ficheros de Cabecera
3.5 Generación de Números Aleatorios
- Ejemplo: Un Juego de Azar. Introducción de enum
3.6 Almacenamiento y Ámbito de Variables
- Clases de Almacenamiento
- Reglas de Ámbito
3.7 Recursividad
- Ejemplo de Recursividad: La serie de Fibonacci
- Recursividad versus Iteración
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 1
Índice del Capítulo
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 2
3.1 Introducción
Este capítulo:
describe características clave del lenguaje C++ que facilitan el
diseño, implementación, operación y mantenimiento de
programas grandes
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 3
3.2 Componentes de un Programa en C++
Definición de funciones
Sólo se escribe una vez el conjunto de sentencias que forman la
función
Código oculto para otras funciones
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 4
3.2 Componentes de un Programa en C++
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 5
3.3 Funciones
Variables Locales
Conocidas sólo en la función en la que son definidas
Todas las variables declaradas en las definiciones de
funciones son variables locales
Parámetros
Variables locales que se pasan cuando se llama a una
función
Proporcionan información exterior
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 6
3.3.1 Funciones de la Biblioteca Matemática
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 7
3.3.1 Funciones de la Biblioteca Matemática
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 8
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 9
3.3.2 Definición de Funciones
Prototipo de función
Le dice al compilador el tipo del argumento y el tipo del valor
que devuelve la función
int square( int );
Función que recibe un int y devuelve un int
Explicado con más detalle más adelante
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 10
3.3.2 Definición de Funciones
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 11
3.3.2 Definición de Funciones
Ejemplo de función
int square( int y )
{
return y * y;
}
Palabra clave return
Devuelve datos, y el control vuelve a la función de llamada
Si no hay datos que devolver, se usa return;
La función finaliza cuando encuentra su llave derecha }
El control vuelve a la función de llamada
Las funciones no pueden definirse dentro de otras funciones
A continuación: programas de ejemplo
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 12
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 13
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 14
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 15
3.3.3 Prototipos de Funciones
Firma de función
Parte del prototipo con nombre y tipos parámetros (no incluye el
tipo del valor devuelto)
double maximo( double, double, double );
Firma de la función
Coacción de Argumentos
Fuerza que los argumentos sean del tipo apropiado
Conversión de int (4) a double (4.0)
cout << sqrt(4)
Reglas de conversión
Los argumentos suelen convertirse automáticamente
Cambio de double a int puede truncar los datos
3.4 to 3
Promoción: de tipos mezclados al tipo mayor
int * double
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 17
3.3.3 Prototipos de Funciones
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 18
3.4 Ficheros de Cabecera
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 19
3.5 Generación de Números Aleatorios
Escalado y desplazamiento
Operador módulo (resto): %
10 % 3 es 1
x % y está entre 0 e y – 1
Ejemplo: tiradas de un dado (6 caras)
i = rand() % 6 + 1;
"rand() % 6" genera un número entre 0 y 5 (6=factor de
escalado)
"+ 1" construye el rango de 1 a 6 (desplazamiento 1)
A continuación:Lenguaje
programa para echar los dados
de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 20
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 21
3.5 Generación de Números Aleatorios
A continuación:
Programa para mostrar la distribución de rand()
Simulación de 6000 tiradas de un dado
Si volvemos a ejecutar el programa anterior, se vuelve a
imprimir la misma secuencia de números (¿aleatorio?: Sirve
para comprobar el funcionamiento de un programa)
Cada entero del rango 1-6 debería aparecer aproximadamente
1000 veces
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 22
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 23
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 24
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 25
3.5 Generación de números aleatorios
Números pseudoaleatorios
Secuencia prefijada de números “aleatorios”
Cada vez que se ejecuta el programa, se genera la misma
secuencia
Útil para depurar programas
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 26
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 27
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 28
3.5 Generación de números aleatorios
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 29
3.5.1 Ejemplo: Juego de Azar. Introducción de enum
Enumeración
Conjunto de enteros con identificadores
enum typeName {constant1, constant2…};
Constantes comienzan en 0 (por defecto), con incrementos de 1
Constantes necesitan nombres únicos
No se puede asignar un entero a una variable de enumeración
Se debe usar un tipo de enumeración previamente definido
Ejemplo
enum Estado {CONTINUA, GANAS, PIERDES};
Estado varEnum;
varEnum = GANAS; // no se puede hacer varEnum = 1
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 30
3.5.1 Ejemplo: Juego de Azar. Introducción de enum
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 31
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 32
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 33
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 34
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 35
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 36
3.6 Almacenamiento y ámbito de variables
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 37
3.6.1 Clases de Almacenamiento
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 38
3.6.1 Clases de Almacenamiento
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 39
3.6.2 Reglas de Ámbito
Ámbito
Parte del programa donde se puede utilizar un identificador
Ámbito de fichero
Identificador definido fuera de una función, conocido en todas
las funciones
Variables globales, definición de funciones y prototipos
Ámbito de función
El identificador puede referenciarse dentro de la función que la
define
Etiquetas: identificadores seguidos de dos puntos (case:)
únicos identificadores con ámbito de función
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 40
3.6.2 Reglas de Ámbito
Ámbito de bloque
Comienza en la declaración y termina en llave derecha }
Pueden referenciarse sólo en ese rango
Variables locales, parámetros de función
Variables static tienen ámbito de bloque, aunque existan
desde que el programa inicia su ejecución
La duración del almacenamiento no afecta al ámbito de un
identificador
Ámbito de prototipo de función
Sólo la lista de parámetros del prototipo
Nombres de parámetros opcionales en el prototipo
El compilador los ignora
En un prototipo, un nombre de parámetro sólo puede usarse
una vez
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 41
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 42
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 43
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 44
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 45
3.7 Recursividad
Funciones recursivas
Funciones que se llaman a sí mismas
Pueden solucionar solamente un caso base
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 46
3.7 Recursividad
Ejemplo: factorial
n! = n * ( n – 1 ) * ( n – 2 ) * … * 1
Relación recursiva ( n! = n * ( n – 1 )! )
5! = 5 * 4!
4! = 4 * 3!…
Caso base (1! = 0! = 1)
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 47
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 48
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 49
3.7.1 Ejemplo de Recursividad: Serie de Fibonacci
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 50
3.7.1 Ejemplo de Recursividad: Serie de Fibonacci
f( 3 )
return f( 2 ) + f( 1 )
return f( 1 ) + f( 0 ) return 1
return 1 return 0
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 51
3.7.1 Ejemplo de Recursividad: Serie de Fibonacci
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 52
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 53
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 54
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 55
3.7.2 Recursividad versus Iteración
Repetición
Iteración: lazo explícito
Recursividad: llamadas reiteradas a la función
Terminación
Iteración: falla la condición del lazo
Recursividad: se llega al caso base
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 56
3.8 Funciones con Lista de Parámetros Vacía
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 57
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 58
3.9 Funciones Inline
Funciones inline
Palabra clave inline antes de la función
Hace que el compilador copie el código en el programa en vez
de hacer una llamada a la función
Reduce el consumo en llamadas a funciones
El compilador puede ignorar inline
Útil para funciones pequeñas muy usadas
Ejemplo
inline double cube( const double s )
{ return s * s * s; }
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 59
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 60
3.10 Referencias y Parámetros Referencia
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 61
3.10 Referencias y Parámetros Referencia
Parámetro referencia
Alias para su argumento correspondiente en una llamada a
función
Pasa el parámetro por referencia
Para indicarlo, se usa & después del tipo de dato en el prototipo
void miFuncion( int &dato );
Se lee “dato es una referencia a un int”
El formato de llamada a la función es el mismo
miFuncion( a );
Sin embargo, el original puede ser modificado
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 62
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 63
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 64
3.10 Referencias y Parámetros Referencia
Punteros (capítulo 5)
Otra forma de paso por referencia
Referencias como alias para otras variables
Se refieren a la misma variable
Pueden usarse dentro de una función
int contador = 1; // declara la variable entera contador
int &cRef = contador; // crea cRef como un alias para
contador
++cRef; // incrementa contador (usando su alias)
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 65
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 66
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 67
3.11 Argumentos por defecto
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 68
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 69
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 70
3.12 Operador Unario de Resolución de Ámbito
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 71
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 72
3.13 Sobrecarga de Funciones
Sobrecarga de funciones
Funciones con el mismo nombre y distintos parámetros
Realizan tareas similares
Ejemplo: función para calcular el cuadrado de ints y de floats
int cuadrado( int x) {return x * x;}
float cuadrado(float x) { return x * x; }
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 73
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 74
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 75
Bibliografía
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017
¿ Preguntas ?
1.77