¡Descarga tema 4 programcion estrucutrada y modular y más Apuntes en PDF de Informática solo en Docsity!
Tema 4. Programación
Estructurada y Modular
Metodología y Tecnología de la Programación I - Tema 4. Programación Estructurada y Modular 2
Objetivos
Realizar una descomposición modular de un problema
Conocer los principios de programación estructurada
Identificar las diferencias entre procedimiento y función
Conocer y utilizar el paso de parámetros a los distintos
módulos: por valor y referencia
Realizar llamadas a módulos
Conocer y utilizar el ámbito de variables
Conocer los efectos laterales que pueden producirse por
una programación incorrecta
Conocer y utilizar distintos criterios de descomposición
modular
Conocer y aplicar diversos estilos de programación para
realizar algoritmos fáciles de entender y mantener
Metodología y Tecnología de la Programación I - Tema 4. Programación Estructurada y Modular 3
Tema 4. Programación Estructura y
Modular
- Introducción
- Programación Modular
- Programación Estructurada
- Subalgoritmos: Funciones y Procedimientos
- Paso de parámetros
- El proceso de invocación y el manejo de la pila
- Ámbito de las variables
- Criterios de descomposición modular
- Estilos de programación
Metodología y Tecnología de la Programación I - Tema 4. Programación Estructurada y Modular 4
Introducción
¿Por qué usar una programación modular y estructurada?
Reutilización de módulos
Resolución de problemas difíciles mediante problemas más
sencillos (Técnica Divide y Vencerás)
Ventajas
Simplificación del problema
Subproblemas diseñados independientemente
Posibilidad de parametrizar los módulos (reusabilidad)
Estructuración en módulos permite una lectura, prueba,
verificación y mantenimiento más sencillo
Metodología y Tecnología de la Programación I - Tema 4. Programación Estructurada y Modular 7
Tipos de módulos
Cuando un módulo A utiliza otro módulo B se dice que el módulo
A activa , llama o invoca a dicho módulo B
Al módulo que activa otro módulo se le denomina módulo llamador,
llamante o simplemente módulo principal (en nuestro caso, el
módulo A)
Al módulo que es invocado se le llama módulo subordinado (en
nuestro caso, el módulo B)
Hay 2 tipos de módulos subordinados
Funciones
Procedimientos
Para poder utilizar un módulo solo hay que llamar a ese módulo
desde un módulo principal
Tanto los procedimientos como las funciones se declaran antes del
cuerpo principal del algoritmo
Metodología y Tecnología de la Programación I - Tema 4. Programación Estructurada y Modular 8
Parámetros de un módulo
La comunicación del módulo principal y los módulos
subordinados se debe realizar únicamente a través de unos
parámetros especificados cuando se declara el módulo
Estos parámetros constituyen la entrada y la salida al
subalgoritmo
Hay que distinguir entre
parámetros formales : son los que aparecen en la
declaración del subalgoritmo
parámetros actuales o reales : son los que aparecen en la
invocación al módulo (es decir, en el módulo principal)
Debe haber el mismo número de parámetros formales y
actuales
La correspondencia entre parámetros formales y actuales
se realiza uno a uno teniendo en cuenta la posición que
ocupan
Metodología y Tecnología de la Programación I - Tema 4. Programación Estructurada y Modular 9
Subalgoritmos: Funciones
Una función es un bloque de sentencias que realizan una
tarea específica devolviendo un único valor al punto de
llamada
Tipos de funciones
Funciones predefinidas : están incorporadas al lenguaje de
programación y pueden ser utilizadas directamente (no se
declaran, simplemente se invocan)
Ejemplos: sqrt(n), abs(n), rand()…
Funciones definidas por el usuario : utilizadas cuando las
funciones predefinidas no permiten realizar el tipo de cálculo
deseado, y es el usuario el que debe implementar, mediante
estructuras de control adecuadas, la tarea a realizar
Metodología y Tecnología de la Programación I - Tema 4. Programación Estructurada y Modular 10
Subalgoritmos: Funciones
El formato de declaración de una función es el siguiente:
El tipo devuelto por la función debe ser simple (entero, carácter,
real, lógico, puntero)
Cuando se invoca a una función siempre se devuelve un valor que
será del tipo especificado en la función
Cada función se invoca utilizando su nombre junto con los
parámetros actuales dentro de una expresión (que debe ser de un
tipo compatible con el tipo que devuelve la función)
FUNCION nombre (var1:tipo; var2:tipo; ...): tipoDevuelto
Variables locales
Modulos locales
INICIO
Sentencias
DEVOLVER (valor)
FIN_FUNC
Parámetros formales
Metodología y Tecnología de la Programación I - Tema 4. Programación Estructurada y Modular 13
Seminario 4
Programación estructurada
Jueves 8 de noviembre de 8’30 a 9’30 (grupo A),
y de 15’30 a 16’30 (grupo B)
Relación de ejercicios del tema 4
Ejercicios 1, 4, 10
Diapositiva 14, 27 y 28 del tema 4
Metodología y Tecnología de la Programación I - Tema 4. Programación Estructurada y Modular 14
Ejercicio de invocación a funciones
Suponiendo z=3 y v una variable
entera, indicar cuáles de las
siguientes sentencias son incorrectas
y por qué. En caso de ser correcta,
indicar el resultado obtenido
v ← factorial(z*2)
v ← factorial(3.0)
ESCRIBIR(factorial(z)*2)
LEER(factorial(3))
LEER(factorial(z))
Factorial(4) ← v
Factorial(z) ← v
v ← factorial(factorial(3))
v ← factorial(factorial(z)/2)
PARA i=1 HASTA z HACER
v ← factorial(i)
FIN_PARA
Suponiendo a=2, b=4, c y d variables
reales y v una variable lógica, indicar
cuáles de las siguientes sentencias son
incorrectas y por qué. En caso de ser
correcta, indicar el resultado obtenido
v ← menor(5,4)
v ← menor(a,b)
ESCRIBIR(menor)
LEER(menor(4,4))
v ← menor(c,d) OR NOT menor(c,d)
Menor(c,d) ← VERDAD
v ← menor(menor(a,b),b)
v ← menor(a*2,factorial(b))
PARA i=1 HASTA 5 HACER
SI menor(i,3) ENTONCES
ESCRIBIR(factorial(i))
FIN_SI
FIN_PARA
Metodología y Tecnología de la Programación I - Tema 4. Programación Estructurada y Modular 15
Subalgoritmos:Procedimientos
Un procedimiento es un subalgoritmo que ejecuta un proceso
específico
Ningún valor está asociado con el nombre del procedimiento
El formato de declaración de un procedimiento es el siguiente:
Si el parámetro formal se va a utilizar como salida al procedimiento
debe estar precedido de la palabra VAR
Para invocar o llamar a un procedimiento se pone el nombre del
procedimiento como si fuera una sentencia normal del programa,
seguido de una lista de parámetros actuales
PROCEDIMIENTO nombre([ VAR ] var1:tipo;[ VAR ] var2:tipo;...)
Constantes y Variables locales
Modulos locales
INICIO
Sentencias
FIN_PROC
Metodología y Tecnología de la Programación I - Tema 4. Programación Estructurada y Modular 16
Ejemplo de Procedimientos (I)
ALGORITMO gestion. VARIABLES opcion:ENTERO {-------- Procedimiento que muestra el menú en pantalla ----------} PROCEDIMIENTO mostrar_menu INICIO ESCRIBIR(‘1.- Insertar nuevos datos’) ESCRIBIR(‘2.- Modificar datos existentes’) ESCRIBIR(‘3.- Borrar datos’) ESCRIBIR(‘4.- Terminar’) ESCRIBIR(‘Introduzca una opción’) FIN_PROC {-------------------Módulo principal---------------} INICIO REPETIR REPETIR mostrar_menu {llamada al procedimiento} LEER(opcion) HASTA (opcion>0) AND (opcion<5) CASO opcion 1: insertar( parametros ) {llamada al módulo de inserción} 2: modificar( parametros ) {llamada al módulo de modificación} 3: borrar( parametros ) {llamada al módulo de borrado} FIN_CASO HASTA opcion= FIN
Metodología y Tecnología de la Programación I - Tema 4. Programación Estructurada y Modular 19
Tipos de paso de parámetros
El paso de parámetros es fundamental para la
comunicación entre módulos
Los parámetros deben constituir la única entrada
y salida a un módulo
Existen 2 tipos de paso de parámetros
Paso por valor o copia
Paso por referencia o variable
Metodología y Tecnología de la Programación I - Tema 4. Programación Estructurada y Modular 20
Paso de parámetros por valor
Es el que se utiliza por defecto
Los parámetros formales reciben una copia de los valores
de los parámetros actuales y no es posible cambiar su valor
El parámetro actual puede ser cualquier expresión
compatible con el tipo del parámetro formal
Los cambios que se producen en los parámetros formales
como consecuencia de la ejecución de las sentencias
incluidas en el subalgoritmo no tienen ningún efecto (y por
tanto no producen un cambio) en los parámetros actuales
El paso por valor se utiliza cuando los parámetros se van a
utilizar únicamente como entrada ya que no se pueden
pasar valores de retorno al punto de llamada
Metodología y Tecnología de la Programación I - Tema 4. Programación Estructurada y Modular 21
Ejemplo de paso de
parámetros por Valor (I)
ALGORITMO paso_p_valor.
VARIABLES
num:ENTERO
PROCEDIMIENTO incremento(a:ENTERO)
INICIO
aÅa+
ESCRIBIR(‘Dentro del procedimiento el número vale ’,a)
FIN_PROC
1.[Entrada del número num]
LEER(num)
2.[Llamada al procedimiento]
incremento(num)
3.[Mostrar el resultado]
ESCRIBIR(‘Fuera del procedimiento el número vale ’,num)
4.[Fin]
Metodología y Tecnología de la Programación I - Tema 4. Programación Estructurada y Modular 22
Ejemplo de paso de
parámetros por Valor (II)
ALGORITMO paso_p_valor.
VARIABLES
num, i :ENTERO
PROCEDIMIENTO incremento(a:ENTERO)
INICIO
aÅa+
ESCRIBIR(‘Dentro del procedimiento el número vale ’,a)
FIN_PROC
1.[Entrada del número num]
LEER(num)
2.[Llamada al procedimiento]
PARA i=1 HASTA 4 HACER
incremento(num)
FIN_PARA
3.[Mostrar el resultado]
ESCRIBIR(‘Fuera del procedimiento el número vale ’,num)
4.[Fin]
Metodología y Tecnología de la Programación I - Tema 4. Programación Estructurada y Modular 25
Ejemplo de paso de
parámetros por Referencia (II)
ALGORITMO paso_p_referencia.
VARIABLES
num, i :ENTERO
PROCEDIMIENTO incremento( VAR a:ENTERO)
INICIO
aÅa+
ESCRIBIR(‘Dentro del procedimiento el número vale ’,a)
FIN_PROC
1.[Entrada del número num]
LEER(num)
2.[Llamada al procedimiento]
PARA i=1 HASTA 4 HACER
incremento(num)
FIN_PARA
3.[Mostrar el resultado]
ESCRIBIR(‘Fuera del procedimiento el número vale ’,num)
4.[Fin]
Metodología y Tecnología de la Programación I - Tema 4. Programación Estructurada y Modular 26
Reglas para la asociación de
parámetros
Debe haber el mismo número de parámetros actuales que
de formales
Un parámetro actual asociado con un parámetro formal por
referencia debe ser una variable (no puede ser una
constante o una expresión)
Pasaremos por valor las variables que se utilicen en un
módulo pero que no queremos que se modifique su valor en
el módulo llamante (parámetro de entrada)
Las variables que deseamos que el módulo llamado
modifique su valor y se vea reflejado en el módulo llamante
las pasaremos por referencia (parámetro de entrada/salida)
Metodología y Tecnología de la Programación I - Tema 4. Programación Estructurada y Modular 27
Ejercicio asociación de parámetros
Considerando el siguiente esqueleto de
algoritmo, determinar si las instrucciones de
llamada al procedimiento son válidas
ALGORITMO demo
CONSTANTES
pi=3.
dos=
inicial=‘N’
VARIABLES
dia,mes,año,p,q:ENTERO
horas, tarifa,cantidad,u,v:REAL
codigo,clase:CARÁCTER
PROCEDIMIENTO calcular( a: REAL;
VAR b: REAL;
m: ENTERO;
VAR k,n: ENTERO;
VAR c: CARACTER)
1. Calcular(u,v,dos,p,q,codigo)
2. Calcular(pi,u,dos,p,v,clase)
3. Calcular(horas,u,dos,dia,año,clase)
4. Calcular(’16’,horas,pi,13,año,clase)
5. Calcular(pi*horas,pi,dos,dia,año,clase)
6. Calcular(pi,pi*horas,dos,dia,año,clase)
7. MIENTRAS u>0 HACER
Calcular(u,v,dos,p,q,codigo)
FIN_MIENTRAS
8. Calcular(0,horas,(p+1)/2,dia,año,codigo)
9. Calcular(sqrt(cantidad),tarifa,7,p,q,Inicial)
10. Calcular(dos,cantidad,dia,p+q,dia,clase)
11. ESCRIBIR(Calcular(u,v,dos,p,q,codigo))
Metodología y Tecnología de la Programación I - Tema 4. Programación Estructurada y Modular 28
Ejercicio asociación de parámetros
Considerando el siguiente esqueleto de
algoritmo, determinar si las instrucciones de
llamada a los subalgoritmos son válidas
ALGORITMO demo
CONSTANTES
pi=3.
dos=
VARIABLES
dia,mes,año,p,q:ENTERO
horas, tarifa,cantidad,u,v:REAL
codigo,clase:CARÁCTER
FUNCION f(x,y:REAL;
d:ENTERO):REAL
PROCEDIMIENTO calcular( a: REAL;
VAR b: REAL;
m: ENTERO;
VAR k,n: ENTERO;
VAR c: CARÁCTER)
- Cantidad Åf(pi,tarifa,mes)
- tarifa Åf(horas,dia,dos)
- F(horas,tarifa,mes)
- ESCRIBIR(f(0,0,0))
- Calcular(u,v,p,dos,dia,codigo)
- horas Ådosf(pi,cantidad)/(2.71tarifa)
- cantidad Åf(pi*horas,(2.71+dia)/tarifa,dos)
- SI mes=dos ENTONCES Año Åf(horas,f(tarifa,pi,dos),dia) FIN_SI
- SI u>0 ENTONCES cantidad Åcalcular(u,v,dos,p,q,codigo) FIN_SI
- SI Calcular(sqrt(cantidad),tarifa,7,p,q,Inicial)> ENTONCES ESCRIBIR(‘OK’)
- MIENTRAS f(cantidad,0,0)>0 HACER cantidad Åf(cantidad,0,0) FIN_MIENTRAS
- Calcular(f(u,v,dia),tarifa,7,p,q,codigo)
- Calcular(tarifa, f(u,v,dia),7,p,q,codigo)
- Cantidad Åf(a,b,dia)
Metodología y Tecnología de la Programación I - Tema 4. Programación Estructurada y Modular 31
El proceso de invocación y el
manejo de la Pila (II)
ALGORITMO principal. VARIABLES…… ………… {----------Módulo M---------} MODULO M INICIO…… ………… FIN {----------Módulo N ---------} MODULO N INICIO…… ………… llamada…… a MODULO M ………… FIN {----------Módulo P---------} MODULO P INICIO…… ………… llamada…… a MODULO N ………… FIN {------- Comienza el módulo principal -----} INICIO…… ………… llamada…… a MODULO P ………… FIN
Entorno del módulo M
Entorno del programa principal
Entorno del módulo N PILA
Entorno del módulo P
Metodología y Tecnología de la Programación I - Tema 4. Programación Estructurada y Modular 32
Ejemplo del uso de la pila
ALGORITMO uso_pila.
VARIABLES
i,n:ENTERO
suma:REAL
FUNCION factorial(a:ENTERO):ENTERO
VARIABLES
fact,i:ENTERO
INICIO
factÅ 1
PARA i=2 HASTA a HACER
fact Å fact*i
FIN_PARA
factorial Å fact
FIN_FUNC
1.[Inicio algoritmo]
LEER(n)
suma Å 0
PARA i=1 HASTA n HACER
suma Å suma+factorial(i)/i
FIN_PARA
ESCRIBIR(‘Resultado ’,suma)
4.[Fin]
Antes de la llamada al módulo
Entorno del módulo principal
i n suma
PILA
Entorno del módulo principal
i n suma
PILA
Entorno del módulo principal
i n suma
PILA
Entorno de la función factorial
i fact factorial a
Tras la llamada a Factorial
Tras devolver el control al módulo principal
Metodología y Tecnología de la Programación I - Tema 4. Programación Estructurada y Modular 33
Tipos de variables
Variable local
Se declara dentro de un subalgoritmo
Su valor se conoce dentro del subalgoritmo donde se
define
Si otro subalgoritmo declara una variable con el mismo
nombre se trata de otra variable distinta
Variable global
Se declara en el algoritmo principal
Su valor se conoce en cualquier parte del algoritmo
incluidos los subalgoritmos declarados
Si otro subalgoritmo declara una variable con el mismo
nombre, la variable global no tendrá efecto (no se
conocerá) dentro de dicho subalgoritmo
Metodología y Tecnología de la Programación I - Tema 4. Programación Estructurada y Modular 34
Ámbito de las variables
Se puede definir el ámbito de una variable , y lo notaremos como v,
como aquellos módulos de un programa en los que la variable tiene
validez, es decir, aquellos módulos de un programa que pueden utilizar
esa variable (módulos donde la variable es visible)
Se dice que el ámbito v de una variable es global respecto a un módulo M
si M pertenece al ámbito de v, es decir, el módulo M ve esa variable y
puede utilizarla. De esta manera, el ámbito de una variable engloba los
siguientes módulos:
El propio módulo M en que ha sido declarada la variable.
Cualquier módulo M' incluido en M, ya sean hijos o nietos, siempre y cuando en
M' no haya sido declarada otra variable ni exista ningún parámetro formal cuyo
identificador coincida con el identificador de la variable
Las constantes y variables locales son aquellas constantes y variables que
un módulo necesita por sí mismo, y que no son necesarias en el resto del
programa (no son visibles para módulos superiores)
La residencia en memoria de estas variables y constantes locales se sitúa
en el entorno del módulo, es decir, en la pila, por lo que su tiempo de vida
coincidirá precisamente con el tiempo que dure el módulo en ejecutarse
Metodología y Tecnología de la Programación I - Tema 4. Programación Estructurada y Modular 37
Ejercicio ámbito (I)
Considerando el siguiente esqueleto de algoritmo, determinar si las afirmaciones son ciertas
ALGORITMO reglas_ambito
VARIABLES
a,b:ENTERO
FUNCION F1(x:REAL):REAL
VARIABLES b,c:ENTERO
INICIO……………..
FIN_FUNC {F}
PROCEDIMIENTO P1(d:REAL)
VARIABLES e,f:ENTERO
PROCEDIMIENTO P2(a:REAL)
VARIABLES e,g:ENTERO
INICIO…………….. {P2}
FIN_PROC {P2}
INICIO {P1}
FIN_PROC {P1}
INICIO {Módulo principal}
FIN {Módulo principal}
1. La variable a declarada en el algoritmo principal
es una variable global
2. La variable a declarada en el algoritmo principal
es accesible en la función F
3. La variable a declarada en el algoritmo principal
es accesible en el procedimiento P
4. Se puede acceder a la función F1 en el
procedimiento P
5. La variable g es accesible solamente en el
procedimiento P
6. La instrucción b Å c en la parte de instrucciones
de F1 asignaría el valor de c a la variable global
b
7. Se puede usar la instrucción ESCRIBIR(F1(f)) en
la parte de instrucciones de P
8. Se puede usar la instrucción P2(3) en la parte de
instrucciones de P
9. Se puede acceder a la variable f en P
10.Se puede usar la instrucción P2(b) en la parte de
instrucciones del algoritmo principal
11.Se puede usar la instrucción P1(F1(a)) en la
parte de instrucciones del programa principal
Metodología y Tecnología de la Programación I - Tema 4. Programación Estructurada y Modular 38
Ejercicio ámbito (II)
Describir la salida del siguiente algoritmo o explicar por qué se produce un error.
ALGORITMO reglas_ambito
FUNCION producto(x:ENTERO):ENTERO
INICIO
DEVOLVER(3*x)
FIN_FUNC
FUNCION suma(x:ENTERO):ENTERO
FUNCION producto(a:ENTERO):ENTERO
INICIO
DEVOLVER(4*a)
FIN_FUNC
INICIO {suma}
DEVOLVER(5+producto(x))
FIN_FUNC {suma}
INICIO {Módulo principal}
ESCRIBIR(producto(2),suma(2))
ESCRIBIR(suma(producto(3)),producto(suma(3))
FIN {Módulo principal}
Metodología y Tecnología de la Programación I - Tema 4. Programación Estructurada y Modular 39
Ejercicio ámbito (III)
Describir la salida del siguiente algoritmo o explicar por qué se produce un
error.
ALGORITMO reglas_ambito
VARIABLES num,i:ENTERO
PROCEDIMIENTO P(VAR num:ENTERO)
INICIO
i Å i+
num Å 2*num
FIN_PROC
INICIO {Módulo principal}
i Å 1
num Å 3
MIENTRA i<=4 HACER
ESCRIBIR(i,num)
P(num)
ESCRIBIR(i,num)
i Å i+
FIN_MIENTRAS
FIN {Módulo principal}
Metodología y Tecnología de la Programación I - Tema 4. Programación Estructurada y Modular 40
Ejercicio ámbito (IV)
Describir la salida del siguiente algoritmo o explicar por qué se produce un
error.
ALGORITMO reglas_ambito
VARIABLES num,mitad:ENTERO
PROCEDIMIENTO doble(VAR num:ENTERO)
INICIO
num Å 2*num
FIN_PROC
INICIO {Módulo principal}
num Å 4
mitad Å 2
ESCRIBIR(mitad)
ESCRIBIR(num)
doble(mitad)
ESCRIBIR(mitad)
ESCRIBIR(num)
FIN {Módulo principal}