100% encontró este documento útil (1 voto)
71 vistas36 páginas

Fundamentos de Programación Modular

El documento presenta el tema 4 de programación modular. Explica conceptos clave como funciones, parámetros y variables. Muestra ejemplos de funciones en Matlab, incluyendo funciones que devuelven y no devuelven valores. También introduce la recursividad como método para resolver problemas de forma compacta.

Cargado por

Ayrton
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
100% encontró este documento útil (1 voto)
71 vistas36 páginas

Fundamentos de Programación Modular

El documento presenta el tema 4 de programación modular. Explica conceptos clave como funciones, parámetros y variables. Muestra ejemplos de funciones en Matlab, incluyendo funciones que devuelven y no devuelven valores. También introduce la recursividad como método para resolver problemas de forma compacta.

Cargado por

Ayrton
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Módulo 1.

Grupo Docente IyP – Departamento de Informática y Sistemas


Fundamentos de
Programación
Informática y Programación
Escuela de Ingenierías Industriales y Civiles
Curso 2019/2020
1
CONTENIDO

Grupo Docente IyP – Departamento de Informática y Sistemas


• Tema 1. Conceptos generales de algorítmica
• Tema 2. Sentencias de control
• Tema 3. Conjuntos dimensionados
• Tema 4. Programación modular
• Tema 5. Ficheros

2
TEMA 4: PROGRAMACIÓN MODULAR

Grupo Docente IyP – Departamento de Informática y Sistemas


• Introducción
• Definiciones
• Parámetros y variables
• Recursividad
• Ventajas de la programación modular
• Análisis/Diseño modular
• Ejercicios

3
Introducción
• La solución de un problema complejo puede obtenerse a

Grupo Docente IyP – Departamento de Informática y Sistemas


menudo a partir de la resolución de subproblemas más
simples (estrategia “divide y vencerás”).
• Análogamente, un algoritmo que resuelve un problema
complejo puede expresarse en términos de subalgoritmos
que resuelven problemas simples.

Algoritmo
Problema

Subproblemas 4

Subalgoritmos
Ejemplo: Cálculo del número combinatorio
n

Grupo Docente IyP – Departamento de Informática y Sistemas


%% Combinatorio_NoModular n!
C (n, k ) =   =
 k  k!(n − k )!
n = input('Numerador: ');
k = input('Denominador: ');

num = 1, denA = 1, denB = 1; Solución no


modular: Código
for i = 1 : n redundante para
num = num * i; realizar la misma
end tarea, en este caso
for i =1 : n-k el factorial de un
denA = denA * i; número. Observa
end que sólo cambia la
for i =1 : k condición de
denB = denB * i; parada.
end 5

fprintf('Resultado: %f\n' , num/( denA*denB ) )


Ejemplo: Cálculo del número combinatorio
n

Grupo Docente IyP – Departamento de Informática y Sistemas


%% Combinatorio_Modular n!
C (n, k ) =   =
n = input('Numerador: ');  k  k!(n − k )!
k = input('Denominador: ');

num = Fact(n);
La parte principal
deno = Fact(n-k) * Fact(k);
es mucho más
compacta y simple
fprintf('Resultado: %f\n' , num/deno);
en su lectura
miprograma.m

function f=Fact(n)
f=1;
Solución modular:
for i = 1 : n
función (2 ficheros)
f = f * i;
end 6
end Fact.m
Definiciones

Grupo Docente IyP – Departamento de Informática y Sistemas


• Una función es un conjunto de instrucciones identificadas con
un nombre único que toma una serie de datos de entrada y
los procesa para generar un resultado.
• Puede ser llamada o invocada desde un programa m o desde
otras funciones (estructura jerárquica).
• Su uso reduce el programa, simplificándolo ya que hace
innecesaria la repetición de código para realizar una misma
tarea: reduce el tamaño del código y lo hace más seguro.

• Dos tipos:
• Funciones que retornan uno o varios valores.
• Funciones que no devuelven nada. 7
• En Matlab, cada función se declara en un fichero m
independiente, cuyo nombre es el mismo que el de la
función (con extensión m).

Grupo Docente IyP – Departamento de Informática y Sistemas


• Una función puede devolver uno a varios resultados. Si
devuelve varios hay que agruparlos como un vector o
una estructura.
Sintaxis Función

function [r1 r2 …] = mifuncion(<param>)


% Comentarios
% Calculo de los valores [r1 r2 …]
<cuerpo>
end
mifuncion.m
8
• En Matlab, cada función se declara en un fichero m
independiente, cuyo nombre es el mismo que el de la
función (con extensión m).

Grupo Docente IyP – Departamento de Informática y Sistemas


• Si devuelve uno solo, se puede devolver solo esa
variable.

Sintaxis Función

function r = mifuncion(<param>)
% Comentarios
% Calculo del resultado r
<cuerpo>
end
mifuncion.m
9
• En Matlab, cada función se declara en un fichero m
independiente, cuyo nombre es el mismo que el de la
función (con extensión m).

Grupo Docente IyP – Departamento de Informática y Sistemas


• Ocurre que a veces una función no devuelve ningún
resultado, simplemente desarrolla un procedimiento.

Sintaxis Función

function mifuncion(<param>)
% Comentarios
% Ejecutamos el procedimiento
<cuerpo>
end
mifuncion.m
10
• En Matlab, cada función se declara en un fichero m
independiente, cuyo nombre es el mismo que el de la
función (con extensión m).

Grupo Docente IyP – Departamento de Informática y Sistemas


• Si devuelve uno solo, se puede devolver solo esa
variable.

Sintaxis Función

function r = mifuncion(<param>)
% Comentarios
% Calculo del resultado r
<cuerpo>
end
mifuncion.m
11
Ejemplos
%% cuadrado.m %% disp_pot_23.m

Grupo Docente IyP – Departamento de Informática y Sistemas


function r = cuadrado (x) function disp_pot_23(x)
r = x*x; fprintf('Cuadrado: %d\n', x*x)
end fprintf(Cubo: %d\n', x*x*x)
end

%% Prueba cuadrado %% Prueba disp_pot_23

z = input('Número entero: '); y = input('Número entero: ');


y = cuadrado(z); disp_pot_23(y)

fprintf('%d^2 es %d\n', z, y)
12
Parámetros y variables

Grupo Docente IyP – Departamento de Informática y Sistemas


• En la declaración de una función se incluyen los parámetros a
través de los cuales se le suministran los datos de entrada.
• En el momento de la llamada se produce un intercambio de
información entre los parámetros de la función (parámetros
formales) y las variables del programa principal (parámetros
reales).
• Además de los parámetros, pueden existir variables internas
que son de ámbito local a la función.

13
Ejemplo
Parámetro formal
%% cuadrado.m

Grupo Docente IyP – Departamento de Informática y Sistemas


function r = cuadrado (x)
r = x*x; Variable local a la
end función

%% Prueba cuadrado
Parámetro real
z = input('Número entero: ');
y = cuadrado(z);

fprintf('%d^2 es %d\n', z, y)
14
Recursividad

Grupo Docente IyP – Departamento de Informática y Sistemas


• Una función recursiva es aquella que se llama a sí misma.
• Permite soluciones compactas para algunos problemas.
• La estructura de una función recursiva incluye siempre al
menos una condición de salida o caso base y una o más
llamadas recursivas.
Función <tipo> FunRec(param)
si <condición_sobre_param> Caso base
devolver <valor>
si no
<modificar_param>
resultado=<depende_de> FunRec(param)
devolver resultado
fin si Llamada 15
fin Función recursiva
Ejemplo: obtener el factorial de un número.
n! = n*(n-1)*(n-2)…*1
0!=1

Grupo Docente IyP – Departamento de Informática y Sistemas


function f = FactorialNoRec(n)

if n <=1 function f = FactorialRec(n)


f = 1; if n <=1
else f = 1;
f = 1; else
for i = 1 : n f = n * FactorialRec(n-1);
f = f * i; end
end end
end
end

Solución
recursiva
Solución no 16
recursiva
Ventajas de la programación
modular

Grupo Docente IyP – Departamento de Informática y Sistemas


• Facilita la programación: Es más sencillo resolver varios
problemas simples que uno complejo.
• Mayor claridad: Programación estructurada en bloques y
código más compacto.
• Ahorro de tiempo: Cada parte de la solución puede
desarrollarse independientemente en paralelo.
• Facilita la modificación/mantenimiento.
• Permite la reutilización del código: Empaquetado de
funciones y procedimientos en librerías o bibliotecas
reutilizables.

17
Funciones anónimas
Matlab permite definir funciones matemáticas, de una o varias variables,

Grupo Docente IyP – Departamento de Informática y Sistemas


que no es necesario ubicar en un fichero .m mediante el uso de
“funciones anónimas”.

Estas funciones solo existen, v.g. pueden ser invocadas, en el contexto del
programa/script donde se han creado y solo contienen una sentencia.

Sintaxis: nombre = @(variables) expresión(variables)

Ejemplo con una variable: Ejemplo con dos variables:


>> y = @(x) x^2 – 3*x – 7; >> z = @(x,y) x^2 +3*x*y – 7*y^2;
>> y(-2) >> y(-2,1)
ans = ans =

15 9 18
Librerías

Grupo Docente IyP – Departamento de Informática y Sistemas


• Una librería es un conjunto de funciones y procedimientos
con un nexo común que se empaquetan para su reutilización.
• Ejemplos: funciones gráficas, entrada/salida, matemáticas, etc.

Problema
C
Problema Librería
A genérica
Problema
B

19
Análisis/Diseño modular
• Aspectos específicos a considerar:

Grupo Docente IyP – Departamento de Informática y Sistemas


• Identificación de subproblemas: ¿puede el problema
descomponerse en problemas más simples? ¿Pueden, a su vez,
dichos subproblemas descomponerse? (estructura jerárquica)

• Planteamiento de la solución: ¿cómo se obtiene la solución


global a partir de las particulares?

• Identificación de funciones/procedimientos y sus parámetros.

• Generación de librerías: ¿son los subalgoritmos de utilidad para


otros problemas?
20
Características deseables
• Características deseables de los subalgoritmos:

Grupo Docente IyP – Departamento de Informática y Sistemas


• Caja negra: la salida solo depende de los parámetros de entrada.

• Número reducido de parámetros de entrada.

• Pocas líneas de código y simplicidad.

• Evitar demasiados niveles de jerarquía en la solución (hay que

llegar a un compromiso con la anterior).

21
Estudio de casos: Ejemplo 1
• Estamos diseñando el software para una empresa de ámbito

Grupo Docente IyP – Departamento de Informática y Sistemas


nacional. El precio final de cada uno de los productos que
comercializa se obtiene añadiendo al precio de partida los
impuesto locales de la región de venta. Analizar este aspecto
desde la perspectiva de la programación modular.

Facturación

Publicidad Contabilidad

22
Ejemplo 1 - continuación
• A) Subproblemas y solución

Grupo Docente IyP – Departamento de Informática y Sistemas


• El cálculo del precio es una operación que con total seguridad se
requerirá en múltiples puntos del software.
• Si no se usase una función para realizarla, cualquier cambio en la
forma en que se computa el precio sería costoso de aplicar, ya que
requiere modificar todos y cada uno de los puntos donde se aplica el
cálculo del precio.

Facturación
Contabilidad
CPrecio
Publicidad CPrecio
CPrecio Cálculo
precio
23
Ejemplo 1 - continuación
• B) Funciones/Procedimientos y parámetros

Grupo Docente IyP – Departamento de Informática y Sistemas


• Se puede emplear una función que tome como datos de entrada el
precio y la región de venta y devuelva el precio final.

Función real CalculaPrecioFinal(precio, región)


variable real precio
variable entera región
variable real impuesto

según región hacer


caso 1, impuesto = 4.5 // Canarias
caso 2, impuesto = 5.5 // Andalucía

otro caso, impuesto = 5.0
fin según
devolver precio*(1+impuesto/100) 24
fin Función
Ejemplo 1 - continuación
• Si el cálculo de los impuestos fuese necesario para otros algoritmos,

Grupo Docente IyP – Departamento de Informática y Sistemas


podría codificarse también como una función independiente.

Función real CalculaImpuesto(región)

variable entera región


variable real impuesto

según región hacer


caso 1, impuesto = 4.5 // Canarias
caso 2, impuesto = 5.5 // Andalucía

otro caso, impuesto = 5.0
fin según
devolver impuesto
25
fin Función
Ejemplo 1 - continuación

Grupo Docente IyP – Departamento de Informática y Sistemas


• Jerarquía:

Facturación

Publicidad Contabilidad

Cálculo
precio

Cálculo
impuesto
26
Estudio de casos: Ejemplo 2
• Tenemos que escribir diferentes algoritmos para realizar

Grupo Docente IyP – Departamento de Informática y Sistemas


operaciones con vectores y matrices, pidiendo los datos por
teclado y mostrando el resultado por pantalla: sumas, restas,
multiplicaciones, divisiones, producto escalar, etc.

Algoritmo Algoritmo
SumaM ProductoM

Algoritmo
DivisiónM
Algoritmo Algoritmo
RestaM PEscalarV
Algoritmo
SumaV
27
Estudio de casos: Ejemplo 2
• A) Subproblemas y solución

Grupo Docente IyP – Departamento de Informática y Sistemas


• Todos los algoritmos requieren tres fases: lectura de datos,
operación y escritura de resultados.
• La solución se obtiene encadenando secuencialmente las tres fases.
• Las fases de lectura y escritura son similares en muchos algoritmos.

Algoritmo Lectura de Suma Escritura


SumaM matrices matricial de matriz

Algoritmo Lectura de Producto Escritura


ProductoM matrices matricial de matriz

28
Ejemplo 2 - continuación
• B) Funciones/Procedimientos

Grupo Docente IyP – Departamento de Informática y Sistemas


• La fase de lectura pide datos al usuario y los devuelve en forma de
vector o matriz → funciones o procedimientos con parámetros de
entrada/salida para leer vectores y matrices (lee_vector, lee_matriz).
• La fase de escritura muestra resultados por pantalla →
procedimientos para escribir vectores y matrices (escribe_vector,
escribe_matriz).
• Las operaciones toman los datos para generar resultados, son
comunes y seguramente las volvamos a necesitar → funciones o
procedimientos diferentes para cada operación (suma_vectores,
multiplica_matrices, etc).

Algoritmos
Funciones de Procedimientos
lectura de escritura
29
Funciones
de
operación
Ejemplo 2 - continuación
• Podríamos pensar en una función de lectura genérica que

Grupo Docente IyP – Departamento de Informática y Sistemas


llamara a la función lee_matriz, que llamara a lee_vector por
cada fila, esta a su vez a lee_elemento para cada posición y
esta finalmente a lee_número.
• Mala solución, demasiados niveles jerárquicos no justificados
pueden complicar el código.
Funciones
Función de
de lectura
lectura
de matrices

Funciones Funciones de
de lectura lectura de
de vectores elementos

30
Funciones de
lectura de
números
Ejemplo 2 - continuación
• Sí podría estar justificada la siguiente jerarquía:

Grupo Docente IyP – Departamento de Informática y Sistemas


• La división de matrices es un producto de una matriz por la
inversa de la otra -> puede llamarse a la función producto
matricial.
• La multiplicación de matrices consiste en una serie de productos
escalares de vectores fila y columna -> puede llamarse a la
función producto escalar.

Función
División
Matricial
Función
Producto
Matricial
Función
31
Producto
Escalar
Ejemplo 2 - continuación
• C) Parámetros – caso lee_matriz

Grupo Docente IyP – Departamento de Informática y Sistemas


• Este subalgoritmo de lectura necesita conocer las dimensiones de la
matriz a leer, por lo que tomará dos parámetros de entrada: el
número de filas y el número de columnas.
• Si se programa como función podría devolver un puntero a la matriz
leída o bien un dato tipo matriz.
Función ref entera lee_matriz (filas, columnas)
...

• Si se programa como procedimiento se le pasa por referencia una


matriz que luego se rellena con los datos introducidos por el usuario.

Procedimiento lee_matriz (filas, columnas, ref M)


...
32
Ejercicios
1. Escribir una función en Matlab que realice la conversión de

Grupo Docente IyP – Departamento de Informática y Sistemas


pulgadas a centímetros utilizando una función. El factor de
conversión es: 1 pulgada = 2,54 cm.
2. Diseñar un programa, que haciendo uso de una función, evalúe la
siguiente fórmula:

x=
n!
+
(2 ⋅ m )!(2 ⋅ (n − m ))!
k!(n − k )! (2 ⋅ n )!
3. Escribir un programa que use una función para convertir las letras
de una cadena de caracteres de minúscula a mayúscula. Asumir
por simplicidad que la cadena no contiene tildes, y que además de
los caracteres solo contiene espacios en blanco.
4. Escribir un algoritmo que guarde en un vector los elementos de
una matriz ordenados por filas, utilizando para ello funciones.
123
456
33
789
El vector resultante contendría : 1 2 3 4 5 6 7 8 9.
Ejercicios
5. Escribir, usando funciones reutilizables,

Grupo Docente IyP – Departamento de Informática y Sistemas


A. Un programa que lea una matriz e imprima los elementos
sobre la diagonal principal. Ejemplo, para la matriz:
123
456
789
El resultado sería: 1 2 3 5 6 9.
B. Un programa que lea una matriz e imprima los elementos bajo
la diagonal secundaria. Para el ejemplo anterior el resultado
sería: 3 5 6 7 8
6. Realizar un programa que devuelva como resultado la traspuesta
de una matriz de m filas y n columnas, considerando que m y n
pueden no ser iguales. Utilizar subprogramas en la solución.
7. Escribir un programa, haciendo uso de funciones, que sustituya 34
una fila i de una matriz por la resta de esa fila con el producto de
otra fila j por un factor c.
Ejercicios
8. Escribir un programa que calcule el sumatorio de los n primeros

Grupo Docente IyP – Departamento de Informática y Sistemas


números enteros, haciendo uso de una función recursiva.
9. Escribir un programa que dado un número x calcule su potencia p,
utilizando para ello una función recursiva.
10. Escribir un programa que calcule para dos números enteros n
elevado a m, haciendo uso de una función recursiva.
11. Desarrollar un programa recursivo que devuelva el enésimo
número de la serie de Fibonacci.

35
Bibliografía

Grupo Docente IyP – Departamento de Informática y Sistemas


• Fundamentos de Informática y Programación para
Ingeniería. Ejercicios Resueltos para C y Matlab.
Modesto Castrillón et al, Paraninfo, 2011.

• Introducción a la informática, A. Prieto Espinosa, A. Lloris


Ruiz, J.C. Torres Cantero, McGraw-Hill, Madrid, 1989.

36

También podría gustarte