09.05.2013 Views

Programación en Pascal

Programación en Pascal

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.

ya que tanto m como c son campos del registro r.<br />

Las unidades <strong>en</strong> <strong>Pascal</strong> (UNIT)<br />

Una unidad <strong>en</strong> <strong>Pascal</strong> no es más que una librería de funciones y procedimi<strong>en</strong>tos que el usuario<br />

ti<strong>en</strong>e definidos y que utiliza <strong>en</strong> cada programa cuando lo necesite. Por ejemplo, p<strong>en</strong>semos <strong>en</strong><br />

una librería de funciones matemáticas sobre manejo de matrices. Una vez que la operación de<br />

suma de matrices esté definida y funcione perfectam<strong>en</strong>te, bastará con incluir la unidad donde<br />

está escrita y hacer la llamada a la función como si estuviera ubicada <strong>en</strong> el mismo fichero del<br />

programa principal.<br />

Una unidad se d<strong>en</strong>omina unit y posee dos partes. La d<strong>en</strong>ominada INTERFACE donde se<br />

defin<strong>en</strong> los tipos de datos, las constantes necesarias y las cabeceras de los procedimi<strong>en</strong>tos y<br />

funciones. Posteriorm<strong>en</strong>te aparece la palabra reservada IMPLEMENTATION, a partir de donde<br />

se escrib<strong>en</strong> todas las funciones y procedimi<strong>en</strong>tos completos cuyas cabeceras están <strong>en</strong> la zona<br />

interface.<br />

Vamos a escribir una unidad completa con una serie de procedimi<strong>en</strong>tos y funciones válidos <strong>en</strong><br />

nuestra asignatura de geometría computacional. Posee las funciones ya previam<strong>en</strong>te vistas, la<br />

de intersección de dos rectas y dos segm<strong>en</strong>tos. Pero además aparec<strong>en</strong> otras que pued<strong>en</strong> ser<br />

igualem<strong>en</strong>te útiles:<br />

UNIT GEOMLIB;<br />

INTERFACE<br />

CONST x=0; y=1;<br />

infinito=9.9e9;<br />

MAX_PUNTOS_POLIGONO = 100;<br />

TYPE<br />

TipoPunto = array [0..1] of real;<br />

TipoPoligono = array [0..MAX_PUNTOS_POLIGONO-1] of TipoPunto;<br />

TipoRecta = RECORD<br />

m,c:real;<br />

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

TipoSegm<strong>en</strong>to = array [0..1] of TipoPunto;<br />

procedure Intersec_Rectas (r1,r2:TipoRecta; VAR x,y:real);<br />

procedure Segm<strong>en</strong>toARecta (var p1,p2:TipoPunto; var r:TipoRecta);<br />

procedure Intersec_Segm<strong>en</strong>tos (var a,b,c,d:TipoPunto; var xx,yy:Real);<br />

function AreaPoligono2 (var p:TipoPoligono; n:integer): real;<br />

function AreaTriangulo2 (var a,b,c:TipoPunto) : real;<br />

procedure LeerPoligonoTeclado (var p:TipoPoligono; var n:integer);<br />

procedure LeerPoligonoFichero (var f:string; var p:TipoPoligono; var<br />

n:integer);<br />

procedure EscribirPoligonoFichero (var f:string; var p:TipoPoligono;<br />

n:integer);<br />

procedure EscribirPoligonoPantalla (var p:TipoPoligono; n:integer);<br />

IMPLEMENTATION<br />

{(x,y) ser el punto de intersección de las rectas (m1,c1) y (m2,c2)<br />

si son paralelas x e y son igual a infinito}<br />

procedure Intersec_Rectas (r1,r2:TipoRecta; VAR x,y:real);<br />

begin<br />

if (r1.m=infinito) and (r2.m=infinito) {rectas verticales paralelas}<br />

th<strong>en</strong> begin<br />

x:=infinito; y:=infinito;<br />

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

else if r1.m=infinito {la ecuación de la recta es x=c1}<br />

th<strong>en</strong> begin<br />

x:=r1.c; y:=r2.m*x+r2.c;<br />

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

else if r2.m=infinito<br />

10

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

Saved successfully!

Ooh no, something went wrong!