12.07.2015 Views

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

SHOW MORE
SHOW LESS

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 }

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

Saved successfully!

Ooh no, something went wrong!