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 45 <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>nteaccion obtenerArista(entsal a: arista){ Pre: pol = POL y <strong>la</strong> parte <strong>de</strong>recha <strong>de</strong> pol, PDPol, no está vacía y tiene como mínimo unaarista; <strong>la</strong> parte izquierda <strong>de</strong> pol tiene como mínimo una arista, a = A y A es <strong>la</strong> última aristaobtenida }{ Post: a tiene <strong>la</strong> primera arista <strong>de</strong> PDPol, y el valor <strong>de</strong> a es <strong>la</strong> última arista <strong>de</strong> <strong>la</strong> parte izquierda<strong>de</strong> pol }funcion ultimaArista(a: arista): booleano{ Pre: a = A }{ Post: ultimaArista (A) es cierto si A es <strong>la</strong> última arista <strong>de</strong> POL }funcion areaTrapecio (a: arista): real;{ Pre: a = A }{ Post: areaTrapecio(A) es el área doble <strong>de</strong>l trapecio formado por <strong>la</strong> arista A y el eje x }2)Segundo nivelConvencidos <strong>de</strong>l primer nivel, pasemos al siguiente, que consiste en <strong>de</strong>finir <strong>la</strong>s acciones y <strong>la</strong>sfunciones y tipos que han quedado pendientes. En este nivel es conveniente pensar en términos<strong>de</strong> vértices, y consi<strong>de</strong>rar nuestra secuencia como una secuencia <strong>de</strong> vértices.Para el p<strong>la</strong>nteamiento <strong>de</strong> <strong>la</strong> secuencia <strong>de</strong> vértices, es necesario observar que <strong>la</strong> abstracción <strong>de</strong>arista está formada por dos parejas <strong>de</strong> vértices so<strong>la</strong>padas en <strong>la</strong> secuencia:a 1 a 3v 1, v 2, v 3, v 4 , v 5 , ...a 2 a 4Así pues, <strong>la</strong>s i<strong>de</strong>as que hay que aplicar al p<strong>la</strong>nteamiento (primer elemento, siguiente y último)son <strong>la</strong>s mismas que nos encontramos cuando solucionábamos el problema <strong>de</strong> contar‘LA’, y por ello no <strong>la</strong>s representaremos aquí. La última arista merece una atención especial.Si examinamos el enunciado, vemos que <strong>la</strong> última arista es aquél<strong>la</strong> cuyo extremo final, v f , esidéntico al vértice inicial <strong>de</strong> <strong>la</strong> primera arista (v 1 ), que es a<strong>de</strong>más el primer elemento <strong>de</strong> <strong>la</strong>secuencia. Con estas observaciones pasamos directamente a <strong>la</strong> solución.Cuando <strong>de</strong>finamos el tipo arista <strong>de</strong>beremos tener en cuenta que necesitaremos sus dos vérticespara po<strong>de</strong>r aplicar <strong>la</strong> fórmu<strong>la</strong> <strong>de</strong>l área <strong>de</strong>l trapecio, y también saber cuál es el últimovértice <strong>de</strong> <strong>la</strong> secuencia:tipoarista = tup<strong>la</strong> vi, vf, dv: vertice;ftup<strong>la</strong>ftipo{ Pre: en <strong>la</strong> entrada tenemos una secuencia <strong>de</strong> aristas pol y pol = POL y pol, como mínimo tienetres aristas en <strong>la</strong> parte <strong>de</strong>recha y <strong>la</strong> parte izquierda está vacía }accion obtenerPrimeraArista(sal A: arista)obtenerPrimerVertice(A.vi); { por <strong>la</strong> precondición sabemos que como mínimo hay cuatrovértices }obtenerVertice(A.vf); { contando el que marca el final }A.dv := A.vifaccion{ Post: A tiene <strong>la</strong> primera arista <strong>de</strong> pdPol y el valora <strong>de</strong> A es <strong>la</strong> última arista <strong>de</strong> <strong>la</strong> parte izquierda<strong>de</strong> Pol }{ Pre: pol = POL y <strong>la</strong> parte <strong>de</strong>recha <strong>de</strong> pol, pDPol, no está vacía y tiene como mínimo una arista;<strong>la</strong> parte izquierda <strong>de</strong> pol tiene como mínimo una arista; a = A y A es <strong>la</strong> última arista obtenida }accion obtenerArista( entsal a: arista)a.vi:= a.vf;obtenerVertice(a.vf)faccion{ Post: A tiene <strong>la</strong> primera arista <strong>de</strong> pDPol y el valor <strong>de</strong> A es <strong>la</strong> última arista <strong>de</strong> <strong>la</strong> parte izquierda<strong>de</strong> pol }

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

Saved successfully!

Ooh no, something went wrong!