Diseño Modular Top-Downymoyao/admin/archivos/modular7 metodo.pdf · Declaración de prototipo Un...
Transcript of Diseño Modular Top-Downymoyao/admin/archivos/modular7 metodo.pdf · Declaración de prototipo Un...
Desventajas Diseño Tradicional.
• Rigidez e inflexibilidad de los algoritmos
• Pérdida excesiva de tiempo en la corrección de errores.
• Documentación deficiente e ineficiente, incluso mala
• Imposibilidad de reutilizar el pseudocódigo o fragmentos del mismo en proyectos futuros
M.C. Yolanda Moyao Martínez 3
Top Down
El problema complejo es dividido en subproblemas más pequeños o más fáciles de resolver.
Cada problema se resuelve por una función o modulo.
Si algún subproblema, aún es demasiado complejo, éste es dividido a su vez, en subproblemas, y así sucesivamente
Ventajas Top-Down
Construcción del programa (son + pequeños)
Depuración del programa (aísla errores).
Facilidad para la legibilidad.
Aísla las modificaciones.
Eliminación de redundancia.
Ventajas
Crear grandes programas de forma sencilla.
Ayuda a que un programa sea más fácil de modificar.
Pruebas separadas.
Reutilización.
Mayor comprensión.
M.C. Yolanda Moyao Martínez 7
Características
Permiten dividir un problema en subproblemas mas fáciles de realizar y mantener.
Todo algoritmo consta de al menos un módulo
M.C. Yolanda Moyao Martínez 9
Flujo de Control de llamado
Principal()
Inicio
m1()
….
m1()
Regresa()
Fin_Principal
m1()
Inicio
m2()
….
Regresa()
Fin_m1
m2()
Inicio….
Regresa()
Fin_m2
Definición de módulo
tipo nombre([,argumentos])
Inicio
[declaraciones]
sentencias
Regresa([expresión])
Fin_nombre
Encabezado
Tipo: El tipo del valor devuelto
Nombre: Identificador válido
Argumentos: Declaraciones separadas por , de argumentos que recibe la función.
Nota: si no recibe ni devuelve no se coloca nada
Cuerpo del módulo
Sentencia compuesta que define lo que hace el modulo.
Puede contener declaraciones de variables utilizadas en dichas sentencias. Estas variables, por defecto son locales al modulo.
Regresa([expresión]) se utiliza para devolver el valor del modulo
Ámbito de las variables
Desde el punto de un módulo las variables pueden ser locales o globales:
Variables locales se declaran dentro de un módulo y sólo tienen utilidad dentro de ese módulo.
Variables globales
Son declaradas de forma que puedan ser utilizadas (consultada y/o modificada) desde cualquiera de los módulos que forman el algoritmo.
En este caso, no puede haber dos variables con el mismo nombre(local y global)
Nota: tienen prioridad las locales
Ejemplo
Ejemplo:
variables: x 20 de tipo entero
escribe_x()
Inicio
Escribir(“ El valor de x (Global) es = “,x) coment: x=20
Regresa()
Fin_escribe_x
Modulo_Principal ()
Inicio
variables: x 12 de tipo entero
escribe_x() coment: Escribe el Valor de x = 20
Escribir(“El valor de x (Local) es = “,x) coment: x=12
Regresa()
Fin_Principal
Ejemplo
letrero() No recibe
Inicio
coment: no variable locales
Escribir(“ Este es un modulo simple”)
Regresa() coment: no devuelve
Fin_letrero
No devuelve
Ejemplo
checa_num(entero i) Si recibe
Inicio coment: No variables locales
si (i>0) entonces
Escribir(“ i es positivo”)
si_no
Escribir(“ i es negativo”)
Regresa() coment: no devuelve
Fin_checa_num
No devuelve
Ejemplo
entero suma(entero a, entero b) Recibe enteros
Inicio
entero valor coment: variable local
valor a+b
Regresa(valor) coment: devuelve
Fin_suma
Devuelve entero
Llamado
Se hace mediante su nombre con los argumentos entre paréntesis.
Generalmente se asigna el valor del modulo a una variable del mismo tipo de esta.
Ejemplo
Principal()
Inicio
entero res, x 7, y 8
letrero(); coment: no devuelve ni recibe
checa_num(10); coment:no devuelve
res suma (5,10) coment: recibe y devuelve
Escribir(“La suma es : “,res)
Escribir(“La suma es : “, suma(x,y))
Regresa()
Fin_Principal
Declaración de prototipo
Un modulo prototipo tiene la misma sintaxis que el encabezado de un modulo solo que va en la declaración de variables.
Es necesario hacer una declaración forward cuando se hace el llamado del modulo antes de haberlo definido.
Ejemplo
Principal()
Inicio
coment: declaración de un modulo prototipo
variables:
real escribe(real x, entero y)
real r, a 3.14
entero b 5
r = escribe(a,b) coment: llamada al modulo
Escribir(“el resultado es “,r)
Regresa ()
Fin_Principal
coment: definición del modulo
real escribe(real x, entero y)
Inicio
Regresa( x + y * 13 )
Fin_escribe
Paso de parámetros
Por valor
El módulo (o subalgoritmo) recibe sólo una copia del valor que tiene el dato
No la puede modificar.
Sintaxis:
tipo nombre_módulo(tipo d1, tipo d2)
Por referencia
Se pasa la posición de memoria donde esta guardado el dato
El módulo puede saber cuánto vale, pero además puede modificar el valor del dato.
Sintaxis: Definición
tipo nombre_módulo(tipo var d1, tipo var d2)
Sintaxis. Llamado
nombre_módulo(dir d1, dir d2)
Dirección
Dirección
Ejemplo:Intercambia por valor
Ordena (entero p, entero q)
Inicio
Variables:
tmp de tipo entero
Si (p>q) Entonces
tmp p
p q
q tmp
Fin_si
Regresa()
Fin_Ordena
Ejemplo:Intercambia por referencia
Ordena1(entero var p, entero var q)
Inicio
Variables: tmp de tipo entero
Si (var p > var q) Entonces
tmp var p
var p var q
var q tmp
Fin_Si
Regresa()
Fin_Ordena1
Ejemplo
Coment: módulo sumar
entero sumar(entero a, entero b, entero var r)
Inicio
b b + 2
var r = a + b
Regresa()
Fin_sumar
Principal()
Inicio
entero v 5, res 0
res sumar(4*v,v, dir res) coment: llama al módulo
Escribir(res) coment: imprime 27
Escribir(v) coment: imprime 5
Regresa()
Fin_Principal
Ejemplo: Pasar una cadena
entero cadena(caracter var cad)
Inicio
variables: i de tipo entero
para(i 1 hasta i<LenC(cad) Paso 1)
cad[i] '.‘
Fin_Para
Regresa()
Fin_cadena
Principal ()
Inicio
variables: nif[] "hola todos“ de tipo caracter
cadena(nif) coment: llamo a modulo cadena
EscribirC(nif)
Regresa()
Fin_Principal
Ejemplo: Pasar vector
entero vec(entero var num, entero tam)
Inicio
variables: i de tipo entero
Para(i 1 hasta tam Paso 1)
num[i] num[i]*2
Fin_Para
Regresa()
Fin_vec
Principal ()
Inicio
variables: i de tipo entero
n[]={1,2,3,4,5} de tipo entero
vec(n,5) coment: llamo al modulo vec
Para(i 1 hasta 5 Paso 1)
escribir(“los números son’”,n[i])
Fin_Para
Regresa()
Fin_Principal