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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

© FUOC • P05/75062/00112 22 <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>nteaccion inicioResultadosAnalisis(sal A: tDatosAnalisis)A.nFrases := 0;A.nFrasesCor := 0;A.nPa<strong>la</strong>brasPorCorregir := 0;A.maximoPa<strong>la</strong>brasPorCorregir := 0faccionaccion actualizaResultadosAnalisis(ent F: tFrase; entsal A: tDatosAnalisis)varnPa<strong>la</strong>brasPorCorFrase: entero;fvarA.nFrases := A.nFrases + 1;nPa<strong>la</strong>brasPorCorFrase := pa<strong>la</strong>brasPorCorregir(F);si nPa<strong>la</strong>brasPorCorFrase > 0 entoncesfsiA.nFrasesCor := A.nFrasesCor + 1;A.nPa<strong>la</strong>brasPorCorregir := A.nPa<strong>la</strong>brasPorCorregir + nPa<strong>la</strong>brasPorCorFrasesi nPa<strong>la</strong>brasPorCorFrase > A.maximoPa<strong>la</strong>brasPorCorregir entoncesA.maximoPa<strong>la</strong>brasPorCorregir := nPa<strong>la</strong>brasPorCorFrasefsifaccionaccion escribirResultadosAnalisis(ent A: tDatosAnalisis)si A.nFrasesCor > 0 entoncesfsifaccionescribirReal(enteroAReal(A.nFrasesCor) / enteroAReal(A.nFrases) ∗ 100.0);escribirReal(enteroAReal(A.nPa<strong>la</strong>brasPorCorregir) / enteroAReal(A.nFrasesCor));escribirEntero(A.maximoPa<strong>la</strong>brasPorCorregir)Notad que <strong>de</strong>bemos prever el error <strong>de</strong> dividir por 0 en <strong>la</strong> última acción. El enunciadopi<strong>de</strong> que no se genere salida si no hay errores.En <strong>la</strong> acción actualizaResultadosAnalisis se utiliza <strong>la</strong> función pa<strong>la</strong>brasPorCorregirque añadiremos al grupo <strong>de</strong> acciones y/o funciones <strong>de</strong>l tipo tFrase. A pesar <strong>de</strong>que, por razones <strong>de</strong> exposición, ya habíamos a<strong>de</strong><strong>la</strong>ntado el tipo tFrase, <strong>la</strong> funciónnos resulta útil para mantener <strong>la</strong> in<strong>de</strong>pen<strong>de</strong>ncia entre <strong>la</strong>s dos abstracciones:para resolver los resultados <strong>de</strong>l análisis <strong>de</strong>l texto no nos hace falta conocerlos <strong>de</strong>talles <strong>de</strong> cómo se representa una frase; <strong>de</strong> esta forma, cuando resolvemos<strong>la</strong> abstracción <strong>de</strong> frase, llevaremos a cabo esta acción in<strong>de</strong>pendientemente <strong>de</strong> loque se ha hecho en <strong>la</strong> abstracción <strong>de</strong> datos <strong>de</strong>l análisis. Si hacemos modificacionesen tFrase (con los respectivos cambios que hay que realizar en su conjunto<strong>de</strong> acciones y funciones), no tendremos que examinar el código referente a <strong>la</strong>abstracción <strong>de</strong> datos <strong>de</strong> análisis. La especificación <strong>de</strong> <strong>la</strong> función será <strong>la</strong> siguiente:funcion pa<strong>la</strong>brasPorCorregir(f: tFrase): entero;{ Pre: f = F }{ Post: pa<strong>la</strong>brasPorCorregir(F) nos da el número <strong>de</strong> pa<strong>la</strong>bras por corregir en <strong>la</strong> frase F }Vamos a resolver el segundo nivel <strong>de</strong> abstracción: <strong>la</strong> abstracción <strong>de</strong> frases. Empezaremospor el subproblema <strong>de</strong> obtener una frase. La mejor forma <strong>de</strong> p<strong>la</strong>ntearsu obtención es consi<strong>de</strong>rar que, en <strong>la</strong> entrada, <strong>la</strong> frase que se <strong>de</strong>be obteneres una secuencia <strong>de</strong> pa<strong>la</strong>bras:m 1 m 2 m 3 m 4 ...

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

Saved successfully!

Ooh no, something went wrong!