Вы находитесь на странице: 1из 14

Funciones

Contenidos

1. Introduccin al concepto de subrutina o subprograma.


2. Definicin de funcin C++.
3. Estructura de una funcin.
a) Nombre de una funcin
b) Tipo de retorno (tipo del valor devuelto)
c) Valor retorno
d) Lista de parmetros
- Paso por valor
- Paso por referencia
4. Los arrays y las estructuras como parmetros.
5. Declaracin de funciones: Prototipos.

Funciones

Introduccin

En la mayora de los casos, un determinado problema complejo lo


podemos (y debemos) dividir en problemas ms sencillos. Estos
subproblemas se conocen en el contexto de la programacin como
Mdulos o subprogramas.
Tcnica de diseo conocida como
Desde el punto de vista del diseo: TOP DOWN

Se tratar de descomponer el problema original en partes.


Se pueden codificar de forma independiente e incluso por diferentes
personas.
El problema final queda resuelto y estructurado en forma de
mdulos, lo que hace ms sencilla su lectura y mantenimiento.

2
Funciones

Diseo de algoritmos (diagramas de flujo)


Hoja 4 (Ejercicio 7)

Inicio

Llenar matriz

La solucin a ste problema se poda Calcular la media

descomponer en cuatro partes diferentes: Determinar cuntos son


Ventajas: mayores que la media
- ahorro de espacio.
Visualizar los datos
- ms fcil entender lo que hace el algoritmo. mayores que la media
- ms fcil de codificar.
Fin

Funciones

Subprogramas
Un subprograma es una serie de instrucciones escritas
independientemente del programa principal. Este subprograma est
ligado al programa principal mediante un proceso de
transferencia/retorno.
Programa Principal
Transferencia Subprograma
El control de ejecucin se
ncia
pasa al subprograma en el transfere
momento en que se
requieren sus servicios.
retorno
Transferencia/retorno de
control y datos

El control de ejecucin se devuelve al programa


Retorno
principal cuando el subprograma termina

4
Funciones

Definicin de FUNCIN
z C++ es un lenguaje modular, y por sta razn, se puede dividir en
varios mdulos, cada uno de los cuales realiza una tarea determinada.
Cada mdulo es un subprograma llamado funcin.
z Una funcin es un miniprograma que se utiliza en un programa. Es un
conjunto de sentencias que se pueden llamar desde cualquier parte
del programa (incluso varias veces).
z Las funciones sirven para:
realizar tareas concretas y simplificar el programa
sirven para evitar escribir el mismo cdigo varias veces.
Ventajas de utilizar funciones:
1.- Aislar mejor los problemas
2.- Escribir programas ms rpido
3.- Programas ms fciles de mantener (ms legibles y ms cortos)

Funciones

Ejemplo de uso de funciones: ...


void main()
{
El ejemplo anterior se podra ...
...
codificar de la siguiente manera: for (int i=0; i<3; i++)
for (int j=0; j<4; j++)
... cin >> m[i][j];
void main() suma = 0;
{ for (int i=0; i<3; i++)
. for (int j=0; j<4; j++)
llenar_matriz(m); suma = suma + m[i][j];
calcular_media(m); media = suma/12;
mayores_media(m); for (int i=0; i<3; i++)
imprimir_mayores(m); for (int j=0; j<4; j++)
} ...
...
}
Frente a como lo estamos haciendo ahora

6
Funciones

Transferencia / Retorno:
float sqrt (int a)
{
...
float m;
void main() .
{ return m;
int numero, absoluto; }
float raiz;
cin >> numero;
if (numero > 0 ) int abs (int a)
raiz = sqrt ( numero ) {
else .
return ...;
{
}
absoluto = abs (numero)
numero = cubo( absoluto )
}
float cubo (int a)
cout << raiz;
{
} .
return ...;
Transferencia/retorno de control y datos }

Funciones

Estructura de una funcin


Hasta ahora, hemos visto y utilizado funciones estndar, es decir
definidas en una biblioteca.

resto = sqrt ( 25 ) cin.getline( cadena , 30 )

Valor que devuelve


Argumentos o parmetros
la funcin
Tranferencia
Retorno
b = isdigit ( carcter )

C++ nos permite definir nuestras propias funciones. Pocas veces veremos
un programa que no use funciones. Una funcin "especial" y que se usa
siempre es la funcin main.

8
Funciones

Estructura de una funcin


La estructura de una funcin es la siguiente: Sintaxis

<tipo_resultado> <nombre_de_la_funcin> ( lista_de_parmetros )


{
cuerpo_de_la_funcin ;
return <expresin> ; //expresin es de tipo <tipo_resultado>
}
int maximo(int a, int b )
Palabra reservada {
int m;
Tipo_resultado: Es el tipo de dato que if (a<b)
Variable local
devuelve la funcin. m=b;
Expresin: valor que devuelve la funcin. else
m=a;
Lista de parmetros: aparecen con su tipo.
return m;
La funcin utiliza stos valores en el cuerpo. }

Funciones

Estructura de una funcin


Una vez que se ha diseado y codificado una funcin, se puede usar.
Para usar una funcin, debemos llamarla o invocarla. Una llamada,
produce la ejecucin de las instrucciones que se encuentran en el cuerpo.

Programa principal
int maximo ( int a, int b )
{
void main() int m;
{ if (a<b)
int x, y, mayor ; m=b;
cin >> x >> y ; else
mayor = maximo( x, y); m=a;
cout << mayor; return m;
} }

maximo : int int int

10
Funciones

Estructura de una funcin: Nombre de la funcin


El nombre que se les da a las funciones, debe ser un identificador vlido, es
decir,
- Debe comenzar con una letra o subrayado (_).
- Despus de la primera letra pueden aparecer otras letras, dgitos y caracteres.
- No debe contener espacios en blanco.
- C++ distingue entre maysculas o minsculas.

Nombres de funciones : _leer , visualizar_tabla_1 , leer_matriz , etc ...

Es muy importante en la fase de diseo de un algoritmo, utilizar nombres que nos


permitan intuir la tarea que realizan las funciones, sobre todo a la hora de
mantener y modificar programas.

11

Funciones

Estructura de una funcin: Nombre de la funcin

Por ejemplo, qu hacen los siguientes programas:

... ...
void main() void main()
{ {
. .
llenar_matriz(m); primera_funcion(m);
calcular_media(m); segunda_funcion(m);
mayores_que_la_mediam(m); funcion_3(m);
imprimir_mayores(m); mi_fincion(m);
} }

Si se nos pide un cambio en algn punto


Parece ms intuitivo, no? del programa, por la forma de imprimir
la matriz,
qu funcin hemos de modificar?

12
Funciones

Estructura de una funcin: Tipo de dato de retorno


Las funciones en C++ las podemos dividir en varios tipos:
Funciones que realizan una tarea especfica pero que no devuelven
valores al programa principal o a la funcin que la llam.
El tipo de dato de retorno ha de ser void Se llaman
Procedimientos
Funciones que realizan operaciones con los argumentos o
manipulan datos y devuelven un valor. Dicho valor, puede ser el
resultado de esas operaciones un indicador de si la manipulacin
de los datos ha sido exitosa o no.
Si la funcin devuelve un valor,
s

ha de ser uno de los siguientes:


pl e

int
sim

char
Cualquier objeto o puntero de C++
os

float Un tipo struct


Tip

...
Lo veremos ms adelante

13

Funciones

Estructura de una funcin: Tipo de dato de retorno

Ejemplos:
float media (float x, float y )
{
int maximo (int a, int b )
.
{
}
.
}
disco buscar_cd ( int num )
char siguiente_car (char c ) {
{ .
. }
}

bool encontrado ( ) void visualizar_vector( int v[ ] )


{ {
. .
} }

14
Funciones

Estructura de una funcin: Tipo de dato de retorno

Ejemplo:
Funcin
struct complejo
{
int real; void main()
int imaginaria; {
};
complejo m;
complejo crea_complejo( int a, int b ) m = crea_complejo(2,4);
{
complejo c;
c.real = a;
c.imaginaria = b; }
return c;
}

15

Funciones

Estructura de una funcin: Valor de retorno


Una funcin solo puede devolver un valor. El valor se
devuelve mediante la sentencia return
return <expresin> ;

1. C++ comprueba la compatibilidad de tipos, (no se puede devolver un


valor de tipo int, si el tipo de retorno es struct ).

2. Una vez que se ejecuta sta sentencia, termina la ejecucin de la funcin.

3. Una funcin puede tener cualquier nmero de sentencias return, pero al


menos debe haber una.. Cuando se ejecuta return se sale de la funcin.

4. El valor devuelto puede ser: una constante, variable una expresin.

16
Funciones

Estructura de una funcin: Valor de retorno


Ejemplos:
bool funcion( int a )
complejo crea_complejo( int a, int b ) {
{ bool negativo;
complejo c; if (a <0)
c.real = a; {
c.imaginaria = b; negativo = true;
return a; return negativo;
} ERRO
R !! }
while (a < 100)
{
cout << a;
void main()
a++;
{
}
bool resultado;
return false;
resultado = funcion (-5);
}
resultado = funcion (5);
}

17

Funciones

Estructura de una funcin: Valor de retorno


Ejemplos:

int suma_tres ( int a , int b, int c )


{ void main()
return (a+b+c); {
} int resultado;
bool ok;
bool dividir ( int a , int b, float& cociente ) resultado = suma_tres (2, x, y );
{ ok = dividir (0, 3, resultado);
if ( b = 0 ) if (ok ==true)
return false; cout << resultado;
else else
cociente = a/b; cout << error-divisin por cero;
return true; cout << resultado;
} }

18
Funciones

Estructura de una funcin: Valor de retorno

resultado = suma (6 , 8 );

Cuando se llama a una funcin, puede haber una


variable que guarde el valor que devolver la
funcin, es decir, llamaremos a la funcin mediante
una sentencia de asignacin.

19

Funciones

Estructura de una funcin: Lista de parmetros


Las funciones trabajan con dos tipos de datos:

1. Variables locales: declaradas en el cuerpo de la funcin. Estas


variables solo son conocidas dentro de la funcin y se crean y se
destruyen con la funcin.

2. Parmetros: Los parmetros permiten la comunicacin de la funcin


con el resto del programa mediante transferencia de datos.
Variable local
...
void main() int cubo (int a)
{ {
int numero, resultado; int aux;
cin >> numero; aux = a*a*a ;
numero = cubo ( numero ); return aux;
cout << numero; }
}

20
Funciones

Estructura de una funcin: Lista de parmetros


C++ proporciona dos mtodos para realizar sta transferencia de datos a
la funcin. Hablaremos a partir de ahora de paso de parmetros a la
funcin.
...
1. Paso de parmetros por valor a 10

...
aux 1000
int cubo (int a)
void main() { Cdigo de la
{ int aux; Funcin cubo
int num = 10 , res; aux = a*a*a ;
res = cubo ( num ); return aux; res 1000
cout << res; } num 10
}
Cdigo del
* El programa principal se interrumpe para comenzar la Programa
principal
ejecucin de la funcin

* Se reserva memoria para el cdigo de la funcin,
para las variables locales y para los parmetros. MEMORIA
21

Funciones

Estructura de una funcin: Lista de parmetros


2. Paso de parmetros por referencia
...

void cubo (int & a) aux


{
1000
... int aux;
aux = a*a*a ; Cdigo de la
void main()
a = aux; Funcin cubo
{
int num = 10; return;
cubo ( num ); }
num 1000
10
cout << num;
} a
Cdigo del

Programa

principal
Con & el compilador no reserva memoria para
los parmetros, sino que utiliza la misma
porcin de memoria. Por tanto los cambios afectan a la variable
MEMORIA

22
Funciones

Estructura de una funcin: Lista de parmetros

Paso de parmetros por valor


- Cuando se llama a la funcin, se pasa solo el valor de la variable.
- Este mtodo tambin se llama paso por copia.
- El compilador hace una copia de los parmetros. Esto implica que
cualquier modificacin en el valor de los parmetros no se
mantiene cuando termina la funcin.
- Utilizaremos ste mtodo cuando no necesitemos que se
modifiquen los parmetros con los que se llama.

La mayora de los ejemplos que hemos visto hasta ahora, utilizan


parmetros por valor.

23

Funciones

Estructura de una funcin: Lista de parmetros


Paso de parmetros por referencia
- Tambin se llama paso por direccin.
- Cuando se llama a la funcin, se pasa la direccin de memoria
donde se encuentra almacenada la variable parmetro.
- El compilador no hace copia, no reserva memoria para los
parmetros.
- Usaremos ste mtodo cuando necesitamos que la funcin
modifique el valor de los parmetros y que devuelva el valor modificado.

Para pasar un parmetro por referencia, hay que poner el operador


de direccin & detrs del tipo del parmetro.
void cubo (int & a)
{ . }

24
Funciones

Ejemplo de uso de paso de parmetros

void main() int area_rectangulo (int a, int b)


{ {
int m; int aux;
m = area_rectangulo( 2 , 3 ); aux = a*b;
cout << m ; a=0;
b=0;
int lado1 = 2, lado2 = 6 ; return aux;
m = area_rectangulo( lado1 , lado2 ); }
cout << m;
void potencia( int x, int y, int& z)
int b = 10, e = 4, r= 0; {
potencia (b, e, r); z = 1;
cout << r; for ( int i=1; i<= y ; i++ )
z=z*x;
} }

Parmetros por valor: a, b, x, y Parmetros por referencia: z

25

Funciones

Paso de parmetros
Los arrays como parmetros:

No hace falta aadir el operador de direccin & cuando el


parmetro que se pasa en un array.
Los arrays se pasan siempre por referencia aunque no lleven &.
No es necesario indicar el tamao del array en la declaracin.
void visualizar_matriz( int m[3][4] ) void visualizar_vector( int v[ ] )
{} { . }

Las estructuras como parmetros:

Las estructuras, si son muy grandes, se pasan por referencia


haciendo uso del operador & como es habitual para el resto de
parmetros.

26
Funciones

Declaracin de las funciones : Prototipos


A excepcin de la funcin main(), en el mdulo del programa debe
aparecer la declaracin de las funciones que se utilicen en dicho mdulo.
Esta declaracin recibe el nombre de PROTOTIPO.
<tipo_resultado> <nombre_de_la_funcin> ( lista_de_parmetros ) ;

#include <iostream.h>
Sintaxis del prototipo
void potencia (int x, int y, int& z );

void main() Prototipo El prototipo, informa de la


{
... existencia de la funcin, el tipo
} de datos que devuelve y los
void potencia( int x, int y, int& z) parmetros que tiene
{
.
definidos.
}
Codificacin

27

Funciones

Caractersticas importantes relativas a funciones


1. La instruccin return
a) fuerza la salida inmediata de la funcin.
b) sirve para devolver un valor. Dicho valor puede ser constante, variable
una expresin.
return (4+i); return 7; return x;
2. No se pueden declarar (DECLARAR != USAR) unas funciones dentro de otras.

3. Las constantes, variables y tipos de datos declarados en el cuerpo de la


funcin son locales a la misma y no se pueden utilizar fuera de ella.

4. El cuerpo de la funcin encerrado entre llaves, no acaba en ;.

28

Вам также может понравиться