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 48 Introducción a la metodología de diseño descendenteDefinición del tipoNecesitaremos guardar los elementos siguientes:– El contenido de la palabra: la tabla c y long, ya que la tabla puede estar parcialmente llena.– El último carácter leído de la secuencia: caracterLeido será siempre el carácter de la siguientepalabra que se lee en el caso de que no se haya llegado al final de la secuencia.– Un indicador de final: final será cierto si se trata de la última palabra.const maxCar: entero = 15;fconsttipotPalabra = tuplalong: entero;c: tabla[maxCar] de caracter;caracterLeido: caracter;final: booleano;ftuplaftipoPlanteamiento y soluciones de las acciones y funciones del nivelIdentificación esquema: recorrido.accion obtenerPrimeraPalabra(sal m: tPalabra)var c: caracter;fvarm.long := 0;c := leerCaracter();mientras separador(c) y c ≠ ‘.’ hacer { saltamos los primeros separadores }c := leerCaracter()fmientrasm.caracterLeido := c;obtenerPalabra(m)faccionIdentificación del esquema: recorrido.accion obtenerPalabra (entsal m: tPalabra)var c: caracter;fvarm.long := 0;c := m.caracterLeido;mientras no separador(c) y c ≠ ‘.’ hacer { obtenemos la palabra }m.long := m.long + 1;m.c[m.long] := c;c := leerCaracter()fmientrasmientras separador (c) y c ≠ ‘.’ hacer { saltamos los separadores }c := leerCaracter()fmientrasm.caracterLeido := c;m.final := c = ‘.’faccionAplicación directa del algoritmofuncion palabraFinal(m: tPalabra): booleanoretorna m.finalffuncion

© FUOC • P05/75062/00112 49 Introducción a la metodología de diseño descendenteIdentificación del esquema: búsqueda.funcion palabraCapicua(m: tPalabra): booleanovari, j; entero;encontrado: booleano;fvari := 1; j := m.long;encontrado := falso;mientras (no encontrado) y (i < j) hacersi m.c[i] ≠ m.c[j] entoncesencontrado := ciertosino i := i + 1; j := j – 1fsifmientrasretorna no encontradoffuncionfuncion separador(ent c: caracter): booleanoretorna (c= ‘ ’) o (c = ‘,’) o (c = ‘;’)ffuncion4. Del enunciado deducimos que podemos organizar los niveles de descomposición del diseñoa partir de los objetos del problema. En la entrada del programa tenemos una secuenciade páginas. Una página es una secuencia de palabras separadas por espacios y controles delínea. Una palabra es una secuencia de caracteres sin espacios ni controles de línea. La secuenciade entrada es de tipo carácter. Podemos distinguir, pues, tres niveles de descomposicióndel diseño:a) Secuencia de páginas de web acabada con “FinPaginas”.b) Página: secuencia de palabras acabada con la palabra “FinTextoHTML”.c) Palabra: secuencia de caracteres terminada con separador (espacio, símbolo =, caracteresde control de línea).1)Primer nivel: secuencia de páginasEspecificaciónReleemos el enunciadoy lo adaptamos siguiendola abstracción de página.El objetivo es confeccionar una lista de las empresas clientes que participan en el servidor y,para cada empresa participante, obtener la cantidad que se les debe facturar. Para cada página,podemos obtener el nombre de la empresa cliente a la cual pertenece y valorar su precioa partir del contenido. En un primer nivel, formulamos el algoritmo en términos de una secuenciade páginas. De este modo, por lo tanto, la entrada se puede ver como una secuenciade páginas:s = S = ‘FinPaginas’ indica el final de la secuencia y se puede considerar como una página especial yúnica que sólo tiene la palabra “FinPaginas”.La precondición se puede expresar como:{ Pre: s = S = y (toda P i , 1 ≤ i ≤ n, es una página) }La postcondición consistirá en tener una secuencia t de empresas clientes con el importe facturado.La secuencia t tendrá la forma siguiente:t = Donde E i es el nombre de una empresa cliente presente en la secuencia S, y F i es el importede la facturación que se debe aplicar a la empresa E i . La especificación del algoritmo será, porlo tanto:{ Pre: en la entrada se tiene una secuencia s = S = y (toda P i,1 ≤ i ≤ n, es una página) }

© FUOC • P05/75062/00112 48 <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>nteDefinición <strong>de</strong>l tipoNecesitaremos guardar los elementos siguientes:– El contenido <strong>de</strong> <strong>la</strong> pa<strong>la</strong>bra: <strong>la</strong> tab<strong>la</strong> c y long, ya que <strong>la</strong> tab<strong>la</strong> pue<strong>de</strong> estar parcialmente llena.– El último carácter leído <strong>de</strong> <strong>la</strong> secuencia: caracterLeido será siempre el carácter <strong>de</strong> <strong>la</strong> siguientepa<strong>la</strong>bra que se lee en el caso <strong>de</strong> que no se haya llegado al final <strong>de</strong> <strong>la</strong> secuencia.– Un indicador <strong>de</strong> final: final será cierto si se trata <strong>de</strong> <strong>la</strong> última pa<strong>la</strong>bra.const maxCar: entero = 15;fconsttipotPa<strong>la</strong>bra = tup<strong>la</strong>long: entero;c: tab<strong>la</strong>[maxCar] <strong>de</strong> caracter;caracterLeido: caracter;final: booleano;ftup<strong>la</strong>ftipoP<strong>la</strong>nteamiento y soluciones <strong>de</strong> <strong>la</strong>s acciones y funciones <strong>de</strong>l nivelI<strong>de</strong>ntificación esquema: recorrido.accion obtenerPrimeraPa<strong>la</strong>bra(sal m: tPa<strong>la</strong>bra)var c: caracter;fvarm.long := 0;c := leerCaracter();mientras separador(c) y c ≠ ‘.’ hacer { saltamos los primeros separadores }c := leerCaracter()fmientrasm.caracterLeido := c;obtenerPa<strong>la</strong>bra(m)faccionI<strong>de</strong>ntificación <strong>de</strong>l esquema: recorrido.accion obtenerPa<strong>la</strong>bra (entsal m: tPa<strong>la</strong>bra)var c: caracter;fvarm.long := 0;c := m.caracterLeido;mientras no separador(c) y c ≠ ‘.’ hacer { obtenemos <strong>la</strong> pa<strong>la</strong>bra }m.long := m.long + 1;m.c[m.long] := c;c := leerCaracter()fmientrasmientras separador (c) y c ≠ ‘.’ hacer { saltamos los separadores }c := leerCaracter()fmientrasm.caracterLeido := c;m.final := c = ‘.’faccionAplicación directa <strong>de</strong>l algoritmofuncion pa<strong>la</strong>braFinal(m: tPa<strong>la</strong>bra): booleanoretorna m.finalffuncion

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

Saved successfully!

Ooh no, something went wrong!