Вы находитесь на странице: 1из 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
9 Establecer la necesidad de la subprogramacin
9 Implementar subprogramas en C / C++: las funciones
9 Diferenciar los conceptos de definicin, declaracin y llamada
de funciones

9 Diferenciar los distintos pasos de argumentos: por valor y por


referencia

9 Crear nuestras propias libreras de funciones


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

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

ETSI Industrial 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

Por referencia

Fundamentos de Informtica

Solo permite variables como

parmetro real
Puede producir efectos
laterales

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,


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:


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;
a=x-1;
/* modifico la variable global */
x=func1(a);
a=func2(x);
/* modifico la variable global */
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 41 Universidad de Mlaga

Tema 5:

Jos Antonio Gmez Ruiz

Subprogramas

FIN DEL TEMA

Fundamentos de Informtica

ETSI Industrial 42 Universidad de Mlaga

Jos Antonio Gmez Ruiz

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