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 24 <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>nteque contar<strong>la</strong>. Tendremos que distinguir si <strong>la</strong> última pa<strong>la</strong>bra está vacía o no,para hacerle, en consecuencia, un tratamiento distinto. La solución queda <strong>de</strong><strong>la</strong> siguiente forma:accion obtenerFrase(sal f: tFrase)var m: tPa<strong>la</strong>bra; nPa<strong>la</strong>bras: entero;fvar{ Pre: en <strong>la</strong> entrada tenemos un texto T representado como una secuencia <strong>de</strong> frases t. En<strong>la</strong> parte <strong>de</strong>recha <strong>de</strong> t, DT, hay una secuencia <strong>de</strong> frases o <strong>la</strong> frase vacía }nPa<strong>la</strong>bras := 0;f.nPa<strong>la</strong>brasC := 0;obtenerPa<strong>la</strong>bra(m);mientras no ultimaPa<strong>la</strong>bra(m) hacersi hayQueCorregirPa<strong>la</strong>bra(m) entonces f.nPa<strong>la</strong>brasC := f.nPa<strong>la</strong>brasC + 1 fsinPa<strong>la</strong>bras := nPa<strong>la</strong>bras + 1;ObtenerPa<strong>la</strong>bra(m)fmientrassi no pa<strong>la</strong>braVacia(m) entoncessi hayQueCorregirPa<strong>la</strong>bra(m) entonces f.nPa<strong>la</strong>brasC := f.nPa<strong>la</strong>brasC + 1 fsinPa<strong>la</strong>bras:= NPa<strong>la</strong>bras + 1fsif: final := nPa<strong>la</strong>bras = 0{ Post: en f tenemos representado <strong>la</strong> primera frase <strong>de</strong> DT. La frase representada está en <strong>la</strong>parte izquierda <strong>de</strong> t }faccionLa función hayQueCorregirPa<strong>la</strong>bra nos dirá si <strong>la</strong> pa<strong>la</strong>bra m <strong>de</strong>be corregirse o no.Por el momento, <strong>la</strong> tarea que hay que realizar en el siguiente nivel es:Fijaros que...... en <strong>la</strong> última estructura condicional(si … fsi) estamostratando <strong>la</strong> pa<strong>la</strong>bra que actúacomo marca.accion obtenerPa<strong>la</strong>bra(sal m: tPa<strong>la</strong>bra){ Pre: en <strong>la</strong> entrada tenemos <strong>la</strong> secuencia <strong>de</strong> pa<strong>la</strong>bras, t, <strong>de</strong>l texto T, <strong>de</strong> <strong>la</strong> que sólo po<strong>de</strong>mosobtener su parte <strong>de</strong>recha DT, y ésta no ha llegado al final <strong>de</strong>l texto }{ Post: m representa <strong>la</strong> primera pa<strong>la</strong>bra que hay en DT. La pa<strong>la</strong>bra obtenida estará en<strong>la</strong> parte izquierda <strong>de</strong> <strong>la</strong> secuencia t }funcion ultimaPa<strong>la</strong>bra(m: tPa<strong>la</strong>bra): booleano{ Pre: m = M }{ Post: ultimaPa<strong>la</strong>bra(M) es cierto si m representa <strong>la</strong> última pa<strong>la</strong>bra <strong>de</strong> una frase }funcion pa<strong>la</strong>braVacia(m: tPa<strong>la</strong>bra): booleano{ Pre: m = M }{ Post: pa<strong>la</strong>braVacia( M) es cierto si m representa una pa<strong>la</strong>bra vacía }funcion hayQueCorregirPa<strong>la</strong>bra(m: tPa<strong>la</strong>bra): booleano{ Pre: m = M }{ Post: hayQueCorregirPa<strong>la</strong>bra(M) es cierto si <strong>la</strong> pa<strong>la</strong>bra M <strong>de</strong>be ser corregida. hayQue-CorregirPa<strong>la</strong>bra(M) es falso si no hace falta corregir M }El resto <strong>de</strong> los subproblemas <strong>de</strong> <strong>la</strong> abstracción frase son evi<strong>de</strong>ntes; se muestrana continuación <strong>la</strong>s respectivas soluciones:funcion ultimaFrase(f: tFrase): booleanoretorna f.finalffuncion{ Pre: f = F , y F es una frase válida }{ Post: ultimaFrase(F) es cierto si F es una frase vacía. Retornará falso en caso contrario }funcion pa<strong>la</strong>brasPorCorregir(f: tFrase): enteroretorna f.nPa<strong>la</strong>brasCffuncion{ Pre: f = F }{ Post: pa<strong>la</strong>brasPorCorregir(F) nos da el número <strong>de</strong> pa<strong>la</strong>bras que hay que corregir para <strong>la</strong>frase F }