31
M.C. Yolanda Moyao Martínez 1 Diseño Modular Top-Down

Diseño Modular Top-Downymoyao/admin/archivos/modular7 metodo.pdf · Declaración de prototipo Un modulo prototipo tiene la misma sintaxis que el encabezado de un modulo solo que

  • Upload
    others

  • View
    13

  • Download
    0

Embed Size (px)

Citation preview

M.C. Yolanda Moyao Martínez 1

Diseño ModularTop-Down

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

Ejemplo

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 8

Son bloques desentencias con los quese construyen Algoritmos

Modulo

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

Práctica: Diseñar

Un algoritmo que llame a un módulo el cual debe contar cuantos números pares y cuántos impares hay en el vector.

Un algoritmo que llame a un módulo el cual debe contar cuantos números primos hay en el vector.