You are on page 1of 27

Programacin I E. U. Estadstica, U.

Complutense de Madrid Primer curso, Grupo B Curso 2009-2010

Programacin modular. Funciones en C++

Yolanda Garca Ruiz D17C ygarciar@fdi.ucm.es yg @ http://gpd.sip.ucm.es/yolanda/


Departamento de Sistemas Informticos y Computacin (UCM)

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 p ) parmetros - Paso por valor - Paso por referencia 4. Los arrays y las estructuras como parmetros. 5. Declaracin de funciones: Prototipos.
Programacin modular. Funciones Yolanda Garca Ruiz 2009/2010 2

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 p p g Mdulos o subprogramas.
Tcnica de diseo conocida como

Desde l D d el punto de vista del diseo: t d i t d l di

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 bl fi l d lt t t d f d mdulos, lo que hace ms sencilla su lectura y mantenimiento.
Programacin modular. Funciones Yolanda Garca Ruiz 2009/2010 3

Diseo de algoritmos (diagramas de flujo)


Ejemplo Disear un algoritmo que lea por consola una serie de nmeros enteros y calcule la media. Adems se visualizarn los siguientes datos por pantalla: Media, Inicio I i i Nmero de datos mayores que la media, N d d t l di Datos mayores que la media. Lectura y almacenamiento de datos

La solucin a este problema se poda descomponer en cuatro partes diferentes: Ventajas: - ahorro de espacio. - ms fcil entender lo que hace el algoritmo. - ms fcil de codificar. f il d difi

Calcular la media Determinar cuntos son mayores que la media Visualizar los datos mayores que la media Fin

Programacin modular. Funciones

Yolanda Garca Ruiz

2009/2010

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. t f i / t
Programa Principal Transferencia El control de ejecucin se pasa al subprograma en el momento en que se q requieren sus servicios. Transferencia/retorno de control y datos Retorno El control de ejecucin se devuelve al programa principal cuando el subprograma termina
Yolanda Garca Ruiz 2009/2010 5

Subprograma

Programacin modular. Funciones

Definicin de FUNCIN
C++ es un lenguaje modular, y por esta razn, se puede dividir en modular razn varios mdulos, cada uno de los cuales realiza una tarea determinada. Cada mdulo es un subprograma llamado funcin. Una funcin es un miniprograma dentro de un programa. Es un conjunto de sentencias que se pueden llamar desde cualquier parte del programa. p g Las funciones sirven para:
realizar tareas concretas y simplificar el programa sirven para evitar escribir el mismo cdigo varias veces. i i ibi l i di i Ventajas de utilizar funciones:

1.- Aislar j l 1 Ai l mejor los problemas bl 2.- Escribir programas ms rpido 3.- Programas ms fciles de mantener (ms legibles y ms cortos)
Programacin modular. Funciones Yolanda Garca Ruiz 2009/2010 6

Ejemplo de uso de funciones:


El ejemplo anterior se podra codificar de la siguiente manera:
... void main() { . lectura_datos(); calcular_media(); mayores_media(); imprimir_mayores(); }

Frente a como lo estamos haciendo ahora


Programacin modular. Funciones Yolanda Garca Ruiz

... void main() { ... ... do cin >> dato; }while (); for (int i=0; i<3; i++) for (int j=0; j<4; j++) suma = suma + m[i][j]; media = suma/12; di / for (int i=0; i<3; i++) for (int j=0; j<4; j++) ... ... }

2009/2010

Transferencia / Retorno:
... void main() { int numero, absoluto; float resultado; cin >> numero; if (numero > 0 ) resultado = sqrt ( numero ) lt d t ); else { absoluto = abs (numero); resultado = cubo( absoluto ); } cout << resultado; }
float sqrt (int a) { float m; . return m; }

int abs (int a) { . return ...; }

Transferencia/retorno de control y datos


Programacin modular. Funciones Yolanda Garca Ruiz

float cubo (int a) { . return ...; }

2009/2010

Estructura de una funcin


Hasta ahora, hemos visto y utilizado funciones estndar, es decir ahora estndar definidas en una biblioteca.
resto = sqrt ( 25 )

Valor que devuelve q la funcin Retorno

Argumentos o parmetros A t t Tranferencia


b = isdigit ( carcter ) g

C++ nos permite definir nuestras propias funciones. Pocas veces veremos un programa que no use funciones. Una de ellas, que usamos siempre, es la funcin main.
9

Programacin modular. Funciones

Yolanda Garca Ruiz

2009/2010

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> ; }


Palabra reservada int maximo (int a, int b ) { int i t m; if (a<b) Variable local m=b; else m=a; return m; }
10

Tipo_resultado: Es el tipo de dato que devuelve la funcin. Expresin: valor que devuelve la funcin. funcin Lista de parmetros: aparecen con su tipo. La funcin utiliza stos valores en el cuerpo.
Programacin modular. Funciones Yolanda Garca Ruiz

2009/2010

Estructura de una funcin


Una vez que se ha diseado y codificado una funcin, se puede usar. funcin 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
void main() { int x, y, mayor ; cin >> x >> y ; mayor = maximo( x, y); cout << mayor; } int maximo ( int a, int b ) { int m; if (a<b) m b; m=b; else m=a; return m; }

maximo : int int int


Programacin modular. Funciones Yolanda Garca Ruiz 2009/2010 11

Estructura de una funcin: Nombre de la funcin


El nombre que se les da a las funciones, debe ser un identificador vlido, es b l d l f i d b id tifi d lid 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 d f i b de funciones : _leer ,

visualizar_tabla_1 , i i 1

leer_matriz , etc ... i

Es muy importante en la fase de diseo de un algoritmo, utilizar nombres que nos algoritmo permitan intuir la tarea que realizan las funciones, sobre todo a la hora de mantener y modificar programas.
Programacin modular. Funciones Yolanda Garca Ruiz 2009/2010 12

Estructura de una funcin: Nombre de la funcin


Por ejemplo, qu hacen los siguientes programas: j l h l i i
... void main() { . leer_datos(); calcular_media(); mayores_que_la_media(); imprimir_mayores(); imprimir mayores(); } ... void main() { . primera_funcion(); funcion_de_otro(); funcion_3(); mi_funcion(); mi funcion(); }

Parece ms intuitivo, no?

Si se nos pide un cambio en algn punto del d l programa, por ejemplo en la lectura j l l l de datos qu funcin hemos de modificar?
2009/2010 13

Programacin modular. Funciones

Yolanda Garca Ruiz

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 l d t h id d los datos ha sido exitosa o no. it
int char float ...
Programacin modular. Funciones

Si la funcin devuelve un valor, ha de ser uno de los siguientes:

Un tipo struct

Un puntero a cualquier tipo C++

Lo veremos ms adelante Yolanda Garca Ruiz 2009/2010 14

Estructura de una funcin: Tipo de dato de retorno


Ejemplos: j l
int maximo (int a, int b ) { . } char siguiente_car (char c ) { . } bool encontrado ( ) { . }
Programacin modular. Funciones Yolanda Garca Ruiz

float media (float x, float y ) { . }

int buscar_cd ( int num ) i t b d i t { . }

void visualizar_valores( ) { . }
2009/2010 15

Estructura de una funcin: Valor de retorno Una funcin l U f i solo puede d l d devolver un valor. El valor se l l devuelve mediante la sentencia return
return <expresin> ;

1. C++ comprueba la compatibilidad de tipos, (no se puede devolver un p p p ,( p valor de tipo int, si el tipo de retorno es por ejemplo de tipo char). 2. 2 Una vez que se ejecuta esta sentencia, termina la ejecucin de la funcin. sentencia funcin 3. Una funcin puede tener cualquier nmero de sentencias return, pero al menos debe haber una una. 4. El valor devuelto puede ser: una constante, variable una expresin.
Programacin modular. Funciones Yolanda Garca Ruiz 2009/2010 16

Estructura de una funcin: Valor de retorno


Ejemplos:
void main() { bool e lt d ; b l resultado; resultado = funcion (-5); resultado = funcion (5); }

bool funcion( i a ) b lf i ( int { bool negativo; if (a <0) ( { negativo = true; return negativo; } while (a < 100) { cout << a; a++; } return false; }
17

Programacin modular. Funciones

Yolanda Garca Ruiz

2009/2010

Estructura de una funcin: Valor de retorno


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

Programacin modular. Funciones

Yolanda Garca Ruiz

2009/2010

18

Estructura de una funcin: Valor de retorno

Cuando se llama a una funcin, debe haber una funcin variable que guarde el valor que devolver la funcin, decir, funcin es decir llamaremos a la funcin mediante una sentencia de asignacin, por ejemplo: resultado = suma (6 , 8 );
Programacin modular. Funciones Yolanda Garca Ruiz 2009/2010 19

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. 2 Parmetros: Los parmetros permiten la comunicacin de la funcin con el resto del programa mediante transferencia de datos.
... void main() { int numero, resultado; cin >> numero; numero = cubo ( numero ); cout << numero; }

Variable local
int cubo (int a) { int aux; aux = a*a*a ; aaa return aux; }

Programacin modular. Funciones

Yolanda Garca Ruiz

2009/2010

20

Estructura de una funcin: Lista de parmetros


C++ proporciona dos mtodos para realizar esta transferencia de datos a la funcin. Hablaremos a partir de ahora de paso de parmetros a la funcin.
...

1. Paso de parmetros por valor


... void main() { int num = 10 , res; res = cubo ( num ); cout << res; } int cubo (int a) { int aux; aux = a*a*a ; return aux; }

a aux

10

1000
Cdigo de la Funcin cubo

res num

1000
10 Cdigo del Programa p principal p

* El programa principal se interrumpe para comenzar la ejecucin de la funcin j i d l f i * Se reserva memoria para el cdigo de la funcin, para las variables locales y para los parmetros.
Programacin modular. Funciones Yolanda Garca Ruiz 2009/2010

MEMORIA
21

Estructura de una funcin: Lista de parmetros 2. Paso d parmetros por referencia 2 P de t f i


void cubo (int & a) { int aux; aux = a*a*a ; a = aux; return; }
...

aux

1000
Cdigo de la Funcin cubo

... void main() { int num = 10; cubo ( num ); cout << num; }

num a

1000 10
Cdigo del Programa principal

* El compilador no reserva memoria para co p ado o ese va e o a pa a los parmetros, sino que utiliza la misma porcin de memoria.

MEMORIA
Programacin modular. Funciones Yolanda Garca Ruiz 2009/2010 22

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. funcin 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 este mtodo cuando no necesitemos que se modifiquen los parmetros con los que se llama. Todos los ejemplos que hemos visto hasta ahora, utilizan parmetros ahora por valor.

Programacin modular. Funciones

Yolanda Garca Ruiz

2009/2010

23

Estructura de una funcin: Lista de parmetros Paso d parmetros por referencia P de t f i


- 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 este mtodo cuando necesitamos que la funcin modifique el valor de los parmetros y que devuelva el valor modificado. difi l l d l t d l l l difi d Para pasar un parmetro por referencia, hay que poner el operador de direccin & d t d l ti d l parmetro. d di i detrs del tipo del t
void cubo (int & a) { . }
24

Programacin modular. Funciones

Yolanda Garca Ruiz

2009/2010

Ejemplo de uso de paso de parmetros


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

Parmetros por valor: a, b, x, y


Programacin modular. Funciones Yolanda Garca Ruiz

Parmetros por referencia: z


2009/2010 25

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> ( l i l d b d l f i lista_de_parmetros ) ; d
#include <iostream.h>

Sintaxis del prototipo


void potencia (int x, int y, int& z ); void main() { ... } void potencia( int x, int y, int& z) { . }

Prototipo

El prototipo, informa de la existencia de la funcin, el tipo de datos que devuelve y los p parmetros que tiene q definidos.

Codificacin
Programacin modular. Funciones Yolanda Garca Ruiz 2009/2010 26

Caractersticas importantes relativas a funciones


1. L i t 1 La instruccin return i t 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 unas funciones dentro de otras. (No se pueden declarar funciones anidadas) 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 ;.

Programacin modular. Funciones

Yolanda Garca Ruiz

2009/2010

27

You might also like