12.07.2015 Views

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

SHOW MORE
SHOW LESS

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 }

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!