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 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 }