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

12.07.2015 Views

© FUOC • P05/75062/00112 46 Introducción a la metodología de diseño descendente{ Pre: a = A }funcion ultimaArista(a: arista): booleanoretorna verticesIguales(a.vf, a.dv)ffuncion{ Post: ultimaArista (A) es cierto si A es la última arista de POL }{ Pre: a = A }funcion areaTrapecio(a: arista): realretorna areaTrapecioVertices (a.vi,a.vf)ffuncion{ Post: areaTrapecio(A) es el área doble del trapecio formado por la arista A y el eje x }3)Tercer nivelFinalizado el segundo nivel, es necesario definir la secuencia de vértices a partir de la secuenciade reales. En este caso, podemos observar que los vértices son parejas de realesdisyuntas:v 1 v 2x 1, y 1, x 2, y 2, ...tipovertice = tupla x, y: real;ftuplaftipo{ Pre: v1 = V1 y v2 = V2 }funcion areaTrapecioVertices (v1, v2: vertice): realretorna (v2.x – v1.x) ∗ (v2.y + v1.y)ffuncion{ Post: areaTrapecioVertices(V1,V2) es el área doble del trapecio formado por la arista que vade V1 a V2 y el eje x }{ Pre: pol = POL y pol tiene como mínimo dos reales (un vértice) en su parte derecha }accion obtenerPrimerVertice(sal v: vertice)v.x:= leerReal();v.y:= leerReal()faccion{ Post: la parte izquierda de pol tiene un vértice más y v tiene el vértice que antes estaba enla parte derecha }{ Pre: pol = POL y pol como mínimo tiene dos reales (un vértice) en su parte derecha }accion obtenerVertice(sal v: vertice)v.x:= leerReal();v.y:= leerReal()faccion{ Post: la parte izquierda de pol tiene un vértice más y v tiene el vértice que antes estaba en laderecha }{ Pre: v1 = V1 y v2 = V2 }funcion verticesIguales(v1, v2: vertice): booleanoretorna (v1.x = v2.x) y (v1.y = v2.y)ffuncion{ verticesIguales(v1, v2) es cierto si V1 y V2 son el mismo vértice }3.Especificaciónvar nPalabrasC: entero;fvar{ en la entrada hay la secuencia de palabras f de la frase F. F no está vacía }cuentaCapicuasFrase{ nPalabrasC tiene el número de palabras capicúa de F }

© FUOC • P05/75062/00112 47 Introducción a la metodología de diseño descendente1)Primer nivel: frasePlanteamiento– Abstracciones utilizadas: palabra.– Identificación de la secuencia: frase vista como secuencia de palabras. La obtención de laspalabras primera y siguiente y el reconocimiento de la marca se encapsulan mediante accionesy funciones.– Identificación del esquema: recorrido. Hay que tratar la palabra que hace de marca de final.Aplicación directa del algoritmoalgoritmo cuentaCapicuasFrasevarpalabra: tPalabra;nPalabrasC: entero;fvarnPalabrasC := 0;obtenerPrimeraPalabra(palabra);mientras no palabraFinal(palabra) hacersi palabraCapicua(palabra) entonces nPalabrasC := nPalabrasC + 1;fsiobtenerPalabra(palabra)fmientrassi palabraCapicua(palabra) entonces nPalabrasC := nPalabrasC + 1fsiescribirEntero(nPalabrasC)falgoritmoAcciones pendientes de desarrollarEl algoritmo funcionará si las acciones y funciones que se deben desarrollar cumplen las especificacionessiguientes:accion obtenerPrimeraPalabra(sal m: tPalabra){ Pre: en la entrada hay la secuencia de palabras f de la frase F. La parte izquierda de f estávacía. La parte derecha, DF, no está vacía }{ Post: m representa la primera palabra de DF. La palabra obtenida estará en la parte izquierdade la secuencia f }accion obtenerPalabra(entsal m: tPalabra){ Pre: en la entrada hay la secuencia de palabras f de la frase F. La parte derecha, DF, no estávacía. La anterior palabra leída está en m }{ Post: m representa la primera palabra de DF. La palabra obtenida estará en la parte izquierdade la secuencia f }funcion palabraFinal(ent m: tPalabra): booleano{ Pre: m = M }{ Post: palabraFinal(M) es cierto si m es la última palabra de una frase }funcion palabraCapicua( ent m: tPalabra): booleano{ Pre: m = M }{ Post: palabraCapicua (M) es cierto sólo si m es una palabra capicúa }2)Segundo nivel: palabra– Abstracciones utilizadas: ninguna.– Identificación de la secuencia: palabra vista como una secuencia de caracteres. La obtenciónde las palabras primera y siguiente se hará mediante la función predefinida leerCaracter() yel reconocimiento del carácter que marca el final será el carácter espacio o la coma, o el puntoy coma, o el punto.

© FUOC • P05/75062/00112 46 <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>nte{ Pre: a = A }funcion ultimaArista(a: arista): booleanoretorna verticesIguales(a.vf, a.dv)ffuncion{ Post: ultimaArista (A) es cierto si A es <strong>la</strong> última arista <strong>de</strong> POL }{ Pre: a = A }funcion areaTrapecio(a: arista): realretorna areaTrapecioVertices (a.vi,a.vf)ffuncion{ Post: areaTrapecio(A) es el área doble <strong>de</strong>l trapecio formado por <strong>la</strong> arista A y el eje x }3)Tercer nivelFinalizado el segundo nivel, es necesario <strong>de</strong>finir <strong>la</strong> secuencia <strong>de</strong> vértices a partir <strong>de</strong> <strong>la</strong> secuencia<strong>de</strong> reales. En este caso, po<strong>de</strong>mos observar que los vértices son parejas <strong>de</strong> realesdisyuntas:v 1 v 2x 1, y 1, x 2, y 2, ...tipovertice = tup<strong>la</strong> x, y: real;ftup<strong>la</strong>ftipo{ Pre: v1 = V1 y v2 = V2 }funcion areaTrapecioVertices (v1, v2: vertice): realretorna (v2.x – v1.x) ∗ (v2.y + v1.y)ffuncion{ Post: areaTrapecioVertices(V1,V2) es el área doble <strong>de</strong>l trapecio formado por <strong>la</strong> arista que va<strong>de</strong> V1 a V2 y el eje x }{ Pre: pol = POL y pol tiene como mínimo dos reales (un vértice) en su parte <strong>de</strong>recha }accion obtenerPrimerVertice(sal v: vertice)v.x:= leerReal();v.y:= leerReal()faccion{ Post: <strong>la</strong> parte izquierda <strong>de</strong> pol tiene un vértice más y v tiene el vértice que antes estaba en<strong>la</strong> parte <strong>de</strong>recha }{ Pre: pol = POL y pol como mínimo tiene dos reales (un vértice) en su parte <strong>de</strong>recha }accion obtenerVertice(sal v: vertice)v.x:= leerReal();v.y:= leerReal()faccion{ Post: <strong>la</strong> parte izquierda <strong>de</strong> pol tiene un vértice más y v tiene el vértice que antes estaba en <strong>la</strong><strong>de</strong>recha }{ Pre: v1 = V1 y v2 = V2 }funcion verticesIguales(v1, v2: vertice): booleanoretorna (v1.x = v2.x) y (v1.y = v2.y)ffuncion{ verticesIguales(v1, v2) es cierto si V1 y V2 son el mismo vértice }3.Especificaciónvar nPa<strong>la</strong>brasC: entero;fvar{ en <strong>la</strong> entrada hay <strong>la</strong> secuencia <strong>de</strong> pa<strong>la</strong>bras f <strong>de</strong> <strong>la</strong> frase F. F no está vacía }cuentaCapicuasFrase{ nPa<strong>la</strong>brasC tiene el número <strong>de</strong> pa<strong>la</strong>bras capicúa <strong>de</strong> F }

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

Saved successfully!

Ooh no, something went wrong!