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.

19.2. Un ejemplo completo 435<br />

para llevar a cabo efectivam<strong>en</strong>te la abstracción de datos. A tal fin, Turbo <strong>Pascal</strong><br />

dispone de las unidades (véase el apartado B.11).<br />

De acuerdo con esto, se da a continuación una posible implem<strong>en</strong>tación 4 del<br />

tipo abstracto de datos tConj, a base de listas de <strong>en</strong>teros, ord<strong>en</strong>adas asc<strong>en</strong>d<strong>en</strong>tem<strong>en</strong>te,<br />

<strong>en</strong>lazadas con punteros: 5<br />

unit conjEnt;<br />

{Implem<strong>en</strong>tación mediante listas <strong>en</strong>lazadas, con cabecera,<br />

ord<strong>en</strong>adas asc<strong>en</strong>d<strong>en</strong>tem<strong>en</strong>te y sin repeticiones}<br />

interface<br />

type<br />

tElem = integer;<br />

{Requisitos: definidas las relaciones ‘=’ (equiv.) y<br />

‘>’ (ord<strong>en</strong> total)}<br />

tConj = ^tNodoLista;<br />

tNodoLista = record<br />

info: tElem;<br />

sig: tConj<br />

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

procedure CrearConj(var conj: tConj);<br />

{Efecto: conj:= ∅}<br />

procedure DestruirConj(var conj: tConj);<br />

{Cuidado: se perderá toda su información}<br />

{Efecto: conj:= ? (ni siquiera queda<br />

vacío: comportami<strong>en</strong>to impredecible)}<br />

procedure AnnadirElemConj (elem: tElem; var conj: tConj);<br />

{Efecto: conj:= conj ∪ [elem]}<br />

procedure QuitarElemConj (elem: tElem; var conj: tConj);<br />

{Efecto: conj:= conj \ [elem]}<br />

function Pert<strong>en</strong>ece (elem: tElem; conj: tConj): boolean;<br />

{Dev. True (si elem ∈ conj) o False (<strong>en</strong> otro caso)}<br />

4 Se ha optado por no detallar todas las etapas del diseño desc<strong>en</strong>d<strong>en</strong>te de las operaciones de los<br />

tipos abstractos, por ser éstas s<strong>en</strong>cillas y para no ext<strong>en</strong>der demasiado el texto.<br />

Por otra parte, es conv<strong>en</strong>i<strong>en</strong>te que los id<strong>en</strong>tificadores de unidades coincidan con el nombre del<br />

archivo donde se almac<strong>en</strong>an una vez compiladas (de ahí la elección de id<strong>en</strong>tificadores de, a lo<br />

sumo, ocho caracteres).<br />

5 Obsérvese que se ha incluido una operación destructora, necesaria <strong>en</strong> la práctica, debido a<br />

que el manejo de listas <strong>en</strong>lazadas ocasiona un gasto de memoria y ésta debe liberarse cuando un<br />

conjunto deje de ser necesario.

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

Saved successfully!

Ooh no, something went wrong!