Publicado el 9 de Mayo del 2017
2.368 visualizaciones desde el 9 de Mayo del 2017
955,5 KB
51 paginas
Funciones y Parámetros
! Funciones
! Concepto
! Argumentos
! Programa Principal
! Recursividad
El programa principal
Es el punto de entrada al programa
Imprescindible para conseguir un
ejecutable autónomo o “programa”
Mínimo programa totalmente correcto
int main(void)
{
}
return 0;
© Francisco Rosales, Jose
María Peña & Jesús Montes
Programación C++
2
Concepto de función
© Francisco Rosales, Jose
María Peña & Jesús Montes
Programación C++
3
Función y procedimiento
Semejante a función matemática
Invocación, argumentos, valor
devuelto
Un único punto de entrada
Un único punto de salida
Procedimiento
Si no devuelve ningún valor
© Francisco Rosales, Jose
María Peña & Jesús Montes
Programación C++
4
Funcionalidades
Crear una función para cada
funcionalidad o método bien
delimitado de cada módulo del
programa
¡Aunque sólo se use una vez!
Programa = conjunto de funciones
© Francisco Rosales, Jose
María Peña & Jesús Montes
Programación C++
5
I
Función – descripción
Qué es lo que hace (funcionalidad)
El nombre debe resumirlo
Ejemplo clásico
factorial(n) = n * (n-1) * ... * 2 * 1
factorial(0) = 1
Para n natural (entero no negativo)
© Francisco Rosales, Jose
María Peña & Jesús Montes
Programación C++
6
Función – descripción
Una función se invoca proporcionando
valores a los argumentos de la llamada.
II
El valor se devuelve por medio de
return.
El control del número y tipo de
argumentos es mínimo.
Las funciones en C++ admiten
recursividad.
© Francisco Rosales, Jose
María Peña & Jesús Montes
Programación C++
7
Función – declaración
Dice cómo se usarla
No dice cómo está hecha
Se declara su prototipo
Qué devuelve
(tipo)
Qué hace
(nombre)
Qué recibe
(tipo)
unsigned factorial(unsigned);
© Francisco Rosales, Jose
María Peña & Jesús Montes
Programación C++
8
Punto y coma
Función – invocación
II
Argumento
int main(void)
{
cout <<"3! = "<<factorial(3)<<endl;
cout <<"7! = "<<factorial(7)<<endl;
return 0;
}
Varias invocaciones a la misma función son
independientes
© Francisco Rosales, Jose
María Peña & Jesús Montes
Programación C++
9
Función – definición
Variable local
Parámetro formal
unsigned factorial(unsigned n)
{
unsigned result = 1;
/* Recorre de n a 2 */
for (; n > 1; n--)
return result;
}
result = result * n;
© Francisco Rosales, Jose
María Peña & Jesús Montes
Programación C++
10
Paso de parámetros
Paso por valor:
La función trabaja
con una copia del
valor del parámetro.
Se considera un
parámetro de
entrada.
Paso por
referencia:
Se distingue
poniendo & delante
del parámetro.
La función trabaja
con la variable de
entrada
directamente.
© Francisco Rosales, Jose
María Peña & Jesús Montes
Programación C++
11
Paso por valor
int main(void)
{
unsigned num = 5, res;
res = factorial(num);
/* num sigue valiendo 5 */
Se pasa el valor de la expresión evaluada,
no la variable en sí
Esto es siempre así en C
En C++ existe el paso por referencia
© Francisco Rosales, Jose
María Peña & Jesús Montes
Programación C++
12
Paso por referencia
Solo se pueden
usar variables como
parámetros.
Los parámetros se
pueden modificar.
void incremento (int &a) {
a = a + 1;
}
int main () {
int a = 0;
incremento(a);
// Ahora a vale 1
return a;
}
Podemos crear
procedimientos
(funciones de tipo
void).
© Francisco Rosales, Jose
María Peña & Jesús Montes
Programación C++
13
La función main
El programa principal es una función
como las demás:
Es la primera que se ejecuta.
Sirve de punto de inicio del programa.
Se denomina función principal (en
inglés: main function).
© Francisco Rosales, Jose
María Peña & Jesús Montes
Programación C++
14
Argumentos de invocación
Los argumentos con los que es
invocado el ejecutable son accesibles
desde la función principal main
I
int main(int argc, char* argv[])
int argc : Número de argumentos
char* argv[] : Argumentos de invocación
© Francisco Rosales, Jose
María Peña & Jesús Montes
Programación C++
15
Argumentos de invocación II
$ g++ prog.cpp -o prog
$ ./prog uno dos tres cuatro
int main(int argc, char* argv[])
argc == 5
p r o g \0
u n o \0
d o s \0
t r e s \0
c u a t
r o
\0
argv[0]
argv[1]
argv[2]
argv[3]
argv[4]
argv[5]
NULL
© Francisco Rosales, Jose
María Peña & Jesús Montes
Programación C++
16
Argumentos de invocación III
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
cout <<"Ejecutable: "<<argv[0]<<endl;
for(int i=0; i<argc; i++)
return 0;
cout<<"Argumento["<<i<<"]: "<<argv[i]<<endl;
}
© Francisco Rosales, Jose
María Peña & Jesús Montes
Programación C++
17
Ejercicio
Programe:
La función principal de un programa que
muestre el factorial de los números
del 0 al 20 inclusive
© Francisco Rosales, Jose
María Peña & Jesús Montes
Programación C++
18
Solución
#include <iostream>
using namespace std;
int main(void)
{
unsigned n;
for (n = 0; n <= 20; n++)
return 0;
cout <<n<<"! = "<<factorial(n)<<endl;
}
© Francisco Rosales, Jose
María Peña & Jesús Montes
Programación C++
19
Ejercicio
Programe la siguiente función
definida sobre
m y n naturales
binomial(m,n) = m! / (n!*(m-n)!)
© Francisco Rosales, Jose
María Peña & Jesús Montes
Programación C++
20
Solución
unsigned binomial(unsigned m, unsigned n)
{
return factorial(m) /
(factorial(n)*factorial(m-n));
}
© Francisco Rosales, Jose
María Peña & Jesús Montes
Programación C++
21
I
Ámbito de las variables
La declaración de las variables lleva
asociado un ámbito, dentro del cual la
variable es visible:
Ámbito global: La variable es visible para
todas las funciones del programa.
Ámbito local: La variable es visible sólo
dentro de la función (tiene prioridad sobre
el ámbito global).
© Francisco Rosales, Jose
María Peña & Jesús Montes
Programación C++
22
Ámbito de las variables
II
int x,y;
int main()
{
float x,z;
// Aquí x y z son reales e y un entero
}
// Aquí x e y son variables enteras
// La variable z no existe fuera de la
// función.
© Francisco Rosales, Jose
María Peña & Jesús Montes
Programación C++
23
Arrays como parámetros
Los arrays como parámetros se
I
pueden modificar dentro de la función
Se debe tener en cuenta el tamaño y
número de dimensiones del array
En caso de que se desconozca el
tamaño, se debe indicar como
parámetro, si la función lo requiere
En char[] se usa ‘\0’ para indicar el final
© Francisco Rosales, Jose
María Peña & Jesús Montes
Programación C++
24
Arrays como parámetros II
int suma (int lista[], int num_elem) {
int i;
int acumulador = 0;
for (i=0; i < num_elem; i++) {
acumulador = acumulador + lista[i];
}
}
return acumulador;
}
© Francisco Rosales, Jose
María Peña & Jesús Montes
Programación C++
25
Arrays como parámetros III
int contar_letras (char letra, char cadena[]) {
int contador = 0;
for (int i=0; cadena[i] != '\0'; i++) {
if (cadena[i] == letra) {
contador++;
}
}
return contador;
}
© Francisco Rosales, Jose
María Peña & Jesús Montes
Programación C++
26
Función – recursividad
I
Facultad de las funciones de invocarse
a sí mismas
Forma natural de expresar ciertos
problemas autocontenidos
Ejemplo clásico
factorial(n) = n * factorial(n-1)
factorial(0) = 1
© Francisco Rosales, Jose
María Peña & Jesús Montes
Programación C++
27
Función – recursividad
Estructura tipica de una función
II
recursiva:
tipo func_recursiva(...) {
...
if (!condición_parada) {
...
func_recursiva(...);
} else {
...
}
}
© Francisco Rosales, Jose
María Peña & Jesús Montes
Programación C++
28
Ejercicio
Programe:
Una versión recursiva de la función:
factorial(0) = 1
factorial(n) = n * factorial(n-1)
Para n natural (entero no negativo)
© Francisco Rosales, Jose
María Peña & Jesús Montes
Programación C++
29
Solución
unsigned factorial(unsigned n)
{
if (n == 0)
n = 1;
else
return n;
}
n = n * factorial(n - 1);
© Francisco Rosales, Jose
María Peña & Jesús Montes
Programación C++
30
III
Función – recursividad
Funcionalmente equivalente iterar
La implementación:
no contiene ningún bucle
pero si una condición de terminación
Es mucho más difícil de seguir
La recursión infinita es fatal
© Francisco Rosales, Jose
María Peña & Jesús Montes
Programación C++
31
Recursividad vs. Iteración
int fact(int num) {
int val = 0;
if (num > 0) {
val = num*fact(num-1);
} else {
val = 1;
}
return val;
}
int fact(int num) {
int ret = 1;
int val = num;
while (val > 0) {
ret = ret * val;
val--;
}
return ret;
}
© Francisco Rosales, Jose
María Peña & Jesús Montes
Programación C++
32
Modificadores de función
static
Sólo visible dentro del módul
Comentarios de: Programación en C++ - Funciones y Parámetros (0)
No hay comentarios