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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

16.2. Aplicaciones no recursivas de los punteros 345<br />

16.2.1 Asignación de objetos no simples<br />

Esta aplicación adquiere mayor relevancia cuando se consideran registros de<br />

gran tamaño <strong>en</strong> los que el problema es el elevado coste al ser necesaria la copia<br />

de todas sus compon<strong>en</strong>tes. Por ejemplo, <strong>en</strong> la situación<br />

type<br />

tFicha = record<br />

nombre: ...<br />

direccion: ...<br />

...<br />

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

var<br />

pers1, pers2: tFicha;<br />

la asignación pers1:= pers2 es altam<strong>en</strong>te costosa si el tipo tFicha ti<strong>en</strong>e grandes<br />

dim<strong>en</strong>siones.<br />

Una forma de economizar ese gasto consiste <strong>en</strong> usar sólo su posición, haci<strong>en</strong>do<br />

uso de punteros:<br />

var<br />

p1, p2: ^tFicha;<br />

<strong>en</strong> vez de las variables pers1 y pers2. Entonces, la instrucción<br />

p1:= p2<br />

es casi instantánea, por consistir tan sólo <strong>en</strong> la copia de una dirección.<br />

El artificio anterior resulta útil, por ejemplo, cuando hace falta intercambiar<br />

variables de gran tamaño. Si se define el tipo<br />

type<br />

tApFicha = ^tFicha;<br />

el procedimi<strong>en</strong>to sigui<strong>en</strong>te efectúa el intercambio rápidam<strong>en</strong>te, con indep<strong>en</strong>d<strong>en</strong>cia<br />

del tamaño del tipo de datos fichas:<br />

procedure Intercambiar(var p1, p2: tApFicha);<br />

var<br />

aux: tApFicha;<br />

begin<br />

aux:= p1;<br />

p1:= p2;<br />

p2:= aux<br />

<strong>en</strong>d; {Intercambiar}

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

Saved successfully!

Ooh no, something went wrong!