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.3. <strong>Algoritmos</strong> de búsqueda <strong>en</strong> archivos secu<strong>en</strong>ciales 321<br />

compon<strong>en</strong>tes del archivo. Por tanto, la estrategia de búsqueda será la misma<br />

que se emplea <strong>en</strong> los algoritmos de búsqueda secu<strong>en</strong>cial <strong>en</strong> arrays (véanse los<br />

apartados 15.1.1 y 15.1.2).<br />

En este breve apartado nos limitaremos a mostrar la adaptación directa de<br />

estos algoritmos de búsqueda para archivos arbitrarios y para archivos ord<strong>en</strong>ados.<br />

15.3.1 Búsqueda <strong>en</strong> archivos arbitrarios<br />

Supongamos que se dispone de un archivo definido de la sigui<strong>en</strong>te forma:<br />

type<br />

tElem = record<br />

clave: tClave;<br />

resto de la información<br />

<strong>en</strong>d;<br />

tArchivoElems = file of tElem;<br />

Con esto, el procedimi<strong>en</strong>to de búsqueda queda como sigue (por la simplicidad<br />

de la implem<strong>en</strong>tación se han obviado los pasos previos de diseño y algunos<br />

aspectos de la corrección):<br />

procedure Buscar(var f: tArchivoElems; c: tClave; var elem: tElem;<br />

var <strong>en</strong>contrado: boolean);<br />

{PostC: si c está <strong>en</strong> f <strong>en</strong>tonces <strong>en</strong>contrado = True y elem es<br />

el elem<strong>en</strong>to buscado; <strong>en</strong> otro caso <strong>en</strong>contrado = False}<br />

begin<br />

<strong>en</strong>contrado:= False;<br />

while not EoF(f) and not <strong>en</strong>contrado do begin<br />

Read(f, elem);<br />

if c = elem.clave th<strong>en</strong><br />

<strong>en</strong>contrado:= True<br />

<strong>en</strong>d {while}<br />

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

15.3.2 Búsqueda <strong>en</strong> archivos ord<strong>en</strong>ados<br />

Al igual que ocurre con la búsqueda secu<strong>en</strong>cial <strong>en</strong> arrays, el algoritmo puede<br />

mejorarse si las compon<strong>en</strong>tes del archivo están ord<strong>en</strong>adas por sus claves. En<br />

este caso, se puede evitar recorrer inútilm<strong>en</strong>te la parte final del archivo si hemos<br />

detectado una clave mayor que la buscada, ya que <strong>en</strong>tonces t<strong>en</strong>dremos la certeza<br />

de que el elem<strong>en</strong>to no está <strong>en</strong> el archivo. La modificación <strong>en</strong> el código es muy<br />

s<strong>en</strong>cilla, puesto que basta con variar la condición de salida del bucle while para<br />

que contemple la ord<strong>en</strong>ación del archivo. El nuevo procedimi<strong>en</strong>to es el sigui<strong>en</strong>te:

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

Saved successfully!

Ooh no, something went wrong!