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