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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

15.4. Mezcla y ord<strong>en</strong>ación de archivos secu<strong>en</strong>ciales 327<br />

aux1<br />

arch<br />

7 8 9 4 5<br />

2 3 1 1<br />

7 8 9 2 3 . . . aux2 4 5 1 1 . . .<br />

Figura 15.10.<br />

Dados los valores de arch, un ejemplo de división sería la que aparece <strong>en</strong> la<br />

figura 15.10.<br />

Este método de división hace que los archivos t<strong>en</strong>gan el mismo número de<br />

tramos o a lo sumo que difieran <strong>en</strong> uno, por lo que su mezcla se d<strong>en</strong>omina mezcla<br />

equilibrada. Además, se detecta inmediatam<strong>en</strong>te si arch está ord<strong>en</strong>ado, ya que<br />

existirá un único tramo que se escribirá <strong>en</strong> aux1, quedando aux2 vacío.<br />

Para saber cuándo cambiar de archivo auxiliar hay que comprobar si el<br />

valorAnterior leído es mayor que el valorActual, lo que obliga a realizar una<br />

lectura inicial, sin comparar, para t<strong>en</strong>er un valor asignado a valorAnterior, y<br />

a almac<strong>en</strong>ar <strong>en</strong> una variable booleana cambio el destino actual. Al escribir al<br />

m<strong>en</strong>os una compon<strong>en</strong>te <strong>en</strong> aux2, éste ya no está vacío, lo que señalizaremos con<br />

una variable booleana esVacio2.<br />

Veamos cómo podría ser un primer esbozo de Division:<br />

si no se ha acabado arch <strong>en</strong>tonces<br />

Leer valorActual de arch<br />

Escribir valorActual <strong>en</strong> aux1<br />

valorAnterior:= valorActual<br />

fin {si}<br />

mi<strong>en</strong>tras no se acabe arch hacer<br />

Leer valorActual de arch<br />

si valorAnterior > valorActual <strong>en</strong>tonces<br />

Cambiar cambio<br />

si cambio <strong>en</strong>tonces<br />

Escribir valorActual <strong>en</strong> aux1<br />

si no<br />

Escribir valorActual <strong>en</strong> aux2<br />

esVacio2:= False<br />

fin {si no}<br />

valorAnterior:= valorActual<br />

fin {mi<strong>en</strong>tras}<br />

. . .

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

Saved successfully!

Ooh no, something went wrong!