09.05.2013 Views

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

SHOW MORE
SHOW LESS

Create successful ePaper yourself

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

224 Capítulo 10. Introducción a la recursión<br />

En el caso <strong>en</strong> que se <strong>en</strong>cu<strong>en</strong>tre <strong>en</strong> el input un paréntesis o un corchete<br />

abierto, hay que seguir ley<strong>en</strong>do caracteres hasta <strong>en</strong>contrar (si es que existe) el<br />

correspondi<strong>en</strong>te símbolo de cierre. En caso de <strong>en</strong>contrarlo se dará un m<strong>en</strong>saje<br />

de éxito, y <strong>en</strong> caso contrario, dep<strong>en</strong>di<strong>en</strong>do del símbolo <strong>en</strong>contrado, se tomará la<br />

acción correspondi<strong>en</strong>te:<br />

• si es un símbolo de cierre equivocado, se dará un m<strong>en</strong>saje de error.<br />

• si es un paréntesis o corchete abierto, se hará una llamada recursiva.<br />

• si es el fin del input, también se dará un m<strong>en</strong>saje indicándolo.<br />

T<strong>en</strong>i<strong>en</strong>do <strong>en</strong> cu<strong>en</strong>ta estas indicaciones, el sigui<strong>en</strong>te nivel de refinami<strong>en</strong>to de<br />

Cerrar paréntesis puede ser:<br />

Repetir<br />

Leer carácter c<br />

<strong>en</strong> caso de que c sea<br />

‘(‘: Cerrar paréntesis<br />

‘)‘: Dar m<strong>en</strong>saje de éxito<br />

‘[‘: Cerrar corchete<br />

‘]‘: Dar m<strong>en</strong>saje de error<br />

hasta c = ‘)’ o fin de la <strong>en</strong>trada<br />

Si fin de la <strong>en</strong>trada <strong>en</strong>tonces<br />

Dar m<strong>en</strong>saje de error<br />

Y simplem<strong>en</strong>te cambiando los corchetes por paréntesis y viceversa, puede el<br />

lector obt<strong>en</strong>er el sigui<strong>en</strong>te nivel de Cerrar corchete.<br />

Ya <strong>en</strong> este nivel de diseño se puede observar que las tareas Cerrar paréntesis<br />

y Cerrar corchete son mutuam<strong>en</strong>te recursivas, y como tales deb<strong>en</strong> ser tratadas<br />

<strong>en</strong> la codificación <strong>en</strong> <strong>Pascal</strong> que se da a continuación:<br />

Program Equilibrado (input, output);<br />

{Estudia el equilibrado de paréntesis y corchetes <strong>en</strong> secu<strong>en</strong>cias de<br />

caracteres}<br />

var<br />

c: char;<br />

procedure CierraCorchete; forward;<br />

procedure CierraPar;<br />

{PreC.: se ha leído un carácter ‘(‘ y no EoLn}<br />

{Efecto: se ha recorrido la <strong>en</strong>trada hasta <strong>en</strong>contrar un carácter ‘)’<br />

o el fin de la <strong>en</strong>trada, dando los m<strong>en</strong>sajes adecuados si se ha leído<br />

un símbolo inapropiado}

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

Saved successfully!

Ooh no, something went wrong!