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 43 <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>ntefuncion EsLA(P: tPareja): booleano;{ Pre: p = P }{ Post: esLA(P) es cierto si P es <strong>la</strong> pareja LA }Notad que para verificar esta parte no necesitamos conocer <strong>la</strong> <strong>de</strong>finición <strong>de</strong>l tipo tPareja, ydado que disponemos <strong>de</strong> <strong>la</strong> especificación <strong>de</strong> acciones y funciones que hay que <strong>de</strong>sarrol<strong>la</strong>r,po<strong>de</strong>mos comprobar si es correcta <strong>la</strong> solución formu<strong>la</strong>da hasta ahora.2)Segundo nivelP<strong>la</strong>nteamientoPara continuar el <strong>diseño</strong> se necesita <strong>de</strong>finir <strong>la</strong> representación que tendrá una pareja <strong>de</strong> caracteres.Una posibilidad consiste en <strong>de</strong>finir <strong>la</strong> tup<strong>la</strong>, y otra en <strong>de</strong>finir una tab<strong>la</strong>. Elegiremos unatab<strong>la</strong> (elegir una tup<strong>la</strong> también habría sido una buena solución para este problema).tipotPareja = tab<strong>la</strong> [2] <strong>de</strong> caracter;ftipoAhora <strong>de</strong>bemos p<strong>la</strong>ntear el problema <strong>de</strong> cómo hacer que nuestra secuencia <strong>de</strong> caracteres se puedaver como <strong>la</strong> secuencia <strong>de</strong> parejas que nos conviene. Veamos <strong>la</strong> correspon<strong>de</strong>ncia que existe:<strong>la</strong> secuencia f está formada por c 1 c 2 c 3 c 4 c 5 …c f , don<strong>de</strong> c f es el carácter final ‘.’, y queremos veruna secuencia <strong>de</strong> parejas p 1 p 2 …p f tal que p 1 = c 1 c 2 , p 2 = c 2 c 3 , y p f tenga como segundo carácterel punto.Observamos que se trata <strong>de</strong> parejas so<strong>la</strong>padas <strong>de</strong> caracteres: cada pareja que no sea <strong>la</strong> primeracomparte un carácter con <strong>la</strong> anterior.La primera pareja entendida como los dos primeros caracteres <strong>de</strong> <strong>la</strong> secuencia (c 1 c 2 ), obligaríaa que <strong>la</strong> secuencia <strong>de</strong> caracteres tuviese como mínimo un carácter diferente al punto (c 1 ‘.’).Para ajustarnos a <strong>la</strong> precondición (como mínimo, <strong>la</strong> secuencia tiene el punto final) <strong>de</strong>beremoshacer que el primer carácter <strong>de</strong> <strong>la</strong> primera pareja sea un carácter arbitrario que no forme parte<strong>de</strong> <strong>la</strong> secuencia y que el segundo carácter sea el primero <strong>de</strong> <strong>la</strong> secuencia. Elegiremos el carácterarbitrario <strong>de</strong> modo que no nos estropee el tratamiento (que no sea una ‘L’). Por ejemplo, elcarácter espacio. De este modo, <strong>la</strong> secuencia que nos conviene es:que tenga como segundo carácter el punto.Por lo tanto:p 1 = ‘ ’ c 1 , p 2 = c 1 c 2 , y p fSoluciónaccion obtenerPrimeraPareja(sal p: tPareja)p[1]:= ‘ ’ ;p[2]:= leerCaracter()faccionaccion obtenerPareja(entsal p: tPareja)p[1]:= p[2];p[2]:= leerCaracter()faccionfuncion ultimaPareja(p: tPareja): booleanoretorna p[2] = ‘.’ffuncionfuncion esLA(p: tPareja): booleanoretorna p[1] = ‘L’ y p[2] = ‘A’ffuncion2. Tenemos que diseñar un algoritmo que calcule al área <strong>de</strong> un polígono a partir <strong>de</strong> <strong>la</strong>s coor<strong>de</strong>nadas<strong>de</strong> sus vértices.

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

Saved successfully!

Ooh no, something went wrong!