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
© 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) }
- Page 1: Introduccióna la metodologíade di
- Page 5 and 6: © FUOC • P05/75062/00112 5 Intro
- Page 7 and 8: © FUOC • P05/75062/00112 7 Intro
- Page 9 and 10: © FUOC • P05/75062/00112 9 Intro
- Page 11 and 12: © FUOC • P05/75062/00112 11 Intr
- Page 13 and 14: © FUOC • P05/75062/00112 13 Intr
- Page 15 and 16: © FUOC • P05/75062/00112 15 Intr
- Page 17 and 18: © FUOC • P05/75062/00112 17 Intr
- Page 19 and 20: © FUOC • P05/75062/00112 19 Intr
- Page 21 and 22: © FUOC • P05/75062/00112 21 Intr
- Page 23 and 24: © FUOC • P05/75062/00112 23 Intr
- Page 25 and 26: © FUOC • P05/75062/00112 25 Intr
- Page 27 and 28: © FUOC • P05/75062/00112 27 Intr
- Page 29 and 30: © FUOC • P05/75062/00112 29 Intr
- Page 31 and 32: © FUOC • P05/75062/00112 31 Intr
- Page 33 and 34: © FUOC • P05/75062/00112 33 Intr
- Page 35: © FUOC • P05/75062/00112 35 Intr
- Page 38 and 39: © FUOC • P05/75062/00112 38 Intr
- Page 40 and 41: © FUOC • P05/75062/00112 40 Intr
- Page 42 and 43: © FUOC • P05/75062/00112 42 Intr
- Page 44 and 45: © FUOC • P05/75062/00112 44 Intr
- Page 46 and 47: © FUOC • P05/75062/00112 46 Intr
- Page 50 and 51: © FUOC • P05/75062/00112 50 Intr
- Page 52 and 53: © FUOC • P05/75062/00112 52 Intr
- Page 54 and 55: © FUOC • P05/75062/00112 54 Intr
- Page 56 and 57: © FUOC • P05/75062/00112 56 Intr
© 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