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.

326 Capítulo 15. <strong>Algoritmos</strong> de búsqueda y ord<strong>en</strong>ación<br />

procedure LeerElemDetectandoFin(var arch: tArchivo;<br />

var comp: tCompon<strong>en</strong>te; var finArch: boolean);<br />

begin<br />

finArch:= EoF(arch);<br />

if not finArch th<strong>en</strong><br />

Read(arch, comp)<br />

<strong>en</strong>d; {LeerElemDetectandoFin}<br />

procedure PasarElemDetectandoFin(var archOrig<strong>en</strong>, archDestino:<br />

tArchivo; var comp: tCompon<strong>en</strong>te; var finArchOrig<strong>en</strong>: boolean);<br />

begin<br />

Write(archDestino, comp);<br />

LeerElemDetectandoFin(archOrig<strong>en</strong>, comp, finArchOrig<strong>en</strong>)<br />

<strong>en</strong>d; {PasarElemDetectandoFin}<br />

begin {Mezcla}<br />

Reset(aux1);<br />

Reset(aux2);<br />

Rewrite(arch);<br />

LeerElemDetectandoFin(aux1, c1, finArch1);<br />

LeerElemDetectandoFin(aux2, c2, finArch2);<br />

while not finArch1 and not finArch2 do<br />

if c1 < c2 th<strong>en</strong><br />

PasarElemDetectandoFin (aux1, arch, c1, finArch1)<br />

else<br />

PasarElemDetectandoFin (aux2, arch, c2, finArch2);<br />

while not finArch1 do<br />

PasarElemDetectandoFin (aux1, arch, c1, finArch1);<br />

while not finArch2 do<br />

PasarElemDetectandoFin (aux2, arch, c2, finArch2);<br />

Close(arch);<br />

Close(aux1);<br />

Close(aux2)<br />

<strong>en</strong>d; {Mezcla}<br />

Abordamos ahora el desarrollo de la otra acción a realizar <strong>en</strong> este algoritmo,<br />

que es la división de arch <strong>en</strong> los dos archivos auxiliares aux1 y aux2. Para<br />

optimizar esta tarea convi<strong>en</strong>e t<strong>en</strong>er <strong>en</strong> cu<strong>en</strong>ta los posibles tramos ord<strong>en</strong>ados que<br />

existan ya <strong>en</strong> arch para no desord<strong>en</strong>arlos. Así, mi<strong>en</strong>tras los sucesivos valores<br />

que se van ley<strong>en</strong>do de arch estén ord<strong>en</strong>ados, los vamos escribi<strong>en</strong>do, por ejemplo,<br />

<strong>en</strong> aux1. En el mom<strong>en</strong>to <strong>en</strong> que una compon<strong>en</strong>te de arch esté desord<strong>en</strong>ada<br />

pasamos a escribir <strong>en</strong> aux2 donde seguiremos escribi<strong>en</strong>do los sucesivos valores<br />

de arch que form<strong>en</strong> otro tramo ord<strong>en</strong>ado. Al aparecer un nuevo valor fuera de<br />

ord<strong>en</strong> cambiamos de nuevo a aux2.

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

Saved successfully!

Ooh no, something went wrong!