Sunteți pe pagina 1din 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 pparmetros
- 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

Introduccin
En la mayora de los casos, un determinado problema complejo lo
podemos (y debemos) dividir en problemas ms sencillos. Estos
subproblemas
p
se conocen en el contexto de la programacin
p g
como
Mdulos o subprogramas.
Tcnica de diseo conocida como

D d ell punto
Desde
t de
d vista
i t del
d l diseo:
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
bl
final
fi l queda
d resuelto
lt y estructurado
t t d en forma
f
de
d
mdulos, lo que hace ms sencilla su lectura y mantenimiento.
Programacin modular. Funciones

Yolanda Garca Ruiz

2009/2010

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,
I i i
Inicio
N
Nmero
de
d datos
d t mayores que la
l media,
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
f il de
d codificar.
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
t
transferencia/retorno.
f
i / t
Programa Principal

Subprograma

Transferencia
El control de ejecucin se
pasa al subprograma en el
momento en que se
q
sus servicios.
requieren
Transferencia/retorno de
control y datos
Retorno

El control de ejecucin se devuelve al programa


principal cuando el subprograma termina

Programacin modular. Funciones

Yolanda Garca Ruiz

2009/2010

Definicin de FUNCIN
z C++ es un lenguaje modular,
modular y por esta razn,
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 dentro de un programa. Es un
conjunto de sentencias que se pueden llamar desde cualquier parte
del programa.
p g
z Las funciones sirven para:
realizar tareas concretas y simplificar el programa
sirven
i
para evitar
i escribir
ibi ell mismo
i
cdigo
di varias
i veces.
Ventajas de utilizar funciones:

11.- Aislar
Ai l mejor
j los
l 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

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
di = suma/12;
/
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
lt d = sqrtt ( numero ));
else
{
absoluto = abs (numero);
resultado = cubo( absoluto );
}
cout << resultado;
}

Transferencia/retorno de control y datos


Programacin modular. Funciones

Yolanda Garca Ruiz

float sqrt (int a)


{
float m;
.
return m;
}

int abs (int a)


{
.
return ...;
}

float cubo (int a)


{
.
return ...;
}

2009/2010

Estructura de una funcin


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

Valor qque devuelve


la funcin
Retorno

A
Argumentos
t o parmetros
t
Tranferencia
b = isdigit
g ( carcter )

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.

Programacin modular. Funciones

Yolanda Garca Ruiz

2009/2010

Estructura de una funcin


Sintaxis

La estructura de una funcin es la siguiente:

<tipo_resultado> <nombre_de_la_funcin> ( lista_de_parmetros )


{
cuerpo_de_la_funcin ;
return <expresin> ;
}
Palabra reservada

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

int maximo (int a, int b )


{
i t m;
int
if (a<b)
Variable local
m=b;
else
m=a;
return m;
}

2009/2010

10

Estructura de una funcin


Una vez que se ha diseado y codificado una funcin,
funcin se puede usar.
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
b que se les
l da
d a las
l funciones,
f i
debe
d b ser un identificador
id tifi d vlido,
lid 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
b dde ffunciones
i
: _leer ,

visualizar_tabla_1
i
i
1,

leer_matriz
i , etc ...

Es muy importante en la fase de diseo de un algoritmo,


algoritmo utilizar nombres que nos
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,
j
l qu hacen
h
los
l siguientes
i i
programas:
...
void main()
{
.
leer_datos();
calcular_media();
mayores_que_la_media();
imprimir mayores();
imprimir_mayores();
}

Parece ms intuitivo, no?

Programacin modular. Funciones

Yolanda Garca Ruiz

...
void main()
{
.
primera_funcion();
funcion_de_otro();
funcion_3();
mi funcion();
mi_funcion();
}

Si se nos pide un cambio en algn punto


d l programa, por ejemplo
del
j
l en la
l lectura
l
de datos
qu funcin hemos de modificar?
2009/2010

13

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

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
Programacin modular. Funciones

Yolanda Garca Ruiz

2009/2010

14

Estructura de una funcin: Tipo de dato de retorno


Ejemplos:
j
l
int maximo (int a, int b )
{
.
}

float media (float x, float y )


{
.
}

char siguiente_car (char c )


{
.
}

void visualizar_valores( )
{
.
}

bool encontrado ( )
{
.
}
Programacin modular. Funciones

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

Yolanda Garca Ruiz

2009/2010

15

Estructura de una funcin: Valor de retorno


Una ffuncin
U
i solo
l puede
d ddevolver
l
un valor.
l El valor
l se
devuelve mediante la sentencia return
return <expresin> ;

1. C++ comprueba
p
la compatibilidad
p
de tipos,
p , (no
( se puede
p
devolver un
valor de tipo int, si el tipo de retorno es por ejemplo de tipo char).
2 Una vez que se ejecuta esta sentencia,
2.
sentencia termina la ejecucin de la funcin.
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()
{
b l resultado;
bool
e lt d ;
resultado = funcion (-5);
resultado = funcion (5);
}

Programacin modular. Funciones

Yolanda Garca Ruiz

bbooll funcion(
f
i ( iint a )
{
bool negativo;
if (a
( <0)
{
negativo = true;
return negativo;
}
while (a < 100)
{
cout << a;
a++;
}
return false;
}

2009/2010

17

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,
b float& cociente )
{
if ( a = 0 )
return false;;
else
cociente = a/b;
return true;
}

Programacin modular. Funciones

Yolanda Garca Ruiz

void main()
{
int resultado;
bool ok;
resultado = suma_tres
suma tres (2,
(2 xx, y );
ok = dividir (0, 3, resultado);
if (ok ==true)
cout << resultado;
else
l
cout << error-divisin por cero;
cout << resultado;
}

2009/2010

18

Estructura de una funcin: Valor de retorno

Cuando se llama a una funcin,


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

Programacin modular. Funciones

Yolanda Garca Ruiz

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

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

* El programa principal se interrumpe para comenzar la


ejecucin
j
i de
d la
l funcin
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

a
aux

10

1000
Cdigo de la
Funcin cubo

res
num

1000
10
Cdigo del
Programa
principal
p
p

MEMORIA
21

Estructura de una funcin: Lista de parmetros


2 Paso
2.
P
dde parmetros
t por referencia
f
i

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

void cubo (int & a)


{
int aux;
aux = a*a*a ;
a = aux;
return;
}

...

aux

1000
Cdigo de la
Funcin cubo

num
a

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

1000
10
Cdigo del

Programa

principal

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,
funcin se pasa solo el valor de la variable.
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,
ahora utilizan parmetros
por valor.

Programacin modular. Funciones

Yolanda Garca Ruiz

2009/2010

23

Estructura de una funcin: Lista de parmetros


P
Paso
dde parmetros
t por referencia
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
difi
ell valor
l de
d los
l parmetros
t y que devuelva
d
l ell valor
l modificado.
difi d
Para pasar un parmetro por referencia, hay que poner el operador
d di
de
direccin
i & detrs
d t d
dell ti
tipo d
dell parmetro.
t
void cubo (int & a)
{
.
}

Programacin modular. Funciones

Yolanda Garca Ruiz

2009/2010

24

Ejemplo de uso de paso de parmetros


void main()
{
int m;
m = area_rectangulo(
area rectangulo( 2 , 3 );
cout << m ;
int lado1 = 2, lado2 = 6 ;
m = area_rectangulo( lado1 , lado2 );
cout << m;

void potencia( int x, int y, int& z)


{
z = 1;
for ( int i=1; i<= y ; i++ )
z=z*x;
}

int b = 10,
10 e = 4
4, r= 0;
potencia (b, e, r);
cout << r;
}

Parmetros por valor: a, b, x, y


Programacin modular. Funciones

int area_rectangulo (int a, int b)


{
int aux;
aux = a*b;
a b;
a=0;
b=0;
return aux;
}

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>
i
l d <nombre_de_la_funcin>
b d l f i ( lista_de_parmetros
l
d

);
#include <iostream.h>

Sintaxis del prototipo


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

Prototipo

void potencia( int x, int y, int& z)


{
.
}

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

Codificacin
Programacin modular. Funciones

Yolanda Garca Ruiz

2009/2010

26

Caractersticas importantes relativas a funciones


1 La
1.
L instruccin
i t
i return
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

S-ar putea să vă placă și