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 433<br />

Program CribaEratost<strong>en</strong>es (input, output);<br />

{PreC.: input = [un <strong>en</strong>tero, >=2]}<br />

type<br />

tConj = Abstracto;<br />

var<br />

cota, e, coef: integer;<br />

conjunto : tConj;<br />

begin<br />

Write(’Cota: ’); ReadLn(cota);<br />

CrearConj(conjunto);<br />

for e:= 2 to cota do<br />

AnnadirElemConj(e, conjunto);<br />

for e:= 2 to Trunc(SqRt(cota)) do<br />

if Pert<strong>en</strong>ece (e, conjunto) th<strong>en</strong> begin<br />

coef:= 2;<br />

repeat<br />

QuitarElemConj(e * coef, conjunto);<br />

coef:= coef + 1<br />

until e * coef > cota<br />

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

EscribirConj(conjunto)<br />

<strong>en</strong>d. {CribaEratost<strong>en</strong>es}<br />

En el ejemplo se puede observar la es<strong>en</strong>cia de la abstracción de datos: el<br />

programador-usuario del tipo abstracto de datos se puede olvidar completam<strong>en</strong>te<br />

de cómo está implem<strong>en</strong>tado o de la repres<strong>en</strong>tación del tipo, y únicam<strong>en</strong>te estará<br />

interesado <strong>en</strong> qué se puede hacer con el tipo de datos tConj que utiliza de una<br />

forma completam<strong>en</strong>te abstracta.<br />

Además, el lector puede observar cómo se llega a una nueva distribución<br />

(mucho más clara) del código del programa: las operaciones sobre el tipo tConj<br />

dejan de formar parte del programa y pasan a incorporarse al código propio del<br />

tipo abstracto.<br />

Las operaciones del tipo tConj escogidas son típicas de muchos tipos abstractos<br />

de datos, y se suel<strong>en</strong> agrupar <strong>en</strong> las sigui<strong>en</strong>tes categorías:<br />

Operaciones de creación: Son aquéllas que permit<strong>en</strong> obt<strong>en</strong>er nuevos objetos<br />

del tipo, como sucede <strong>en</strong> CrearConj. Estas últimas son conocidas también<br />

como operaciones constructoras primitivas. Entre éstas suele incluirse una<br />

operación de lectura de elem<strong>en</strong>tos del tipo abstracto de datos.<br />

Operaciones de consulta: Realizan funciones que, tomando como argum<strong>en</strong>to<br />

un objeto del tipo abstracto, devuelv<strong>en</strong> un valor de otro tipo, como hac<strong>en</strong><br />

Pert<strong>en</strong>ece o EstaVacioConj, por poner un caso. Usualm<strong>en</strong>te implem<strong>en</strong>tan<br />

tareas que se ejecutan con relativa frecu<strong>en</strong>cia. Entre éstas se suele incluir

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

Saved successfully!

Ooh no, something went wrong!