Este algoritmo consiste en analizar

51 

Loading.... (view fulltext now)

Loading....

Loading....

Loading....

Loading....

Texto completo

(1)

Y .

(2)
(3)

1 . O B J E T I V O S

L o s o b e t i v o s p e r s e g u i d o s e n

este

p r o y e c t o de u n t r i m e s t r e son

el

c r e a r g r h f i c a s , a l m a c e n a r i a s e n d i s c o y r e c u p e r a r l a s d e l mismo de l a manera

mhs

e f i c i e n t e t a n t o e n t i e m p o como en e s p a c i o , p a r a

lo

c u a l s e compararAn t r e s mhtodos de almacenamiento

r e c u p e r a c i b n de g r A f i c a s .

2 . D E S A R R O L L O T E O R I C O 2 I 1. I M T R O D U C C I O N

'Tal como es de suma i m p o r t a n c i a

el

a l m a c e n a m i e n t o r-ecupet-aci.dr-1 de

te>:tos

e f i c i e n t e m e n t e , t a m b i h n

lo

es

a1macenami.ento y r e c u p e r a c i h n de g r h f i c o s . E s e v i d e n t e

i m p o r t a n c i a de

los

g r h f i c o s e n muchos campos de a p l i c a c i o n . Tenemos a p l i c a c i o n e s e n 1.a e l e c t r d n i c a , e n

el

dise'rio de c i r c u i t o s e l . & c t r i c o s . En

las

d i v e r s a s ramas de l a i. n g e n i e r i a s o n v i t a l e s

los

p l a n o s y d i s e ñ o s a u x i l i a d o s p o r c o m p u t a d o r a . En l a misma c o m p u t a c i d n t e n e m o s q u e r e a l i z a r g r a f i c a s , como

los

d i a g r a m a s de

f l u j o d e d a t o s y

los

d i a g r a m a s d e e n t i d a d e s y a s o c i a c i o n e s . En 1.a s i m u l a c i h n de d i v e r s o s p r o c e s a s

los

g r a f i c o s s o n v i t a l e s . Y e n t o d o s

est,os

c a s o s n e c e s i t a m o s a l m a c e n a r y r e c u p e r a r - g r - h f i c a s .

l o d o e s t o m u e s t r a

la

i m p o r t a n c i a

del

almacenami.ento

y

1.a r e c u p e r a c i h n e f i c i e n t e de g r A f i c a s . L o s mdtodos que usaremos

p a r a

ello

s o n : C o m p r e s i d n r e n g l o n e s , d e m e d i a n t e A r b o l e s

c u a t e r n a r i o s y m e d i a n t e a l m a c e n a r y r e c u p e r a r

el

mapeo en m e m o r i a c o r r e p o n d i e n t e a l g r A f i c o dado.

A c o n t i n u a c i b n damos u n a b r e v e d e s c r i p c i b n de cada uno de

e s t o s metodos.

2 " 2

A L G O R I T M O DE C O M P R E S I O N DE RENGLONES

Este

a l g o r i t m o c o n s i s t e e n a n a l i z a r

el

g r a f i c o r e n g l d n por-

r e n g l d n .

Se

c u e n t a

el

ndmero de p u n t o s c o n s e c u t , i v o s d e u n mismo

c o l o r e n u n r e n g l d n y se almacena. Despues s e cuent.an

los

p u n t o s d e u n d i f e r e n t e c o l o r q u e s i g u e n a

los

a n t e r i o r e s

si

es que

los

hay y se v u e l v e n a a l m a c e n a r e s t o s d a t o s . E s t e

roces so

s e r e D i t e h a s t a a b a r c a r

misma

manera

d o s r e n g l o n e s

t o d o

el

r e n g l h n . P o s t e r i o r m e n t e

se

a n a l i z a n dk l a

los

demas r e n g l o n e s . I l u s t r a r e m o s e l a n A l i s i s de en l a f i g u r a 1.

bbbbnnnbbbbbn nnnnnnbbbbbbn R e n g l h n

1:

4 b l a n c o

3 n e g r o 5 b l a n c o 1 n e g r o R e n g l b n 2: 6 n e g r o G b l a n c o

1

n e g r o

F i g u r a

1:

A n A l i s i s de dos r e n g l o n e s .

c)

(4)

Se u s a r & u n a r c h i v o d e b y t e s p a r a a l m a c e n a r l a i n f o r m a c i . b n ,

Donde e l p r i m e r b y t e t i e n e e n s u p a r t e a l t a e l c o l o r y en su p a r t e b a j a e l ndmero de p u n t o s d e e s e c o l o r s i e s t e e s menor o

i g u a l que 1 5 (VQase l a f i g u r a

2).

S i e l niimero de p u n t o s d e u n

t- I

I COLOR

1

NUMERO DE

1

I

I

PUNTOS I

I I

+""""-"+"""""-

+

F i g u r a 2 : E s t r u c t u r a d e l p r i m e r b y t e de a l m a c e n a m i e n t o . mismo c o l o r e s mayor que 1 5 , l a p a r t e b a j a d e e s e b y t e s e r 6 c e r o y s e u t i l i z a r 6 e l s i g u i e n t e b y t e p a r a a l m a c e n a r e l ndmero de

p u n t o s menos 1.5.. S i e s t e ndmero r e s t a n t e e s mayor que 255, e s t , e b y t e t e n d r h e l v a l o r de c e r o y s e u s a r 6 e l s i g u i e n t e b y t e p a r a

a l m a c e n a r e l ndmero de p u n t a s r e s t a n t e menos 255.. E s t e p r o c e s o I l u s t r a r e m o s e s t o e n

la

f i g u r a

3 ,

s u p o n i e n d o q u e e l n e g r o s e c o d i f i c a como c e r o y

el

b l a n c o s e c o d i f i c a como 1 5 . La l o n g i t u d de l i n e a e s 720.

e r e p i t e h a s t a a b a r c a r e l t o t a l de p u n t o s de u n mismo c o l o r .

N U M EP.0 R E COLOR PUNTOS

1 4 b l a n c o

5

O

6

56

n e g r o

b l a n c o

FORMA DE E Q U I V A L E N C I A

ALMAENAMIENTO P A R A

surwm

+"-+"-+

I

1.51

141

14

+"-+"-

+

F i g u r a 3 : A l m a c e n a m i e n t o e n b y t e s de una l i n e a .

P a r a c o n o c e r e l nltrmero d e p u n t o s de u n mi.smo c o l o r de e s t a s e c u e n c i a de b y t e s , c u a n d o s e r e c u p e r e l a g r 6 f i c a , b a s t a r 6 n o t a r

(5)

p a r t e s de l a imagen dada, como s e v e e n l a f i g u r a 4 y r e l a c i o n a r

e s t a s d i v i s i o n e s de

l a

imagen con l o s nodos de un A r b 0 1 c u a t e r n a r i o , donde cada d i v i s i d n c o r r e s p o n d e a un nodo d e l A r b o l . L o s n o d o s s e r a n d e d o s ti p o s : De t , i p o n o d o p r o p i a m e n t e d i c h o , y de t i p o h o j a . P a r a e v i t a r c o n f u s i o n e s l l a m a r e m o s a ambos nodos N o d o A r b o l y d i r e m o s q u e & s t e e s de t i p o nodo o de t i p o h o j a . S u e s t r u c t u r a e s como s e m u e s t r a e n l a f i g u r a 5 .

F i g u r a 4 : D i v i s i b n e n c u a d r a n t e s d e u n a g r a f i c a .

F i g u r a 5 : Ti.pos de NodoArbol.

S i t o d o s

los

p u n t o s d e l c u a d r a n t e I s o n d e l mismo c o l o r , e n t o n c e s B s t o s se r e l a c i o n a n c o n u n N o d o A r b o J d e ti . p o h o j a c u y o

c o l o r e s e l mismo que e l de e s t e c u a d r a n t e ; s i no e s a s i se d i v i d e nuevamente e s t e c u a d r a n t e e n c u a t r o p a r t e s corno s e m u e s t r a en l a f i g u r a 4 y s e r e l a c i o n a e l c u a d r a n t e

X

c o n u n N o d o A r b o l de t i p o nodo, donde cada h i j o c o r r e s p o n d e r 3 c a n c a d a n u e v a d i v i s i b n

d e l c u a d r a n t e I . E s t e p r - o c e d i m i e n t o s e r e p i t e p a r a c a d a n u e v a

d i v i s i b n d e l c u a d r a n t e

X

a s i como p a r a

los

c u a d r a n t e s

I T ,

XI1 y

I V . Como s e v e c l a r a m e n t e e s t e e s u n p r o c e s o r e c u r s i v o . P a r a

que quede

m3s

c l a r o & s t e m o s t r a r e m o s u n a f i g u r a muy s e n c i l l a y s u Q r b o l c o r r e s p o n d i e n t e . L o s

NodoArbol

c o n u n p u n t o s o n d e 1 t i p o nodo y

los

que t i e n e n

l a

i n i c i a l d e l c o l o r son de t i p o h o j a , Note que cuando l a d i v i s i b n e n c u a d r a n t e s no e s e x a c t a , l a s d i v i s i o n e s que no c o n t i e n e n p u n t o s s e r e l a c i o n a n c o n a p u n t a d o r e s

n u l o s ,

O b v i a m e n t e e s u n p r o b l e m a s a b e r cuQ1 e s e l c o l o r de u n c u a d r a n t e I E s t a r e m o s s e g u r o s de su c o l o r c u a n d o e s t e c u a d r a n t e e s u n p u n t o . P o r l o t a n t o l a s d i v i s i o n e s e n c u a d r a n t e s ll e g a r z i n h a s t a e s t e e x t r e m o c r e a n d o s u s c o r r e s p o n d i e n t e s N o d o A r b o l de t i p o h o , j a o a p u n t a d o r e s n u l o s e n c a s a d e q u e e s t a s d i v i s i o n e s no sean e x a c t . a s M

Si

los

c u a t r o p u n t o s s o n d e l mismo c o l o r - o tenemos

(6)

apuntadores nulos entonces

se reducj,,rA

el

A r b o l

reduciendo l.as

c o r r e s p o n d i e n t e s h o j a s

en una

sola

y

ocupando & S t a e l lugar

que

ocupaba

e l padre de e s t a s

h o j a s .

C l a r a m e n t e

e l

c o l o r

de e s t a

h o j a

s e r &

e l

que

t e n i a n

las

h o j a s

e l i m i n a d a s .

Despues de

efectuada esta reduccibn del Arbol se

verA

la

p o s i b i l i d a d de

e f e c t u a r

m A s

reducciones.

De

e s t a manera s e

h a r a n

corresponder

h o j a s con cuadrantes de

m6s

de

u n punto.

+-+

+-+

l b ; I b t

+-+

+-+

+-+

I n :

+-+

+-+

I I 1 - 1

I"+

r a i z

+-+

I I 1 - 1 +-4"

+-+

I b l

+-4

+-+

l b l 4"-+

Figura

4 : G r - A f

i c o

y

s u

A r b o l

correspondiente.

E l

procedimiento

d e

reducci6n garantiza

que

e l at-bol de l a

Mostramos como funciona el. algoritmo

en

l a

reduccibn

d e l .

f i g u r a

6

quedara como

s e muestra

alli.

cuadrante

I d e l

g r a f i c o que aparece

en

l a

f i g u r a

6 .

+ - 4 $ 1

1 - 1

padre

+-+

+"-

+"-+

l b l b f

+"-+"-

+

+"-

+-"+

+-+

+-+

l b l

I b l

+-+ +-+

I I

I

Reduccihn

I

I

v

4"-+

I I

1 - 1

pad re

+-+

+-+

Ibl

+

-

+

(7)

Para e l almacenamiento del Arbol

de l a f i g u r a

6

s e harA

u n

r.ecorrido del Brbol codificando cada

NodoArbol de

l a

siguiente

manera:

Valores del

O a l 1 5 :

NodoArbol de

t i p o

hoja.

E l

v a l o r

i.ndica e l c o l o r c o r r e s p o n d i e n t e .

1 6 :

NodoArbol de

t i p o nodo.

17:

Apuntador nulo.

El.

recorrido del Arbol

de l a f i g u r a

6

v i s i t a n d o p r i m e r o e l

WodoArbol

y

despuds sus

hijos

en orden progresivo ("orden

p r e v i o " ) s e r 5 e l s i g u i e n t e :

1 6

1 5 1 5 1 6 O

15

17 17 1 5

nodo

blanco

blanco

nodo

negro

blanco

n u

l o

nulo

blanco

Para recuperar

las

gt-bfi.cac, s e r e c o n s t r u y e e l

At-bol de e s t e

a r c h i v o de b y t e s

y

p o s t e r i o r m e n t e s e r e c o r r e

e l B r b o l , donde

la

v i s i t a

d e

cada hoja equivale

a g r a f i c a r

s u

cuadrante

correspondiente.

2 . 4 ALMACENAMIENTO Y RECUPERACION D E L MAPEO EN MEMORIA D E LA

P a r a c a d a g r a f i c a s e

puede obtener

u n correspondiente mapeo

en memoria.

Toda e s t a

s e r i e

c o n s e c u t i v a

de b y t e s

s e

puede

almacenar

en d i s c o usando los procedimientos GetImase

y

Blockwrite

d e

Turbo P a s c a l .

TarnbiBn s e puede r e c u p e r a r e l a r c h i v o

en una regidn de l a

memoria para despues hacer

s u correspondiente grAfica

usando

l o s

procedimientos BlockRead

y

PutImaqe de Turbo

P a s c a l ,

Como

s e

v e , pues, e s t e mdtoda

sdlo

aprovecha l a s f a c i l i d a d e s

que nos

proporciona Turbo P a s c a l ,

l o

que hace de e s t e a l g o r i t m o

uno

muy

s e n c i l l o .

(8)

3.

M E T O D O L O G I A S E G U I D A

consitid bAsicamente

La

metodologia seguida para

en c u a t r o p a r t e s , l a s c u a l e s f u e r o n :

e l diseño

de

l o s programas

1 .

Diagramas de

f l u j o de d a t o s .

2 .

Diagramas de

e s t r u c t u r a .

3 .

Pseudoc6digo.

4 .

C o d i f i c a c i o n en Turbo P a s c a l .

Para l o s dos primeros algotitmos descritos

en

l a secc:i.&n

a n t e r i o r

se muestran tanto

l o s diagramas de f l u j o de

d a t o s como

l o s

de

e s t r u c t u r a ,

E n

cuanto a l pseudocbdigo, Bste

e s

muy

s i m i l a r

a

l a c o d i f i c a c i b n en Turbo P a s c a l , p o r lo

cual

se omite

s u presentacidn.

3 . 1 D I A G R A M A S D E FLUJO D E D A T O S

F i g .

G R A F T C f i

F i g M

U S U A R I O

PANTALLA

Color

Color Contador

CUENTA ALMACENA

PUNTOS P A N T A L L A

Nombre

Numb

re

Contador

U S U A R I O

Color

ALMACENA B Y T E

Nombre

Octeto

E S C R I B E

Octeto

NOMBRE

P A N T k L L A

Figura

9 :

Diagrama de

f l u j o de d a t o s

d e l

procedimi.ento

RecuDeraPantalLa del algoritmo

de compresidn

(9)

F i g ,

G R A F I C A

F i g I

U S U A R I O

P A N T A L L A

C o l o r

CREA A P B O L

P a d r e H i j o

REDUCE A R B O L

ALMACENA P A N T A L L A

N o m b r e

USUAR.10

N o d o

A R B O L

E L I M I N A &P.BOL

N o m b r e

RECORRE ALMACENA

Nornb

re

O c t e t o

E S C R I B E

0ct.e

t o

NOMBRE

F i g u r a

10:

D i a g r a m a de f l u j o de d a t o s d e l p r o c e d i m i e n t o A l m a c e n a P a n t a l l a d e l a l g o r i t m o que usa

A r b o l e s c u a t e r n a r i o s .

NOMBRE

O c t e t o

N o m b r a R E C U P E R A O c t e t o N o m b r e L E E RECONSTR,U- P A N T A L L A A R C H I V O

Y E A R B O L

U S U A R I O

N o d o

E L I M I N A A R B O L A R B O L

B a r r a RECORRE

C o l o r A R B O L

P A N T A L L A

F i g u r a

11:

D i a g r a m a de f l u j o de d a t o s d e l p r o c e d i m i e n t o R e c u g e r a P a n t a l l a d e l a l g o r i t m o que u s a

A r b o l e s c u a t e r n a r i o s .

8

(10)

J , 2

D I A G R A M A S D E ESTRUCTURA

C O M I E N Z A

PRINCIPAL..

MENU PROC. S A L I D A

G R A F I C A ALMACENA RECUPERA BORRA

P A N T A L L A PANTALLA PANTALLA

a a b C d e a

f

CUENTA A L M A C E N A L E E PON PLJNTOS B Y T E PUNTOS

E S C P I B E

D e s c r i p c i o n e s :

a : C o n t ,

x ,

y , C o l a r

b : Nombre, c a n t , C o l o r , i n d , C o n t T o t c : i n d

d: Nombre, i n d , O c t e t o e : in d , O c t e t o

f :

x ,

y

g : Nombre, O c t e t o , in d , C o n t T o t

F i g u r a 12: D i a g r a m a d e e s t r u c t u r a p a r a e l a l g o r i t m o

de

c o m p r e s i d n d e r e n g l o n e s .

(11)

C O M I E N Z A

P R , I N C I P A L

M E

N

/I

G R A F I C A ALMACENA P A N T A L L A

a b c c

C R E A R.ECORRE

A P S

O

I_ A L M A C E N A Padre

H i j o O c t e t o

REDUCE E S C R I B E

L

E L I M I N A

ARBOL

P R O C . S A L I D A

P.ECUPEP.A BORRA

P A N T A L L A P A N T k L L A

c c d

R.ECQNSIR.UYE R E C C) R R F' ARBOL A R R O L

i nd

i

nd o c t e t o

L E E

D e s c r i p c i o n e s :

a : P a d r e , H i j o , X I . , Y 1 , X 2 , Y 2

b : Padre, H i j o

c:

Nodo

d : Nodo, X 1 , Y 1 , X 2 , Y 2

F i g u r a 1 3 : D i a g r a m a d e e s t r u c t u r a p a r a e l a l g o r i t m o que usa A r b o l e s c u a t e r n a r i o s .

L a s l e t r a s de

l a

i z q u i e r d a de l a s f l e c h a s i n d i c a n

los

d a t o s que se pasan a

los

p r o c e d i m i e n t o s , y l a s l e t r a s de l a d e r e c h a i n d i c a n

los

d a t o s que r e g r e s a n

los

p r o c e d i m i e n t o s .

3 . 3 C O D I F I C A C I O N EN TURBO P A S C A L

P r e s e n t a m o s a q u i l a c o d i f i c a c i d n p a r a

los

t r e s metodos de a l m a c e n a m i e n t o y r e c u p e r a c i b n de g r d f i c a s . La p a r t e p a r a g r a f i c a c i d n e s i g u a l e n

los

t r e s p r o g r a m a s ,

p o r

lo

t a n t o s e c r e B u n a u n i d a d de Turbo Pascal que se i n c l u y e e n c a d a p r o g r a m a .

E s t a u n i d a d l l a m a d a G r - b f i c a s e s l a p r i m e r a que mostramos, para

(12)

c

. . .

**

U N I V E R S I D A D AUTONOMA M E T R , O P Q L I T A N A

**

LJNIDAD T Z T A P A L A P A

**

PROYECTO P.EALIZADO P O R :

**

JOSE ALFRED0 M O T T E GALICIA

**

ASESOR DE PROYECTO:

**

MIGUEL ANGEL GUEMAN LOPEZ

. . .

3

U N I T g r a f i c a s ; INTERFCSCE

**

**

**

**

**

**

**

USES

Dos,

C r t ,

Graph; C O N S T

B E L L

=

8 0 0 7 ;

LONGBUF

=

4096; RS

=

8008;

CR

=

# 0 1 3 ;

ESC

=

8027; UA

=

8072;

Dk

=

# 0 8 0 ;

LA 2 8075; R A

=

8077;

{ Nombres de

los

d i v e r s o s d i s p o s i t i v o s s o p o r t a d o s

3

D r i v e r N a m e s : a r - r a y r 0 . - 1 0 1

o f

s t r i n g r 8 1

=

( ' D e t e c t ' , ' C G A ' , ' M C G A ' , ' E G A ' , 'EGk64', 'EGkMono',

' R E S E R V E D ' , 'HercMono', 'ATT400', ' V G A ' ' ' P C 3 2 7 0 ' ) ;

{ L o s c i n c o t i p o s de l e t r a d i s p o n i b l e s }

F o n t s : a r r a y [ 0 . . 4 1

o f

s t r i . n g C 1 3 3

=

( ' D e f a u l t F o n t ' , ' T r i p l e x F o n t ' , ' S m a l l F o n t ' , ' S a n s S e r i f F o n t ' , ' G o t h i c F o n l

{ L o s c i n c o e s t i l o s de l i n e a s o p o r t a d o s }

L i n e S t y l e s 2 a r r a y [ 0 . . 4 ]

o f

s t r i n g 1 9 1

=

( ' S o l i d L n ' , ' D o t t e d L n ' , ' C e n t e r - L n ' , ' D a s h e d L n ' , ' U s e r B i t L n ' ) ; { Los doce e s t i l o s de l l e n a d o s o p o r t a d o s }

F i l l s t y l e s : a r r a y [ O . . l l ]

o f

s t r i n g f l 4 1

=

( ' E m p t y F i X l ' , ' S o l i d F i l l ' , ' L i n e F i l l ' ,

'LtSlashFill',

'SlashFill',

' B k S l a s h F i l l ' , ' L t B k S l a s h F i l l ' , ' W a t c h F i l l ' , ' X H a t c h F i l l ' ,

(13)

TextDirect.

:

a r r a y C 0 . . 2 ]

o f

string[8] ('Hat-izDir', 'Verti3it");

{

Las j u s t i f i c a c i o n e s de t e x t o h o r i z o n t a l d i s p o n i b l e s

3

MorizJust

:

a r r a y [ 0 . . 2 ] o f st r i n g [ I O ]

=

( ' L e f t T e x t ' ,

' C e n t e r T e x t ' ,

' R i g h t T e x t ' ) ;

{

Las j u s t i f i c a c i o n e s

de

t e x t o v e r t i c a l d i s p o n i b l e s

3

V e r t J u s t

:

a r r a y r 0 .

"21

o f s t r i n g [ l Q l

x

('BottomText', 'CenterText', 'TopText');

VAR

GraphDriver

:

i n t e g e r ;

{

Almacena e l numero de d i s p o s i t i v o de g r a f i c a s

1

Gt-aphMode

:

i n t e g e r ;

{

Almacena e l modo de g r a f i c a s p a r a

e l d i s p o s i t i v o

3

MaxX, MaxY:

word;

{

La maxima r e s o l u s i o n de l a p a n t a l l a

}

TopeX, TopeY :

l o n g i n t i { Maxi.mos v a l o r e s de

X y Y

cuando

se usa una ventar

l i m i t e

:

l o n g i n t ;

{ (TopeX

+

1

)

*

(

TopeY

f 1 )

2

MaxColor: word;

{ E l

maximo v a l o r

d e

c o l o r d i s p o n i b l e

}

c o l a r

:

word;

{

I n d i c a e l c o l o r a c t u a l p a r a g r a f i c a c i o n

}

Error-Code

:

i n t e g e r ;

C

Reporta cuaquier condicion

d e

e r r o r

}

OldExitProc

:

p o i n t e r ;

{

S a l v a l a d i r e c c i a n d e l p r o c e d i m i e n t o

de s a l i d a

2

b u f :

a r r a y

[ I . "LONGBUF]

o f b y t e ;

{

Para l.ect,ura

y

e s c r i t . u r a

de a r c h i v o s

:

p a n t a l l a

:

p o i n t e r ;

{

Apunta a l primer byte

donde

s e almacena l a p a n t a l l a

l o n g

:

word;

{

Longitud

d e l

bloque de memoria donde

s e almacena l a p a n t a l :

horal minuto1 segundo1

'I

centesimal

{

Para medir

e l tiempo

d e }

hora2, minuto2, segundo2, centesi.ma2

:

word;

{

e j e c u c i o n

3

p

rocedu re

P

rocSa1;

procedure inici.a;

procedure Preparapausa;

procedure Terminapausa;

procedure

D i b u

jaMar-gen;

procedure

VentanaPrincipal(encabezad0

:

s t r i . n g ) ;

procedure LineaMensaje(Msg

:

s t r i n g ) ;

f u n c t i o n

I n t 2 S t t - ( L :

LongInt)

:

s t r i n g ;

procedure Pausa;

procedure GetDriverAndMode(var DriveStr-,

ModeStr

:

s t r i n g ) ;

procedure ReportaEstatus;

p r o c e d u r e g r a f i c a ;

procedure CalculaTiempo;

procedure reporte;

IMPLEMENTATION

{$F+] {

Las rutinas del usuario deben ser del

modelo

de

llamada lejana

1

procedure FrocSal;

begin

+;

R.estituye

la

direc:cion del procedimiemto

de

s a l i d a

1

ExitProc

: =

OldExitProc;

CloseGraph;

end;

{

ProcSal

3.

C$F-}

(14)

beg (3

E

G I i n

1 d E x i t P r o c

: =

E x i t P r o c ; { S a l v a

el

p r o c e d i m i e n t o de s a l i d a p r e v i a }

x i t P r o c

: =

@ P r o c S a l ; { I n s e r t a en cambio

n u e s t r o

p r - o c e d i m i e n t o de s a l i d a r a p h D r i v e r

: =

D e t e c t ; { T r a t a de a u t o d e t e c t a r l a t a r j e t a de g r a f i c o s }

r~itGr~aph(GraphDriver,GraphMode,'y);

E r r o r C o d e

: =

G r a p h R e s u l t ;

i , f E r r o r C o d e

< >

gr-01.c t h e n b e g i n

w r i t e l n ( ' E r r o r e n g r a f i c a s :

',GraphErrorMsg(ErrorCode));

Halt(3.1;

end;

MaxColor

: =

G e t M a x c o l o r ;

color

:

=

M a x C o l o r ; MaxX :

=

GetMaxX ; TopeX

: =

MaxX; MaxY

:r=

GetMaxY; TopeY

: =

MaxY;

l i m i t e

: =

( TopeX

+

3. ) x ( TopeY -t 1 ) ; end; { i n i c i a }

p r o c e d u r e P r e p a r a P a u s a ;

{ Almacena l a imagen de l a p a n t a l l a p a r a d e s p u e s u s a r

el

modo de

t e x t o

1

b e g i n

l o n g

: =

ImageSize(0,

O , TopeX, TopeY); G e t M e m ( p a n t a l l a , l o n g ) ;

G e t I m a g e ( 0 , O , Tope%, TopeY, p a n t a l l a ' " ) ; R e s t o r e C r t m o d e ;

end; { PreparaPausa }

p r o c e d u r e T e r m i n a p a u s a ;

{ Recupera

la

imagen de l a p a n t a l l a que h a b i a a n t e s de u s a r

el

modo de t e x t c

b e g i n

y v u e l v e a l modo de g r a f i c a s }

SetGraphMode(GetGraphMadej;

S e t V i e w P o r t ( 1 , T e x t H e i g h t ( ' M ' ) + 5 , MaxX-1,

MaxY-(TextHeight('M')+Sj,

C l i p O r P u t I m a g e ( 0 ,

O

,

p a n t a l l a - , N o r m a l p u t ) ;

F r e e M e r n ( p a n t a l l a , l o n g ) ; end; { Terminapausa }

p r o c e d u r e D i b u j a M a r g e n ;

{ D i b u j a u n m a r g e n a l r e d e d o r de

la

v e n t a n a a c t u a l

11

v a

r

begi

n

V i e w P o r t : V i e w P a r t T y p e ; S e t C a l o r ( M a x C o 1 o r ) ;

S e t L i n e S t y l e ( S o l i d L . n , O , NormWj.dth); G e t V i e w S e t t i n g s ( V i e w P o r t ) ;

w i t h V i e w p o r t da

end; {

DibujaMargen

}

(15)

p r o c e d u r e V e n t a n a P r i n c i . p a l ( e n c a b e z a d o : s t r i n g ) ;

{ Hace l a v e n t a n a p r i n c i p a l p a r a g r a f i c a c i o n }

v a r

b e g i n

a l t u r a : word;

{ T e x t o f u e n t e p o r o m i s i o n }

S e t T e x t S t y l e ( D e f a u l t F a n t ,

H o r - i ~ D i r ~

1);

{ J u s t i f i c a c i o n de t e x t o a l c e n t r o }

SetTextJustify(CenterText,

T o p T e x t ) ;

{ Maxima v e n t a n a p o s i b l e

S e t V i e w P o r t ( O ,

O ,

MaxX, MaxY, C l i p O n ) ;

{ D i b u j a

el

r e c t a n g u l o p a r a m e n s a j e s }

R e c t a n g l e ( 0 , MaxY

-

( T e x t H e i g h t ( ’ M ’ )

+

4 ) , MaxX, MaxY);

{ B o r r a r

el

encabezado a n t e r i o r }

S e t F i l l S t y l e ( E m p t y F i 1 1 ,

O);

E a r ( O , O , MaxX, T e x t H e i g h t ( ’ M ’ )

+

1 ) ;

S e t C o l o r ( M a x C o 1 o r ) ;

OutTextXY(MaxX d i v 2, 2 , e n c a b e z a d o ) ;

{ F i j a

la

v e n t a n a p r i n c i p a l

1

a l t u r a

: =

T e x t H e i g h t ( ’ M ’ ) ;

S e t V i e w P o r t ( 0 , a l t u r a

+

4 , MaxX, MaztY

-

( a l t u r a .t. 4 ) , C l i p O n ) ; D i b u j a M a r g e n ;

j.1 Mueve

los

l a d o s e n 1 p i x e l de t a l modo que

el

margen no

este

e n l a v e n t ,

S e t V i e w P o r t ( 1 , a l t u r a -t- S , MaxX

-

1, MaxY

-

( a l t u r a

+

5 1 , C l i p C t n ) ;

{ A j u s t a m o s

los

t o p e s de X y Y a 1.a n u e v a v e n t a n a }

TopeX

: =

MaxX

-

2 ;

TopeY

: =

MaxY

-

2

*

( a l t u r a -t- S ) ;

l i m i t e

: =

( TopeX

+

1

)

*

( TopeY

+

1

) ;

e n d ; { V e n t a n a p r i n c i p a l }

p r o c e d u r e L i n e a M e n s a j e ( M s g : s t . r i n g ) ;

{ D e s p l e g a u n a l i n e a de mensaje en

la

p a r t e i n f e r i o r de l a p a n t a l l a }

b e g i n

S e t V i e w P o r t ( O , O , Ma:xX, MaxY, C l i p O n ) ; S e t C o l o r ( M a x C o 1 o r ) ;

S e t T e x t S t y l e ( D e f a u l t F o n t , H o r i z D i r ,

1);

S e t T e x t J u s t i f y ( C e n t e r T e ? : t , T o p T e x t ) ; S e t L i n e S t y l e ( S o l i d L n ,

O ,

N o r m w i d t h ) ; S

[

,

B o r r a

la

l i n e a de m e n s a j e a n t e r i o r - } S e t F i l l S t y l e ( E m p t y F i l 1 , O ) ;

B a r ( 1 , MaxY

-

( T e x t H e i g h t ( ’ M ’ j -t.

3 ) ,

MaxX

-

1, MaxY -.

1);

OutTextXY(MaxX d i v 2 , MaxY

-

( T e x t H e i g h t ( ’ M ’ )

+

21,

Msg);

{ F i j a nuevamente

la

v e n t a n a p r i . n c i p a . 1 }

S e t V i e w P o r t ( 1 , T e x t H e i g h t ( ’ M ’ ) + S , MaxX-1, M a x Y - ( T e x t H e i g h t ( ’ M ’ j t S )

,

C l i p o r end; { L i n e a M e n s a j e

1

. f u n c t i o n I n t Z S t r ( L : L o n g l n t ) : s t r i n g ;

{ C o n v i e r t e u n e n t e r a

en

u n s t r i n g p a r a

ser

u s a d o p o r O u t T e x t y Out.TextXY v a r

b e g i n

(16)

I n t . 2 S t r

: =

S ; end; { I n t 2 S t r

3

p r o c e d u r e P a u s a ;

{ Pausa p a r a q u e

el

u s u a r i o a b o r t e

el

p r o g r a m a o c o n t i n u e ]

v a r

b e g i n

Ch : c h a r ;

L i n e a M e n s a j e ( ’ O p r i r n a ESC p a r a t e r m i n a r u o t r a t e c l a p a r a c o n t i n u a r ’ ) ;

r e p e a t u n t i l . KeyPr-essed; Ch

: =

R.eadKey;

i f Ch

=

Esc t h e n

{ T e r m i n a

el

p r o g r a m a

1

H a l t ( 0 )

i:

B o r r a

l a

p a n t a l l a

y

c o n t i n u a C l e a r D e v i c e ;

else

end; { Pausa }

p r o c e d u r e G e t D r i v e r A n d M o d e ( v a r D r i v e S t r , M o d e S t r : s t r i n g ) ;

{ R e g r e s a

los

s t r i n g s q u e d e s c r i b e n

el

d i s p o s i t i v o

y

el

modo de

yr-afj-cas

a c t u a l e s p a r a d e s p l e g a r

el

r e p o r t e d e l e s t a t u s b e g i n

D r i v e S t r :

=

D r i v e r N a m e s [ G r a p h D r i v e r ] ; GraphMode

: =

GetGraphMode;

c a s e G r a p h D r i v e r

o f

CGA : c a s e GraphMode c8.F

C G A C O 2 ModeStr :

=

C G A C O ’ ;

C G A C 1 : ModeStr

: =

’ C G A C 1 ’ ; C G A C 2 : ModeStr

: =

’ C G A C Z ’ ; CGAC5 : ModeStr

: =

’CGAC5’; C G A H i : ModeStr

: =

’ C G A H i ’ ; end; { c a s e }

r m x

:: c a s e GraphMode

o f

M C G A C Q : ModeStr

:r:

’ M C G A C O ’ ; M C G k C l : ModeStr

: =

’ M C G A C I ’ ; M C G A C 2 : Modest t* :

=

’MCGAC2‘ ;

M C G A C 3 : ModeStr :

MCGAC3’ ; MCGAMed : I*i~c=leSt t. : :

MCGAMed ;

M C G A I H i : M o d e f j t r

: =

’ M C G A H i ’ ; end; { case

1

EGG : c a s e GraphMode o f

EGALo : ModeStr

: =

’ E G A L a ’ ; E G A H i : ModeStr

: =

’ E G A H i ’ ; end ;

E G k 6 4 : c a s e GraphMode o f

EGA64Lo

ModeStr

: =

’ E G A 6 4 L o ’ ; EGA64Hi : ModeStr

: =

’EGA64Hi’; end; { c a s e }

(17)

ATT40OCO

:

ModeStr

: =

'ATT4OOCO';

ATT4OOCl

:

ModeStr

: =

'ATT400Cl';

ATT400C2

:

ModeStr

:=.

'ATT400C2';

ATT400CJ

:

ModeStr

: =

' A T T 4 O O C 3 ' ;

ATT400Med

:

ModeStr-

: =

'ATT40OMed';

ATTrlOQHi

:

ModeStr

: =

'ATT4OOHi';

end;

C

case

}

VGA :

case GraphMode of

VGALo

:

ModeStr

: =

'VGALo';

VGAMed

:

ModeStr

::

=

'VGkMed'

;

VGAHi

:

ModeStr

: =

'VGAWi';

end;

{

case

}

end; {

case

}

end;

{

GetDriverkndMode

71

procedure ReportaEstatus;

{

Despliega el

e s t a t u s

de

todas las funciones despues de InitGraph

1

cons

t

va

r

x

=

10;

ViewInfo

::

ViewPortType;

{

Parametro para i n q u i r i r procedimientos

}

LineInfo

:

LineSettingsType;

FillInfa

:

FillSettingsType;

TextInfo

:

TextSettingsType;

Palette

:

PaletteType;

DriverStr

: s t r i n g ; {

Para el dispositivo

y

el

modo

3.

Modest

r

:

string;

Y :

word;

procedure EscribeCadena(3

:

string);

{

Escribe

un

string e incrementa

la

variable para escribir Sa siguiente lint

begin

QutTextXY(X,

Y ,

S);

I n c ( Y ,

TextHei.ght('M')+Z);

end;

{

EscribeCadena

3

begin

{

ReportaEstatus

1

C s t D r . . i v e r A n d M o d e ( D t - i v e r S t r ,

ModeStt-);

{ O b t i e n e

las especificaciones

act:^^.!^:

GetViewSettings(ViewInfo);

GetLineSettings(Line1nfo);

GetFillSettings(Fi1lInfo)~

GetTextSettings(Text1nfo);

GetPalette(Pa1ette);

Y

: =

4 ;

V e n t a n a P r i n c i p a l ( ' R e p o r t e

del

e s t a t u s

despues

de InitGraph');

SetTextJustify(LeftText, TopText);

EscribeCadena( 'Graphics device

:

'+DriverSt.r);

Escribecadena( 'Graphics mode

'

+Modest

I - ) ;

Escribecadena

(18)

b e g i n

Esc

ribeCadena

('Current

view

port

: ( '

t~nt2~tr(x1)+',

'+Tnt2Str(yl)+', '+tInt2Str(x2)+', '+Int2Str(y2j+')');

if ClipOn then

else

EscribeCadena('C1ipping

:

ON

y )

EscribeCadena( 'Clipping

:

OFF');

end;

EscribeCadnna('Current position

:

('+Jnt2Str(GetXj+', '+IntZStr(GetY)+'

EscribeCadena('Pa1ette entries

:

' + l n t Z S t , r l P a l e t t . e . S i z e ) ) ;

Escribecadena( 'GetMaxColor

: ' + I n t 2 S t r ( G e t M a x C o l o r ) ) ;

Escribecadena( 'Current color

:

'4lntZStr(GetCnlor)j;

w i t h LineInfo do

begin

Escribecadena( 'Line style

: ' + L i n e S t y l e s C L i n e S t y l e ] ) ;

Escribecadena( 'Line thickness

'+IntZStr(Thickness)

j

;

end;

w i t h FillTnfo da

begin

Escri.beCadena('Current fill style

:

'+FillStylesCPatt~rn]);

EscribeCadena('Current fill color

:

'+Int2Str(Colur));

end;

w i t h Textjrnfo

d o

begin

EscribeCadena('Current font

:

'+Fonts[Font]);

Escribecadena(

' T e x t

direction

:

y + T e x t . D i r e c t [ D i r e c t i o n ]

j;

Escribecadena( 'Charact.er

s i z e

:

'+IntZStr(CharSize));

E s c r i b e C a d e n a ( ' W o r i r o r ~ t ~ 1

justify

:

'+HorizJust[Horiz]);

Escr.ibeCadena(

'Vertical justify

:

'+VertJust[Vert]);

end;

Pausa;

end

; {

FZepor taEstatuc,

1;

procedlu

re graf

ica;

i:

lJsa algUnOs procedimientos de Turbo Pascal para realizar graficas rrrediar7tc

va

r

menu

}

car

:

char;

x l ,

y.1,

x 2 , y 2 , X p o s ,

Ypos,

r :

integer;

XRadio, YRadia

:

ward;

X i z q , Ysup, X d e r ,

Yinf, d i m

:

ward;

ventana

:

pointer;

Funetiey,

v c ,

ejecuta

:

boolean;

mensaje, numero

:

string;

function

LeeNum(x, y :

integer; reng: string; long: integer),:

integer-;

{

Lee

u n entera valuando

que

solo

se

den digitos

}

v a

r

i,

j,

suma, pot, codigo

:

integer;

car-

: c h a r ;

cadena:

s t r i n g ;

b e g i n

(19)

e j e c u t a :

=

t r u e ; S e t C o l o r ( M a x C o 1 o r ) ;

S e t T e x : t S t , y l e ( D e f

aul

t f o n t

,

t i o r i z D i r 1.) ; S e t T e x t J u s t i f y ( L e f t T e x t , T o p T e x t ) ;

S e t f i l l S t y l e ( E m p t y F i l 1 ~ O ) ;

Bar(:;<, y ,

x

f T e x t W i d t h ( ’ - ’ ) , y

+

T e x t W e i g h t ( ’ 1 ’ ) ) ; MoveTo(x, y ) ;

r e n g

: =

C o n c a t ( r e n g ,

’ =

’ 1 ;

Q u t T e x t . ( r e n g ) ;

f a r

i

: =

1 t o

l o n g

da

x

: =

x

+

T e x t w i d t h ( r e n g ) ; MoveTo(x, y ) ;

r e p e a t

O u t . T e x t ( ) ;

i

: =

1 ;

car- :

=

ReadKey ;

c a r :

=

U p c a s e ( c a t - > ; c a s e

c a r

o f

B S : i f

i

:> I t h e n b e g i n

x

: =

x

-

T e x t w i d t h ( ’ - ’ ) ; MoveTo( x

,

y ) ;

{ B o r r a

el

c a r a c t e r

a n t e r i o r

J7

B a r ( x , y 3 x

+

T e x t w i d t h ( ’ - ’ ) , y 4- T e x t W e i y h t ( ’ 1 ’ ) ) ; TJutText(

’-*

)

;

dec(

i)

; M O V ~ T O ( X , y ) ;

end

else

w r i t e ( B E L L ) ; CR : ;

E S C :

else

e j e c u t a

: =

f a l s e ;

i f

( ’ 0 ’

< =

c a r > a n d ( c a r ’ 9 ’ j and

( i

.;=

l o n g ) t h e n b e g i n

{ B a r r a

el

c a r a c t e r a n t e r i o r

1

B a r ( x , Y ,

x

+

T e x t W i d t h ( ’ - ’ ) , y

+

T e x t W e i g h t ( ’ l ’ ) ) ;

O u t . T e x t ( c a r ) ;

x:

: =

x

+

T e x t W i d t h (

’ - ’ > ;

c a d e n a l i l

: =

c a r ;

i n c : (

i> ;

e

T 7 d

el

se

w r i t e ( B E L L ) ; end; { c a s e }

u n t i l . ( c a r

=

CP.)

or

( c a r -

=

E S C ) ; { C o n v i e r t e

la

cadena a u n e n t e r o }

d e c ( i ) ; { A j u s t a m o s

el

numero de d i g i t o s en l a cadena )

p o t

: =

I ; Suma :

= o;

f o r j

: =

i downta 1 d o

b e g i n

(20)

p o t

: =

p o t .

10;

end;

LeeNum

: =

suma; end; { LeeNum }

p r o c e d u r e L e e X Y ( v a r

x ,

y : i n t e g e r ; r e n : i n t e g e r ) ; b e g i n

x

: =

LeeNurn(0, r e n

*

T e x t H e i g h t (

'M'),

' x ) , 3 ) ; r e n :

=

r e n -t- 2 ;

y

: =

LeeNum(0, r e n

*

T e x t H e i g h t ( ' M ' ) , ' y ' , 3 ) ; end; { LeeXY }

p r o c e d u r e V e r C o o r d e n a d a s ( v a r

x c ,

yc:

i n t e g e r ) ;

{ Mueve

el

c u r s o r

con

las

f l e c h a s y

l a s

teclas

8 , 2, 4 y 6 i n d i c a n d o

l a s

coordenadas donde s e e n c u e n t r a d i c h o c u r s o r

1

c u r ~ t l

r

: p o i n t e

r

;

tam : wot-d;

t e r m i n a 1 b o o l e a n ;

t e r r n i n a

: =

false;

e j e c u t a

: =

t r u e ;

{ Torna l a s c o o r d e n a d a s d e

la

posicion

c e n t r a l o de

la

a n t e r i o r

p o s i c i o n

xc3 : xpos;

y c

: =

Ypos; v a I^

b e g i n

{ D i b u j a

el

c u r s o r y

lo

almacena en mernoria }

S e t C o l o r ( M a x C o 1 o r ) ;

l o n g

: =

I m a g e S i z e ( 0 , 0 , 4 , 6 ) ; G e t M e m ( , p a n t a l l a ,

l o n g ) ;

G e t I m a g e ( 0 , O , 6 , 6 , p a n t a l l a * ) ; S e t F i l l S t y l e ( E m p t y F i l 1 , 0 ) ;

B a r ( 0 , O , 6 , 6 ) ; L i n e ( 0 , 3 , 6, 3 ) ;

L i n e ( 3 , O , 3 , 6 ) ;

tam

: =

I m a g e S i z e ( 0 , O , 6 , 6 ) ;

GetMem(cursor, tam) j

GetIrnage(0,

O ,

6 ,

6 ,

cursot-");

B a r ( 0 , O , 6 , 6 ) ;

PutTmage(0, O , p a n t a l l a " , N o r m a l P u t ) ; F r e e M e m ( p a n t a l l a ,

l o n g ) ;

r e p e a t

{ D i b u j a

el

c u r s o r y e s c r i b e

las

c o o r d e n a d a s

1

PutTmage(xc

-

3 ,

yc

-

3 ,

cursot",

X O R P u t ) ;

numero : : I : n t % S t r

( x c j

;

mensaje :

=

c o n c a t (

'

( I

,

numero,

'

'

) ;

numero :

=

I n t 2 S t r ( y c ) ;

mensaje

: =

c o n c a t ( m e n s a j e ,numero, ' ) ' ) ;

L i n e a M e n s a j e ( m e n s a j e ) ; c a r : : ReadKey;

(21)

b e y i n

FuncKey

: =

t r u e ; c a r :

=

ReadKey; e nd j

{ B o r r a

el

c u r s o r

3

P u t I m a g e ( x c

-

3 ,

yc -

5 ,

c u r s o r " , X O R P c r t ) ; c a s e c a r o f

U k : i f y c

>

O t h e n d e c ( y c ) ;

DA : i f y c

<

TopeY t h e n i n c ( y c ) ;

Lk : i f x c

>

O

t h e n d e c ( x c ) ;

R A :

i f

x c

<

TopeX t h e n i n c ( x c ) ;

' 8 ' :

i f

y c

>

10

t h e n

yc

: =

y c

-

10 yc

: =

o;

y c

: =

y c 4-

1.0

y c

: =

TopeY;

x c

: = x c

-

10

x c

: =

0 ;

x c

: =

xc 4- 10 x c

: =

TopeX;

else

' 2 ' .

if

yc

<

TopeY

-

10 t h e n

e l s e

' 4 ' : i f x c

>

10 t h e n

else

? , Y "

u

.

i f

x c

<

TopeX

-

10 t h e n

else

ESC:

b e g i . n

t e r m i n a

: =

t r u e ; e j e c u t a

: =

f a l s e ; end;

else

t e r m i n a

: =

t r u e ;

end;

{ c a s e

3

u n t i l t e r m i n a ;

FreeMem(cursor I tam) ;

{ Guarda l a u l t i m a p o s i c i o n d e l c u r s o r }

Xpos

: =

x c ;

'{pos

x x

-

-

y c ;

S e t C o l o r ( c o 1 o r ) ;

end; { Veecoordenadas }

p r o c e d u r e V e n t a n a L e c t u r a ;

{ Crea

l a

v e n t a n a p a r a l a l e c t u r a de

los

d a t o s de

las

g r a f i c a s

3

b e g i n

(22)

{ B o r r a l a imagen donde s e va a c o l o c a r l a v e n t a n a }

S e t F i l X S t y l e ~ E m p t y F i l l ,

Q ) ;

8ar(Xizq,

Ysup, X d ~ r , Y i n f ) ;

S e t V i e w P a r t ( X i z q , Ysup, Xder, Y i n f , C l i p O n ) ; D i b u j a M a r g e n ;

{ A j u s t a l a v e n t a n a p a r a que

los

t e x t o s

no

t o q u e n

los

margenes

1

S e t V i e w P o r t ( X i z q -t. 6 , Ysup

+

3 , Xder-

-

3 , Y i n f

-

3 , C l i p o n ) ;

end; { V e n t a n a L e c t u r a }

p r o c e d u r e V e n t a n a o r i g i n a l ;

{ V u e l v e a l a v e n t a n a o r i g i n a l de g r a f i c a c i o n }

b e g i n

S e t V i e w P o r t ( Q ,

O ,

MaxX, MaxY, C l i p O n ) ;

{ S o r r a l a imagen de

la

vent.ana usada

3

S e t F i l l S t y l e ( E m p t y F i l 1 , O ) ;

B a r ( X i m q , Ysup, Xder, Y i n f ) ;

P u t I m a g e ( X i z q , Y s u p , v e n t a n a n , N o r m a l P u t ) ; F r e e M e m ( v e n t a n a , d i m ) ;

S e t V i e w F o r t ( 1 , T e x t H e i g h t ( ’ M Y ) + 5 , M a x X - l , M a x Y - ( T e x t H e i g h t ( ’ M ’ ) + S ) , C l i p o r end; { V e n t a n a O r i g i n a l

1

b e g i n

v c

: =

f a l s e ;

X p o s : = TopeX d i v 2 ;

Ypos

: =

TopeY d i v 2 ;

V e n t a n a P r i n c i p a J

( ’ B a r r a C i r c u l o E l i p s e F i j a c o l o r L i n e a R e c t a n g u l o S w i t c h T e r m i n a V e r C o o r d , r e p e a t

c a r : : R.eadK,ey;

c a r

: =

U p C a s e ( c a r ) ;

case

c a r

of

’ R ’ : b e g i n

LineaMensaje(’Proporcione las

d a t a s d e

l a

b a r r a ’ ) ;

i f v c

t h e n

b e g i n

‘ ~ e r C o o r d e n a d a s ( x l , y l ) ; V e r C o a r d e n a d a s ( x 2 , y 2 ) ; end

else

b e g i n

VentanaLec’Lu

ra;

LeeXY(xl, y l , O ) ;

(23)

LeeXY(x2,

y 2 ,

4 ) ;

V e n t a n a o r i g i n a l ;

e n d ;

~ e t ~ i X X S t y l e ( S a l i d F i 1 1 , c o l o r ) ;

i f

e j e c u t a

t h e n

bar(x15yl,x2,y2);

end;

’ C ’

:

begin

LirleaMensa j e (

Proporcione l o s

d a t o s del.

c i

r c u l ~ c ~ ’ ) ;

i

f v

c

t

he 1-1

begi

n

V ~ : - ! t r ; o ~ r d s n a d a s ( x . l

y l ) ;

VerCoordenadas(x2,

y2);

{ E s

necesario hacer

u n a j u s t e

3

r

I

=

a b s ( x 1

-

x 2 ) -t

1 ;

end

elst3

begin

Ventanalectu

r a ;

IC

: =

LeeNum(0,

4 ‘A:

T e x t H e i g h t ( ’ M ’ ) , ’ r a d i o ’ ,

3 ) ;

Ventanaoriginal

;

L e e X Y ( x l ,

y l ,

0 ) ;

end;

S e t C o l o r ( c o 1 o r ) ;

i f

e j e c u t a t h e n

C i r c l e ( x : l , y l . ,

r-);

end;

’ E ’ :

begin

LineaMensaje(’Proparcione

l o s

datos

de

l a e l i p s e ’ ) ;

i f vc

then

b e g i n

VerCoordenadas(x1

I y l ) ;

VerCoordenadas(x2,

y2);

>(Radio

: =

abs(xl

-

x 2 ) f

1 ;

VerCoordcnadas(x2,

y 2 ) ;

YRadio

: =

abs(yl

-

y2)

4-

1 ;

end

else

begin

VentanaLectura;

XRadio

: z

LeeNurn(0,

4 ‘A:

T e x t H e i g h t ( ’ M ’ ) ,

’XR.adi.o’ I 3 ) ;

YR.adio

: =

LeeNum(0,

6 ’A:

TextWeight( ’ M ’ )

I

’YR,adio’,

3 ) ;

Ventanaoriginal

;

LeeXY(x1,

y l ,

O ) ;

end;

SetCoLor(co1or);

i f

e j e c u t a

t h e n

E l l i p s e ( x 1 ,

y l ,

O ,

3 6 0 ,

XRadio,

YRadio);

e n d ;

’I’

:

begin

1.-

inearflensa

j e (

P r o p o

r c i o n e l o s

d a t o s

de

l a

1 inea ) ;

i f v c

t h e n

(24)

end

else

b e g i n

V e n t a n a L e c t u t-a;

LeeXY(x1,

y l ,

o > ;

LeeXY(x2,

y 2 , 4 ) ; V e n t a n a O r i g i n a l ; end;

S e t C o l o r ( c o l o r j ; i f

ejecuta

t h e n

l i n e ( x L , y l , x 2 , y Z ) ;

e n d ;

’ F ’ : b e g i n

L i n e a M e n s a j e ( ’ S e 1 e c i o n e

e1

numero de u n c o l o r ’ j ; V e n t a n a L e c t u r a ;

S e t C o l o r ( M a x C o 1 o r ) ;

S e t T e x t S t y l e ( D e f a u l t F o i - ~ t , H o t - i z D i r y I j ;

S s t T e x t J u s t i f y ( L e f t T e x t y T o p T e x t ) ;

OutTextXY(0, O

*

T e x t H e i g h t ( ’ M ’ ) y

0

N

e

r.

1

c./ ~

A

i. ci

1

2.

v e r d e 3 . C i a n ’ ) ) ;

O u t T e x t X Y ( 0 , I

*

T e x t k í e i g h t . (

’M’

j

4 .

P o j o

S .

Magenta

( 6 ‘ C a f e 7 . G r i s

R r i l l o c l o ’ ) ;

8 .

Gricl

Obscuro 9 . A z u l B r i l l o s a ’ ) ;

O u t T e x t X Y ( 0 , 3

*

T e : x t . H e i g h t ( ’M ’ ) y

’10.

Verde B r i l l o s o 11. C i a n B r i l l o s o ’ ) ; Q u t T e x t X Y ( 0 , 4

*

TextHeiyht(’M’),

’12.

Ro,jo B r i l l o s o 13. Magenta B r i l l o s o ’ ) ; O u t T e x t X Y ( 0 , 5

*

T e x t H e i g h t ( ’ M ’ ) ,

14.

A m a r i l l o

15.

B l a n c o ’ j ; i-Iumet-o : I n t 2 S t r ( c o l o r ) ;

mensaje

: =

c o n c a t ( ’ C O L O R . ACTUAI-:

’ ,

n u m e r o ) ;

O u t T e x t X Y ( 0 , 6

*

T e x t H e i . g h t ( ’ M ’ ) , m e n s a j e ) ;

c a l o r

: =

LeeNum(0,

R

*

TextHeight(’M’),

’ c o l o r ’ , 2 ) ;

V e n t a n a O r i g i n a l ;

OtJtTextXY(0,

2

*

T e x t H e i g h t ( ’ M ’ j ,

e n d ;

’ R ’ : b e g i n

l - i n e a M e n s a j e ( ’ P r o p o r c i o n e

los

d a t o s

del

r e c t a n g u l o ’ ) ;

i f v c t h e n

b e g i n

V e r C o o r d e n a d a s ( x 1 y y l ) ;

VerCoordenadas(x2, y 2 ) ; end

else

b e g i n

Vent,anaLectu

ra

;

I L m ? X Y ( X 1 ,

y l ,

o ) ;

LeeXY(x2,

y 2 , 4 ) ; V e n t a n a O r i g i n a l ;

end;

i f e j e c u t a then

SetColor(color)

;

R e c t a n g l e ( x l , y l , ~ ~ , 2 , y 2 ) ; end;

(25)

begin

Linearlensa j e (

’Carnbio

a

g t

a f i c a c i o n por-

c u r s o r

) ;

v c

: L:

t r u e ;

end

Else

begin

l...i.nei.1,i”lensaje(’Carnbia

a

g r a f i c a c i o n p o r c o o r d e n a d a s ’ ) ;

vc

: =

f a l s e ;

end;

’ T Y : ;

’ Y ’ :

VerCoordenadas(x1,

y1)

;

e l s e

begin

e

n

d ;

write(BE1.L);

e n d ;

{

case

3

u n t i l

c a r

=

’ T ’ ; end; {

grafic:a

}

procedure CalculaTiempo;

{

C>alcula l a d i f e r e n c i a e n t r e e l

tiempo1

y

el

tiempo2 dejando esta

en

e l

tic

p o l

suponiendo que

no hay una

d i f e r e n c i a e n t r e

ellos

mayor

que

24

horas

}

begin

i f

centesimal

>

centesima2 then

begin

dec

( segu ndo2) ;

i.nc(centesirna2,lOO)

;

end

j

centesimal

2 x

centesirna2

-.

c e n t e s i m a l ;

i f

segundo1

>

segundo2 then

begin

dec;

(mi

nu

t o 2 )

;

i n c ( s e g u n d o 2 ’ 6 0 ) ;

e

1-1 d ;

c a

.gLgundol

:

segundo2

-

segundol;

i f

minuto1

>

minuto2 then

b e g i n

dec

(

ho

ra2)

;

i n c ( m i n u t o 2 , 6 0 ) ;

e n d ;

minuto1

: =

minuto2

-

rninutol;

i f

hora1

>

hura2 then

h o r a 1 ::

=

hora2

-

h a r a l ;

i n c ( h o r a 2 , 2 4 ) ;

end; {

CalculaTiempo

}

procedure reporte;

va

r

‘ t i e m p o ,

mensaje

:

s t r i n g ;

c a r :

c h a r ;

CalculaTiempo;

h e g i n

(26)

tiempo

: =

IntZStr(horal);

mensaje

: x

concat(’T1EMPO

(hh:rnrn:ss.cc) :

tiempo);

tiempo

: =

Int2Str(minutol);

mensaje

: =

concat(mensaje,

’ :

’ ,

t i e m p o ) ;

tiempo

: x

Int2St~r(segundol)

;

mensaje

: :: r;:or+~cat(menc,aje,

:

, t i e m p o ) ;

tiempo

: =

IntZStr(centesimal);

r m n s a j e

: =

concat(mensaje,

.

tiempo, Oprima

u n a

tecla

para

c o n t i n u a r . ’

LineaMensaje(mensaje);

car

: =

ReadKey;

Y

e n d ;

[

reporte

3

b e g i n

(27)

**

x * U N I V E R S I D A D A1ITOONOMA METROPOLITANA

x*

U N I D A D IZTAPALAPA

*

%. PROYECTO R E A L I Z A D O POR:

* x J O S E ALFFEDO PICITTE G A L I C I A

* x ASESOR. D E PROYECTI3:

x*

M I G U E L ANGEL G U Z M A N LOPEZ

* x

x 9:

x .x

* x

**

* x

* : ~ * * * * * * * * * * * * * * x * * x * * ~ * * * * * * * * * * * x ~ * * * * * * * * * x ~ * * * * * x x * * x * x x * : ~ ~ : x * * ~ ~ ~ . * * * * ~ : ~ : ~ .

3

PROGRAM almacena-graf i c a ;

{

Este

p r o g r a m a c o n t i e n e u n menu que

le

perrctit.e d i b u j a r g r a f i c a s usando

los

p r o c e d i m i e n t o s de Turba P a s c a l v e r s i o n 4 . 0 ,

almacenar-

g r a f i c a s med:i,ante cc

p r e s i o n de p u n t o s y r e c u p e r a r l a s s e c u e n c i a l m e n t e

1

Dos,

C r t , ,

Graph,

i:$IJ A : [JTICL I T P U ] Gr-af i c a s ; USES

PROCEDURE e s c r i b e ( V A R f : F I L E ;

o c t . e t o :

b y t e ; VAR. i n d : word; C o n t T n L :

Xonyii-ti

V A R B E G I N

r e s u l t

:

word;

b u f [ i n d l :

=

o c t e t o ;

IF

i n d

=

LONGBUF THEN

B E G I N

B l o c k W r i t e ( f , b u f , i n d , r e s u X t ) ; . i n d

E =

1 ;

I F r e s u l t ,; i n d THEN

l...ineaMensaje(

1.

x E s p a c i o i n s u f i c i e n t e e n

disco’

.; END

I F C o n t T o t : l i m i t e THEN

ELSE

B E G I N

BlockWrite(f,buf,ind,result);

I F

result.

<

i n d THEN

L i n e a M e n s a j e ( ’ 2 . E s p a c i o i n s u f i c i e n t e e n d i s c o ’ ) ; END

i n c ( i n d ) ; ELSE

(28)

b y t e s e n

urt

a r c h i v u

3

octetcj

: k,ytc :, V A R

B E G I N

()-

,_

A s i g n a

el

v a l o r de C o l o r P u n t o a

los

4 b i t s mas s i g n i f i c a t i v o s de o c t e t . !

o c t e t o

: =

( o c t e t o AND

$OF)

OR ( C o l o r - P u n t o SWL 4 ) ;

I F c o n t

< =

15

THEN B E G I N

{ A s i g n a

el

v a l o r de c o n t a

los

4 b i t s menos s i g n i f i c a t i v o s de

octeto

o c t e t o

: =

( o c t e t o AND $FO) OR c a n t { ( c a n t AND $ O F ) ] ; e c ; c r i b e ( f , ~ c t e . t o , i ~ ~ ~ , C o n t T a t ~ ~

END B E G I N ELSE

{ A s i g n a

el

v a l o r de O a

l a

p a r t e b a j a

de

a c t e t u ]

o c t e t o : x o c t e t o AND

$FO;

e s c r i b e ( f , o c t e t o , i r ~ c J , i ) ) ;

W H I L E c o n k

>

O DO d e c ( c o n t , 1 5 ) ;

I F

collt

< =

255 T H E N B E G I N

o c t e t o : x

C0nt

;,

e s c r i b e ( f , a c t e t o , i n d , C o n ~ T o t ) ;

c o n t

: =

O ;

END BEGIN E L S E

o c t e t o

: =

o ;

e s c r i b e ( P , a c t e t o , i n d , 0 ) ;

d e c ( c o n t , 2 5 5 ) ;

E N D ; END ;

E N D ; { k l m a c e n a B y t e

2.

PEOCEDUR.E C u e n t a P u n t a s ( V A R c o n t : w o r d ; V k R x , y : i n t e g e r ; V A R C o l o r P u n t o :

w o r d ) ,

{ Cuenta

el

numero d e p u n t o s d e l mismo

color-

d e n t r o de u n

renglai-1

y

actuali;

‘JAR

B E G I N

las

o r d e n a d a s d e l p u n t o a a n a l i z a r p o s t e r i o r m e n t e

1

c o r l t i n u a : boul.ean;

c o n t i n u a

: =

t r u e ;

C o l o r P u n t o

: =

G e t P i x e l ( x , y ) ;

c o n t

:

=

1 ;

i . n c ( x ) ;

W H I L E ( X

< =

TopeX) AND ( C o l o r P u n t o

=

G e t P i x e l ( x , y ) )

DO

B E G I N

i n c ( c o n t ) ; i . n c ( x ) ;

E N D ; BEGIN

TF

x

>

T o p e X T H E N

i n c ( y j ;

:<

: =

O ;

END ;

(29)

PR,OCECjURE A l m a c e n a P a n t a l l a ;

{ Almacena

el

g r a f i c o que s e e n c u e n t r e e n

la

p a n t a l l a m e d i a n t e

el

a l g o r ~ i t m ~ ~

c o m p r e s i o n d e r e n g l o n e s

2,

'4

k R.

nombre : F I L E ; NomLeer : S T R I N G ;

e x i s t e y c o n t i nua : boo1

earl

c a r

: c h a r ;

C o n t T o t c l o n g i

nt;

c o n t : IHQ r d ;

x., y : i n t e g e r - ;

i n d ,

ColorPunto

:

word;

c o n t i n u a

:L:

t r u e ;

P

repa

r-aFnausa

;

w r i t e l n ( 'Nombre

del

a r c h i v o ?

' > ;

r e a d l n ( N o m L e e t - ) ;

Assign(nombre,NornLeer);

R.ese

t,

(

ntsrnb

r e ) ;

e x i s t e

: =

( I O R e s u l t L: O ) ;

I F e x i s t e THEN REGIN

B E G I N

{ $ I " C$I+3

writeln('A0VERTENCIG:

Ya

e x i s t , e

u n

a r c h i v o c o n e s e n o m b r e ' ) ;

write(

'Desea d e s t r u i r l a i n f o r - i n a c i o n a n t e r i o r (S/N)?

' 1 ;

R.EPEGT

U N T I L c a r IN [ ' S ' ,

'N'];

I F c a r :3' THEN

E L S E R E G T N

c a r : L: UpCase(R.eadKey> ;

. I ^

R e w r i t e (

mrnbre,

1 )

w r i t e l n ;

w r i t e l n ( ' L a g r c l f i c a

no

f u e a l m a c e n a d a ' ) ; w r i t e ( ' O p r i m a

una

t e c l a p a r a

c;ot~-ltinuat-y);

c o n t i n u a

: =

f a l s e ;

cat- : 2 ReadKey;

END ;

END E

L.

S E

Terrni.naPausa;

V e n t a n a P r i n c i p a l

( ' t G l r a f i c a c A > l m a c e n a <R.;ecupera

if3;orraPantalla

c T > e r r n i n a ' ) ; I F

c o n t i

n u a

THE14

B E G I N

R a w r i t e ( n o m b r e ,

1);

LineaMensa j e ( ' E5PER.E POR F A V O R } j

GeLiime(

h o r a l . ,

m

i

nu t o 1

, s e g u n d o 1

,

c e n t c s i r n a l ) ; .x: : z j

y

: =

o ,

C o n t T o t

: =

O ;

(30)

i n d :: 1 ;

LJHILE y (I: TopeY

DO

BEGIN

C u e n t a P u n t o s ( c o n t , x , ~ ' , ~ ~ ~ l o r P u n t o ) ;

C o n t T o t t = C o n t T a t

+

c o n t ;

A l m a c e r ~ a B y t e ( n o m b r e , c o n t , ~ o l o r P u ~ t o , i r - ~ d , C o n t T o t ) ; END;

c l o s e ( n o m b r e ) ;

write(E3ELL);

G e t T i m e ( h o r a 2 , m i r ~ u t o 2 y s e g u n ~ o ~ y c e n t e ~ i m a ~ ~ ~

r e p o r t e ;

E N D ;

END; { A l m a c e n a P a n t a l l a

1

PRQCEDWRE lee(VAR f : F I L E ; VAR.

o c t e t o :

b y t e ; V A R i n d :

word);

{ Lee e l a r c h i v o f p o r

bloques

}

V A R

BEGIN

r e s u l t

: w a r d ; I F i n d x

1

THEN

o c t e t o : x b u f r i n d ] ; i n c ( i n d ) ;

I F i n d

>

LONGBWF THEN

B l o c k R e a d ( f , b u f , L O N G ~ U F , r e s u l t ) ;

i n d : z .

1 ;

END; {

lee

}

PROCEDURE R e c u p e r a P a n t a l l a ;

{

Recupera

e l g r a f i c o que se

h a l l a

en

el

a r c h i v o f

11

$/ A R.

o c t e t o :

b y t e ,

C o n t T o t : l o n g i n t ;

x ,

y : i n t e g e r ;

c o n t ,

c o l o r ,

i n d : w o r d ; nombre : F I L E ;

(31)

BEGIN

P r e p a r a p a u s a ;

w r i t e l n ( ’Nombre

del

a r c h i v o ?

)

;

r e a d l n ( NomLeer ) ; Terminapausa; V e n t a n a P r i n c i p a l .

(, <:.E> t-af

ica

c k > l m a c e n a c R > e c u p e r a c B ) o r r - a P a n t a l l a ( T : ~ e r r n i n a ’ ) ;

Assi.gn(nombre,NomLeer);

R e s e t ( n o m b r e , l ) ;

CGI-3

{ $ I + ]

(3 :;4, i 5 t,

e

;

=

(

I O F i e s u l t

o >

; I F

e x i s t e

THEN

BEGIN

IV.ineaMensa

je(

ESPEf?E POR F A V O R ) ;

G e t T i r n e ( h o r a l , m i n u t o 1 , s e g u n d o l , c e n t e s i m a l ) ; :,*‘ :

=

0 j

y

: =

0 ; i n ( j :

=

1 ;

C o n t T a t

: =

0 ;

Wi-íTI-E C o n t T u t

<

l i m i t e DO B E G I N

l e e ( n o m b r e , o c t e t o , in d ) ;

{ A s i g n a a c o l o r -

la

p a r t e a l t a de

o c t . e t o

1

c o l o r

: =

{ ( o c t e t o AND $ F O ) ]

o c t e t o

SHR 4 ;

{ A s i g n a a

cont.

la

p a r t e b a j a de

o c t e t o

3.

c o n t

: =

o c t e t o ANCJ

$OF;

I F

c o n t

=

O

THEN

B E G I N

c o n t ::: 15;

l e e ( n o m b r e , o c t e t o , i n d ) ; W H I L E o c t e t o

=

O DO

B E G I N

END;

Figure

Actualización...

Referencias

Actualización...