Tema4 ProgramacionModular
Tema4 ProgramacionModular
Informática
Curso: 2023/2024
Verónica Romero Gómez
1
Índice
1. Programación modular.
2. Llamada a subprogramas.
3. Definición de subprogramas: funciones
4. Ámbito de los identificadores.
5. Parámetros de un subprograma.
6. Recursividad.
Programa
subprog. 4 subprog. 5
Ejemplo:
Gestión de
Alumnos
Introducir un Escribir un
alumno alumno
𝑚
𝑛
Ejemplo: m m!
=
n n!(m − n)! Factorial num
Para conseguir que sea totalmente independiente del resto del programa
no comparten variables:
1. Maneja sus propias variables (locales)
2. Recibe datos de entrada. A estos datos se les denomina parámetros.
Los parámetros que se pasan al subprograma en la llamada se denominan
parámetros reales (o argumentos).
Los parámetros que se incluyen en la definición del subprograma se
denominan parámetros formales.
Son variables locales especiales del subprograma que permiten recoger los datos
de entrada
3. Genera resultados (datos de salida) que pueden recoger las variables locales del
subprograma que invoca al subprograma
f(0, 0) = 0
f(0, 1) = 0
𝑥 f(1, 0) = 1
𝑓 𝑥, 𝑦 = f(1, 1) = 0.5
1+𝑦 f(1, 2) = 0.333
…
1. Programación modular.
2. Llamada a subprogramas.
3. Definición de subprogramas: funciones
4. Ámbito de los identificadores.
5. Parámetros de un subprograma.
6. Recursividad.
Programa principal
(u otro subprograma) Subprograma Suma
Parámetros
X Y formales
Inicio
Parámetros
reales 1 3 Z = X+Y
Final
Programa principal
(u otro subprograma) Subprograma Suma
Parámetros
X Y formales
Inicio
Parámetros
reales 1 3 Z = X+Y
Final
Programa principal
(u otro subprograma) Subprograma Suma
Parámetros
X Y formales
Inicio
Parámetros
reales 1 3 Z = X+Y
Final
Programa principal
(u otro subprograma) Subprograma Suma
Parámetros
X Y formales
Inicio
Parámetros
reales 1 3 Z = X+Y
Final
Programa principal
(u otro subprograma) Subprograma Suma
Parámetros
X Y formales
Inicio
Parámetros
reales 1 3 Z = X+Y
Final
Programa principal
(u otro subprograma) Subprograma Suma
Parámetros
X Y formales
Inicio
Parámetros
reales 1 3 Z = X+Y
4 Final
#include <cmath>
#include <iostream>
Funciones
using namespace std;
(bib. Matemática)
int main()
{
float num, res;
cos( 2 x) e x
Ejercicio
1. Programación modular.
2. Llamada a subprogramas.
3. Definición de subprogramas: funciones
4. Ámbito de los identificadores.
5. Parámetros de un subprograma.
6. Recursividad.
parámetros formales:
tipo de valor Datos que se le pasan a la función
que devuelve con el identificador de la función
(misma normas que var.) (cero, uno o varios parámetros)
return
elementos
m m!
=
n n!(m − n)!
parámetros formales:
tipo de valor Datos que se le pasan a la función
que devuelve la identificador de la función
(misma normas que var.) (cero, uno o varios parámetros)
función
Ejemplos:
#include <iostream>
using namespace std;
Declaración del prototipo
float triple(float); de la función
int main()
{
float x, y;
x = triple(3) + 2;
Llamadas a la función
y = triple(triple(x));
....
}
incx = x1 – x2;
incy = y1 – y2;
1. Programación modular.
2. Llamada a subprogramas.
3. Definición de subprogramas: funciones
4. Ámbito de los identificadores.
5. Parámetros de un subprograma.
6. Recursividad.
int z;
int Sumar(int , int );
Var. global int main()
{
int suma; Antes z = 3
z = 3;
suma = Sumar(2, 3);
cout << z; Después z = 5 (efecto lateral)
}
int Sumar(int x, int y)
{
z = x + y;
return z; La función depende de la existencia de z
}
int x = 3, y = -4; // 1
Muestra(y); // 2
return 0;
}
void Muestra(int x)
{
int y = x; // 3
if(x<0)
{
int x = -y; // 4
cout << "valor absoluto:" << x << endl;
}
cout << "valor: " << x << endl;
return;
}
int main()
{
int val;
Las funciones permiten dividir un cout << "Escribe un numero: ";
problema en problemas más cin >> val; Llamada a la función
pequeños if (esPrimo(val))
cout << "Es primo“;
Toda función tiene declaración y else
definición cout << "No es primo“;
return numeroPrimo;
}
int main()
{
int val;
Comprobación rápida: cout << "Escribe un numero: ";
cin >> val;
1. La definición y la declaración
coinciden (nombre y tipos) if (esPrimo(val))
cout << "Es primo“;
2. Todas las variables que se utilizan en la else
cout << "No es primo“;
función están declaradas dentro de la
función o son argumentos return 0;
}
3. El valor devuelto (return) coincide con
bool esPrimo(int num)
el tipo de la función {
int i;
4. Las llamadas a la función se bool numeroPrimo = true;
corresponden con la definición
for (i=2; i<num; i++)
{
if (num % i == 0)
numeroPrimo = false;
}
return numeroPrimo;
}
1. Programación modular.
2. Llamada a subprogramas.
3. Definición de subprogramas: funciones
4. Ámbito de los identificadores.
5. Parámetros de un subprograma.
6. Recursividad.
int main()
{
int n;
n = 4;
UnoMenos(n);
cout << n; ¿n?
UnoMenos(5);
UnoMenos(n * 2 - 3);
return 0;
}
void UnoMenos(int x)
{
x = x - 1;
cout << x;
}
int main()
{
int n;
4
n = 4;
UnoMenos(n);
cout << n;
UnoMenos(5);
UnoMenos(n * 2 - 3);
return 0;
}
void UnoMenos(int x)
4
{
x = x - 1;
cout << x;
}
int main()
{
int n; 4
n = 4;
UnoMenos(n);
cout << n;
UnoMenos(5);
UnoMenos(n * 2 - 3);
return 0;
}
void UnoMenos(int x)
3
{
x = x - 1;
cout << x;
}
• n NO CAMBIA su valor.
int main()
{
int n;
4
n = 4;
UnoMenos(n);
cout << n;
UnoMenos(5);
UnoMenos(n * 2 - 3);
return 0;
}
void UnoMenos(int x)
5
{
x = x - 1;
cout << x;
}
#include <iostream>
using namespace std;
int PrimeraCifra(int);
int main()
Ejercicio
{
int x, y;
cout << "Introduce el valor: ";
cin >> x; // 1
y = PrimeraCifra(x); // 2
cout << "Primera cifra de " << x << " es " << y << endl;
return 0;
}
int PrimeraCifra(int x)
{
while(x>10)
x = x / 10; // 3
return x;
}
x = func_pr ( 3, y, z);
Datos de entrada
z = x; Pantalla
x = y;
y = z; 3 5
return; 5 3
}
#include <iostream>
using namespace std;
int PrimeraCifra(int &);
int main()
Ejercicio
{
int x, y;
cout << "Introduce el valor: ";
cin >> x; // 1
y = PrimeraCifra(x); // 2
cout << "Primera cifra de " << x << " es " << y << endl;
return 0;
}
int PrimeraCifra(int &n)
{
while(n>10)
n = n / 10; // 3
return n;
}
x4) y muestre el cociente y el resto de los dos primeros (x1 entre x2) y el
cociente y el resto de los dos últimos (x3 entre x4)
#include <iostream>
using namespace std;
int cambia(int, int &);
int main()
Ejercicio
{
int x, y, z;
x = 2; y = 5; z = 9; // 1
y = cambia(z, x); // 2
cout << x << ' ' << y << ' ' << z; // 3
}
int cambia(int x, int & y)
{
y = x + 1; // 4
x = y + 1; // 5
return (y + x);
}
1. Programación modular.
2. Llamada a subprogramas.
3. Definición de subprogramas: funciones
4. Ámbito de los identificadores.
5. Parámetros de un subprograma.
6. Recursividad.
n = 4
if (n == 0)
f = 1; Fase de desplegado
else {
f=Fact(n-1)
f=f*n;
}
return f;
f ?
n 4
Pila
n = 4
if (n == 0)
f = 1; Fase de desplegado
else {
f=Fact(n-1) n = 3
f=f*n; if (n == 0) f ?
} f = 1;
return f; else { n 3
f=Fact(n-1)
f=f*n;
f ?
} n 4
return f;
Pila
n = 4
if (n == 0)
f = 1; Fase de desplegado f ?
else {
f=Fact(n-1) n = 3
n 2
f=f*n; if (n == 0) f ?
} f = 1;
return f; else { n 3
f=Fact(n-1) n = 2
f=f*n; if (n == 0) f ?
} f = 1; n 4
else {
return f;
f=Fact(n-1) Pila
f=f*n;
}
return f;
n = 4
if (n == 0)
f = 1; f 2
else {
f=Fact(n-1) n = 3
n 2
f=f*n; if (n == 0) f ?
} f = 1;
return f; else { n 3
f=Fact(n-1) n = 2
f=f*n; if (n == 0) f ?
} f = 1; n 4
else {
return f;
f=1; Pila
f=1*2;
}
return 2;
Fase de plegado
n = 4
if (n == 0)
f = 1;
else {
f=Fact(n-1) n = 3
f=f*n; if (n == 0) f 6
} f = 1;
return f; else { n 3
f=2;
f=2*3;
f ?
} n 4
return 6;
Pila
Fase de plegado
n = 4
if (n == 0)
f = 1;
else {
f=6;
f=6*4;
}
return 24;
f 24
n 4
Pila
Fase de plegado
Recursión infinita
int Factorial( int n )
{
Caso
int f; int Factorial( int n )
directo
if (n == 0) {
f = 1; int f;
else
Caso
f = n * Factorial(n-1); f = n*Factorial(n-1);
recursivo
return f; return f;
} }
Fac torial(5)
Fib(4)
120
5
Fib(2) Fib(3)
Fac torial(4)
2 3
24
Fib(0) Fib(1) Fib(1) Fib(2)
Fac torial(3)
1 1 1 2
6
Fib(0) Fib(1)
Fac torial(2) 1 1
2
Fac torial(1)
1
Fac torial(0)
1
A B C
115 Tema 4: Programación modular Asignatura: Informática
Recursividad
1.- Mover N-1 discos de A a B.
Estrategia:
Pasar N - 1 discos de A a B
Pasar N discos de A a C = Mover un disco de A a C
Pasar N - 1 discos de B a C
A B C
A B C
A B C
116 Tema 4: Programación modular Asignatura: Informática
Recursividad
Siguiendo la anterior estrategia, implementa una función recursiva que
solucione el problema de las torres de Hanoi para n discos.