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

Tema 5: Subprogramas

Estructura y Contenidos
5.1. SUBPROGRAMAS COMO ABSTRACCIÓN DE OPERACIONES.
5.2. LAS FUNCIONES EN C / C++.
5.2.1. Definición de funciones. Parámetros formales y valor de retorno
5.2.2. Llamadas a funciones. Parámetros reales o actuales.
5.2.3. Declaración o prototipos de funciones.
5.3. USO DE PARÁMETROS: DE ENTRADA, SALIDA Y ENTRADA / SALIDA.
5.4. PASO DE PARÁMETROS: POR VALOR Y POR REFERENCIA.
5.5. LOCALIDAD, ANIDAMIENTO, ÁMBITO Y VISIBILIDAD.
5.6. FUNCIONES MATEMÁTICAS.

Fundamentos de Informática ETSI Industrial 1 Universidad de Málaga José Antonio Gómez Ruiz

Tema 5: Subprogramas
OBJETIVOS
9 Establecer la necesidad de la subprogramación
9 Implementar subprogramas en C / C++: las funciones
9 Diferenciar los conceptos de definición, declaración y llamada
de funciones

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


referencia
9 Crear nuestras propias librerías de funciones
9 En definitiva, descomponer problemas complejos en problemas
más simples mediante la subprogramación
Fundamentos de Informática ETSI Industrial 2 Universidad de Málaga José Antonio Gómez Ruiz
Tema 5: Subprogramas
Estructura y Contenidos

5.1. SUBPROGRAMAS COMO ABSTRACCIÓN DE OPERACIONES.


5.2. Las funciones en C / C++.
5.2.1. Definición de funciones. Parámetros formales y valor de retorno
5.2.2. Llamadas a funciones. Parámetros reales o actuales.
5.2.3. Declaración o prototipos de funciones.
5.3. Uso de parámetros: de entrada, salida y entrada / salida.
5.4. Paso de parámetros: por valor y por referencia.
5.5. Localidad, anidamiento, ámbito y visibilidad.
5.6. Funciones matemáticas.

Fundamentos de Informática ETSI Industrial 3 Universidad de Málaga José Antonio Gómez Ruiz

SUBPROGRAMAS COMO ABSTRACCIÓN DE


OPERACIONES
‰ Las aplicaciones informáticas que habitualmente se desarrollan
suelen tener suficiente complejidad y contener miles de líneas de
código
‰ Es necesario descomponer un programa en una serie de módulos
mucho más pequeños, simples y manejables → modularización o
diseño descendiente
‰ Cada uno de esos módulos será un subprograma
‰ Objetivos de la subprogramación:
¾ Descomponer la complejidad del problema
¾ Reutilización del código
¾ Mayor legibilidad
¾ Menos errores y más localizados si se producen
¾ Facilidad para añadir nueva funcionalidad
Fundamentos de Informática ETSI Industrial 4 Universidad de Málaga José Antonio Gómez Ruiz
SUBPROGRAMAS COMO ABSTRACCIÓN DE
OPERACIONES
‰ Pasos naturales de la subprogramación:
¾ Especificación detallada del problema
¾ División del problema en subproblemas
¾ Asignar estos subproblemas a subprogramas

¡Divide y vencerás!

Abstracción QUÉ escribir_cuadrado

Separación

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


Implementación CÓMO
{
for( j=1 ; j<= 4 ; j++ )
cout << “*”;
cout << “\n”;
}
Fundamentos de Informática ETSI Industrial 5 Universidad de Málaga José Antonio Gómez Ruiz

SUBPROGRAMAS COMO ABSTRACCIÓN DE


OPERACIONES
Llamadas Definición
múltiples única
control
... → for( i=1 ; i<= 4 ; i++ )
escribir_cuadrado {
... for( j=1 ; j<= 4 ; j++ )
escribir_cuadrado cout << “*”;
... cout << “\n”;
}
escribir_cuadrado
... ←
retorno
Expansión de Código:
Reutilizable, pero poco
flexible: subtarea fija

Fundamentos de Informática ETSI Industrial 6 Universidad de Málaga José Antonio Gómez Ruiz
SUBPROGRAMAS COMO ABSTRACCIÓN DE
OPERACIONES

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


4 {
escribir_cuadrado(4)
for( j=1 ; j<= ; j++ )
... cout << “*”;
escribir_cuadrado(5) cout << “\n”;
... }
escribir_cuadrado(8)
...
Subprograma:
Trozo de código que
resuelve una subtarea de
forma parametrizada

Fundamentos de Informática ETSI Industrial 7 Universidad de Málaga José Antonio Gómez Ruiz

Tema 5: Subprogramas
Estructura y Contenidos

5.1. Subprogramas como abstracción de operaciones.


5.2. LAS FUNCIONES EN C / C++.
5.2.1. Definición de funciones. Parámetros formales y valor de retorno
5.2.2. Llamadas a funciones. Parámetros reales o actuales.
5.2.3. Declaración o prototipos de funciones.
5.3. Uso de parámetros: de entrada, salida y entrada / salida.
5.4. Paso de parámetros: por valor y por referencia.
5.5. Localidad, anidamiento, ámbito y visibilidad.
5.6. Funciones matemáticas.

Fundamentos de Informática ETSI Industrial 8 Universidad de Málaga José Antonio Gómez Ruiz
LAS FUNCIONES EN C / C++
‰ Algunos lenguajes de programación tienen dos tipos distintos de
subprogramas: procedimientos y funciones
‰ Los subprogramas en el lenguaje C/C++ son sólo funciones
‰ Un programa en C/C++ está estructurado en funciones
¾ De hecho, main es una función, la función principal del programa

‰ Las funciones en programación son, de alguna manera, parecidas a


las funciones matemáticas, pudiendo tener argumentos o parámetros
¾ Ejemplo de función matemática: f(x)= 2 x + 5
− f es el nombre de la función, que tiene un argumento formal x
− La función 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 función f devuelve el valor 13
Fundamentos de Informática ETSI Industrial 9 Universidad de Málaga José Antonio Gómez Ruiz

LAS FUNCIONES EN C / C++


‰ Definición de una función: consta de una cabecera y un cuerpo
¾ La cabecera contiene el nombre de la función, la lista de parámetros
formales separador por comas (nombres y tipos) y el tipo del resultado
¾ El cuerpo de la función, consta del código necesario de lo que debe
hacer la función y del valor que va a devolver
Identificador de la
Lista de Parámetros
función (nombre)
Formales separados
Tipo de resultado por comas
float Sumar (float num1, float num2)
{
Variable local float resp; Cabecera de la
función
resp = num1 + num2; Tipos compatibles
return resp;
} Valor devuelto
Cuerpo de la
función
Fundamentos de Informática ETSI Industrial 10 Universidad de Málaga José Antonio Gómez Ruiz
LAS FUNCIONES EN C / C++
‰ La sentencia return viene acompañada de
¾ una constante, una variable o cualquier expresión siempre y cuando
sean de tipos compatibles con el que devuelve la función.
‰ Puede haber más de un return en el cuerpo de una función (no es
aconsejable y sólo lo permitiremos en funciones recursivas)
¾ En cuanto se ejecute una sentencia return la función termina

‰ Puede no haber return: la función no devuelve ningún valor


¾ El tipo de devolución es void (vacío 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 Informática ETSI Industrial 11 Universidad de Málaga José Antonio Gómez Ruiz

LAS FUNCIONES EN C / C++


‰ Llamada a una función: Es la instrucción donde se invoca o se
utiliza una determinada función.
Llamada
A
B

¾ La función A llama a la B
¾ La instrucción de llamada provoca la ejecución de la función B sobre
los valores (parámetros) que le indiquemos
¾ Al acabar la función B, puede que nos devuelva unos resultados
‰ Se realiza escribiendo el nombre de la función, seguido de los
parámetros sobre los que operar. Estos parámetros se denominan
parámetros reales
‰ La llamada a una función puede hacerse en cualquier lugar donde
pueda utilizarse una expresión del tipo de devolución de la función
Fundamentos de Informática ETSI Industrial 12 Universidad de Málaga José Antonio Gómez Ruiz
LAS FUNCIONES EN C / C++
‰ Se crea una interfaz de comunicación entre la función llamante y la
llamada, permitiendo el intercambio de información entre ellas
‰ Los parámetros formales de una función no son obligatorios pero, si
aparecen, deben tener cierta relación con los parámetros reales de
una hipotética llamada a la misma:
¾ El número de parámetros reales debe coincidir con el de parámetros
formales
¾ El i-ésimo parámetro real se corresponde con el i-ésimo formal
¾ El tipo del i-ésimo parámetro real debe ser compatible que el del i-
ésimo formal
¾ Los parámetros de una función pueden ser de cualquier tipo
¾ Los nombres de un parámetro formal y su correspondiente real pueden
ser diferentes

Fundamentos de Informática ETSI Industrial 13 Universidad de Málaga José Antonio Gómez Ruiz

LAS FUNCIONES EN C / C++


Ejemplos de Parámetros formales int num=3;
llamadas Parámetros reales /*correctas*/
escribir_tabla(5);
escribir_tabla(num);
void escribir_tabla(unsigned numero)
escribir_tabla(num+4);
{
/*incorrectas*/
unsigned i;
num=escribir_tabla(4);
for(i=1; i<=10; i++)
cout<< numero << “*” << i << “=” <<numero*i; escribir_tabla(2,3);
} escribir_tabla(‘a’);

int mayor(int a,int b) int mayor(int a,int b) int x=3, y=-2, z;


{ { /*correctas*/
if (a>b) int mayor; z = mayor(x+2,y);
return a; if (a>b) x = mayor(-14,5-2);
else mayor = a; z = mayor(y,-10);
return b; else cout << mayor(2,3);
} mayor = b; y = y + mayor(y,10);
return mayor; /*incorrectas*/
} mayor(-13,10);
x = mayor(2,10,34);
Fundamentos de Informática ETSI Industrial 14 Universidad de Málaga José Antonio Gómez Ruiz
LAS FUNCIONES EN C / C++
‰ ¿Dónde se definen las funciones en un programa en C / C++ ?
‰ Existen dos maneras diferentes de definirlas:
¾ Antes de la función main():
− La función main()será la última del programa
− El resto de funciones se ordenarán en orden de aparición teniendo en
cuenta que para llamar a una función debe estar definida previamente
¾ Después de la función main():
− La función main()será la primera del programa
− Antes de la función main() se incluirán los prototipos de todas las
funciones
• Esto es imprescindible ya que, al definirse las funciones al final, se
desconocerían sus características. Los prototipos declaran las
características de las funciones y permite que se puedan llamar
− El orden de las definiciones de las funciones ya no es importante
puesto que están todos los prototipos declarados previamente y, por
tanto, todas las funciones podrán llamar a todas las demás
Fundamentos de Informática ETSI Industrial 15 Universidad de Málaga José Antonio Gómez Ruiz

LAS FUNCIONES EN C / C++


‰ Usaremos la segunda opción: pondremos la definición de las
funciones después de la función main() y adelantaremos la
declaración de las mismas mediante sus prototipos:
¾ Evitaremos problemas de ámbitos al hacer las llamadas
¾ Al tener todos los prototipos juntos se simplifica localizar las
características de cada función
‰ El prototipo de una función consiste en la cabecera de la misma
TERMINADA EN UN PUNTO Y COMA
¾ La misión de los prototipos es simplemente adelantar la información
relativa al número y tipos de parámetros que acepta la función y el
tipo que devuelve la misma
¾ Por tanto, el prototipo no especifica el proceso el proceso a realizar.
Lo hará la definición de la función
¾ En el prototipo, el nombre de las variables puede omitirse
Fundamentos de Informática ETSI Industrial 16 Universidad de Málaga José Antonio Gómez Ruiz
LAS FUNCIONES EN C / C++
Ejemplos de void escribir_tabla(unsigned numero);
void escribir_tabla(unsigned );

prototipos void escribir_tabla(unsigned numero)


{
válidos unsigned i;
for(i=1; i<=10; i++)
cout<< numero << “*” << i << “=”<<numero*i;
int mayor(int a,int b); }
int mayor(int ,int );
long factorial(unsigned num);
int mayor(int a,int b)
long factorial(unsigned );
{
int mayor; long factorial(unsigned num)
if (a>b) {
mayor = a; int i, fact = 1;
else for(i=2; i<= num; i++)
mayor = b; fact*=i;
return mayor; return fact;
} }
Fundamentos de Informática ETSI Industrial 17 Universidad de Málaga José Antonio Gómez Ruiz

EJEMPLOS
Desarrolla los siguientes programas como ejemplo:
a) Se piden dos números naturales m y n. El programa mostrará todas las
parejas de números amigos que hay en el intervalo [m,n]. Dos números
son amigos si la suma de los divisores del primero (sin contarse el mismo)
coincide con el segundo y viceversa. Nota: usa una función que, dado un
número, devuelva la suma de sus divisores (sin contarse el mismo).

b) Se piden dos números naturales N e i. El programa mostrará el dígito


de N que ocupa la í-ésima posición empezando por el dígito menos
significativo. En caso de no poder obtenerlo (por que se salga del rango)
mostrará -1. Nota: usa dos funciones, una que determine el número de
dígitos de un número y otra que, dado un número y una posición, devuelva
el dígito que ocupa esa posición dentro del número.

c) Se pide un número natural n y se imprimen por pantalla los n primeros


números primos. El programa pregunta si se quiere repetir de nuevo el
proceso. Nota: usa una función que, dado un número natural, devuelva 1
si es primo, 0 si no lo es.
Fundamentos de Informática ETSI Industrial 18 Universidad de Málaga José Antonio Gómez Ruiz
Tema 5: Subprogramas
Estructura y Contenidos

5.1. Subprogramas como abstracción de operaciones.


5.2. Las funciones en C / C++.
5.2.1. Definición de funciones. Parámetros formales y valor de retorno
5.2.2. Llamadas a funciones. Parámetros reales o actuales.
5.2.3. Declaración o prototipos de funciones.
5.3. USO DE PARÁMETROS: DE ENTRADA, SALIDA Y ENTRADA / SALIDA.
5.4. Paso de parámetros: por valor y por referencia.
5.5. Localidad, anidamiento, ámbito y visibilidad.
5.6. Funciones matemáticas.

Fundamentos de Informática ETSI Industrial 19 Universidad de Málaga José Antonio Gómez Ruiz

USO DE LOS PARÁMETROS: E, S, E/S

‰ En programación se denomina interfaz a la combinación de los


parámetros formales definidos en las funciones y los parámetros
reales que se pasan en la llamada a la misma
‰ Muchos de los errores en la subprogramación se presentan debido a
una interfaz incorrecta

Datos de entrada a
la función

Datos de salida
de la función

Fundamentos de Informática ETSI Industrial 20 Universidad de Málaga José Antonio Gómez Ruiz
USO DE LOS PARÁMETROS: E, S, E/S
‰ Parámetros de Entrada:
¾ La función que llama pasa un valor que no puede ser modificado por la
función llamada, sólo puede ser utilizado
¾ El parámetro formal NO DEBE aparecer en la parte izquierda de una
asignación dentro de la función
‰ Parámetros de Entrada y Salida:
¾ La función llamante pasa un valor que puede ser utilizado y modificado
dentro de la función llamada
¾ Cualquier cambio en el parámetro formal (dentro de la definición de la
función) se reflejará en el parámetro real de la llamada
‰ Parámetros de Salida:
¾ La función llamante llamante no pasa un valor, sólo lo recibe
¾ El parámetro formal SÓLO DEBE aparecer en la parte izquierda de una
asignación dentro de la definición de la función
¾ Cualquier cambio en el parámetro formal (dentro de la definición de la
función) se reflejará en el parámetro real de la llamada
Fundamentos de Informática ETSI Industrial 21 Universidad de Málaga José Antonio Gómez Ruiz

USO DE LOS PARÁMETROS: E, S, E/S


‰ Parámetros de Entrada:
¾ Proporcionan información a la función llamada

? ? ? ? ?
a b c x1 x2
- discr
/* raíces ecuación 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 Informática ETSI Industrial 22 Universidad de Málaga José Antonio Gómez Ruiz
USO DE LOS PARÁMETROS: E, S, E/S
‰ Parámetros de Salida:
¾ Devuelven información a la función que llama

? ? ? ? ?
a b c x1 x2
- discr
/* raíces ecuación 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 Informática ETSI Industrial 23 Universidad de Málaga José Antonio Gómez Ruiz

USO DE LOS PARÁMETROS: E, S, E/S


‰ Parámetros de Entrada / Salida:
¾ Proporcionan y devuelven información

- -
a b
- temporal

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

Intercambiar

Fundamentos de Informática ETSI Industrial 24 Universidad de Málaga José Antonio Gómez Ruiz
Tema 5: Subprogramas
Estructura y Contenidos

5.1. Subprogramas como abstracción de operaciones.


5.2. Las funciones en C / C++.
5.2.1. Definición de funciones. Parámetros formales y valor de retorno
5.2.2. Llamadas a funciones. Parámetros reales o actuales.
5.2.3. Declaración o prototipos de funciones.
5.3. Uso de parámetros: de Entrada, Salida y Entrada / Salida.
5.4. PASO DE PARÁMETROS: POR VALOR Y POR REFERENCIA.
5.5. Localidad, anidamiento, ámbito y visibilidad.
5.6. Funciones matemáticas.

Fundamentos de Informática ETSI Industrial 25 Universidad de Málaga José Antonio Gómez Ruiz

PASO DE PARÁMETROS: POR VALOR Y


POR REFERENCIA
‰ Como acabamos de mostrar, el uso se puede hacer con los parámetros
de las funciones puede ser de Entrada, Salida y de Entrada / Salida
‰ Hay que establecer como se implementa la transmisión entre los
parámetros formales y los parámetros reales en cada uno de esos usos
‰ Las implementaciones posibles son:
¾ Paso por Valor:
− Se realiza una COPIA del contenido del parámetro real en el
parámetro formal, siendo éstos VARIABLES INDEPENDIENTES
− Se utiliza con los parámetros de Entrada.
¾ Paso por Referencia:
− El parámetro formal obtiene una REFERENCIA al parámetro real
− Ahora NO SON DOS VARIABLES INDEPENDIENTES, son la
misma con dos referencias distintas: el parámetro real y el formal.
− CUALQUIER CAMBIO en el parámetro formal (dentro de la
función) SE REFLEJA en el parámetro real de la llamada
− Se utiliza con los parámetros de Salida y de Entrada / Salida
Fundamentos de Informática ETSI Industrial 26 Universidad de Málaga José Antonio Gómez Ruiz
PASO DE PARÁMETROS POR VALOR

‰ Por defecto, en el lenguaje C/C++, todo paso de parámetros


(de los tipos vistos hasta el momento) se hace por valor

‰ Por tanto, la modificación de un parámetro formal en la


definición de la función, no afecta al parámetros real de la
llamada

‰ En un paso por valor un parámetro real puede ser una variable,


constante o expresión siempre que sea compatible con el tipo
del parámetro formal

‰ Todos los ejemplos de definición de funciones y llamadas


vistos hasta el momento implementan el paso por valor

Fundamentos de Informática ETSI Industrial 27 Universidad de Málaga José Antonio Gómez Ruiz

PASO PARÁMETROS POR REFERENCIA


‰ En un paso de parámetros por referencia un parámetro real
sólo puede ser una variable que sea compatible con el tipo del
parámetro formal

‰ Usaremos el paso por referencia implementado en C++

‰ En el prototipo y la cabecera de la función, el parámetro


formal que se pase por referencia va precedido por el operador
de dirección (&)

‰ En la llamada a la función, el parámetro real que se pasa por


referencia se pasa como en el paso por valor

‰ El paso por referencia permite que una función puede devolver


más de un valor a la función llamante

Fundamentos de Informática ETSI Industrial 28 Universidad de Málaga José Antonio Gómez Ruiz
PASO PARÁMETROS POR REFERENCIA
/* ordena tres números */
#include <iostream>
using namespace std;
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;
Fundamentos de Informática } ETSI Industrial 29 Universidad de Málaga José Antonio Gómez Ruiz

PASO PARÁMETROS POR REFERENCIA


/* Ordena tres números */
#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 Informática ETSI Industrial 30 Universidad de Málaga José Antonio Gómez Ruiz
PASO PARÁMETROS POR REFERENCIA
/*Ecuación de 2ºgrado. Devolución de más 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 Informática ETSI Industrial 31 Universidad de Málaga José Antonio Gómez Ruiz

PASO DE PARÁMETROS: POR VALOR Y


POR REFERENCIA
Ejercicio: Supongamos declaradas en main() , las siguientes variables:
float x, y;
int m;
char c;
Y tenemos una función 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 (m+3, 10.5, x, y, c);


prueba (m, 19, x, y);
prueba (35, sqrt(x), x, y, c);
prueba (m, -2.3, sqrt(2.5), y, ‘E’);
prueba (30, 10.2, x, x+y, c);
Fundamentos de Informática ETSI Industrial 32 Universidad de Málaga José Antonio Gómez Ruiz
PASO DE PARÁMETROS: POR VALOR Y
POR REFERENCIA

CUADRO RESUMEN

Ventajas Desventajas
• Aísla • Utiliza más memoria
• Evita efectos laterales
Por valor • Permite constantes y
expresiones como
parámetro real

• Utiliza menos memoria • Solo permite variables como


parámetro real
Por referencia • Puede producir efectos
laterales

Fundamentos de Informática ETSI Industrial 33 Universidad de Málaga José Antonio Gómez Ruiz

PASO DE PARÁMETROS: POR VALOR Y


POR REFERENCIA
Desarrollar, como ejemplo, un programa que pida dos números
naturales y muestre el máximo común divisor (MCD) y el mínimo
común múltiplo (mcm.) de ambos números.
Se definirá una función que reciba como parámetros dos números
naturales y devuelva SIMULTÁNEAMENTE el MCD y el mcm.
Nota: para calcular el MCD de dos números naturales se puede usar
el algoritmo de Euclides, el cual utiliza 2 variables que contendrán
inicialmente a esos dos números, 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 según la siguiente propiedad: el MCD de
dos números naturales multiplicado por su mcm, coincide con el
producto de dichos números naturales.

Fundamentos de Informática ETSI Industrial 34 Universidad de Málaga José Antonio Gómez Ruiz
Tema 5: Subprogramas
Estructura y Contenidos

5.1. Subprogramas como abstracción de operaciones.


5.2. Las funciones en C / C++.
5.2.1. Definición de funciones. Parámetros formales y valor de retorno
5.2.2. Llamadas a funciones. Parámetros reales o actuales.
5.2.3. Declaración o prototipos de funciones.
5.3. Uso de parámetros: de Entrada, Salida y Entrada / Salida.
5.4. Paso de parámetros: por valor y por referencia.
5.5. LOCALIDAD, ANIDAMIENTO, ÁMBITO Y VISIBILIDAD.
5.6. Funciones matemáticas.

Fundamentos de Informática ETSI Industrial 35 Universidad de Málaga José Antonio Gómez Ruiz

LOCALIDAD, ANIDAMIENTO, ÁMBITO Y


VISIBILIDAD
‰ En el lenguaje de programación C/C++ no existe el anidamiento
de funciones, es decir, dentro del cuerpo de una función no se
pueden definir otras funciones, sólo se pueden llamar

‰ Todas las variables declaradas dentro del cuerpo de una función


son variables locales a dicha función. Se crean cuando la función
es llamada y se destruyen al finalizar la misma

‰ Por tanto, el ámbito de una variable local es sólo el cuerpo de la


función donde se ha declarado

‰ Los parámetros formales de una función se comportan como


variables locales en el cuerpo de la misma

Fundamentos de Informática ETSI Industrial 36 Universidad de Málaga José Antonio Gómez Ruiz
LOCALIDAD, ANIDAMIENTO, ÁMBITO Y
VISIBILIDAD
‰ Sólo permitiremos declarar variables al principio del cuerpo de
las funciones

‰ Con respecto al ámbito de las funciones, como utilizamos la


declaración de las mismas antes de la función main(), se
pueden llamar unas a otras sin restricción

‰ Si no se utilizase el prototipo como declaración, tendrían que ser


definidas en orden de manera que para que una función pudiese
llamar a otra, la función llamada tendría que estar definida antes
de la función que hace la llamada

Fundamentos de Informática ETSI Industrial 37 Universidad de Málaga José Antonio Gómez Ruiz

LOCALIDAD, ANIDAMIENTO, ÁMBITO Y


VISIBILIDAD
‰ Las variables globales son variables que se declaran fuera de la
definición cualquier función. Aparecen al principio del programa,
justo después de las sentencias del preprocesador
‰ El ámbito de estas variables es global: se pueden utilizar en el
cuerpo de cualquier función
‰ 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 correspondería a la variable local
‰ No utilizaremos variables globales:
globales toda la información que
reciba una función lo hará a través de su interfaz
Fundamentos de Informática ETSI Industrial 38 Universidad de Málaga José Antonio Gómez 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 Informática ETSI Industrial 39 Universidad de Málaga José Antonio Gómez Ruiz

Tema 5: Subprogramas
Estructura y Contenidos

5.1. Subprogramas como abstracción de operaciones.


5.2. Las funciones en C / C++.
5.2.1. Definición de funciones. Parámetros formales y valor de retorno
5.2.2. Llamadas a funciones. Parámetros reales o actuales.
5.2.3. Declaración o prototipos de funciones.
5.3. Uso de parámetros: de Entrada, Salida y Entrada / Salida.
5.4. Paso de parámetros: por valor y por referencia.
5.5. Localidad, anidamiento, ámbito y visibilidad.
5.6. FUNCIONES MATEMÁTICAS.

Fundamentos de Informática ETSI Industrial 40 Universidad de Málaga José Antonio Gómez Ruiz
FUNCIONES MATEMÁTICAS
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) raíz 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 están en <math.h> excepto abs() que está en <stdlib.h>


Las funciones trigonométricas operan en radianes
Fundamentos de Informática ETSI Industrial 41 Universidad de Málaga José Antonio Gómez Ruiz

Tema 5: Subprogramas

FIN DEL TEMA

Fundamentos de Informática ETSI Industrial 42 Universidad de Málaga José Antonio Gómez Ruiz

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