Vous êtes sur la page 1sur 21

Tema 5: Subprogramas

Estructura y Contenidos
5.1. SUBPROGRAMAS COMO ABSTRACCIN DE OPERACIONES.
5.2. LAS FUNCIONES EN C / C++.
5.2.1. Definicin de funciones. Parmetros formales y valor de retorno
5.2.2. Llamadas a funciones. Parmetros reales o actuales.
5.2.3. Declaracin o prototipos de funciones.
5.3. USO DE PARMETROS: DE ENTRADA, SALIDA Y ENTRADA / SALIDA.
5.4. PASO DE PARMETROS: POR VALOR Y POR REFERENCIA.
5.5. LOCALIDAD, ANIDAMIENTO, MBITO Y VISIBILIDAD.
5.6. FUNCIONES MATEMTICAS.

Fundamentos de Informtica

ETSI Industrial

1 Universidad de Mlaga

Jos Antonio Gmez Ruiz

Tema 5: Subprogramas
OBJETIVOS
Establecer la necesidad de la subprogramacin
Implementar subprogramas en C / C++: las funciones
Diferenciar los conceptos de definicin, declaracin y llamada
de funciones
Diferenciar los distintos pasos de argumentos: por valor y por
referencia
Crear nuestras propias libreras de funciones
En definitiva, descomponer problemas complejos en problemas
ms simples mediante la subprogramacin
Fundamentos de Informtica

ETSI Industrial

2 Universidad de Mlaga

Jos Antonio Gmez Ruiz

Tema 5: Subprogramas
Estructura y Contenidos
5.1. SUBPROGRAMAS COMO ABSTRACCIN DE OPERACIONES.
5.2. Las funciones en C / C++.
5.2.1. Definicin de funciones. Parmetros formales y valor de retorno
5.2.2. Llamadas a funciones. Parmetros reales o actuales.
5.2.3. Declaracin o prototipos de funciones.
5.3. Uso de parmetros: de entrada, salida y entrada / salida.
5.4. Paso de parmetros: por valor y por referencia.
5.5. Localidad, anidamiento, mbito y visibilidad.
5.6. Funciones matemticas.

Fundamentos de Informtica

ETSI Industrial

3 Universidad de Mlaga

Jos Antonio Gmez Ruiz

SUBPROGRAMAS COMO ABSTRACCIN DE


OPERACIONES
Las aplicaciones informticas que habitualmente se desarrollan
suelen tener suficiente complejidad y contener miles de lneas de
cdigo
Es necesario descomponer un programa en una serie de mdulos
mucho ms pequeos, simples y manejables modularizacin o
diseo descendiente
Cada uno de esos mdulos ser un subprograma
Objetivos de la subprogramacin:
Descomponer la complejidad del problema
Reutilizacin del cdigo
Mayor legibilidad
Menos errores y ms localizados si se producen
Facilidad para aadir nueva funcionalidad
Fundamentos de Informtica

ETSI Industrial

4 Universidad de Mlaga

Jos Antonio Gmez Ruiz

SUBPROGRAMAS COMO ABSTRACCIN DE


OPERACIONES
Pasos naturales de la subprogramacin:
Especificacin detallada del problema
Divisin del problema en subproblemas
Asignar estos subproblemas a subprogramas

Divide y vencers!
Abstraccin

QU

escribir_cuadrado

CMO

for( i=1 ; i<= 4 ; i++ )


{
for( j=1 ; j<= 4 ; j++ )
cout << *;
cout << \n;
}

Separacin

Implementacin

Fundamentos de Informtica

ETSI Industrial

5 Universidad de Mlaga

Jos Antonio Gmez Ruiz

SUBPROGRAMAS COMO ABSTRACCIN DE


OPERACIONES
Llamadas
mltiples
...
escribir_cuadrado
...
escribir_cuadrado
...
escribir_cuadrado
...

Definicin
nica
control

retorno

for( i=1 ; i<= 4 ; i++ )


{
for( j=1 ; j<= 4 ; j++ )
cout << *;
cout << \n;
}

Expansin de Cdigo:
Reutilizable, pero poco
flexible: subtarea fija

Fundamentos de Informtica

ETSI Industrial

6 Universidad de Mlaga

Jos Antonio Gmez Ruiz

SUBPROGRAMAS COMO ABSTRACCIN DE


OPERACIONES

...
escribir_cuadrado(4)
...
escribir_cuadrado(5)
...
escribir_cuadrado(8)
...

for( i=1 ; i<=


; i++ )
{
for( j=1 ; j<=
; j++ )
cout << *;
cout << \n;
}

Subprograma:
Trozo de cdigo que
resuelve una subtarea de
forma parametrizada

Fundamentos de Informtica

ETSI Industrial

7 Universidad de Mlaga

Jos Antonio Gmez Ruiz

Tema 5: Subprogramas
Estructura y Contenidos
5.1. Subprogramas como abstraccin de operaciones.
5.2. LAS FUNCIONES EN C / C++.
5.2.1. Definicin de funciones. Parmetros formales y valor de retorno
5.2.2. Llamadas a funciones. Parmetros reales o actuales.
5.2.3. Declaracin o prototipos de funciones.
5.3. Uso de parmetros: de entrada, salida y entrada / salida.
5.4. Paso de parmetros: por valor y por referencia.
5.5. Localidad, anidamiento, mbito y visibilidad.
5.6. Funciones matemticas.

Fundamentos de Informtica

ETSI Industrial

8 Universidad de Mlaga

Jos Antonio Gmez Ruiz

LAS FUNCIONES EN C / C++


Algunos lenguajes de programacin tienen dos tipos distintos de
subprogramas: procedimientos y funciones
Los subprogramas en el lenguaje C/C++ son slo funciones
Un programa en C/C++ est estructurado en funciones
De hecho, main es una funcin, la funcin principal del programa
Las funciones en programacin son, de alguna manera, parecidas a
las funciones matemticas, pudiendo tener argumentos o parmetros
Ejemplo de funcin matemtica: f(x)= 2 x + 5
f es el nombre de la funcin, que tiene un argumento formal x
La funcin f, una vez definida, puede usarse (ser llamada) en otras
expresiones. Por ejemplo y = f(4) - 5
Para determinar el valor de f(4) se sustituye el argumento formal x por
el argumento actual (o real) 4: f(4)= 2 4 + 5 = 13
Se dice entonces que la funcin f devuelve el valor 13
Fundamentos de Informtica

ETSI Industrial

9 Universidad de Mlaga

Jos Antonio Gmez Ruiz

LAS FUNCIONES EN C / C++


Definicin de una funcin: consta de una cabecera y un cuerpo
La cabecera contiene el nombre de la funcin, la lista de parmetros
formales separador por comas (nombres y tipos) y el tipo del resultado
El cuerpo de la funcin, consta del cdigo necesario de lo que debe
hacer la funcin y del valor que va a devolver
Identificador de la
funcin (nombre)
Tipo de resultado

Variable local

float Sumar (float num1, float num2)


{
Cabecera de la
float resp;
funcin
resp = num1 + num2;
return resp;

Cuerpo de la
funcin
Fundamentos de Informtica

Lista de Parmetros
Formales separados
por comas

Tipos compatibles

Valor devuelto
ETSI Industrial

10 Universidad de Mlaga

Jos Antonio Gmez Ruiz

LAS FUNCIONES EN C / C++


La sentencia return viene acompaada de
una constante, una variable o cualquier expresin siempre y cuando
sean de tipos compatibles con el que devuelve la funcin.
Puede haber ms de un return en el cuerpo de una funcin (no es
aconsejable y slo lo permitiremos en funciones recursivas)
En cuanto se ejecute una sentencia return la funcin termina

Puede no haber return: la funcin no devuelve ningn valor


El tipo de devolucin es void (vaco o nulo)
void escribir_cuadrado(unsigned lado)
{ int i,j;
for(i=1; i<=lado; i++)
{
for(j=1; j<=lado; j++)
cout << *;
cout << \n;
}
}
Fundamentos de Informtica

ETSI Industrial

11 Universidad de Mlaga

Jos Antonio Gmez Ruiz

LAS FUNCIONES EN C / C++


Llamada a una funcin: Es la instruccin donde se invoca o se
utiliza una determinada funcin.
A

Llamada

La funcin A llama a la B
La instruccin de llamada provoca la ejecucin de la funcin B sobre
los valores (parmetros) que le indiquemos
Al acabar la funcin B, puede que nos devuelva unos resultados

Se realiza escribiendo el nombre de la funcin, seguido de los


parmetros sobre los que operar. Estos parmetros se denominan
parmetros reales
La llamada a una funcin puede hacerse en cualquier lugar donde
pueda utilizarse una expresin del tipo de devolucin de la funcin
Fundamentos de Informtica

ETSI Industrial

12 Universidad de Mlaga

Jos Antonio Gmez Ruiz

LAS FUNCIONES EN C / C++


Se crea una interfaz de comunicacin entre la funcin llamante y la
llamada, permitiendo el intercambio de informacin entre ellas
Los parmetros formales de una funcin no son obligatorios pero, si
aparecen, deben tener cierta relacin con los parmetros reales de
una hipottica llamada a la misma:
El nmero de parmetros reales debe coincidir con el de parmetros
formales
El i-simo parmetro real se corresponde con el i-simo formal
El tipo del i-simo parmetro real debe ser compatible que el del isimo formal
Los parmetros de una funcin pueden ser de cualquier tipo
Los nombres de un parmetro formal y su correspondiente real pueden
ser diferentes
Fundamentos de Informtica

ETSI Industrial

13 Universidad de Mlaga

Jos Antonio Gmez Ruiz

LAS FUNCIONES EN C / C++


Ejemplos de
llamadas

Parmetros formales
Parmetros reales

void escribir_tabla(unsigned numero)


{
unsigned i;
for(i=1; i<=10; i++)
cout<< numero << * << i << = <<numero*i;
}
int mayor(int a,int b)
{
if (a>b)
return a;
else
return b;
}

Fundamentos de Informtica

int mayor(int a,int b)


{
int mayor;
if (a>b)
mayor = a;
else
mayor = b;
return mayor;
}
ETSI Industrial

int num=3;
/*correctas*/
escribir_tabla(5);
escribir_tabla(num);
escribir_tabla(num+4);
/*incorrectas*/
num=escribir_tabla(4);
escribir_tabla(2,3);
escribir_tabla(a);
int x=3, y=-2, z;
/*correctas*/
z = mayor(x+2,y);
x = mayor(-14,5-2);
z = mayor(y,-10);
cout << mayor(2,3);
y = y + mayor(y,10);
/*incorrectas*/
mayor(-13,10);
x = mayor(2,10,34);

14 Universidad de Mlaga

Jos Antonio Gmez Ruiz

LAS FUNCIONES EN C / C++


Dnde se definen las funciones en un programa en C / C++ ?
Existen dos maneras diferentes de definirlas:
Antes de la funcin main():
La funcin main()ser la ltima del programa
El resto de funciones se ordenarn en orden de aparicin teniendo en
cuenta que para llamar a una funcin debe estar definida previamente
Despus de la funcin main():
La funcin main()ser la primera del programa
Antes de la funcin main() se incluirn los prototipos de todas las
funciones
Esto es imprescindible ya que, al definirse las funciones al final, se
desconoceran sus caractersticas. Los prototipos declaran las
caractersticas de las funciones y permite que se puedan llamar

El orden de las definiciones de las funciones ya no es importante


puesto que estn todos los prototipos declarados previamente y, por
tanto, todas las funciones podrn llamar a todas las dems
Fundamentos de Informtica

ETSI Industrial

15 Universidad de Mlaga

Jos Antonio Gmez Ruiz

LAS FUNCIONES EN C / C++


Usaremos la segunda opcin: pondremos la definicin de las
funciones despus de la funcin main() y adelantaremos la
declaracin de las mismas mediante sus prototipos:
Evitaremos problemas de mbitos al hacer las llamadas
Al tener todos los prototipos juntos se simplifica localizar las
caractersticas de cada funcin

El prototipo de una funcin consiste en la cabecera de la misma


TERMINADA EN UN PUNTO Y COMA

La misin de los prototipos es simplemente adelantar la informacin


relativa al nmero y tipos de parmetros que acepta la funcin y el
tipo que devuelve la misma
Por tanto, el prototipo no especifica el proceso el proceso a realizar.
Lo har la definicin de la funcin
En el prototipo, el nombre de las variables puede omitirse
Fundamentos de Informtica

ETSI Industrial

16 Universidad de Mlaga

Jos Antonio Gmez Ruiz

LAS FUNCIONES EN C / C++


Ejemplos de
prototipos
vlidos
int mayor(int a,int b);
int mayor(int ,int );
int mayor(int a,int b)
{
int mayor;
if (a>b)
mayor = a;
else
mayor = b;
return mayor;
}
Fundamentos de Informtica

void escribir_tabla(unsigned numero);


void escribir_tabla(unsigned );
void escribir_tabla(unsigned numero)
{
unsigned i;
for(i=1; i<=10; i++)
cout<< numero << * << i << =<<numero*i;
}

long factorial(unsigned num);


long factorial(unsigned );
long factorial(unsigned num)
{
int i, fact = 1;
for(i=2; i<= num; i++)
fact*=i;
return fact;
}
ETSI Industrial

17 Universidad de Mlaga

Jos Antonio Gmez Ruiz

EJEMPLOS
Desarrolla los siguientes programas como ejemplo:
a) Se piden dos nmeros naturales m y n. El programa mostrar todas las
parejas de nmeros amigos que hay en el intervalo [m,n]. Dos nmeros
son amigos si la suma de los divisores del primero (sin contarse el mismo)
coincide con el segundo y viceversa. Nota: usa una funcin que, dado un
nmero, devuelva la suma de sus divisores (sin contarse el mismo).
b) Se piden dos nmeros naturales N e i. El programa mostrar el dgito
de N que ocupa la -sima posicin empezando por el dgito menos
significativo. En caso de no poder obtenerlo (por que se salga del rango)
mostrar -1. Nota: usa dos funciones, una que determine el nmero de
dgitos de un nmero y otra que, dado un nmero y una posicin, devuelva
el dgito que ocupa esa posicin dentro del nmero.
c) Se pide un nmero natural n y se imprimen por pantalla los n primeros
nmeros primos. El programa pregunta si se quiere repetir de nuevo el
proceso. Nota: usa una funcin que, dado un nmero natural, devuelva 1
si es primo, 0 si no lo es.
Fundamentos de Informtica

ETSI Industrial

18 Universidad de Mlaga

Jos Antonio Gmez Ruiz

Tema 5: Subprogramas
Estructura y Contenidos
5.1. Subprogramas como abstraccin de operaciones.
5.2. Las funciones en C / C++.
5.2.1. Definicin de funciones. Parmetros formales y valor de retorno
5.2.2. Llamadas a funciones. Parmetros reales o actuales.
5.2.3. Declaracin o prototipos de funciones.
5.3. USO DE PARMETROS: DE ENTRADA, SALIDA Y ENTRADA / SALIDA.
5.4. Paso de parmetros: por valor y por referencia.
5.5. Localidad, anidamiento, mbito y visibilidad.
5.6. Funciones matemticas.

Fundamentos de Informtica

ETSI Industrial

19 Universidad de Mlaga

Jos Antonio Gmez Ruiz

USO DE LOS PARMETROS: E, S, E/S


En programacin se denomina interfaz a la combinacin de los
parmetros formales definidos en las funciones y los parmetros
reales que se pasan en la llamada a la misma
Muchos de los errores en la subprogramacin se presentan debido a
una interfaz incorrecta
Datos de entrada a
la funcin

Datos de salida
de la funcin
Fundamentos de Informtica

ETSI Industrial

20 Universidad de Mlaga

Jos Antonio Gmez Ruiz

USO DE LOS PARMETROS: E, S, E/S


Parmetros de Entrada:
La funcin que llama pasa un valor que no puede ser modificado por la
funcin llamada, slo puede ser utilizado
El parmetro formal NO DEBE aparecer en la parte izquierda de una
asignacin dentro de la funcin

Parmetros de Entrada y Salida:


La funcin llamante pasa un valor que puede ser utilizado y modificado
dentro de la funcin llamada
Cualquier cambio en el parmetro formal (dentro de la definicin de la
funcin) se reflejar en el parmetro real de la llamada

Parmetros de Salida:
La funcin llamante llamante no pasa un valor, slo lo recibe
El parmetro formal SLO DEBE aparecer en la parte izquierda de una
asignacin dentro de la definicin de la funcin
Cualquier cambio en el parmetro formal (dentro de la definicin de la
funcin) se reflejar en el parmetro real de la llamada
Fundamentos de Informtica

ETSI Industrial

21 Universidad de Mlaga

Jos Antonio Gmez Ruiz

USO DE LOS PARMETROS: E, S, E/S


Parmetros de Entrada:
Proporcionan informacin a la funcin llamada

a
-

x1

x2

discr

/* races ecuacin 2do. grado*/


discr = b*b-4.0*a*c;
if (discr>0.0)
{
x1 = (-b+raiz(discr))/(2.0*a);
x2 = (-b-raiz(discr))/(2.0*a);
}
...
Ec2Grado
Fundamentos de Informtica

ETSI Industrial

22 Universidad de Mlaga

Jos Antonio Gmez Ruiz

USO DE LOS PARMETROS: E, S, E/S


Parmetros de Salida:
Devuelven informacin a la funcin que llama

a
-

x1

x2

discr

/* races ecuacin 2do. grado*/


discr = b*b-4.0*a*c;
if (discr>0.0)
{
x1 = (-b+raiz(discr))/(2.0*a);
x2 = (-b-raiz(discr))/(2.0*a);
}
...
Ec2Grado
Fundamentos de Informtica

ETSI Industrial

23 Universidad de Mlaga

Jos Antonio Gmez Ruiz

USO DE LOS PARMETROS: E, S, E/S


Parmetros de Entrada / Salida:
Proporcionan y devuelven informacin

temporal

/* intercambia valores */
temporal = a;
a = b;
b = temporal;
Intercambiar

Fundamentos de Informtica

ETSI Industrial

24 Universidad de Mlaga

Jos Antonio Gmez Ruiz

Tema 5: Subprogramas
Estructura y Contenidos
5.1. Subprogramas como abstraccin de operaciones.
5.2. Las funciones en C / C++.
5.2.1. Definicin de funciones. Parmetros formales y valor de retorno
5.2.2. Llamadas a funciones. Parmetros reales o actuales.
5.2.3. Declaracin o prototipos de funciones.
5.3. Uso de parmetros: de Entrada, Salida y Entrada / Salida.
5.4. PASO DE PARMETROS: POR VALOR Y POR REFERENCIA.
5.5. Localidad, anidamiento, mbito y visibilidad.
5.6. Funciones matemticas.

Fundamentos de Informtica

ETSI Industrial

25 Universidad de Mlaga

Jos Antonio Gmez Ruiz

PASO DE PARMETROS: POR VALOR Y


POR REFERENCIA
Como acabamos de mostrar, el uso se puede hacer con los parmetros
de las funciones puede ser de Entrada, Salida y de Entrada / Salida
Hay que establecer como se implementa la transmisin entre los
parmetros formales y los parmetros reales en cada uno de esos usos
Las implementaciones posibles son:
Paso por Valor:
Se realiza una COPIA del contenido del parmetro real en el
parmetro formal, siendo stos VARIABLES INDEPENDIENTES
Se utiliza con los parmetros de Entrada.

Paso por Referencia:


El parmetro formal obtiene una REFERENCIA al parmetro real
Ahora NO SON DOS VARIABLES INDEPENDIENTES, son la
misma con dos referencias distintas: el parmetro real y el formal.
CUALQUIER CAMBIO en el parmetro formal (dentro de la
funcin) SE REFLEJA en el parmetro real de la llamada
Se utiliza con los parmetros de Salida y de Entrada / Salida
Fundamentos de Informtica

ETSI Industrial

26 Universidad de Mlaga

Jos Antonio Gmez Ruiz

PASO DE PARMETROS POR VALOR


Por defecto, en el lenguaje C/C++, todo paso de parmetros
(de los tipos vistos hasta el momento) se hace por valor
Por tanto, la modificacin de un parmetro formal en la
definicin de la funcin, no afecta al parmetros real de la
llamada
En un paso por valor un parmetro real puede ser una variable,
constante o expresin siempre que sea compatible con el tipo
del parmetro formal
Todos los ejemplos de definicin de funciones y llamadas
vistos hasta el momento implementan el paso por valor

Fundamentos de Informtica

ETSI Industrial

27 Universidad de Mlaga

Jos Antonio Gmez Ruiz

PASO PARMETROS POR REFERENCIA


En un paso de parmetros por referencia un parmetro real
slo puede ser una variable que sea compatible con el tipo del
parmetro formal
Usaremos el paso por referencia implementado en C++
En el prototipo y la cabecera de la funcin, el parmetro
formal que se pase por referencia va precedido por el operador
de direccin (&)
En la llamada a la funcin, el parmetro real que se pasa por
referencia se pasa como en el paso por valor
El paso por referencia permite que una funcin puede devolver
ms de un valor a la funcin llamante
Fundamentos de Informtica

ETSI Industrial

28 Universidad de Mlaga

Jos Antonio Gmez Ruiz

PASO PARMETROS POR REFERENCIA


/* ordena tres nmeros */
#include <iostream>
using namespace std;

Fundamentos de Informtica

int main()
{
float num1, num2, num3, temp;
cin >> num1 >> num2 >> num3;
if (num1 > num2)
{
temp = num1;
num1 = num2;
num2 = temp;
}
if (num1 > num3)
{
temp = num1;
num1 = num3;
num3 = temp;
}
if (num2 > num3)
{
temp = num2;
num2 = num3;
num3 = temp;
}
cout << num1 << num2 << num3;
return 0;
}
ETSI Industrial 29 Universidad de Mlaga

Jos Antonio Gmez Ruiz

PASO PARMETROS POR REFERENCIA


/* Ordena tres nmeros */
#include <iostream>
using namespace std;
void ordena(float &n1, float &n2);
int main()
{
float num1, num2, num3, temp;
cin >> num1 >> num2 >> num3;
ordena(num1 , num2);
ordena(num1 , num3);
ordena(num2 , num3);
cout << num1 << num2 <<num3;
return 0;
quedan ligadas
}
void ordena(float &n1, float &n2)
{
float temp;
if (n1 > n2)
{ temp = n1;
n1 = n2;
n2 = temp;
}
}
Fundamentos de Informtica

ETSI Industrial

30 Universidad de Mlaga

Jos Antonio Gmez Ruiz

PASO PARMETROS POR REFERENCIA


/*Ecuacin de 2grado. Devolucin de ms de un valor */
#include <iostream>
using namespace std;
int ec2grado(float a, float b, float c, float &x1, float &x2);
int main()
{
Devuelve tres valores
float a, b, c, sol1, sol2;
cin >> a >> b >> c;
if ( ec2grado(a, b, c, sol1, sol2) )
cout << las soluciones son << sol1 << y << sol2;
else
cout << No tiene soluciones reales;
return 0;
}
int ec2grado(float a, float b, float c, float &x1, float &x2)
{
float discr; int solreal = 0;
discr = b*b-4.0*a*c;
if (discr>=0.0)
{ solreal=1;
x1 = (-b+sqrt(discr))/(2.0*a);
x2 = (-b-sqrt(discr))/(2.0*a);
}
return solreal;
}
Fundamentos de Informtica

ETSI Industrial

31 Universidad de Mlaga

Jos Antonio Gmez Ruiz

PASO DE PARMETROS: POR VALOR Y


POR REFERENCIA
Ejercicio: Supongamos declaradas en main() , las siguientes variables:
float x, y;
int m;
char c;
Y tenemos una funcin con la siguiente cabecera:
void prueba(int a, float b, float &c, float &d, char &e);
Cuales de las siguientes llamadas son incorrectas? Por qu?
prueba
prueba
prueba
prueba
prueba
Fundamentos de Informtica

(m+3, 10.5, x, y, c);


(m, 19, x, y);
(35, sqrt(x), x, y, c);
(m, -2.3, sqrt(2.5), y, E);
(30, 10.2, x, x+y, c);
ETSI Industrial

32 Universidad de Mlaga

Jos Antonio Gmez Ruiz

PASO DE PARMETROS: POR VALOR Y


POR REFERENCIA
CUADRO RESUMEN
Ventajas
Por valor

Asla
Evita efectos laterales
Permite constantes y

Desventajas
Utiliza ms memoria

expresiones como
parmetro real
Utiliza menos memoria

Solo permite variables como

parmetro real

Por referencia

Puede producir efectos

laterales

Fundamentos de Informtica

ETSI Industrial

33 Universidad de Mlaga

Jos Antonio Gmez Ruiz

PASO DE PARMETROS: POR VALOR Y


POR REFERENCIA
Desarrollar, como ejemplo, un programa que pida dos nmeros
naturales y muestre el mximo comn divisor (MCD) y el mnimo
comn mltiplo (mcm.) de ambos nmeros.
Se definir una funcin que reciba como parmetros dos nmeros
naturales y devuelva SIMULTNEAMENTE el MCD y el mcm.
Nota: para calcular el MCD de dos nmeros naturales se puede usar
el algoritmo de Euclides, el cual utiliza 2 variables que contendrn
inicialmente a esos dos nmeros, y tratar de hacer que el contenido
de las dos variables llegue a ser el mismo. Para ello se deber ir
restando la menor a la mayor (depositando la resta en la mayor) hasta
que ambas contengan el mismo valor, que ser el MCD.
El mcm. se puede calcular segn la siguiente propiedad: el MCD de
dos nmeros naturales multiplicado por su mcm, coincide con el
producto de dichos nmeros naturales.
Fundamentos de Informtica

ETSI Industrial

34 Universidad de Mlaga

Jos Antonio Gmez Ruiz

Tema 5: Subprogramas
Estructura y Contenidos
5.1. Subprogramas como abstraccin de operaciones.
5.2. Las funciones en C / C++.
5.2.1. Definicin de funciones. Parmetros formales y valor de retorno
5.2.2. Llamadas a funciones. Parmetros reales o actuales.
5.2.3. Declaracin o prototipos de funciones.
5.3. Uso de parmetros: de Entrada, Salida y Entrada / Salida.
5.4. Paso de parmetros: por valor y por referencia.
5.5. LOCALIDAD, ANIDAMIENTO, MBITO Y VISIBILIDAD.
5.6. Funciones matemticas.

Fundamentos de Informtica

ETSI Industrial

35 Universidad de Mlaga

Jos Antonio Gmez Ruiz

LOCALIDAD, ANIDAMIENTO, MBITO Y


VISIBILIDAD
En el lenguaje de programacin C/C++ no existe el anidamiento
de funciones, es decir, dentro del cuerpo de una funcin no se
pueden definir otras funciones, slo se pueden llamar
Todas las variables declaradas dentro del cuerpo de una funcin
son variables locales a dicha funcin. Se crean cuando la funcin
es llamada y se destruyen al finalizar la misma
Por tanto, el mbito de una variable local es slo el cuerpo de la
funcin donde se ha declarado
Los parmetros formales de una funcin se comportan como
variables locales en el cuerpo de la misma
Fundamentos de Informtica

ETSI Industrial

36 Universidad de Mlaga

Jos Antonio Gmez Ruiz

LOCALIDAD, ANIDAMIENTO, MBITO Y


VISIBILIDAD
Slo permitiremos declarar variables al principio del cuerpo de
las funciones
Con respecto al mbito de las funciones, como utilizamos la
declaracin de las mismas antes de la funcin main(), se
pueden llamar unas a otras sin restriccin
Si no se utilizase el prototipo como declaracin, tendran que ser
definidas en orden de manera que para que una funcin pudiese
llamar a otra, la funcin llamada tendra que estar definida antes
de la funcin que hace la llamada

Fundamentos de Informtica

ETSI Industrial

37 Universidad de Mlaga

Jos Antonio Gmez Ruiz

LOCALIDAD, ANIDAMIENTO, MBITO Y


VISIBILIDAD
Las variables globales son variables que se declaran fuera de la
definicin cualquier funcin. Aparecen al principio del programa,
justo despus de las sentencias del preprocesador
El mbito de estas variables es global: se pueden utilizar en el
cuerpo de cualquier funcin
El uso de variables globales est desaconsejado, especialmente en
programadores noveles, debido a los efectos colaterales que se
pueden producir.
Si existiesen variables globales y locales con el mismo
identificador, el mbito correspondera a la variable local
No utilizaremos variables globales: toda la informacin que
reciba una funcin lo har a travs de su interfaz
Fundamentos de Informtica

ETSI Industrial

38 Universidad de Mlaga

Jos Antonio Gmez Ruiz

LOCALIDAD, ANIDAMIENTO, MBITO Y


VISIBILIDAD
#include <iostream>
using namespace std;
int a;

/* variable global */

int func1( int );


int func2( int );
int func3( int );
int main()
{ int x=3;
/* modifico la variable global */
a=x-1;
x=func1(a);
/* modifico la variable global */
a=func2(x);
x=func3(a);
cout << x= << x << , a= << a;
return 0;
x=10, a=5
}
int func1(int a)
{ return a*a;
}
int func2(int x)
{ int a=1;
return a+x;
}
int func3(int x)
{ return a+x;
}
Fundamentos de Informtica

ETSI Industrial

39 Universidad de Mlaga

Jos Antonio Gmez Ruiz

Tema 5: Subprogramas
Estructura y Contenidos
5.1. Subprogramas como abstraccin de operaciones.
5.2. Las funciones en C / C++.
5.2.1. Definicin de funciones. Parmetros formales y valor de retorno
5.2.2. Llamadas a funciones. Parmetros reales o actuales.
5.2.3. Declaracin o prototipos de funciones.
5.3. Uso de parmetros: de Entrada, Salida y Entrada / Salida.
5.4. Paso de parmetros: por valor y por referencia.
5.5. Localidad, anidamiento, mbito y visibilidad.
5.6. FUNCIONES MATEMTICAS.

Fundamentos de Informtica

ETSI Industrial

40 Universidad de Mlaga

Jos Antonio Gmez Ruiz

FUNCIONES MATEMTICAS
int abs(int)

valor absoluto

double exp(double)

exponencial

double log(double)

logaritmo neperiano

double log10(double)

logaritmo decimal

double pow(double,double)

Potencia

double sqrt(double)

raz cuadrada

double sin(double)

seno

double cos(double)

coseno

double tan(double)

tangente

double asin(double)

arco seno

double acos(double)

arco coseno

double atan(double)

arco tangente

Todas se estn en <math.h> excepto abs() que est en <stdlib.h>


Las funciones trigonomtricas operan en radianes
Fundamentos de Informtica

ETSI Industrial

Tema 5:

41 Universidad de Mlaga

Jos Antonio Gmez Ruiz

Subprogramas

FIN DEL TEMA

Fundamentos de Informtica

ETSI Industrial

42 Universidad de Mlaga

Jos Antonio Gmez Ruiz

Vous aimerez peut-être aussi