Introducción a la metodología de diseño descendente
Introducción a la metodología de diseño descendente
Introducción a la metodología de diseño descendente
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
© FUOC • P05/75062/00112 44 <strong>Introducción</strong> a <strong>la</strong> <strong>metodología</strong> <strong>de</strong> <strong>diseño</strong> <strong>de</strong>scen<strong>de</strong>nteEspecificaciónPasemos a especificarlo. Para hacerlo, abreviaremos <strong>la</strong>s especificaciones <strong>de</strong>nominando <strong>la</strong> secuencia<strong>de</strong> entrada <strong>de</strong> datos pol.var area: real fvar;{ Pre: pol = POL y POL es una secuencia <strong>de</strong> reales que representa como mínimo un triángulo }areaPoligono{ Post: en area se encuentra el área <strong>de</strong>l polígono representado en <strong>la</strong> secuencia POL }1)Primer nivelP<strong>la</strong>nteamientoPara afrontar bien el problema es necesario i<strong>de</strong>ntificar los objetos que pue<strong>de</strong>n ser convenientespara nuestro análisis. Éstos son:• aristas• vértices• realesEn <strong>la</strong> primera etapa <strong>de</strong>l <strong>diseño</strong>, es conveniente hacer <strong>la</strong> formu<strong>la</strong>ción <strong>de</strong>l algoritmo en términos<strong>de</strong> arista, a pesar <strong>de</strong> que en <strong>la</strong> entrada disponemos <strong>de</strong> una secuencia <strong>de</strong> reales. Imaginemos,entonces, el tipo arista y que en <strong>la</strong> entrada tenemos una secuencia <strong>de</strong> arista. En estecaso, <strong>la</strong>s cuestiones clásicas <strong>de</strong> cómo se obtiene el primero, el siguiente y el último elementoestarán encapsu<strong>la</strong>das mediante <strong>la</strong>s acciones y <strong>la</strong>s funciones que encontraréis más a<strong>de</strong><strong>la</strong>nte.Repasando el enunciado, vemos que cada término <strong>de</strong>l sumatorio es el área <strong>de</strong>l trapecio correspondientea cada arista. El tratamiento que hay que aplicar consistiría, <strong>de</strong> este modo, en ir acumu<strong>la</strong>ndoestas áreas para tener al final el sumatorio. Obviamente, esto correspon<strong>de</strong> al esquema<strong>de</strong> recorrido sobre una secuencia <strong>de</strong> aristas y también <strong>de</strong>beremos reflexionar sobre el esquema.Por ejemplo, es necesario tratar <strong>la</strong> última arista que hace <strong>de</strong> marca <strong>de</strong> fin <strong>de</strong> secuencia; por lotanto, <strong>de</strong>beremos modificar ligeramente el esquema para conseguir este efecto.Otra observación es que <strong>de</strong>l sumatorio po<strong>de</strong>mos extraer factor común <strong>de</strong> <strong>la</strong> división por dos,y posponer<strong>la</strong> para el tratamiento final. El tratamiento final consistirá en dividir por dos <strong>la</strong>sáreas acumu<strong>la</strong>das y encontrar su valor absoluto. Así, para cada arista calcu<strong>la</strong>remos el área doble,y <strong>de</strong> este modo ahorraremos algunos cálculos. Notad, en <strong>la</strong> solución que tenéis más a<strong>de</strong><strong>la</strong>nte,que <strong>la</strong> última asignación es el tratamiento final, pero <strong>la</strong> expresión en <strong>la</strong> parte <strong>de</strong>recha<strong>de</strong> <strong>la</strong> asignación incluye el tratamiento <strong>de</strong> <strong>la</strong> última arista.Tenemos, pues, todos los elementos para pasar a expresar una solución centrada en <strong>la</strong>s aristas<strong>de</strong>l polígono y <strong>la</strong>s áreas <strong>de</strong> los trapecios correspondientes; así, no entraremos en <strong>de</strong>talles másconcretos.algoritmo areaPoligonovararea: real;a: arista;fvar{ Pre: pol = POL y POL es una secuencia <strong>de</strong> reales que representa como mínimo un triangulo }obtenerPrimeraArista(a);area := 0;mientras no ultimaArista(a) hacerarea := area + areaTrapecio(a);obtener Arista(a)fmientrasarea := abs ((area + areaTrapecio(a)) / 2.0){ Post : en area tenemos el area <strong>de</strong>l polígolno representado en <strong>la</strong> secuencia POL }falgoritmoaccion obtenerPrimeraArista(sal a: arista){ Pre: en <strong>la</strong> entrada tenemos una secuencia <strong>de</strong> aristas pol y pol = POL y pol tiene como mínimotres aristas en <strong>la</strong> parte <strong>de</strong>recha, mientras que <strong>la</strong> parte izquierda está vacía }{ Post: a será <strong>la</strong> primera arista <strong>de</strong> POL y en <strong>la</strong> parte izquierda <strong>de</strong> pol hay una arista }