Você está na página 1de 226

. ..

protrama(.Clo

profissional

,.,S,X·

. nlt1-pc ",BAS'IC

, lfEditora I .1 A.lephj

I l

1 qob.rto ftlassaru Ylatanabe

...

protramacao

f•• I pro Issiona

em basic

,.,SX In,.,· PiC ft1n,ASIC

I dl .....

G··.··_ .... _ .

~,ct I I~ao,

NEditonJ . , Aleph,

(v lED trORA At EPH " 9BO

Todo:' o . d j··r e; to fle o u P roo 9 "·s:rn a de Sit e I' i '\1 r 0 . Ed i tur a ALEPH.:

[XPEDIE:NTE

CDordena~io Editor~al:

Coordenac~o Oid6tica:

Produ~~a Editorial:

E.dtt·ora~a!o,: -c ,

OJ g, facso e Rev i.-;s·aoJ

Art e eGa- p a : '.,~ "\ - -'. '.:' _. ./'

I ...

repraducio-de quaJ~u~~texto ,. e s t r tt ament e . r'es'erva/do a

Pier'1uigi Pjazz~ Betty Frnmer Piazzi Rosa Kogan Fromer

Renato da s: I va 0'1 iva i ra Ro:.S a Mar La )( .'M,~ . Sh..ige no

~-·A·n a" '1-';" ij:,ci 8: ,A n t i c'~d '.'- ...

, ." ~-

, .'

. ,

~

r ~ .

lttfa,;fOl'IJI

A.leph

A.l EPH

Pub I j ca~oes .e Assessor i a Pedagog i c a l tda. "rv",· D r · ... G.u iI h e rme - Dumon t V i II ares, 1; 523 s l"l B_5:~$0., S"'a"~ ,P (fu-J o_._SP - Fon e '~ . '("011) 843;-'3202

Oados de ·C.atalogac;::ao na PubHca~ao '(CIP) Internacional (Camara. Brasile.ira do Livro,SP. Brasil)

, - .

Watanabe~ Roberto Hassaru,. 1946-

W2914p p.rosrama~ao p rof i as LouaI em BASIC ; MSX.

IB,M-PC~ mBASIC I Roberto Massaru Watanabe. -~ s~io Paulo : ~l,eph, 1988.

B.ib 1 Log raf La,

1. BASIC (Li.nguagem de programa<;aopa ra comput a+ I

dore s) 2:. IBM Com.putadior pe s soe l - Programa;;a.o- 3.

MSX-BASIC ( Linguag'~ni de P}:'o8~trunaliao parllcomputado-

res) I. Trtulo. .

..,'

88-0930

CDD-001.6424 -001.6·42

ilnd:ic05 par.a ca.talago sisto,matico:

1. BASIC : Litlguagem de programa·~io 1 Compucado r'ea Proceas.arsent o de. dados 001.6L.24

2, BASIC MSX : Li.nguagem de pl"ogramat;ao Computadores:

Proce s.aamerrt.o de dados 001. 6424

.3. IBM Compur edo r Pe s soa I :' P'I'ogrEirna~ao Procesaame.nto

de dadc s 001. 642

4. IBM 'PC : Compu tadQl' Pes SQa 1 :P rogramaiiao : Proce s'samento de dados 001.642

'- ,

.'

~ tl.._ I

, '

I o··f.,

. '

I •

SUll1a'lO

Nata do Editor

•. Ii ~ !Ii '" i Ii Ii • ii' II' ,... ~ !Ii • iii i! .. Ii • • ... • • t iI i ~ .. .' Ir III iI ~I i

6

Caprtulo 1 - Introdu~io

7

G a, p r t u I 0 2' - P r 09 r am as. . . . . . ., . ~ . • • . . . . . . . • .' . . . . .. 10

, '

Capitulo 3 - T'cnicas de Entrada de Dados 27

Capftulo 4 - Acesso a discos .. - _ 54

Cap(tulo 5 - T'cnic~s de Salda .•••• ~ 118

Cap j t u I 0 6 - Ma nip u 'I a cr, a I) de V,a r i in' e j s .......•.... 1 28

Capitulo 7 Desenvolvlmento de um S~stema 134

Capftula 8 Efictincla dos Programas ; '~B

Caprtulo 9 - Exemp~o de urn Sistema ..•............ 178

Apindtce ~ - Conversio de comandos

... • !II • !! !! • '" -II • Ii ii '!!! II •

213 2'22

Ap@nd'ice It

- Ocupac~o da mem6ria

qota do editor.

Informatj2ar uma 50ciedade nio 6. certamente. urn a tar 'e l' a f a cil ~ 'n f D r ma t i z a ra so e ~, e dad Ib' r a 5i I' B lr a , extremamente desinformada por uma estrutura educactonal catastr6fica. fruto de d'cadas de autorltar~smo e burocracia carrupta. , uma tarefa quase impossrvel ~

Ap!esar cUs,so. 0 nivet medfo da inteJjg@n:cla

dos brasi lairos nio foi. fer~2mente~ serlamente afetado palos fatores conjunturais. Enquanto as 'escolas de com,uta~io# em todos os nrveis, m~nistpav~m curses no 1m r n t ma (I b sol e to 5 , ums 9 ran d e 'q U a n t j d a de deb r a s i J e i ,r 0 '5

inteligentes partlram para 0 auto-didatismo. alfabetizando-sa em pequenos e baratos microcomputadares possoals. ensa~ando seus primeiros passos de maneira talvez nio met6dica. mas muitas vezes bri Inante~ na IlngUa,gem BASI G~

Embora alguns ~ginjosU da computa~io nacional olhem asta Iinguagem com profundo desprelo (fruta de uma vlsio acad~micamente el~tista 8 distorcida) uma enorme quantidade de u5uirios. muitos dos quais ext'remamente 16c~dos e criativos. a uti I i2a par ter 'ido sua "porta de entrada" no mundo da Inform,tjca cuJo acesso. de Dutra forma, Ihes teria sido vedado flcan~o restrlto a uma mlloria ~cartQrlatH~ em multos casos 'i'neflcient'e e es t sr l t •

Para atender is necessidades destes usujr~os ~ntel igentes mas sem uma forma~io met6dica em programal;ao. e qll:B cony i d,am'(ls 0 engenhe i ro ROBERTO MASSARU WATA.NAB,E. bern brasi t e+r o apes·ar do, 50bren0n1'e. para e screver este ttvro.

Embora a forma~io do Watanabe tenha sido em sjstemas de grande porte. usaftdo t'(nieas que transcandem a linguagem BASIC. seu enorme tirocrn~o em microcomputadares pessoais the deu a possibi I idade de transferlr boa parte destes recursos para esta Iinguagem ma~s simples.

Dando um passo a mals no mundo da inform'tica o leitor tera a possibi' ~ idade de. construindo programas P8SS0 a paS50 com 0 autor. dominar as 'icnicas do ~bem programar~. tornando suas I istagens ~nteligive~s a te r ce l r ns. per'mitindo uma faci I manutElI1~a(l e imptementa~io dos sistemas desenvolvidos.

o leltor deve ter consciincia de que. como na 'amasa propaganda do Heu sou voci amanhi", ele mesmo pad e r , I'll a a e n t Ie n de, ~ d a qui aa I gun S Ole se s ,C omo ere pr6prio desenvolveu um determinado raciocfniol

I

iqtrodu~io

A cada dja que paSSi. mats e ma~s probtemas passam a ser re50tv~dos com 0 emprego de computadores. Basta dar uma folheada nas revistas especializadas ou efetuar uma visita a uma livraria. 0 computador esti transpondo os limites t'adic~oRais das 4 paredes de um 8scrit6rio e encontrando 0 seu lugar n8 medtclna. na pecujria. na ind~stria e ath em ireas pOUCG habitijsdas ao processamento de dado!. como as c~incias sociajs e a religiiol•

Independentemente da natureza de um problema. dizer que 0 mesmo passou a ser solucionado com 0 auxilio de um computador~ signifjca que houve uma fetiz assoeiacio entre 0 COMPut~dor~ D ~roblema e 0 u5u'rio. Gabe lembrar que a simp~es reuniio desses 3 compOAentes nio conse9ue~ par s~ s6~ eftc~ntrar a sDlu~io. ~ necess'rio te~mos um certa usu6rio que S8 defronta com umdete'm~nado problema e que tenha a vontade de reso~ver este prob~ema com 0 3uxflio do co.putadof.

Nos problemas que passaram a ser re50lu~dos com comp'utador,e,s. a qlUUlIi devemos atr'ibuir os meritos desse feito7 Ao computador. cujos bits. cada vez majs poderosos. estio sendo oferecido5 a pre~os cada wez ma~5 acessfveis ao grande p~bl ieo? Ao problema que~ pela sua natureza 6stratjgtca dentro da empreS3, necessita de ~oluc6es r~pidas mesm~ que implique em cus-

. tos maiores? Ao usujrio que~ sendo aberto is novas

7

tecRologias~ conseguiu em POUCO tempo abSOFver e dom~nlr os potentes recursos oferec~dos par um sistema cOlmp uta c ion a I ?

Anal isando detalhadamente cada um dos casos em que 0 emprego do computador trouxe vantageflS reais. con sta t amos que to dos o s compolnent e s ~ i sto e. 0 camp utad9r~ a problema e 0 usu~rio t@m a sua parce~a de contribui~~D. Existe~ por~m. urn quarto compo~entel geralmente esquecido~ que desempenha um papel decis~vo nessa ~ist6r~a: 0 programa.

Sam um bom programa. os melhors5 computadores e os .usujrtos majs habititados do mundo quase nada podem tazer~ nem mesmo resol~er os problemas mais elemehtsres·;d~ nOSSQ. dia ·a~dia~

~ claro que·me5~G tendo uma participa~io pequena, 0 computador e 0 usu6rio sio componentes que nio podem ser deSPFezados~ pois fazem parte de um mesmo contexto. e a solu~io com 0 emprago de computadores deve sar encaminhada dentro dete. Em outres palavras. nio sarla 8ceit'vel a afirma~io de que 0 computador e o problema estio coarentes ~orim 0 usu'r~a deve 56r trocado.

Em quatquer situa~io em que.desejamos empregar compufador,es. devemos encontrar a f6rmu I a, q+Je ,per'mita um~ participa~50 ,quitibrada desses componentes e a recelta que permlte dosar cada uma dessas partes i 0 program,a. Com,petle 80 programa, or econnae imerl'to des dados do prob'ema~ a manipulsQio adequada desses dados vatendo-se dos recursos oferecidos pato computado, e a ap res ~ntac;io. di 50 I u~ao at i m i z aua dessa meSll110 nr ob lema na visio do U5u6rio.

~ grande~ pgis. a responsabllidade de um pro-

A eficiincia do emprego de cOMPutadores esti diretameAte I igada nio 56 • potincia dos algoritmos e t6cnlcas de programa~io que foram utilizadas 00 programa~ mas tambim i apacldade que 0 programa tam de amoldar-se aos h'bitos e v'cios d05 usuirios. A solu~io de um determlnado problema pode ser apresentada de mi I maneiras dlferentes e a r'oida compreensio dessa 50luGio~ depende da mane~ra em que 0 u5uirio gostaria ou est~ habituado a recebe tais solu~ijes.

Por Dutro lado. um problem. dificilmente sa nos apresenta de modo 8st~tlco, imut'vel ao longo do te,mpo. Exists ulIla e:5Pth:ie de evolur;io dOl plrobtema. 0 programs 'aito para resolver esse problema deve ter a capactdade de acomp8nhar 855& evolucio.

Como se vi, 8xistem muitos detatbes im~o't~n-

B

~================================~============--~----I

J

tes que devemos, cuns l darar quando v amos nos prQPor ,'a

desenvolver um programa. '

Este Ijvr~ apresanta alguns t6pic05 Que, permitirio~ aos programadores em vias de prof~ssioniljzacia estruturar urn esquema deproduc~o de programas para que a atividade de desenv61vimento possa ser efetuada duma maneira r6ptda e ractona~~zada, produzindo programas cuja opera~io passa sar executada de maneira ~imples por usu6rios leigos, sam grandes conhec~mentos die p rogr amal; io.

Como l~nha central. adotou-se 0 BASIC da

M i c,rosof t , por ser um des ma,i s camp I e tcs . e'" pode!ros,os.

Ex! s t em. e e l ar e • algumas di'fer··eof;'as ,em de·te·rmli.na'do's comandos e tais d~feren~as ~stio sumarlzadas no Ap6ndice I.

A 6strutura do tlYro comp5e-se de partes ontle foram agrupadas as 5ugest5es de Mesma natureza e em cada capftulo , desenva1v~dD ~m trecho de urn sistema.

No capItulo 9, os diverso5 trechos do sistema sio Igregados e 0 leitor ter' deseflvolvido 0 n6cleo de um S~5TEMA DE CONTROlE DE ESTOQUE, objetivo f~na~ do l l vro ..

9

2

protrall1as

E§te capftulo analisa a aparincla de uma 'ist8gem de programal mostraldo a conveniincia de S8 dlstribuir as Instru~ies e os coment'r~05 de maDeira a fac~titar a le~tur~ da listagem e a InterpretaGio da estrutura ~6gica do p,ograma~

Um programa pods S8r algo como 0 apresentado na f~9ura 2.1.

Figura 2~,1 ~Pr09ril.a[OI Rest il:o legivf'l".

118 INPUT -fornecer as parcela5N;A~B 1:1'1 C =A+ 8

112 PR I NT .1' A semi., d,e ". A; 183 PH I NT- COlI ..... 0;"'= IlIi;C 114 EiMO

419 COlOR15.1" 1 :5GREEN2; fORB=8T01Z71!X4=1) -0 :M:-128; A=SOR( '16384-)(4'; 'FORI =-ATOASTEP' 3:R~SQR(X4+1·1)/'2B:F=CD5(16WR)·(1-R).e; V=I/5+ft:32:lfY(=MTHEN2lflSEM=V;V=128+Y;X =12B+B:P5ET(X~191-~)~X:l~8-B:P8ET(X~191- VI 471IFP=lTHEN2IElSENEXTI,B=P=1;CT=15;CP= 1 ;G'05UB581: END

11

Independentemente do fato de 0 programa f~ncionar ou nio e de ser eficiente OU niDI ex~ste um fator bastante ~mportante que deve ser levado em canside,a~io! caso haja necessidade de 51 introduzlr uma mod~fica~io no programa, e'~ deve ser tmplementada no manor pralO possfve.~

Se 0 programa foi desenvotvido hi pouco temen. e bem' posslvel qu,e Jembremos,ainda da Hi,gdca que fol adota4a. Nestecaso, as modif~ca~6es poderio ser

feitas em curtisslmo prazo. .

Na pr'tica~ por'm. nos defrontamos com uma 5ir~e de faters! que fazem com que mesmo as modifica~ae5 de pequeno porte sa transformem em verdadeiros pess'de I O'S, , I eva,ndiL mu i tas ve'ze'51 I: cr er que ser i a ma~s f'c~ t 0 desenvotvimento de um novo program~. Tats fstores podem ser os mais war~ado5, sendo oi mais usuais~ os se9u~ntes:

- 0 IHograma foi, deselQvolvido bit Musto tempo, de modo que nio lembramos mats da J6g~ca que fo~ a~otad a e nem do s~gnificado de determin~das vari6veis~

- A tistagem de que dlspomas nio corresponde exatamente 30 programs em U50 e que pr~ci5a sar modjficado. Obter uma listagem atuatizada , uma tare'a diflci~ pOls 0 computador em que 0 programa' utillzado 'f I C,B Il'uma f "I i a I do 'i nt ar i or e Ilao d i 'spoe de ,impress,o, a .

- 0 programa , muito lon90 e mlnusear uma Jistagem enorme i procura de um determlnado ',echo que deve sar modificado S8 lorna cansatlvo e demorado.

- Depois desse programa j' desenvolvemos um. dezenas de outros seme.hant~sl de modo que confundlmos . C ,Dm fa c I I i 'd ad e t r e c h 0 5 de um c om t r e c h 0 s d 0 SOU t r 0 S •

- 0 programa tol desenvolvido por um outro programador# cujo e5t~lo de Drogramaeio , bastante di-

ferente daquele que adotamos~ .

- Existem v4rias Itstageos dB mesmo programa e 'pratlcamente Impossrvel descobr~r qual 'a mals atua I .

Para evitar esses transtorno5. procwrl-se confeccjonar~ paralelamente aD deselvolv~mento do programa~ urn manua~ tonhecido como Manuat do Programa.

l'

o Manu,a I do PrOgrama ~e ·um re I attar i 0 que cont6m todos oS,dados que caracterizaram 0 am~t·ente segundo 0 qual foi motivado 0 desenvolvimen·to d~ programao Nie:t e SiD r e ~ a tad os fl s fa t Dr e S, que car act e,r • z a.m 0 p r otJ:l ema. as cone i r;:5e·5 em que, se fez ,0 pr,09,r am·a. os ,r e cur so s d f S P 0 n f \I e j s # 0 t i po d e p e 55 0 a ,I ,en -v'o··i v i don a solu~io do prQ~tema~ 0 ettudo das ~ ~n9uagens mais adequadas para 0 d~senvo1vimento do pr9grama. as t~cnicas de !pro:grama'if;ao e as a Igor i tmas empregados e nutr as ,j n~ forma,'Qo:es. que possam. de ,alguma +orma. s-erem ut:8 is. au mesmo necessjrias quando. no futuro~ tivermos que proceder a aJguma modifica~iD.

A eiaborsGio do Manual do Programs deve ser fe j ta an mes'mQ tempo em qua se faz a e I aboraf;io do programa. para que nenhum dado seja omitido.

Na pr'tica~ por6m. 8ssa elabora~io simultanea Rem sempre i vi~vel~ pois durante 0 desenvolvimento do program~. mUitas surpresas nos s~o reservadas palo ~omputador~ de modo que 0 praZD que inicia~ment~ estlmamos para se fair oprogra1ma p,ronto e fu'nc.ionand;·oe consumida rapidamente e~ numa jpoca ainda dtstante da imp~antaGio do programa, j~ somas pres$~onados diariamente pe'os usu'r~os~ &vidos pela solu~io via· computa-

dor.

Uma das maneiras de evltar~ nuir, a inftuincia desses fatores , IJstagem do prDgrama seja fartamente do-sa do comando REM.

au ao menos dim~fa z e r c om que a comentada, val en-

Vej&mos. em partes. as maneiras pelas quais 05 PFogramas podem ser enr~quec~dos com coment'rios e outras jnformsc5es;

IDENTIFI'CAcao

Um programador que se . dedica i confeceio de programas ter'. ap6s algum tempo. um conjunto respei'ivel de pro9rama~. Para que serve cada urn del as? Quando foi desenvolv~do? Qual a 61tfma versio? fstas sio apenas afgumas das quest6es que necessitam ser respond~das quando nos laneamos na terata de modificar urn pro 9 r ama.

Para faCi litar a identifjca~io de urn programa usa-se asr upar as i nfa,rmaI;D,es !que 0 i dent i fi cam no infc~o du mesmo.

12

Na jdentif~ca~~o do programa. deve-se colucar

p eIo me nos as i nfo,rmaQ:,fies .sasu i mte$;:

- nome ~o progra~a

- para que serve . ~ ,

- nome do autor e outro~ ~&rticjpa.nt's

- data em que fo~ etaborado

- nfimero e data da ~Itjma modjfica~io

A Identificacio d~~e sir destac~da do resto

da lis tag em. Um e .It emp I 0 de uma i de n t il fie a e i 0 C omp let a

t padfontzada ~' apr~sent~da na fi.9ura 2~a.

Fi sura t 3 - Doc!Jlent.a{ao no pr cpr i () progr a.la i

181 II .. W'w Yf 7l 1I' •• t1r*tt1tt*"fI" ...

111 • ... f01PAG ~ Folh~ de Pagamento •

1102 • 'r tr** *.'fr ' ...

183 ..

184 ~ ·Programa ;desenVolvido ~ara'o 195 ... ·ca I'ci 10 da fo I'ha d·e Pag_ento

186 ..' ..

187" . Juan da 5 i I va - '13/11/85

188 -. 189 I!

11B • 111 ..

112 ..

R ... l 28/82/86 Modificado para I adocao do P t.anu Cr UZitdo

A p a la v r a R E.M de v e 5 ere v i t it d a ,. poi s a 6 U a

ex,lst@ncia na sequinci'a de l ns tr ucfies ,d:e' UII 'prog1ramia, po de djficultar a visual iza~~o e a compreens~o r'p~da de partes do programa. Veja como fica difrci I a locaI izaeio do com8nt~rio na Itstagem da figura 2.4 .

F j 91Jr~ 2.4 ~ USD indeseJavel da pselJd'o-in'stu-;f!'o REti. 893 PH:I NT I!I! [J,ETERM I iNACAO 00 HA I Olr-

894 IREMI CA1CULA X=MA lOR' rENTRE 1 E 188 lUIS R,E5=AUX( 1 :)

B9G FOR 1=2 TO 188

997 IF RE8(AUX( I) THEN RES =XUS( I ),

89B NEXT I .

·Em~ragando-se· 0 ap6strofo no ~u9ar da pa1avra REM e a~&da inserindo-se alguns espa~os. podemo5 fazer com qu~ a ~i·stagem acima seja urn pouco malg 18grVe~. Veja a figura 2.5.

13

F ,i glJr a2 ,.5 - Uso do apostrefo COlD REM.

893 PRINT nDETERftINACAO DO MAlor"

094 " GAL CUl A X=MA I OR ENTRE 11 E '181

1195 RES=AUX(1)

89& fOR 1=2 TO 1.1

897 IF RES<AUX( I) THEN RES =XUS( I )1 a9:0 NEIll

ESTRUTURA DO PROGRAHA

A estrutijra 16gica do programs 6 0 item ma~5 i mpol" tan t epa r a a PI r f ei t a era p j, da C omp r e e A sao do mesmo. Os Idi versos trechos que compoemum, progra,ma 5,30 de natureza diversas, dependendo daqui~o objetivado pelo trecho.

Assiml podemos ter alguns trethos cujos objetivos sejam as princiPiis ttapas 40 probl~ma e outros que procuram re,olver detalhes do pr09rama~ tais como a forma t,lf;aa de :ulm C ,ampo ou I, a go r i tmo5 i rI t r od:u z j dos para contornar determinadas. deficilneias do sistema.

Um programa de Folha de Pagamento pode ser estruturado conforme 0 fluxograma da figura 2.6.

Como 58 v@~ os btocos principais do programa

sdio os sesul nt es, .-

- INlelO

~ LE:I' rUR It DOS DA005 DE UM fUNe!1 CiNAR ~ 0 - CAlCULO DOS PROVEN~OS

- CilCUlO DOS OE5CONTOS

- IMPRE5SiO DOS RESULTADOS

- OUIRO fUNC I·Ott'R 10

- FIM

Na Ii stagam do pr,ograma# asses b locos d'8vem

receber tiM d~staqu8 especial para poderem sar faellm.ate lotal izados.

o usa Gonveniente da tecla TAB e I ~nhas adi-

c i Olli,a j 5 comsimbo I os repe t ido,s antes e depo is do n,ome

do par'srafo. fazeM com que 0 nome f[que em ev~diacjaPO meio da I istagem. Vela a fjgura 2.7 .

Atim do, parigrafo5 principais. 6xistem 05 par&grafos secund'rjo5 que tamb'm merecem um destaque~ por6m com menor evldlncia.

IS,fHJ' !j:JliJde sIr felto de acordo com: I) que f a l

feito para 0 par£grafo principal. por'm empregando ,m simbo I e de: menar 'ev i :d@f"':: i a, ou mesm.o sem nenhum sfmbo~ 10. Vela a f~gura 2.8 .

14

,!

C4lCUto DOS PROVENlOS

lcu.cuco DOS DESGONTOS

• U4PRESSIO DOS RESULTADOS

Figura 2.,7' - Uso da tabu) a~ao na d'ocIJIE'nta!;a'o.

2 .• ··• •

-----------~----------------

281 "'-- CAL CUtU DE PRDV'ENTOS ._,_

282 • ---------~---------------.--

15

A I em desse s tre cno~Le x t'ste,ml.'"fI,orma '~OIe nte. 'em urn programa, outro5 trechos que nio estio relacionados dlretamente com a sua 16gfca p'~ncipal. S~O trechos em que sio efetuadas detarminadas convers6es. pesquisas em, tab e 'I, as, etc ~

Figura 2.8 - Prioridade nas linhas REM.

. .!

21" ~ 211 ~ ,21,2 II

Desconto dewido ao ~APAS

Esses tlechos devem ser prugramados em uma reQlao distante do trecho princ~pat ijo programa. A sua execO~io pede ser efetuada por um GOSUB.

Par exemp~o~ , sabido que 0 valor Que corresponde aD descont~ para r IAPAS 6 cal cui ado per uma f6rlmula do, tipo:

IAPAS = REfER~NCIA * AllQUOTA

Nada mals torretodo que iA&luir a fbrmufa no trecho pr~ncjpal do pr~grama. Veja a figura 2.9 .

Figura 2.9 - Oe'ini~lo de fcirlulas.

218 II

211· DescoDto devido 80 IAPAS 212 •

~14 IAPAS = REfERENCIA .. ALIQUOTA

o valor da REFERENCIA e da AllQUOTA variam em fun~io do salirio. conforme uma tabela que' fornecida pelo IAPAS' e pade sofrer alt~ra~aes de urn mis para

- -

outro. A estrutura principal do programs nio deve ser

sucetrvel 8 qualquer attera~iQ mot~vada por uma causa externa i empresa. A folha de Psgamento i um instrumento ~nterna da empresa~ e dave retratar a estrutura de or9aniza~io da mesma~ a S8 exlste urn desconto devido ao IAPAS. este i motivado por uma caU5a externa i empreSi. Por isso~ 0 crjtirio de c'lculo do d~sconto nio dave figurar na estrutura principa~ do programa.

Veja a fi9ura 2.18 . -

18

Figura 2.1' - Usc de s,lJb~rot inas,

218 !I 211' 212 !I

213 605U8 ,31"':8

Descolto de v i ,do 80 I APAS

2'14 I APAS == 388 '

381·

3~ "

983 '

3881 "

3881· Rotina que calcula 0 valor da

3882" R,EFERENC I A e da AL I QUOTA.

a889 ..

~ Define 0 valor da R'EF,ER EWe I A ed a

AL I QUOTA eat fURc,au Ida legisllcao vigente.

R'EFE:R ENG IA .. AL I Quot A

NUMERA~~O DAS INSTRUC6ES

As ~nicas restri~aes do BASIC qusAto aos »6- meros das instru,5es sio as 5e9u~ntes:

A - os n~meros devem se, 'em orde. crescente. ' B - os n6meros devem estar compreendido5

en tr e' " e [65:5.29.

1

Mesm~ BAtre programas multo lon90s , dlfrc~1

e~nC(Ultra:r a I gum que ut I I i Z'O uma gam3 mui to grande d'8

n6m~ros entre os limites actma.

5e voei tem como h'bito produzir programas. observarj que em muito5 deles, existem trech~s que sio exatamente iguais, ~ndependentemeote da natureza do programa do qual etes fazem parte.

No exemplo acima~ a rotina 3001 que determina o valor de REFERENGIA e 0 valor da Al~OUOTA em fun~io do SAlARtO i uma rotina que pode ser empregada em mu't05 progFamas~ al6m do programs de Folha de Pagamento.

5' e at abe I iii de c a leu I 0 for ma n tid a 8;1R um a r - quivo em disco. a determinacio do valor de REffRENCIA e a correspoodente AlfOUOTA podem ser determlnadas C,O n form", a, fig u r a 2,. 11' •

17

F i.gura 2 ... 11 - tendo valeres d!f arql1i V05 eM d tSC01t

3181 ~ ~--------------------------------

al81 II Determlna 0 valor de REfERENCl1 e

3812 II a All QUOTA 'em fURcao do SALAH 1.0.

·"'1··',88· 3,· ,

~ ---------------------------------

3884 II

3885 OPEN ·"TABIAPAS .... AS 11· LEN=12 3886 FIELD '1# B AS REfS.4 AS ALIO. 3887 REG = 1

3,88.8 GET tn ~ REG

3889 IF SAlARIO < eVO(REF" THEN:

REFERENCIA = CVDlREF$) . AL'QUOTA = CVS(AlJO$' <0 CLOSE .,

= RETURN

3818 REG = REG + 1

3811 IF NOT EOF(l)~ THEM GOlO gleB

381~ RETURN

A padroniza~~o da numera~io de trechQS de programas traz in6meras vantagens ao programador.

Uma delas i a de fixar 0 conte6do do trecho ao n'maro. No exempto acima. a numera~~a de 3001 a 3812 poder6 ser ut' litada sempre para essa rotina, em Qualquer programa desenvolvido. Assiml quando 0 programador estiver anal isando a Ilstagem de um programa qualquer e encontrar a ~n5tru~io=

GOSU8 3B88

- . --

saber', automaticamente. que sa trata de uma rotins que determina 0 valor de REfERENCtA e da AltOUOTA~

Outra vantagem. como veremos mats adiante, e.contramos na elabora~io de um programs que necesslta de:ss,t!I mesms, rot ina. 0 c·omando, :HfRGE fara com que a r ntina seja automaticamente incorporada ao programa~ sem que tenhamos que digit~-'a ftovamente.

ESPACOS EM BRANCO

A velocidade e. que uma instru~io i executada palo computador depende do seu comprimento. Instrueies curtas SiD executadas em menor tempo.

Medindo-se 0 tempo gasto para executar as 'n5tru~6e5 da linha 185 do programa da figura 2.12~

18

I '.

observamos que eXiste urn ganho de tempo aproximado de 1,81% quando os 8spa~05 em branco e~o el Im~nados, ou S ·9· j a. a lin h a 1 05 es u b s t j t u fda IP 0 r =

1115 RES = SOMA + p,ARel,Al

F i gur a 2" 12 - Progr-aMa comespar;os ;1;'11 brant o.

1.8 SOMA = 1. 181 PARCIAL = 28 182 MX = 1111

1.83 TIME - 8

184 FOR' N=l TO MX

185 RES:; SfJIIA .• ' PARe II At

186 NEXT N

117 PH I ,NT "TEMPO = ·"T IME 188 (,NO

Espa~os em branca facil ifam a visual ila~io e a com~reen5io da instru~io 8. de. acordD CDm 0 Que 6 felta pelo trecho do programa. ossa peQUeft8 dlfe,en~a de tempo pode nio ser slgnificat~va. Muitas vezes i preferrvel admltlr um prazo major na execu~iD para se ganhar rspidez na Interpreta~io da I Istagem~

EDIC~O DA LISTAGEM

o comando lLIST , multo pobre em recursos. As Iistagens impressas obtidas cOm esse comando. nio tim as p'ginas ~umeradas e nio sitr respeltadas as margens de tapo e de rodapi. tornando a Iistagem inadequada

para arqulvo. ..

Para contornar essas restric5as. 0 programadar poder6 valer-se de um Editor de Textos. Hestes casas. 0 programa dave sa, salvo no disco no formato de texto~ 0 ~ue i felto pela Instru~ios

SAV.E wA;PROGR.AMA. FNT"',I

com 0 par ama t r 0 •• A·' par a i n die a ron 0 50 sod e s e j 0' de que o arqulvD no disco esteja form~tado em ~ASCI IH. Ap6s salvar 0 programa no disco~ 0 programador dave carregar o· Editor de Taxtos e digitar os comandos para a impressio do arqUIVD.

1 '9

Casa 0 lei tor n30 dispDnha de um Editor de Textos que atenda is necessidades de numerar as p'ginas e incluir 1 inhas no tapa e rodap' da listagem •. pod~rj desenvolver um listador_ baseado no exemplo da figura 2 .. 13 .

Figura 2~i3 - Prograla listador

190 It

------------------------------------------------

__ , _ oi!i3 _, i!!'!!! -. -. iIi'iII __ ~. ... __ ~ ~ e.~ ..... _ ,_ oi'!!!"!" - - - - !III!!!! _ -. _ -

1'01 ..

11·8'2' ..

=======~;=======~=~====:=~:~====================

103 ..

184 ..

185 • 18S, • 187 ..

1 B8 • 1,99 ..

298 .. 201 II

292 • 283 "

214 2115 296

.287 211 212 213 389 ..

381 !!' 302 ' 3:08 .. 384 .. 385 gOB

318 aJl1 312 a13 31q

ara 317 318 1000 • 1881 .. Rotina cabecalho

1082 .,

II STADDR .TXT :: Impr ille a I i stagem de progr a;mas

Programa para jmprimir a listagem de pro 9 r am3 5 .. com n umer a cau de pa 9 ~ n a S e cabecalho em ~ada pagina.

R.M.Watanabe - 24/82/87

-----------------

Entrada dus Dados

-----------------

PH I NT .. .,lISTADOR ....

INPUT -fornecer 0 Nome do Programa-;N$

INPUT "For nscer (I Gabecal ho das pagin,as" ;CS IN'PUT "Fur necar a data da l l stag em"'" ;0$

E$ ~ SPACE$(S) ~

MAX :: 59

P - '1

- ,

--------------------------

Procura 0 arquivo no disco

--------------------------

OPEN' NI fOR 'NPUT AS 11 L :: 51

l 1 N'E • NPUT tU~ l $

IF L ) M:AX THEN GOSUB 1: 8B0 LPRtNT E$ .. L.$

t= l +1

I F NOT [Of( 1) T.HEN GOTO 31'" prH NT ···F I NAl DA lI5TAGEM'''

- . -

CLOSE 11' END

20

1983 1004 1885 '1808 1808 1089 1019 1 ,811 1812 181'3 101c1

If P = 1 THEN GOlO 1888

FOR r :: 1 TO I NT( 56-H,AX)

lPRINT

NEXT I

LPR tNT G$"" - .... D$" ....... p ...

lPR,NT

LPR'INT

lPRINT

P ... P +1 L :: 1 RETUR'N

- 4

Programas longos produzem i istagens i9Ualmento longas, consumindo urn bom tempo para a Impressio.

Ocorre. porim# que nem sempre estamos interessados em obter uma I istagem completa do programa. Em situa~5es de altera~6es# geralmente~ apenas um peQueno tr e eno e al tar auc . ,Nestes casus. para efeito - de arquivo_ necessitamos imprjmir apenas 0 trecho au a pagina alterada.

PROGRAHA TEXTO E DE EXECUC~O

Um programa que po ssua urns, 169 i ca c·omp l sxa

pode,' resu~tar em uma I istagem em que a Quantidade de coment'r~os e espacos em branco sio tantris que prejudlcam sensivetmente a velocidade de execu~iQ.

Nestes casos. sugere-se opera, com 2 tipos de programas: um~ com todos os coment'r~os e e5pa~09 em hr anec. que pod.emos chamar de PiROGRAM:A •. TXT e (Dutro em que os coment'rjDs e espa~gs em branco foram el iminadosl e que podemos chamar de PROGRAMA.BAS.

o PROGRAMA.TXT serA utilizado nas anjl ises para altera~aes RO programa, sando executado apenas nos testes de implantaeio. enquanto qUI 0 PROGRAMA.BAS ser' util~zado nas execu~5es rotineiras, apbs a im~ p I ant,a~io ..

As altera~5es que tiver~m que Ber introduzidas no programa de~em. sempre. serem efetuadas e testadas no PROGRAMA.TKT.

~ Depois que as a'tera~ijes forem testadas e

aprovadas~ 0 p~ogramador deve produl~r 0 PROGRAMA.BAS. Para isso deve editar 0 programa~ e~jmjnando os comentirios e os espa~os em branco 5upirfluos.

Us ~ro9ramadare5 uprofissioAaisu poderio auto~atizar 6ssa produ~io com um programa do tipo apresentado na fjgura 2.14 .

Figura 2.14 - E1 ilinadot de ] inhas REM.

100 ~' 182 .. , Oq ~

10S .. 188 .. 119, • 11? ..

11:'4 ,299 ..

::lD2 .. l. f~'

204 ..

206 209 21'0 ~'1 ':3 L L

2'~ 21B 218 220 2~2

232 300 ..

;392 .. 304 ..

:10£ 3018 318

TIRAREM.8A5 = limpa a I istagem de um program,a

EliMina os comentarjo5 e os espaC05 em branco superfluos du progr ama

R .M.Watanab'e

1'9:/85/87

--------~------------------

Entrada do nome do programa

-----------.---------------

INPUT -n~me do programa -~N$ OPEN N$ FOoR ,I NPUr AS til

LINE INPUT nl~.A$ ,

OS = ~ ~-:GOSUB 309

B$ = jjj R E~i' : ,GOSUB300 BS' : ~:~~=GOSUB 300

B$ = .... : R'EW": GOSUa 300 I : INSTR(A$." ~)

If 1<> 9 THEN AS = LEfT$(A$#1-1) • RIGHT$(A$,lEN(AS)-I}:GOTO 229

I F l 'EN(, A$) < 5 THEN; GOTO 228

PR'INT A$ , '

IF NOT EOfll" THEN GOTO 218 CLOSE tn

END

__ Miiiii!iIii ~ .... _

Rntina Elimina

r :: INSTR(A$ .. B$J

IF I <>' B THEN A$ = nfTURN,

lEFT$(A$,1-1':GOTO 306

o programs da figura 2.14 est' apr~s~ntando a listagem na tela do v'deo~ Fa~a uma altera~io no mesmo par a ,9 r av a r 0 pro g,r ama rna d I f ,j Col, don 0 d, j, s co ..

SISTEMA DE PROGRAMAS

, .

o tomprimentD' de um prGgrama ~st' djr~tam8nte relaclonado 80S fatores s8guintes;

22

,

~ a co,mp I ex .. da,ds' do .pr ob tema' ~ ,

_, d'iversjd,~d:e: de op'E;oe,s,. ofere;ci'das peto programa.

Problemas complexos e varledade de opc5es oferecidas tendem a produzir listagens grandes e ·na utiilz3Qio de tais programas 0 programador poder6 defrontar-se com os seQuintes probt~misl

- Insuficiinc~a de ~em6ria.

Dificuldades na man~pula~io do programa.

COAforme apresentado no Capftulo B. 0 espa~o d~sponrvel para programss e varl~ve~s est' restrito a determinados limites e urn. programa grande poder6 AiD caber na 'rea dlspon'vel pa~a 0 programa QU, mesmo que ca~ba_ poder6 fazer restar uma irea insuf~ciente para

a definj~~o das varijueis ~p "Rrograma. .

Nestes casas, a solu~io sari a de segmentar 0 programa em v6rlos Qutros menores, criando-se assim. um conjunto de programas mais conhecido como Sistema de Programas. Um sistema de programas poder' ser um in~co programa au um conjunto de v~rjo5 programas~ desenvolvido5 para reso~ver um determ~nadD problema.

Os v~rios programas de um sistema devem estar tigados entre sl mediant~ uma 16glca estabeleclda e a execu~io de um ou Dutro sari comandada pelos demais programas do sistema.

Um programa pode acionar a execu~~o de um DUtro par meio do comando RUN.

Para exemplificar IS50, digite e grave os 3 programas da figura 2.15 .

F:i guril,. 2.15 - .S.e9Itnt a~aD de IJMir et i na II

188 .. PARTE 1

182 PH I NT -PAR'lE 1'" 184 RUN It·PARTE~·

188 • PARTE 2

182 P'R' I NT ··PAR'IE ~" 114 RUN "'PARTEr

108 • PARTE a

, 82 PH, I NT ··PARTE :r 184 END

Salve 05 3 programas PARTE2 e PARTE3 respectivimente com a .. lnst r u r;,a 0 :

com os names PARTE1~ e execute 0 primeiro

RUN ""PART.El·'·

23

I

Existem muitas maneiras diferentes de sa io-

te r ~ i ga r 0 S pro gram a s de um s, s t ema . ~~.:;.

No exemplo acima os programas est~o interligados I inearments. como apresentado na ftgura 2.16.

Figura 2~i6 - Estrutura Li~ear.

PARTE

,-

iPARTE

PARTE

gue em grama a tsuns ftSHHa

A es trutur a de: i nt er l i gac:.ao ODS p'rogramas segeral. a estrutura em 6rvore. hav~nd~ um proprincipal que executa os demais. podendo haver desses que executam outros programas. Veja a ,2~ 17.

Figur(IJ 2,,17 - Estrutura e. Arvort.

,PR I, NG I 'PAL

,

t

GADASJRO

MOVIHENTO J 't

'ENTRADA

24

SA fIlA

2'·'

,.

i

3

t

v fru:o

I;HPRESSORA

Nesses casas. a escolha do programa a ser

~";:' c8,rr'egado pella programa 'PRINCIPAL sera +e tt a pelo usuirjo atrav6s de'um card'pio de op~5es apresentado peio programa PR~NCIPAl.

o programa que foi carregado. ao finalizar a sua tarefal poderj retornar ~o programa que 0 carregou por meim de um comando RUN.

Majores detathes sabre a int6rliga~io de programas serio apresentado5 no capitulo 8.

RESPEITO AO USU~RIO

o usuirio ~ urn ante lmpaclente e espsra que 0 computador realize as tarefas instantaneamente.

Quem j' efetuQu a carga de progr~ma5 a partir de uma fita cassete est~ hab~tuado a esperar 0 tempo nece5s~rio para a transfer@ncia do programs da f~ta par a a, memo ria .,

Mas nem todos os usuarlos passaram por 6ssa experiincia (ou prova de pactincla) de mDdo que durante a fase de carga de um Dutro pro9rama~ 6 convenjente os programas apresentarem uma mensagem do tipo:

~E5tOU carregando um Dutro programa.

Aguarde alguns instante5.~

A fim de facilitar a pro9rama~io~ 0 pragramador poderi desenvotver uma .rotina do tipo apresentado na figura 2.18 .

Figura 2.1.8 - Rot ina de Carga de Outro Prograla.

5180 ' -----------------------------------

5182 • ESPERE.FNT = Garrega Outro Programa

51l.l1, .. ""'_·. ,~

U, -----------------------------------

5110 CtS

5112 PRINT TTS

5114 PR.Nr·------) TRAN5FERENGIA ( H

5116 PRI,NT

5118 :PRI'NT'!I'EstolJ p:rovidenc.ia·ndu a ca,r.~HI do;o!O 5128 PRINrrprograma ";PPS

5122 PRINT

5121 PRINT~iI'Favor aguar~ar alguns ,instan·tes.'·· 5,128 RUN PP$

25

Satve es t a rotina para s er uti Ii zada nosjsterns apresentJdo no Caprtulo 9.

CUIDADO COM 0 NOME DO PROGRAMA

Durante a fase de d~gjta~io do programa e principalmente durante a fase de testes do mesmo. extste a necessidade de muttos LOAD e SAVE do pro-·

gr·ama.

Op r 0 9 r ama d 0 r mu t to ·8 tar e fad n, que de sa n \10 I ve um er osr ama at r as do outrlL- podera enn+und f r ~ com r ela t i va 'f a c iii dad e , 0 nome de tim p' r 0 g,r ama. A I em dis so, nomes mu~to compridos ou comptexo5 costumam provocar arros de dig~ta,~o. resultando em vi,ios programas ~guais com nomes um pouco diferentes e. no dia seguinte, ap65 fer Hvarado~ a madrugada a.pr9cura de um erro no programa. 0 programador ter~ ~ma certa dif~cu1dade em identlficar aquele que foi a~terado por 6It~mo .

. Para ev~tar e$se tipo de c~nfusio. recomendase uti I lzar nome! curtos I. 56 possfvel. com apenas uma Onlca letrs. Os comandos abaixo sio multo flcei5 de serem digitado5=

lOAD< .... P..., SAVE "P ....

Habi tua-se a sempr e dar esse nome aos pr agrama5 em desenvo~vimento. Isso evitar~ muitos aborrec i m,e n t os .

iDlepois que 0 prog·fama .es t t ver totalmeflte

pronto e inteiramente testido. baslari dar 0 nome def~nltivo com 0 comando:

26

~

I

3

t.,· d

, ec" - 'lcallS· e

, eqtrada de dados

Toda vez que pressionam05 alguma tecia do microcomputador; ast amos que:rendo i ntr aeuz i r a:lguRl t i po de'inf~rma~io~ Pode ser o'nome de urn funcionAr~o para q~e 0 pr09'sma ca1cule a Folha de Pagamento. a taxa de Juras para D, programa calcular D valor das pre5ta~aes; U~ n&mero que representa uma das alternatiVls apresentadas par um cardjpiG de opc5es ou mesmo urn comando para Interromper a execu~io do programa.

Anat~sa~do as situa~5es em que as teclas sio presSionadas podemos constatar que a inten~ia cam que ~sso i fe~tD var~a conforme as necessldades dQ programa e de fafos extern05 a ale. ta~s como erro de dlgjt~~50 ou a necessidade imprev~sta de interrup~30 do s er vt ea .

o prog:ramador dave anal t sar 05 latos segundo a o· t ic a do- p II' D 9 ram a e tam b em 5 a s U ,n do a d CJ U 5 U a rio.

00 pont~ de ~ist~ do ~rograma. essas s~tuae5es podem sIr agrupadas conforme 0 seguinte~

A - Forneclmento de d,dos ao programa.

Sio situa~5es em a' ~Rforma~~o que 5er'

, ,n OI:RiI e ~ D·e n d er eGO' • a

taxa de juras, ~tc.

que I] nr csr ama so I ic ita proc:essada~-tats camn .n i dade,.al quant i dade', a

. '

27

B - Escolha de op~5es.

Sio s i tual;oes em que 0 progr anli. prevendo dlversas alternativas de processamento. apresenta uma rela~io de op~5es. para que 0 usu6- rio esco~ha uma del as.

G- Comandos, para 0 progra,ma~

Sio situa~6es em que desejamas passar determinados comaAdos para 0 programa.

Vejamos 0 q~e pode ocorrar do ponto de vista do 'IJS uar' i O,t

A - Durante a dlgita~30 de uma determlnada informa .. ii,o,. foi tometid·() um engano. ds t e e tade antes de se terminar a dig~ta~io da mesma.

B - Fo1 fornecida uma informaQio e~rada que 56 foi notada ao sa digitar a informa~io seguinte.

C - Durante a digita~io de uma sir~e de dadDS~ ouve uma interrup~io no trabalho para que 0 usu'rio pudess8. por ex~mp~o~ atender ao te~efone, e quando retornou ~ atividade, nio conseguju lembrar em que item a di9ita~io foi tnterronplda.

o - Fol escolhida uma opqio errada. constatando-se ossa falha. quas8 aa mesmo tempo em Que a tecla da oP,io foi pressionada.

'grams a t glum de d-e

Erros de digltaeio sin Hprofissional~ dave. ati tipo de erro e~oferecer ao corrlgir 0 mesmo.

Vejamos como 6 possJvet canciliar as diversas nece5s~dade5 do programa com as situac6es. muitas ve~ l e s I'mlp , e v i 5 i v ed s , que e e , e am 0 U 5 U a rio q ua n doe: hl; for dlgJtar 05 dados.

muito comUAS. Um procerto ponto. permit~r usu'rio a oportuAida-

COHANDOS E FUNCHES PARA A ENTRADA ~E DADOS

28

Os comando5 e fun~6es que a I ~nguagem BASIC oferece para a entrada de dado, palo teclado sio os 5egtl'l ntes: CS,Rll N~ INKEV$ ~ I NPUT ~ U1PUT$,~ L ~ N:E I NPUT ~ POS.

Vamos analisar cada um dos comandos e verificar at' que ponto ele poder~ sIr ~til nas situa~6es que 0 programa vai enfrantar para reeebimento de dados.

CSRllN - Fornece a linha do cursor.

Esta funsio nos farleea 0 nimerg da J~nha em que estj posicionado 0 cursor. Os valores poss(veis s~tuam-se entre 8 e 23.

Pode ser 6til em situa~6e5 de escolha de ami das alteroativas apresentadas por um menu de op~~es.

fxemplo~ 0 programa da figura 3.1 apresenta uma tela com 5 op~5e5~ onde 0 Isujrio deve destocar 0 cursor at6 a QP~io desejada, cnm 0 auxtlio das teclas , e 1 e, em seguida~ pressionar a tec.a RETURN.

Ft gur a 3,.1 - Usa de CSRlIN iI

111 CLS 181 PH:."T 182 ,PRINT

113: PR, NT -, - Opc.ao 1" 1:84 PH NT

1815 P'R NT 10"6 - Op e au Z" 186 PIR NT

187 PH Nrr "C - Opel'o 9" 1'88 PH NT

189 ·PH :NT -D - DIPc liD ~ '11., PH NT

1111 ;PR INT HE - Upcaa, 5" 112 PH NT

11:3 PH NT

1114 PH NT "'ESCQ II ba ulla das I,peoes

ac ilia, e priess i one RETURN"' 115 He :: 15

116 we = 2

117 lOCA'TE He. ve r P:A I NT "(--- ... 118 .1 == ,INKEYI

119 IF r,="Q THEN GOlD 118

128 If ASC(I.):;13 THEN G01:O 138' 121 LOCATE HC~VC+; PRINT SPC(~) 122 IF ASC( 11$)<)38 THEN GOTO 126 123VC= we - 2

1,24 If VC(2 THEN VC == 2 12'5 :G010 '117

128 IF ASC{IS)<>31 lHEN GOrD 117

29

---I

, "

127 VC = VO + 2"

1281 FVe)1 e TH,EN VC :: 18 129 GOTD 117

138 eM :;; INT( CSRllt N/2 )

131 LOCATE #16 : PRINT -Voce 13~ END

1e0

, 01 -111 112-1';'4 115-'116

117

1i1B-119

120

121

122 12'3 124 125 126

127 128 129 198

131 132

31

esce I heul opcao ~II;; CR

Gom:€! n tar io S :

Apaga tada a te~a'para a apresenta~io diS opr;oes.

Apresenta as 5 op~6es~

Instrui 0 usu6rio de como p,oceder.

Define um valor inicial para as vari~va~5 He e VC que vio comandar 0 poslcionamento da seta l nn i c.at l va,

P05lc~ona 0 cursor na coordenada HelVe e desenha a seta ~ndicativa. Na primeira vez. 0 posiclonamanto serA na coordedenada defjnida nas ,ils,trul;o,es115e 116. Nas (Jutras '-vezes .. o PO§icjon~mento ser~ na coordenada ~ed~fin"IL

d a em 1 23 ou 1 27 • " "

Aguarda que atguma tecfa seja presslonada. 0 va i or da tee I a e a:rmaz8:nado rna var ii ave I 1$ para que possa ser comparado em 120~ 122 8 126 ..

Verifica sa a tecla presstonada fol a tecla RETURN~ que pos5ui 0 c6digo ASGt~ igua~ a 13. See; im .. sa i do e i c ~ e • pu I a'Ado para 130. Reposiciona 0 cursor na coordenada He, VC onde navt a s l da de:~u~:nhada a .seta l ndt e.atl va e apaga-a~ imprimindo espa~os em branco.

V e r i. f II CiS 8_. a t ~ c_ !' a p res Sf 0 ~a d a f o_ i ate c ta A, que POSSUI 0 codlgo ASCII ~gual a al.

Sa s im, d im,j nu io v'a I or "da ordenada, VC ~

Lililita 0 mBnor valor da ordenada VG 'em 2. Volta para repetir 0 ctclo.

Verjfjca 51 a tecla pressionada foi a tacla ,. que pus su i oc6diigO ASCI tigual a31.

Se slm. incrementa 0 valor da ordanada ve. Limita 0 maior valor da ordenada VC em 11. Votta para repetir 0 cicIo.

Calcula 0 valor da op~io escolbida. com bas~ na p05~eio do cursor. fornec~da pela funcio CSRlIN.

Imprime 0 valor ca~ctilado. Encerra a execu~io do programa.

INKEY$ - Obtim 0 caractere da tacla pr ass j onada.

Esta fUR~io formece 0 valor da tecla pressionada no instante em que 0 programa executa a fUA~io.

~ mujto difrcil 0 usu'rio acertar 0 momento exato em que a funQio est' se~da executada. Por 1550. i usuat colocarmos a fun~io dentro de um G~clo_ verifie and 0 C (I 11 5 taR t iB!men t e S e 0 valor d a tie c I a .~ pre S 5 i 0 rn a - da~ 6 UMa string vazia au nio. Enquanto nenhuma tecla for pressionada. 0 valor da fun~io 5er~ ~ma string V3-

zia.- Vej,a as linhas 180 e 1M1 da figura 3,.2 .

A grande vantagem dessa funcio reside no fato de ela aeaitar qua~quer tecla ou combinaeio com as tee las crat .. SH I fT ~ lGRA (GRAPH) eRG:RA (CODE).

- A tftulo de iJustracio apresentamQs na figura 3.2 um programa que fornece as c6digos ASCII :para cada tee's ou comb~na~io de teclas pressionadas.

, "

,

Fi gura 3;.2 - Usa de INKEYI.

181 II = INKEV$ , " 181 I F IS =""~"j THEN GOlD 118!8 112 PRINT ISC(I"

1IJH GOTO 188

Obser~e que qUIss todos 05 c6di90S ASCII desde 0 " ate 0 2'55, ' 'sao pes'S rwe i 'S de s'erem obt i dns pe I 0 tee lado., 'ObSI,f'vie fambam que '01 tr ad I~ c i ona I GrRl~C que inter rOlllp,e a trxQcueio de plrogr aim,Cis. nio tem 0 me'S,mo efeito naste taso~

INPUT - Introdll 0 va~or de uma ~ari've~ atrav6s do tec~ado.

Este camaRda i :nta r rompe a ex BCU'; IIIJ do JHO,g r a~ rna e permlte que novas dados sejam fornecidos ao programa. atravis do tec~ado.

Dos comandos de entrada de dados~ e,fa' D mai. empregadonos programas~ pois permlte:

- Antepor uma frase para or~entir a usu6rio qUanto ao dado~ seu tJpo ou unldade em que 0 mesmo dewe ser fornec' 10.

1:11 INPUT ·"Area do I o,cal, _ -.?'; AREA

31

Aqullo que' digjtado no tec1ado , Impresso na fe I a do \I' f' deu, pe rmi t i, ndo a ad' ~io da, I n,formacao.

- Os dados num6ricos sio converti 09 e armazenados d~retamente nas varJ6veis.

- Diversas informa~aes direrenta, podem ser • ntroduz i das p'or apenas luma' un i ca ; IAstrufiio.

A execu;io do programa de flgUFi 3.3 dever' produzir algo como a .~presentado na figura 3.q .

Figura 3.3- Uso de INPUT.

188 INPUT "N0II8 ~ 181 IPR I NT "'nOllI~ 182 PRINT 'J'idade 183 PRINT ''''peso 184 PRI:NT -ba i rro

Id,ade .. Peso e Bai rrolN';N~' .. I ... P.B.' = ";NS

._"" . I

_, ,..

-"-p.

- .

.

- "" 0$

:: ·:ii'·~

, -

Figura 3.,4 - Tela ()bt.ida J\pos 0 Usa dD Progra.a INPUT.

o usn deste camanda em programas "profissionais" apresenta algumas restri~5es operacionais dtflcultando. em mUito. a djgjta~io diS informac6es. Vejamas algumas delas~

A vf,gula nio pode figurar como parte da informa'~ao .

o C Q,m·8 ndo :

118 INPUT "Endiereco"" .;1$

deveria. do ponto de vista do usu'rio. ser respondldo com:

Ender.co! Av. Brasil~ 4~567

Por.m. 80 S8 pressioaar a tecJa RETURN~ aar'

32

-.

I

apresentada a seguinte mensagem de erro~

?Extra ignored

Indicando que 0 com~utadQr considerou que foram digitadas duas ~nfarmaeaes distintas~ como sa estlvesse executandm uma ~n5tru~io do tipo;

118 INPUT "PEndereco"·; AS. B$

quando a informa~iD "Av. Brasil» saria assoeiada i varl6vel AS e a outra jnforma~io n4.567N seria associ ada a var~ave~ B$~

Porim~ 0 programa est~ esperando a entrada de apenas yma 6nica informa~io. Oaf a resposta do comput adnr • dizend:D que ,8 i,nforma~ao ex tr a , au adi,cional,' nio fol considerada.

Outra restri~io importante. deste comando~ ~ Que ele 56 aceita ~nformae5es compostas apenas co. os caracteres que tenham uma representacio grAflca na tabe~a ASCII. 05 c6dig05 que nio pos5uam uma represent8~io ,gr~f~ta. tais como 0 TAB~ D ESC. 0 espa~a em braAco no infcto da informa~io e tados 05 c6digos geradcs em cDmb i nacia com ,i tee I a CTRLsio' •. norma Imente .. desprezado5 peto comando INPUT~

Des s e rno d 0 ~ fie a d i 'f rci~: apr 0 gram a ~ a 0 des i - tua~ies em que D U5U~'~O percebeu1 d~poi5 que a tecla RETURN foi pressjonada, que uma determinada iftforma~io f 0 i dig, tad: a com e f' r 0 'S e des e j a vo I' tar a um e '5 tag i 10 anterior para poder corrigir a dado que foi fornec~do.

~NPUT$ - Li uma quaatidade especificada de caracteres introduzidos palo tecla,do ..

Esta fun~io~ parecida com 0 comando fNPUT~ permite que uma ~nformaeio de comprimento determ~nado seja fornecida ao programa.

Embora parecida com 0 camanda INPUT, apresenIe as seguintes djferen~a51

- Hio ~j a necess'idade de se pressionar a tecia RETURN ao final da InformaQio. ~sso i multo bom. pois '~ma tecla a menDS que o-usu~rio ter' que digitar. Mas obriga a que todos os dados tanham 0 mesmo compr'me~to~ A tituto de exemplo~ veja 0 programa da figura3.5 ~

33

F i 9ura3. 5 - Uso do c;oli:mdo INPUT'. 188 PRINT "S191a do Estado:"; 181 ESt;: I:NPUTS (2')

182 PRINT

183 PRINT ~Foi digitado: ";ES$

- 0 cemando acelta todos os c6di90S da tabela ASC~~. mesmo aqueles que nio possuem representaQio gr'fica, tais como a tecla TAB. ESC e os c6dlgos gerados pela assoclaeio com a tec~a GTRL. 0 programa da figura 3.6 fornece os mesmos C6digos A5C~1 que 0 programa apresentado na fune~o INKEY$ Cfigura 3.21.

f ~g;ura 3~6 - Usc do INPUT'.

188 1$ = INPUTS (1)

181 P~INT ASe(I$)

1 12 GOTD 1 '1)8

- Nio , possfvel a coloca~io de alguma menS8- gem para orientar 0 usuirio. Nos casos em que a mensa- 9 o.m . e i mp res c i nd tile I • 0 p r 09 r am a dar d e v e uti liz a r 0 com,ando PR Uirr.,

'd

v leo.

,~ia de quando

- As tactas di9~tadas n~o s~o apresentadas no de modo que se torna quase impo55rvel a digitadadosl exeeto em casos de diglta~io de senhas~ S6 deseja justamente isso~

L~Nf INPUT - Associa um dado ~Atroduzido palo teclado a wma vart6vel str~n9.

Esse comando interrompe a execu~io do prograrna e permite que novos dados sejam fornec~dos 80 programa. atrav~5 do teclado, como no comandrn INPUT.

As d 'i, feren(HHj., em re I atria 80 comsndo INPUT

sin as seguintes:

- 60mente uma ~Rica informa~~o pode ser forneclda a cada comando. Caso a jnstru~io a seguir seja executada. serA produzlda um Erro de Sintaxe.

111 LI ME INPUT """_e e I dade .... ,. N$ .. Ii S

- A vfrgula pode fazer parte da informaQio. 0 programa da figura 3.7. quando exet~tado. dave produ-

34

zjr 0 resultado da f~gura 3.8 Figura 3.7 - Uso do comando LINE INPUT.

188 LINE INPUT -Endereco=D; E, 1,81 PH I NT E$

F~S!lJra 3,.8

Endere~o= Av.Bra5il.4~567 Av. Brasjl~ 4.567

Diferentemente do comando 'NPUT~ neste caso.

a i n for m a ,~j, 0 c amp let a . inc t u i n d 0 - 5 e a v r r 9 u I a • e as -

soc~ada ~ vari'vel A$.

- As informac5es sio tratadas. sempre. como str~ngs. de modo que as informac6es numiricas devem ser convertidas pe~o programa. Veja 0 programa da fjgura 3.9 .

Figura 3.9 - Convers~o de strings para ndMefos.

111 LINE INPUT -Taxa de iur05:";T$ 181 T J :;; VAt ( T.$'

- 0 comando s6 acelta 05 caracteres que passuem representa~~o gr~fica na tabela ASCII. nio aceitando as taclas do tipo ESC. TAB e os c6digos geradQs em combina~io com a tecla CTRL~

Ace~ta os espa~os em bran co di91tados no infcio da informacio.

pos - I n die a a abc iss a X que 0 cur SO roc U p 3, • Esta fun~io nos fornece 0 n~mero da coluna em qae esti posicionado 0 cursor. Os valores poss(veis 5~tu8m-se entre 0 e 39.

Pode sar 6ti I em Situa~aes de escolha de uma das atterlativas apresentadas por um menu de op~5e5.

Exempto: 0 programa da figura 3.10 apresenta uma te~a com 4 op~Bes. onde 0 usu~rio deve deslocar 0 cursor at6 a op~io desejada, com 0 auxf I io das taclas do cursor~ em seguida. pressionar a tecla RETURN.

35

Figura 3.10 - llso da flJI't~ao pas.

111 ClS

181 PRINT ·"Opcao 1 ---------- ... +"'" 1,82 PA I N.J"·

1ea PR~NT "Opcao 2 + !n

184 PH INT .... 185 PRINT ·Opcao 3 -----+ 186 PRI,NT ..

181 PRINT -Opcao 4 --+ !

1 88 PH I NT H !! t, III!

189 PR I NT ... A '6 C 0'-

111 CR= 1

111 LOCATE 7+3"*CR .. 9=PRINT .........

112 LOCATE 7+3.CR~18:PRI,NT ··t"

113 LOCATE 7+3.CR .. 11 ,P,R"NT "I"";

114 1$ = INPUT' (1)

115 IF ASt (1$) = 13 THEN GOIO 127

1116 LOC,ATIE 7+3.CR .. 9:PRI'NT ....

117 lOCATE7+3.CR' .. 18: P:R tNT •• ' ••

118 LOCATE 7+3;.CR. " :PRINT' N .,

11 9 If A5'C C 1$) 028 THEN GOIO 123 121 CR :; 'CR + 1

1,21i IF cn > Jt THEN ICR = 4 12i! G'OTO 111

123 IF AS'C (.S) <> 29 THEN GOTO 1111 124CR ~ CD - 1

125 IF cn < 1 THEN CR = 1 '12i6 'GUrO 1 '11 '

127 CR = INT((POS(8)-1)/3' 129' LOCATE .' .. 14

129 PH I NT' Ii"Voce esco I he,D a opcao""; 5-CR 138 END

I

I iii",

·

I

! ,

,

,""



."' ..

·

I··

;

ComentartOs:;

101 ,Apaga tada a tela para a apresenta~io das

oPf;oes.

101-189 Apresenta as 4 op~5es.

118 Define um vaJor inieial para a vari'vel CR,

que: vai j ndt car 0 numer,o d,1 Ope-aD 8 'sera

empregada junto com 0 comando LOCATE para posicionar 0 cursor.

111-119 Desenha a seta que ildica uma das op~5es •

. 114 Aguarda que seja presslonada alguma tecla e armazena 0 c6dfgo da tacla pressionada na varhivel 1$.

36

I

.'

,

j

115 Ver~f~ca sa a tec'a pressionada i a tecia RETURN.

116-118 Apaga a seta indicativa, impri.indo braRCOS+

119 Ver~f~ca se a tecla pressionada foi a tacla ~ cu j 0 cod i go ASe I I, e 28.,

120 Incrementa a vari~vel CR.

121 VerJf~ca se a vari~ve~ CR estj dentro do limite suner i ar.

122 vo~ta para repetir 0 c~clo.

123 Verifica S8 a tecta pressionada ~ a tecta _, c u joe 6 dig ED AS C I I e ,29.

124 Oecrementa a varj~ve' CR.

125 Verifiea 58 a vari~vel CR estj dentro do limite, t nt er l or.

126 Volta para repetir 0 cicio.

127 Obtlm 0 valor da DP~Ao 6scolhida a partir da

posi~io do cursor.' obtida com a fun;io POS.

128 Posiciona 0 cursor.

129 Imprime 0 n6mero da op~io escolhids.

130 Encerra a execu~io do programa.

ROTINA PARA A ENTRADA DE DADOS

Os comandos e fun~5es que permltem a entrada de ~nforma~6e5 paiD tectado apresentam caracterrsticas pr6prtas de func~onamento.

De forma resum~da. tais caracteristicas sin

as segu I nt es , ' -

CSRltN - fBrnece apenas a posi~~o vertical do cursor. nia serve para a digita;io de dados.

INKEY$ - Acejta qualquer caractere do tec~adD~ por6m nio mostra no vfdeo a facia pressionada.

I

[



INPUT - Nio identlfica os c6digos produzldos em comblna~io com a tecla GTRL e nio aceita a virguJa no meio da ~nforma~~D. Mostra no vfdeo as teclas pressionadas.

'NPUT$ - A informa~io deve ter um comprimento fixa. e 0 que for dlgltado nio , mostrado no vldeo.

llNE INPUT - Aceita a virgula. por~m nio reconhece 05 c6dlgos produzldos em comblna~io com a tecia CTRL. Mo'tra no video, as tectas pressionadas.

37

POS - Fornece apenas a posi~io horilontat do cursor. nio .serve para a digtta~~o de dados.

A escolha do comando adequado para a entrada de dado s. depende do t (po de' Ii nfolrmacio que sera dig itada para 0 programa.

As teciasl sozinhas OU comb~nadas com do tipo SHIFT~ CTRL, CODE ou GRAPH. (ou RGRA e produzem c6digos que s~o enviados palo tec~ado mem6ria do computador.

outras lGHAL para a

Ta~s c6digos sio comblna~aes de 8 bjts. com si9nif~cados padronizados pela conven~iD ASCII.

Embora 0 tectado tenha a capacidade de gerar 256 c6digos d~stintos# nem sempre desejamos. ou necessitamos, de todos eles.

vejamos~ para cada situa~io de digita~io de informa~6es. as faixas de c6dlgos que possam interessar aos programas.

Na digita~io de Dados Num'rico5~ estaremos fornecendo ao programa, lnforma,aes compostas pela combina~io dos algarismos 9 a 9 e simbolos + - .• . Observando a tabela ASGJi. notamos que esses srmbolos correspondem aos c6digDS &H2B a &H39.

Ha digita~io de Dados A~fab'tlco5. somente maI6scu~a5. estaremos fornecendo ao programa informac5es. compostas pela combinacio das ~etra5 de A a Z. que corresPDndem~ na tabela A5CII~ aos c6dlg05 de &H41 a &H5A.

Na di9ita~~o de Dados Alfab'ticos, inclusive mtn6sculas. estaremos forRecendo au programa tnforma~5es compostas pe~a combina~§a das ~etras de A a z~ que cur r aspundem, na tabel a ASCII. aos c6digos de&H41 a &H1A.

. Na Escotha de OPc5as~ usam08 apenas as tec~as

ie' para poslcianar 0 cursor sabre a oPcio dssejada e mais a tecla RETURN para indicar a escolha. N~5te casoJ os c6dlgos que nos interessam sio os 5eguintes=

&H1E para a tecla • &H1f para a tecta,

&H0D para a tecla RETURN

Como se vi. em cada 5ttua~io de digita~io de jnforma~io. a Quantidade de cbdigD5 d~stlntos i limitada e bern Inferior a05 256 possfvels de serem gerados palo tec'adD~ ,

Embora as situa~aes de di9Jta~io de ~nfo'ma.~5e5 sejam distintas e possam ati ser representa~as

38

por te~a5 di5t~ntas (uma tela s6 para a EscQJha de Ope5es. outra para a Digita~io dos Oados e Qutra para dar comandos para Q programa). seria interessante, mtsturar determjnadas teclas de cantrots. possibili-

-tando a dig~ta~~o de comandos em situa~5es em que 0 pragrama espera a di9ita~io de atgum dado do problema.

- Urn e x emp I 0 dis S 0 50 e ria, n a dig ita ~ a 0 d a ~ rea

do TerrenD em ~m programa de Topografia. A tela de digita~io da Area poderia eer a1go como 0 apresentado na figura 3.11 ou algo majs completo como 0 ~tu5trado na fiigura 3.12 .

Figura 3.11 - Pro9r~.a dr topografia.

Figura 3.12 - Prograli dE topografia.

Par a 0 U5t1aF' H:.que est, ver utt ,I i zandc (} er agra~a pela primeira vez. a prlmelra te~a poder' provocar uma du,vida quanta it unidade em que -a ',rea deva ser fornec~da ao programa.

Para 0 usuArlo que J' estiver fami I tartzado com 0 programa. a segunda tela poder~ provocar uma fadiga visual pelo excesso de informa~6es apresentadas na tela do vfdeo. AI6m disso. em programas cuja Entrada de Oados seja const'turda por ~m conjunto grande de dados, a indica~io completa do tlpo de informa~~o em cada campo# poderi fazer com que os dados necessir~os nio caibam em uma ~n~ca tela. dificu1tando a sua digtta~ao.

Uma das manetras de contofnar essas situa~6es ser i a 0 emprego de uma tel a S FmPl1 e s Ie a menf;ioda u:nidade da .rea no manual do pro9ra~a e obrigar os novos usu6rjos a lerem 0 manua~.

Outra maneira, mais e~egante. i Introduzir uma tecla especiat, par exemplo CTRLtA (A de auxfl io) que~ quando pressionada, com 0 cursor em qualquer dos

39

campos de Entrada de Oados# far' com que apare~a~ Rum canto da tela. una pequena expf ica~io sobre 0 t~po de dado esperado pelo programa naquete campo.

No exemplo anterior. ap6s a pressio da tecla CTRL-A~ a tera do vfdeo se mostraria de acordo com a figtlra 3.13 .

-

.r

F i 911ra 3.13- lela ICOI exp 1 i[a:~ie5.

Dasse modo~ a teJa de d~gitaeiD de dados fica rnais enxuta. contando ~penas as' explica~ae5 m'fl~mas necess~rias. facilitando a sua visua'ila~ia. As dema~s exp~ica~5e5 adicionals que 8ventuatmemte possam vir a ser necessirias nio sio normaJmente apresentadas no v r dlo, - apar ece.ndo so,m'ente quando a tec I a CTRl-A fo r pressri anada.

Como conjugar a entrada de dados com a digita~io de comandos para 0 programa?

Pode-se elaborar uma Rot~na de ERtrada, e fazer com que em·todas as situa~aes de entrada de dados ou de djg~ta~io de comandos para 0 programa. a entrada saja felta por essa rotina.

Vejamos quais seriam as especJflca~5es para essa rotina:

1 - Permitir a entrada dos dados que representam a vjda real, tais como 0 nome de pessoa5~ endereeo$, n6- me re s e 0 u t r 0 S •

2 - Permitir que em situa~5es em que 0 tamanho da informac~o seja prevlamente conhecido nio seja necess'rio pressionar a tecla RETURN. Por exem,lo. as siglas dos Estados brasileiros sio farmadas por 2 tetras.

3 - Permitir que tec~as especiais e de controle seJam pressionadas e devolver ao programa 0 c6dlgo da tecla pressiDnada.

iremos

II N:KEY$~ cod i g06·

Para poder obedecer a essas especifica~5es~ desenvo~ver uma rotina baseada no comando par ser 0 comando que abrange toda a falxa d05 ASC I I .

1 - 0 n6cleo bjsico da rotina ~ formada pala tnstru(;ao;

328 'K$ :: I NKEY' :; I:F K~';;;'"'·" THEN GOlO 321

quando 0 computador aguarda at~ que uma tecla qualquer seia press~onada.

2 - logo que uma tecta for pressionada# a rotina deve ver~ficar S8 essa tacla i OU nio uma tecla de contro'e~ representada por um c6digos ASC~f entre 0 e 31~ com a jnstru~30;

338: IF ASC,f lS' < 32 THEN RETURN

3 - Nio sando uma tecta de cantrole, 0 s(mbolo d~-

r gltado deve Bar adicionadD iquele anterlormente dlgitado~ e armazenado na string A$=

348 A, = AS + lit'

4 - A tecla pressionada dave ser impressa no video~

346 PH'INT KS.

5 - A string AS. sando do tiPD acumulativs. deve S8' nzerada" no inrcio da rotlns;

3'. as :: - ..

6 - Ver~ficar S8 a string de entrada AS jj atingiu o compr~mentQ esperado para a informa;io. 0 comprlmento m'ximo da strtng deve sar previameote fornecido na v,i,riavQII CS~

a.se IF LEN(A'} =&5 THEN RETURN

7 - Nio tendof ainda# atingido 0 comprimento esperado. a rotina dave vol tar para a recep~io de mais ~ma tee la ,::

3S8 GOIO 321

41

B - A rot~na deve permitir a correc~o de algum ca-

ractere que tenha sido digitado erradamente. A ~Rdtca- .,~

!.tao de correc;ao pod€! sir fa i fa com a te e I a Back Space

cuJo c6digo ASC'I , B:

328 If ISet K$, )=8 THEN PHI NT CHR$( 8,n ""CHRt.( 8,,; ;.A$=lE:Ff${ At" LEN( A$ '-1 J :GOTO 328

9 - A rottna dave verlficar sa fot press~onada a tecla RETURN para final ~zar 0 dado. A tecla RETURN pas sue o. codigo 13:;

324 IF ASC(K,) = 13 THEN RETURN

A rotina j apresentada na ftgura 3.14 .

Figura 3.14 - Rot ina para (he-car RETURN.

388 'S = hl!!"

32BK$ .~ I N,IEY, : IF K*=" ....... THEN G;OTO 321 32d1 ,~F ASC( KI) =: 1,3 THEN RETURN

328 IF ASC( 1($) ;;; 8 THEN PHI NT CH.RO( 8 )"" NCHRS( 8". :.a$=lEFT.,( AS .. t[N( '$)-1 )

;GOTD ~8

33'8 I if ABC( K$) < 3C' THEN RETUR,N

a111 A" = ". ... 1(. 345 PRINT '$;0

358 IF LEN( A$) I: CS THEN REYUR:N 3GB GOTO 328

~ claro. que as especiflta~5es da ratina nio sio somente aquelas acima apresentadas. 0 programador deveri. em fun~iD daquilo que ele desejar# etaborar suas pr6pr~as especjfjca~aes.

Par enauantu. para sedimentar a's ide-las aaresentadas. teste 0 fUncionamento da rotina com um programa do tipo apresentado na figura 3~15 .

As taclas de controle. devem~ na m~dida do poss(vel. estar relac~onadas com as situa~ijes pr~tica5

que podem ocorrer. -

42

t Figura 3.15 - Teste da roti~a para checar RETURN.

"-T'

18'8 ClS,

1 '81 PRI NT "I' PROGRAMA TEST~'

112 LOCATE 8# 1 II :: PH liNT ···AREA: ....

183 LOCATE 6.11.1

1114 CS=1'

115 GOSUB all

186 lOG,ATE '8 .. 28': PR I NT 5T'RNG$( 48 .. ,- ... )

187 IF A$=""'" THEN IF ISC( KS )(32 THEN lOCATE 8,,28

: PH INT NFOI D:IGiITADO: CO,NTROt _it. CHR':${ ASe( K. ,)+64, )iP. ;: ..

1,188 IF as(>-- THEN LOCATE 18 .. 21

zPRI,NT ·-fOI DIGITADO:··A.-: ....

1! '89 GOIO 183

Assim~ sugere-se adotar a segu~nte conven~iD:

CtrltA Auxilio. ApresBnta uma orienta~io de como proceder.

GtrltC Poslc~ona 0 cursor no 61timo cam,o de digita~aa.

CtrltE Poslc~ona 0 cursor no pr~me~rD campo de

digitac;ao.

Ctr +H Move 0 cursor para 0 campo anterior. etr tl Apaga 0 resto j d~reita do cursor. Ctr tQ Move 0 cursor para c~ma.

etr +U Move 0 cursor para a campo segu~Ate. Gtr +X Avan~a me~a pigina.

Ctr +Y limpa todas os campos de djgita~io. Ctr +1 Move 0 cursor para baixo.

Anatise as fun,5es que as teclas CTRL desempenham em outro! pr09ramas~ inclusive aqueles que faram adqu~rldos prontos e procure padronlzar as fun~aes dessas facias. para facilitar a vida do digitador.

Na escolha das taclas de controle. procure levar em considera~~o a disposle~o das teclas no teelado. As feclas CTRl+A. por exemplo. podem ser acionadas com ~ma s6 mio~ enquanto que as teclas CTRl+P 96 podem ser acionadas cam ambas as mios.

Procure tamb'm~ usar a mesma eonven~io de teetas em todos os seus programas. pols i terrivel a djgita~io de dados quando em um programa CTRl+S signif~car uma coisa e em outro programa 0 mesmo CTRl+S sjgnifiear coisa bern diferente.

43

EXEHPLO PRt\:TICO

Vamos desenvotv8r um exemplD pritlco para a di9jta~io dos dados.

A tela que deve ser usada para a djglta~io dos dados dave tar 0 aspecto da figura 3.16 .

Os campos para a dlgltaQio de dados sio apresentados na tabela da f~gura 3.17 .

Com rela~io .s facias de controle a serem ut~tizadas DO progra~a~ siD apresentadas junta~ente com sua descri~io na tabela da figura 3.18 .-

A figura 3.19 mostra os c6dig05 ASCI I das taclas de controle uti'izadas no programa.!

Finalmente. a listagem completa do programa exemplo j apresentada na figura 3.20

F i gura3. :16 - Tela para dig i ta~aD dos danos.

123~5678901234567a9012345678901234567890

01,

02 ** CADASTRAMENTO ••

03

04 0 a t a .xx IXX I)(X 05

86 iNome:KXX~XXKKKKXXX~~KXXXXXXKXX

07 End.IXXXXXXXXXXXXXXXXKXXXXXXXXXXXXX 98

89,Gldade,XXXXKXXXXXKXXXXXXXXX Estado;XX 101

12a4567898123~56789012345678901234567896

Figura 3.17 - Ca.pos para digita~io.

I
SEQUeNCIA FINAL IDADE TAMANHO NOME DO CAMPO
I
1 Dia do mes 2 DIA$
2 Numero do , 2 MES$
mes I ,
3 Nu,me'fo do ano 2 A.NO$
4 Nome 25 NOM$
S E,nde're~o' 31 EDR.
B, Nome da cidade 28 CI'D.
7 Sigts do estado 2 , EST. Figura 3.18 - T£clas de controle.

FUNCiO

-TECtA

,AUXIlio.

Ir~6X!mO - avan~a para 0 pr6ximo registro. _ Imp og z a ~

Final lz a a entr ada do dado. Volta 0 cursor apagando. Movimentam 0 cursor.

Leva 0 cursor para 0 prime~ro campo. Apaga 0 campo ~nde est' 0 cursor. Mostrs as tec~as de c~ntro'e.

CTRl + A C,TRl + P GTRl + L

RETURN BACK SPACE:

S,ETAS

I

I' HOME

E.SC l'

A combina~30 de teelas CTLRtA (Auxll jO) taz surgir uma explic8Gio sobre 0 tipo de dado que deve ser digitadc no campo onde est' 0 cursor.

A pressio simult§nea das teclas CTRltP (Pr6- ximo) final Iza a entrada de dados, mostra urn resumo do que fol digitado. ~ impa os campos de dlgit~~io de dados e posiciona 0 cursor no segundo campo (Nome) para a dlgita~io dos dados da pr6x~ma pesso8. 0 primelro campo' saltado. para Mia tar que S8 digitar a data novamente.

Em um programa compteto. ap6s as tee las CTRLtP~ seria providenciada a grav8cio dos dados digitados ~m um arquivo em disco. No presente programa. onde prOGura-se i~ustrar apenas 3 parte de d~g~ta~io de dados. 0 progra~a ir~ mostrar. e~ urn outra te~a. todos 05 dados di9itados.

A combina~io CTRl+l (L~mpeza) Ilmpa os campos de digjta~io de dados e posiciona 0 cursor no primeiro campo.

A tecJa RETURN finattza a entrada do dado e posiciona 0 curSQr no pr6xlmo campo .

. A tecta BACk SPACE tal 0 cursor voltar para a coluna anter~or apagando 0 caractere que al I se encootrar.

As t ac I a s ~ e , po 5 i c ~ 0 n am 0 cur S (1 r no p r {) x i - mo campo. Coso 0 cursnr esteja no 6ttimo campo da tela serj deslocado para 0 pr~meiro campo.

. As t 8 C ! as --- e , po sic i 0 nam 0 cur so r no camp 0 anterior. Caso 0 cursor esteja no primeiro campo da te ~ a. nao havera mow tmentrD ..

HOME p05ic~ona 0 cursor no prlmeiro campo da

tel a .

45

Quando 0 cursor estiver no meio de um campo~ ESC apaga 0 que foi digitado e posic~ona 0 cursor no jnic~o do campo. Quando 0 cursor 8stiver no primeiro campo. vo~ta i tela anter~or. Como nio hi tela anteria r . f j: n a I II z a a e x e C U f; a 0 do pro 9 r 8:m a .

f i g!Jra 3.19 ~ Cod i 90~ ASCII das he las de cCl:ntrol'r.

TECLA DE CONTROlE

CT:RL+A GTRl+P GTRl+L RETURN

--- ........

~

,

......

A HOME ESC, ?

Auxill t o Pro,ximo

L i mpe z a Finalj,za ESQuerda Direita !Proximo Esquerda ant er ror ~nfcio ES.QU8I;i Tee 1;85

Go[)IGOS MSX ! I BM PC

1 16 12 13

8 28 31 2'9 30 11 27 63

, 16 12 13

8: 071 080 075 872 071

27 63

f

I

i

I

fi9ura 3.20 - Listagell do program.a-exeIllP]o.~

109 p ===;=;~=====~~==;==================~:

181 .. [XEMPlO.HAS :: Testa Rotina de Entrada

1·0~ ~ ====~=~;=~===============:~~;;======= .uc

103 ..

104 • R.M~Watanabe 20/03/87

1'85 •

~o .... n... ,0

~~u -----------------~~

?01 ~ Parametros Iniciais

202 0 -- --------

210 DIM HC(7).VC{7)~ZC(7)

212 Heel)= 5:VC(1 )=4:ZC(1)= 2

214 KC(?)~ R:VG(2)=4:lG(2): ~

216 HC(3)=11;VC{3J~4:ZC(3)= 2

218 HC(4): 5;VC(1)=6:ZC(1)=25

220 HerS): 5.VC(5):7:ZC(5)=30

222 He(S)= 7;VC(6)~9:ZG(6)=20

224 HC(7)=35;VC(7):9:ZG(7)~ 2

239 DIA$ = SPACE$(2)

~32 MES$ = SPACE$(2)

234 ANO$ = SPACE$(2)

46

aas N{It$:; SPAGE${ 125)

230' EDR$ == SPacE'( 38 J

248 GillS:; 5PAGE$(29)

242 EST. = SPAGE${2}

244 eR =1

250 GOIO 48~

300 A$ :: """": LOCATE ~.1

326 K$: =1 NKEY$~ I' F K$= ...... " THEN GOlD 328 922 IF A5C" K$)= 13 THEN RETURN

321 IF ASC(K$): 8 THEN PRINT CHR$(B)Q ~CHR$'B);:

A':lEFT$(A$#LEN{AS)-1):

GOTO 320

328 I' ,F ASG( K:$' := S3 THEN A$=K$: RETURN 33'0 IF ASe( K$' (32' THEN A$::;K$.: R:ETURN 340 AS = A$ + K$

342 PR'I NT K$;

3501 'F L EN( A$) :: &5 THEN R'ETURN 352 GOTO 329

4-,o,_' ,A,_, "

~uo -----------------

481 " Desenha a Tela

402 ~'-.------------

411 CUi

411 PR' NT

412 PR NT SPGC 10 ) it ..... GADASTRAHENTO ,*"-r'''

41:a P'R NT

414 PR NT

415 PR NT UOata: I I ~-

416 PH NT

41 7' PR NT uNome; 'lU'SPG ( 25 ) .... ;; ""

418 PH NT "End-;~5PC(39JQ:~ 419 PH NT

421 PA 'NT II"Ci dade :"",5PC,(28)"" ;;Estado; ....

588 • -------------

:582 ~ MostraVal ores

584 ' --------------

519 LOCATE HC(1).VC{1):PRtNT Dll$

512 LOCATE HC(2).VG(2):PRINT MESt 513 LOCATE HC(3)~VC(3)=PR NT ANO$

51 4 L OCATE He ( 4 :, , 'VG(<1 ) :: PR NT N'OM$

'515 LOCATE He( 5}, VC(5) ~PR! NT EDRS

518 LOCATE HG(B)~VC(6)~PR NT GIO$ 517 LOCATE HG(7).VC(7):PR NT EST$

688 ~ --------------

B82 • Entrada de Dados

',,[liD,,4 "

uv ----------------

610 LOCATE HC{CRt.VC(GR}

612 CS = lG{GR):G05UB 389

648 IF lEN{AS) = 0 THEN GOlD 711

47

6SA J·F ASC(~$) = 1 THFN ON en GOSUB 1110~1129.

1138.11~0.1159.1180.1170: corn 60'0'

55? If ASC( A$ J :: 16 THEN (;010 00:0

654 IF ASC( AS) 12 TtlEN corn ,23.0

65.B 1 r ASC,( 1\$) 13 THEN GOlO 710

658 If ASCfA$) - 9 THEN Goro 720

6Gft tF ASC(A$) = ?O THEN GO TO 718

66,2 II r ASr.C, A$) ;0, 31 THEN GOTO 718

654 I F ,ASC( A$) ::: 29 TUEN (;'OTO 720

866 IF ASC{A$) = 30 THEN GOTO 720

668 IF A5C(A$) = 11 THEN CR~l:GOTO 680

678 If A5C{A$) ; ?7 THEN ON en GOSU8 1210.12?0.

1238.1249.1258.1260.1279:

GOfO '500

672 I FARe( A~) ~. 63 THE'N' GOlO 1 '308

674 IF ASCCA$) < 32 THEN GOlO 609

676 ON GR GOSUB 730" ']Q0, 759. 768 ~ 710 # 788, 7'99 '678 GOTO 719

718 ~ ------) Avanca 0 Cursor

712 GR = CR + 1

714 If en > 7 THEN CR = 7

716 GOIO BOO

720 ~ ------) Retrotede 0 Cursor

72,2 GR ;; ICB - 11

724 IF CR < 1 THEN GR - 1

72i6 GOTO 689

73'9 D I A $ = A$

73'2 RETURN

7'19 "E5$ - A$

742 RETURN

750 ANO$ =: A$

752 RETliRN

76,0 NOMS ;:: A$

162 RETURN

770: EDR$ :: A$

712 RFTURN

78,9 C I 0$ :: A $

782 RETURN

790 EST! = A$

792 RiETURN

B98 • ------) Fina'tzacao da Entrada B1'0 cts

812 P'R I NT

B14, PRINT

8"6 PRINT ··rOR'AM DIGtTA'D05:1'''

B18 PRINT

828 PRINT ·"DATA="'OI: Ail"· rltMES$·" rI'ANO$

822 PH I:NT ... N<»1E= .... NOM.

824 PH I NT ·'END. =II"EDR$

826 PR I NT "!!C I DADE= .... C r OS

B2B PRINT "ESTADO=NEST$

838 LOCATE 1~19

832 PR I N:T "Press illioe qq ue r tee I a"

934 K$ .:= I NKEY$: IF KS;;; ........ THEN GOTO 834

B3B LOCATE B~19

83B PRINT SPC(36)

B40 'GOTO 238

1101 .. ----~-> Mensagel5 de Auxi1im

111 ro MSG$ :: ""1} i 9 i tar 0 d ta entre,n e ::11-

1112 GOlD 1189

1129 MSG$ == '··Dig itar 0 "l1Iumero do mas entre 91 e 12"'"

1122 GOlO 11 B~8

1138 I1SG$ := "!I'Di gl tar 0 a no"'''

1132 'GOTO 11 Be

1149 "SC$ ::: ·"Digi tat 0 nome, com ate 2~5 I at r as"

l' 142 sore 1180

1150 MSG$ :·"D ts ita r 0 en II e r ec 0 com ate 3e C a r ae fe r e sl!'~

1152 'GOlD 1180

1188 MSG$ := .... 'Nome da ci ade com ate 20 car acteres"

1162 GOlD 11B8

1170 M5G$ : -Digitar a sigta do estado-

1172 GOTO 1188

1181 lOCATE IL 1 9

l' 182 PH I 'NT M,SC.

1'1B4 LOCATE 'L29

1188PR I NT .IIPr ess i DRiB qquer tee I a··

11 B8 K$= I N:KEY' = t F K .. =H.... THEN GOTO 118'8

1190 LOCATE .~19

11 92 PHI: NT spec l ENe "S,C")< )

1194 l'OCATE 1 .. 28 .

119& PRINT SPC(38)

1190 RETURN

121: B 01 A, = SPA.CE$(2)

1212 RETURN

1221 MESS: S,PIU~E$(2) 12'2'2RETLIRN 123'1 ANO$ ~ SP.A.CE$(,2)

12'82' RETURN

1248 N!OMS - SPACES( 2S)

12~ RETURN

125,. EDR$- SPACE$faR)

'1252 RETURN

l' 28'8 C I Os= SPACES( £!8 )

1262 RETliRN

127:8 EST$ := SPACES{ 2 ,

49

1272 RETURN

1308 • ------) Expl~cacoes 1318 CLS

1312 PRINT -As teclas de controle sao:" 1314 P'R.NT

1316 PRINT "c tr I-A Apresenta uma or i entacao .... 1318 PRINT -Gtrl-P finaliza dados-

13201 PRIINT "rGtr I-t I impa 0 camp,o"·

1322 PR I N'T uHF.TUR'N Entr ada do dadn"

1324 PH I NT .... « ou 85 Retr nceda 0 eur scr .... 1326 PRINT •• _-) au v ,Avanca o cursor- 1328 PRINT ... (-- uu ... Hetro,cede 0 cur sur" ...

1338 PH'IINT ·"HOME Volta 0 cur sur"

1332 PR I NT "'"'ESC Apag,a 0 cam'po ....

1334 PRINT~? Apresenta esta explicacaoN

1336 K$~INKEY$~IF K$="" THEN GOlD 1336

1338 GOTO 480

ORIENTAC~O AO DIGITADOR

NaD de i xe 0 co i tadn do df-gi,tador des9mparado.

Na medida do possfvel. fa~a com que 0 programa forne~3 orientat;oes.

Uma mens.as em do t j, po I

-Prassiona qualqUeF tecla para coot.ouar .....

P ar Ie c e ~ a um p r 10 gram ado r . tot arm en ted i 5 pen s Ii vel i po - r~m. ex~stem situa~5es em qua a programa Rio foroecendo nenh~ma orieAta~io~ provocar~ d6vidas no usuirio quanto 8G pracedimento a segu~r.

Para fac~ t itar a introducio de fais mensagens no progFama~ sugere-se elaborar uma rot~na do tipo apresentado ni figura 3.21 .

52 l1li. _.8. •

_V --------------------------~----

5282 ~ QOUER. FNT = Aguarda Qquer' Tec I a

5284 ' ii!!ii;l!Iiiii!I!t!!i!!!I .. , ' __ ..... ~._· "IIIIiiiiIllllliii~IHi~~oIJI!!!iI!!i'ill!!!!ll- __

52'85 C=P05(.) :~M=CSRl, I N

528:6 IPRINT ·"Pressione qquer tecla para continuar

"II'

50

5218 TIME:: I '5212 KS :: I NKEVS

52'11 1FT I HE > 288 THEN GOSUB 68311: GOIO 521 8

5216 IF K$ :: ....... THEN G:OTO ~12

5217 !lOCATE G~M:PRINT S.PAC,E$'1'B) 5218 RETUR'N

sat var es t a r o t i na para s er ut t t t aada no siste~a apresentado no capftulo 9.

A~~m dasse tiPD de orjeRta~io ao usu'r~D~ 0 programa poderA emitir sons de tonat~dad8 8 dura,io diferentes para retratar situa~6es distintas.

Existem sjtua~5es em que 0 usu~rlo cometeu algum erro de digita~io. outras em que 0 usu~riD. distrardo~ dave ser chamada a aten~io.

Uma rotina do tipo apresentado na figura 3.22 poder' proporcJonar sons adequados para cada uma dessas 5 Ii tu ac;o,es.

Figura 3.22 - Rot ina de Sons.

5.-.0 .. ' "tI .. ~ ..... '1 ..

oau ----------~----------~----

5902 .. SONS.FNT = Rotinas de 50ns

5804 • --------------~-----------

5810' ..

5012 5811

5020 .. -------) 5622

5821 50':381'

5832' 5834

-------) Som de Vai mal PL A Y ··l13 b 19 c ....

RETURN

Som de Siga PLAY · .. ·11 Sb,n

RETURN -------) Som de Atencao

PLAY ~·05V9l9gR9dV8" RETURN

SAVE "'SONS .. iF'Nr r A

Satvar esta rotina para ser uti tizada no s~stem. apresentado no capftulo 9.

5'

ROTIN~ PARA A ENTRADA DE DADOS

A seguir i apresentada uma rQt~na gen~rica para a entrada de dados, Veja a flgura 3.23.

F~gura 3.23 - lot Ina de E~trada de Dados.

, •••. ------------------------------

1 !88i? • ROTENT _ FNT - Rot ina de Entr ada!

1884 • iiiiii!i!oii!ii!_, , .. II!!!!!!!!!I!I!!I!!o .. ~I!!!!!I!iI!!! __ ~ __ 1ii!!!!!SIii

118& A$=·"" :PT=8

1.80 LOCATE ~~1 1111' REM

181,2 'Ie ,t NKE'V' = IF K$='''..... THEN GOTO 1812

1114 IF ASe( K, ) = B THEN C,ASO=1: GOIO 1848

1816 :1 f ASCI KI J ::'11 THEN CA50=2: IS'DT01 He

l11B I F ASCC i($)=12 THEN CASO=3;GOTO 184.

1128' F ISC( K, J =13 THEN CASO=4: GOT018~e

1822 F AS'C( '1<$ ) =2.7 rH~N 1(:,A50=5; GOlO 1; 848

1121 F A,Se( K$ '=28 THiE:N CASO;;:B: GOlD 1848

l8CR F 15&( K$ ) =2'9 THEN: 'CI50= 7 I GOlD '1848

1820 F A,sec Kt )(32 O'R ASe{ K.,»1.27 THEN A,,=K$:

GO'TO 1138

1113B· A$=AI+KS 1832 :PT;; IPT + 1

1834 PRINT K'~

1836 If lEN(A$,=CS THEN GOlD 1138

1838 coro 1818

11141 IF PT =1 THEN "$=;11 =- GOT01' 13:9

1842 .ON CASU GOSUB 1840 ~ 1 H68" 1878 .. 1198 .. 11,16 .. 1118"" 1120 '.~ II F AfU;,( KSI ==13 THEN PR I NT CHRI' 8) ; :: AS= l EfTS' AS .. PT I' =

GOlD 1138

114& GOTOl ,.,2

1.~B · ------) 8 = Volta apaganda 1858 If PT < 1 THEN RETURN

1852 IF PT ) LEN(.') THEN GOlD 1138

1854 PT =PT -1'

'856 A •• lEFT.CA$,PT)+RIGHT.(A.~LEN(A.)-PT-l)

1858 G=PUS(I):M=CSRtIN

1868 PRINT CHRS(B)RIG.HY$CA'.LEN(A"-PT)"' "~

1162 LnCATE C .. M ;PR I NT 'CHRe( 11)1 ;

1864 RETURIN

1866 • ------) 11 = Cursor no inAcia

1868 FOR &=1 TO PT

'878 GOSUB 1120

18'12' NEXT C

1874 PT=I

1876 RETURN

52

1878 .. 1!8:81 1882

1884

1886

1'IBO

119a

1192

11196 1198 I'

'118 1182

11M 1186 ..

1118' 111'

1112

1114

1118 1118 ;.

1121 112'2

1'124

1126 1128 ..

1138 1132

1134 .

1136·

11 a'B: LOCATE

-,,-,----) 12 - a A.p a9 3, 0 C.P'I TOldo fOR C=1 TO PT

GOSUa 1128

NEXT C

PT = 8

C=:POS( .}

PR I NT S,PACEIC CS) ;

lOC,AJE C.M :: PRINT CHRSt 8); RETURN

------) 13 ~ Sai da rotinl

IF tEN{ AS }()B THEN BETUI,N a$=K$

RETURN

------) 27 = Cursar no fim N=CS, - PT

FOR C=1 TO N 'GOSUa 1118 NEXT C RETURN .

------) 28 = AV3QCa 0 cursor

IF PT=)LEN( AS) THEN REfUR'N PRINT CiHR${28,;

PT=PT+1

RETURN:

------) 29 = Retrocede cursor IF PT{:;;IJ THEN RETURN PH I NT CHR'SCO);

PT = PT - 1

RETURN

# .' II; RETURN

SAVE "RDTENT. FJfI # A,

Salvar esta rcitina para ser uttJ izada no sistem1a ap,r'8sentado no cap r tu 10 9.

53

acelss a discoS

Este caprtulo apresenta os principais conceitos re~acionados com a uti I ~za~io de arQu1vos em disco magn'tito~ detalha a montagem e a manuten~30 de arqulvas sequencials e rand8micos e descreve atgumas tlcnicas para a manlpu~a~~o eficiente das informa,6es armazenadas nos arquiuos.

o disco magnitlco. comumente conhecido com~ Ndlsquete~, , composto de trilhas onde sio reg~strad05 os sinais magnificos que representam as informae5es armazeoadas no d~sco pel0 programa.

Cada uma das tri Ihas do disco ~ d~vldjda em

setnr es , -have nde umadetermj nada quantidade de se tor es

ao ~ongo de uma trilha e assa quantidade de setores , a mesma em todas as tr~lha5 do dtsco.

Em urn setor do disco pode ser armazenada uma quantJdade fixa de bytes de informaGio e essa quantidade' a mesma em todos os setores do disco.

A Quantldade de bytes par setor. a quantidade de s et or e s pop tr ill na e a Q1IJant i dade de tr l ~ has por disco • fixada peto s~stema operacjonal~ em fun~~o da tecnolog~a ut~lizada na fabrica~io do disk drive.

Oizer que urn determinado dtst drive )ossui uma capacidade malor de armazenamento que Dutro s~gnjfica dizer que os bytes sio gravados em uma deosidade ma~or e, para nio dim~nuir a quat idade au a confiabiI~dade dos dados neie gravados~ a tecnologla empregada

na fabrlcaeio desse disk drive dave ser mais avan~ada.

54

o padrio ~nternacjonal estabeieCido para 0 sistema MSK 6 0 seguinte:

- tamanho em polegadas

quantidade de faces ut~ I izadas por disco - quant i dade de tr i I has porfac:e

- quantidade de setores por tri ~ha

quantidade de bytes por setor

;;; 3~5 2 80 9 ~ 512

::

Di950 resulta que nos disquetes empregados no sistema MSX, podemos armazenar 0 total m6xjmo de 737.280 bytes~ ou seja. 720 Kbytes.

No Brasit. us pr lme i r as drives us adns com os

MSX foram 05 masmas j~ existentes para 0 IBM-PC, de 5.25 po~egadas e 40 tr~ Ihas por face. 0 que acarreta uma capacidade de armazenamento de 360 Kbytes. Os drives de 3.5 polegadas s6 apareCffam no mercado nac~onat 18m 1: 988' •

. Nao sa i I uda peosandlo que te de s €SS8S 720 au 360 Kbytes poderio ser utI t izados para 0 armazenamento de informa~fies_ po~s nem todo 0 espa~o do disco 6 disponfvel para arqu~vos.

o espa~o fiti i do disco ~ dividido ern 3 6reas distintas. cum fina'idades especfficas. Essas ireas sio conhecidas como:

- ~rea do 5~stema Operacional

- Area do Diret6rio

irea de Arqulvos

A Area do Sistema Operaclonal cont~m a parte do MSKOOS au CP/M encarregada de manipular as jnformaG6es que transjtam entre a mem6ria e 0 d~sco. Como sabemos. 0 n6cleo prlnctpal do Sistema Operacional esti gravado na mem6ria ROM e esse nicleo ~nterpreta e executa t odns o s coraanoos que Sa,D fop·necido$ au comput,ador. Conectando-se um d~sk drive. 0 computador passa a poder armazenar jnformaG5es em dIscos ma9n~t~cos. 0 que ~ feito mediante a dJgita~~o de comandos especrficos para essa f~nal jdade. A parte do Sistema Operacional que interpreta e executa esses comandos fica armazenada nas primejras trtthas do disco e durante a opera~~o de inici~1 iza;io do sist&ma. comumente conhecida e om I) U BOOT t~ , e I a e t r a nsf if! rid a par a a m em 6 r i, a 0 n dee integrada ao n6c1eo principa1 do MSXDOS au CP/M.

A 'rea do Oiret6rlo cont~m os nomes de todos 05 arquivos gravados no disco e as endere~os dos setorls uti ~ izados p~r cada um deles. Na execu~~o do co-

55

mando 5ulta vados

FJlES1 par exemplo, 0 s~stema operaciona' tonG diret6rio para saber quais arquivos estio gra-

no d~sco e 0 tamanho de cada um deles. .

Na 'rea de Arquivos sAo gravados as arquivos deflnidos palos usujrios. Cada arquivo do disco tem 0 seu nome registrado no diret6rio e as ~nforma;ae5 do arquivo ficam gravadas em setores de tamanho fixo. Um arquivo que tenhal par exemplo. 700 bytes de tamanho· ocupar~ 2 setores do disco no MSX au no PC e 6 satares no CP/M.

fods e qualquer informa~~o maniputada pelos programas pode ser armazenada no disco na forma d~ arquivos.

Entende-se como Hgrava~~o" 0 Ito de se registrar urna carta informa~io no ~isco. isto ~. transferir a infDrma~iQ que est' na mem6ria do computador para 0 d~sco magn6tlco oode a mesma poder' ftear armazenada para sempre.

Eotende-se como "Ieitura" 0 ato de se recuperar uma certa ~nforma~io gravada anteriormente no disco. istQ i. transferir para a mem6ria. urna certa ~nforma~io que fai "gravadan no disco.

Para podermos gravar e ler jnforma~5es no disco. devemos seguir certos procedlmentos padronlzad05 para garaAt~r Que as informa~aes que serio gravadas. 0 sejam em uma pos~~io Hconhecida" para permltir sua posterior leitura. Oe nada adianta guardar. de qualquer jaito, uma certa informa~io sa nio soub~rmos posteriormente onde ela foi guardada.

Os procedimento$ necess'rios para a grava~jo de uma informa~io no disco sio as seguintas=

1 - Escolher um nome para 0 arqulvo.

As informa~5es fjca~ armazenadas no disco na forma de "arquivosp• Um disco pode conter uma grande quantidade de arquivos djstintos. 0 sistema operacional distingue·um arquivo do outro apenas pelo nome que fica gravado no Diret6rio do d~sco.

o nome do arqu~vo deve ser formado por um conjunto de no mjxlmo l' tetras e algarismos. div~d~dos em duas partes: a primeira. conhecida camo ~nome do arquivo". , composta de B caracteres e a segunda, conhecida camo "terminacio do nome do arquivoH• ~ composta de 3 caracteres. Entre 0 "nome" e a "termina~io" dave ser colocado um ponto (".n) separador.

56

Exemplos;

CADASTRO.ARQ MOVTO.JAN FILIAl12.MOV

2 - Executar 0 coma~do para abrir 0 arquivo. Como em um arquivo conven~ionat. para podermos guardar ou acessar uma informaeio. devemos, antes de mais nada, abrtr a gaveta oode as Informae6es estio arquivadas.

Quando 0 sistema operacional executa D coman-

do para abrir um arquivo, pode ocorrer uma ,das duas

sltuac3es seguintes:

~

- 0 arquivo j' existe.

Neste caso~ as informac5es serio gravadas usobren aquelas existentes. au seja. as informa~aes anteriormente gravadas sio simplesmente apagadas e no lugar das mesmas sio gravadas as ~ova5 informa~6es.

- 0 arquivo , novo.

Neste caso~ 0 Olret6rio i aces5ado~ adic~onado 0 nome desse novo arqu~vo e reservada uma 'rea nova (s.m uso) para a grava~~o das informa~oes+

3 - Executar 0 ccmando para a grava~io.

Este camando Ind~ca quais informa~5es deverio ser transfertdas para 0 disco e efetiva a 9rav~~io.

4 - Executar Q comando para fechar 0 arquivo.

Normalmente~ para ganhar tempo. 0 s~stema operacional opera com "buffers" que nada ma~s sio que Areas reservadas. oa pr6pria mem6ria para 0 armazenamento temporjrio das informa~5es.

o tem,o que 0 sjste~a operacional sasta para efet~vamente gravar uma informa~~o ~ re~atlvameote grande~ pois para conseguir ~sso, 0 sistema necessita. entre outras at~vldade5:

57

- cn lnc ar 0 disco em mov l me nt o . no i s . Quando o disco n~o est' sendo acessado. ele est' parada para economtzar energ~a elitrica e d~minu~r 0 deSQaste mec~nico do drive.

- posicionar Q cabe~ote de teitura e grava~~o 500rs a tr l I ha de s e i a da ..

- acionar os circuttos eletr6nlcos que produzem a grava~iD magnifica.

Suponhamos que urn programa deseje gravar apcn a s aida d f'; de um 9 r up 0 d e pes 5 (I as. 0 r a 0 a ~ dad e d e peSS08S i uma infDrma~~o constituida de apenas 2 df91- to seq U e . po r ta n to, ira C (I n s urn ira pen a s 2 by 1 e s n I) disco para cada pessoa. 0 programa, natura!mente. Ira bus car e 55 a ~i ida des em a I 9 urn 0 u t r u I us a r. n Q tee lad 0 por exemp!o, e depois disso. irA gravar no disco. repetJndo esse cicio at' completar as idades de 10das as pessoas do grupu.

Se 0 sistema DPeracional tiv8sse que ~ir ao discaH a cada comando de 9rava~50, Q programa perderia urn tempo relativamente grande. pais a cada ida aD disco, ele teria que f~car esperando a execuciD de todo 0 cicto de gravaciD acima apresentado. para a graVa~~D de apenas 2 bytes.

Em vel de ~ir aD disco", 0 sistema operational Dvai aD buffer" e 16 armazena 05 2 bytes. Na repeticio do CiC~D. 0 s~stema operacional faz a mesma caisa adlcionando os novos 2 bytes aqueles ji ffgraVadDs~. Somente quandD 0 Hbuffer" j6 esti chelo i que 0 sistema operacionat efetiuamente produz a 9rava~io no disCOo transferjndo nio apenas 2 bytes mas todo! os bytes que 8stiD no ubuffer~ de uma 56 vez.

A transferincia do conte6do do ~bufferff para o disco i felta automaticamete pelo sistema operaclon a I qua f1 d 0 0 b u f fer fie a"< c he i o". d s mod (I q us q U BI n d 0 0 programa terminar todas as gravaGBes necessirias, pode ocarrer de D buffer nio estar totalmente chefc. A exec U I; a 0 d e um c n man dod e .. fee ham e n t o" d (I ar q U ~ v 0 ., gar a n ~ te que 0 resto de informac6es dD buffer que a~Bda nio foram gravadas no disco sejam efetivamente transfer~das e gravadas no disco.

58

Os procedimentos necessArios para a le~tura de informaQ5es no disco s~o os seguintes:

1 - Fornecer 80 sistema operacional 0 nome do arqujvo que se deseja ace~sar:

Ao executar 0 comandol pode ocorrer uma das duas situa~6es seguintes:

- 0 arquivo j~ existe.

Neste case um dos buffers disponlveis ser6 alocado exclusivamente para 0 arquivo e os setores oode estio gravadas as fnforma~6es do arquivo ficario dtsponrveis para 0 programa acessar.

- 0 arquivo nio existe.

Neste caso 0 sjstema operacional apresenta uma msns as em de sr ro • i nd,j cando a i nex istencia do arquivo.

2 - Executar 0 comando para a 'altura.

Este comando indica quais jnfor~a~aes. do arquivo, dever30 5er transferidas do disco para a :memo r la .

3 - Executar 0 comando para ufecharH 0 arquivo.

Com 0 "fechamento~ do arqu~vo, 0 buffer a e'e aJocado ficar6 disponfvel para ser aJocado a Dutro arqutvo.

Os arqujvos podem ser do tipo Sequencia~ ou Rand6mtco e 05 comandos envolvidos na grava~~o e leitura de jnforma~5es no disco 5~O os seguintes:

,oPEN INPUT I CLOSE

fiELD PUT I

PR'I"1 I GET •

59

o comando OPEN indica 80 sistema operaciona1 a inten;io de se traba~bar com urn carto arquivD e na execucio do comando devem ser ~ndicados:

""'-

- 0 nfimero do drive onde esti ~nserido 0 d~sco que contAm au que deverA conter Q arqulvo.

- 0 nome do arQuivo.

o modo de acesso ao arqu~vo. que poderi ser INPUT, OUTPUT ou APPEND.

- 0 nGmaro de refer~ncla do arqUivB.

- 0 tamanho dos registros.

o tipo de acesso 3D arquivo~ se sequ~ncia~ ou ran d am :~ co.

o cumando F!I ElO ap l i ca-SIB s ume n t e a ar qu i vos do tipo rand6mico e Indica os campos e respectivDs tamanho s que: canst i tuam um re s i s t r o .

Os comandos PRINT' e para a grava~io e {aitura de quene i a I .

INPUT# sio empregados dados em urn arquivo se-

Os comandos PUTM e GEII sio empregados para a grava~~o e 1eltura de dados em urn arqulvo randHmico.

o comando CLOSE' empregado para encerrar 0 t r a b a I hoc om 0 a r q u i v u , E I e ,~ fee h a" 0 a r qui v 0 eli b era o buffer correspondente para ser uti 1 izadD por urn DUtro arqulvQ que, porventura, 0 programa venha ~ abrir.

Em resumD, os camand05 de acesso a arqulvos s~o 05 seguintes:

TIPO OE ARQUIVO

SEQUENCIAL

RAND6MICO

Abrir fJ arq;uivo

- Gravar uma informa~~o

- Ler uma ~nformac~o

- fechar 0 arquivo

OPEN PRINT. INPUT If; CtOSE

OPEN PUT I GET I CLOSE

60

~ ARQUIVO SEQUENCIAL

Os arqulvos seQuenciais, como 0 pr6prio nome Indica. s~o farmadas por regjstros gravados urn ap6s 0 Dutro - segundo uma s equs nc t a . crono 16g i ca e po ssu em as segu~ntes caracterfstlcas:

os regfstros podem ter tamaohos djferentes.

- devem ser acessados somente para leitura OU somente para gravacio.

- 0 acesso deve ser sequencial.

Em outras palavras. se 0 arquivo for aberto

para l e t tur a (FOR INPUT) naO sera possivel r e al i z ar

9rava~5es no mesmo, a n~o ser que 0 arquivo seja fech ado 8, a s esui r . an er r o para grava~ao (fOR OUTPUT}.

A primeira teitura au 9rava~~o, 'ogo ap6s a abertura do arquivo. ser6 sempre no pr~meiro reg!stro. a segunda ~eitura au grava~io seri sempre no segundo registro e essa correspond~ncia deve sar mantida at~ 0 61timo reg~stro do arqu~vo.

tsso significa que caso 0 programa deseje ler o 4Bg reglstro do arqu~vo. dever' ler~ obrigatoriamente, todos os 47 reglstros que 0 antecedem. em.

Os comandos que permitem 0 acesso as informa~6es de urn arquivo sequencial s~o os seguintss:

OPEN

PRINT I

INPUT,

CLOSE

o comando OPEN fornece ao sistema operacional as ~nformac6es necess~rias para Preparar 0 arquivo.

Para as diversas op~5e5 de abertura de um arqu~vo sequencial chamado ~CADASTRO.AROn, que est6 ou seri montado no drive A:~ podemos uti1 izar urn dos segu~ote5 comandos:

OPEN ''''A:CAOASTRO.ARO·· FOR OUTPUT AS 11

quando se deseja abrrr um arqulvo sequencial onde 09 dados ser~o gravados peta prime~ra vez.

o programador dave tamar cert~s cuidados para evitar que a gravac30 seja feita ~em cima" de urn outro arquivo, verificando se j' existe outro arqUiVD com 0 me smo nome, at r aves do comando .

F u ES "~A: CADASTRO. ARer

61'

antes de executar 0 programa. ou embutir no pr6prio programa a verifica~~o 3utomitica da exist~ncja de out r 0 a r' fI u i v (I com 0 me smo nome. Ma i sad 'i ant e. n est e c apftulo. apresentaremos algumas sugest5es de como iS50 pude s er f ei t o ,

. "

OPEN "1= CA:(JA5TRO~A:Ror' fOR APPEND: AS .1

quando se deseja abrir urn arquivo sequenciaJ criado em urn outro processamento para adic(onar novas ioformac5es a e~e sem destruir as gravadas anter~ormente.

OP EN ""A: CADASTRO • ARI1" FOR t NPILIT A:S .1

quando se deseja abr~r urn arquivo 5eque~cial jA existente onde [remos apenas consu~tar as ~nforma~Eas 9ravadas. sem pretender efetuar quafquer tipo de altera~ao nas mesmas.

o comanda PR~NTj indica quais informac6es degravadas no arQulvo. 0 seu funcionamento ~ pacom 0 comando PRINT. diferindo apenas pelo paIn que indica 0 n6mero de referlncia do arquj-

vern ser recido rametro vo.

Examplo: Seja um programa que recebe os seguintes dados pelo teclado:

- nome da peS50a

- apel ida

- i dade

- n~mero do telefone

e grava 0 nome, o ape I i do e a i dade em um ar qu jl vo cnamado "tMIGOS.ARO" e. 0 apel~do e 0 n6mero do telefone. em um outro arquivo chamado "TElEFONE.TELff.

Neste caso. 0 programa ir~ trabalhar com 2 arquivos simultaneamente, de modo que para cada um deles precjsamos te, UMa conjunto d~5tinto de OPEN. PRINT. e CLOSE.

A l rst asen do p r usr ema se r i a e l sn do t t co ,

200 MAXFIlES = 2

281 PRINT -Inicio do Programa-

283 OPEN -AMIGOS~ARQ- FOR OUTPUT AS .1 284 OPEN -TELEFONE.TEl- FOR OUTPUT AS ,2

3'80, Gl5

301 INPUT ·"Nolne ."; N$

392 I F N,I=·" F I M""TH'EN GOTO 508 303 INPUT -Ape. ido -;A$

304 INPUT -'dade -;1$

305 INPUT -Telefone -:1$

402 PRINT '1.N$:PRINT *l~A~:PRINT 11. IS 403 PRINT B2~A$,T$

404 GOTO 300

500 :PRINT -"Final do Programa"'" 581 CLOSE 11

50:2 GL'05E 112

503 END

Se tos se po s s l ve l e nx ersar 0 quefoi gravado

em urn arquivo sequencial. verfamos algo dO tipo;

Olhando (I exemplo. podemos tirar algumas con-

clusoes:

1 Em um arquivo sequencia~~ cada U~ dos campos fica separadn dos outros ..

2 - As informa~6es sio gravadas conforme fof' am dig i t B' d as.

Caso seja executado 0 segutnte programa: 281 PRINT "Inicio do Programa-

283 OPEN -AMIGOS.ARO- FOR INPUT AS .1 204 IF EOF(1) THEN GOTO 500

382 INPUT 11~X$,YS

63

303 PRINT X$;-+~;Y$ 304 GOTO 204 -

500' CLOSE 11

501 P'R I NT ... F.. II 0 Pro 9 r am a" 503 END,

seri apresentado. no vrdeo~ 0 5egu~~tet

Carl.os de Al·Meida·+Car"iao· 14+Tereza· do Carmo' ...... Terezinha:+l6"

. Milton Ta~aka+Japones ... _ .12+A.p,arecido Simoe·s Sobrinho

·Gido+13 ... . , ....

·Ger··aldo Pratli's de 01 iveir.a+6era

. ,15. +Au.·gusto de Carvalho . ..:.

Gu~~+11.. . .

Vera Clotilda Meira+C16· 10+Nival~ete clos Sant6s Ni·va+14

F i m do ProQlt"'ama

. !

!

,

-, '

3'~ INPUT 11 ,. XS~. YI

as pr6xtmas 2 iRforma~6es do arquivo 5~O atr~bufdas~ respect~vamente. is variAvels X$ e Y$. de modo quel compete 3D programador saber a ordem exata em que as informa~6es foram gravadas para poder efetuar carre-

tamente a leltura. .

Na Nfotografla" do arquivo~ apresentada na

pigina anterior~ 05 caracteres usados como s8paradores p.odem ser vi suat i zaeus e siD -os de: cadi 90S, ASCII 13 (&H00 ~ Carriage Return) e 10 l&H0A : Line Feed).

Em a~gumas sltua~6es. outros caracteres <vfrQula. ponto-e-v(~gula e espa~o) sio usados para .separar os campos num arquivo.

134

o caract~re aspas (~) pode ser gravado num arquivo com 0 emprego da func~o CHR$(34) aite~ e ap6s a infor.ma!;ao. Par exemo I o • se qu ise rmo s g',ravar a t r as e ~HDj8 , urn bela dia~ com as aspas num arquivo

sequencial prev~amentB ahcrtG com a n~merD 1. devamos comandar:

P'R I NT til, CHRS( 34 )""HoJ e e um be I 0 d i a"·CHR$( 34)

Como veremos mais adlante. ~s arquivos de dados. definidos pela usuirio_ s~o mais vers6teis de serem manipulados quando s50 defin~dos como sendo do t~PO Randfimico. Os arquivos Sequenciais SiD mais apropr~ad05 para a comunica~io do programa com os perif~ricas.

DPEN ""GAS : .... fOR I NPUT AS .1 OPEN ·""CAS:"~ FOR OUTPUT AS .1 OPEN .... GRT :'" fOR' OUTPUT AS .1:' OPEN ·"GRP :,." FOR OUTPUT AS '1 OPEN ulPT :"" FOR OUTPUT A5 .1

ARGUIVO RAN08MICO

Os arQuivos rand6micos. diferentemente do! arquivos 5equenciais. perm~tem 0 acesso "rand6mico" a qualquer urn dos registros do arquivo. isto I,os registro! podem ser acessado5 d~retamente em qualquer ordemo

o termo ~rand6mico~ prov~m dO'ingl§s Random que slgnifica ~sem uma ordem fixa". Isto significa que 05 registro5 podem sar 1tdos au gravados em qualquer ordem e um certo registro pode ser acessado tantas vezes quantas se iizerem necess6rias no pfograma.

As caracterfst~cas principals de urn arquivo rand6m~co s~o as seguintes:

- 0 tamanho dos registros dave ser fixo. ista 6, todos 05 registros devem ter 0 mesmo tamanho.

- 0 acesso pode ser para leitura ou grava~io. n~o se fazendo essa d~stjnc~o no comando OPEN.

- os registro5 PDdem ser acessado5 em qualquer ordemo podendo ser acessado em primeiro ~ugar 0 reg ;j 5 t r 0- 5-8. d e p o i S 01 ,2, etc.

65

Os comandos que permitem 0 acesso as informac5es de um arquivo rand6mico s~o as seguintes:

FIELD

PUT

OPEN

GET

CtOSE

o comando OPEN abre execu,io ~este comando. duas cuntr adas ,

um arquivo em disco. Na situa~6e5 podem ser eo-

A - 0 arquivo nio existe.

Neste casa, 0 nome do arquivo ser~ adfcionado no Diret6rio do disco e uma '~ea nio usada se,' reservada para 0 arquivo.

B - 0 arqu~vo j~ existe.

Neste caso. 0 arquivo existents serj aberto. Dtferentemente do arquivo sequenciat. em que

na abertura devemos indicar s~ 0 acesso sari somente de ~eitura ou somente de grava~~o. 0 arqu~vo randBmico ~ aberto para quaisQuer tipos de acesso. independentemente do fato do arqu~vo ser uti I izado para leituras. grava~6es ou atual Iz~coes. de modo que temos apenas uma ~nica 5~"taxe para 0 comando OPEN:

OPENI ··A:CADASTR'O .. A:Rg"'iO 1.5 ", lEN=47

onde indlcamos 0 drive onde se encontra 0 arqu~vo. 0 nome do arquivo. a n6mero de referincia e 0 comprjmento dos registros.

No caso de arquivos rand6micos ~ obrigat6ria a jndica~~o do tamanho do registro. no par§metro LEN. pois ~ a exist~ncta ou n~o d~sse par~metro que vai ind~car aD sistema operacional 0 tipo de arqulvo. se sequencial ou rand6mico.

Uma vez fixado 0 comprimento_ lodos os registros do arquivo, do primeiro at' 0 G~t~mo, devem ter 0 mesmo compr~mento, nenhum byte a mais OU a menos.

o comando flElO define as informa~aes que fazern parte do registro e os respecfivos tamanhos m6ximos.

Para a montagem do comando FIELD. 0 programador deve:

1 - Relacionar as informa~5es que fazem par~ te do Ireg i stro.

Esta i uma atividade de ptanejamento. pols 0 programador dave escother somente as iRforma~5es que ser~o nece55~rias.

2 - fscolher um nome conveniente par~ cada urn

dos campos. .

Os campos que comr5em urn registro sio assoc~ados a nomes de vari~vei5. No casn d~ arquivns rand6micos, tals campos devem ser associ ados a vari~veis do tipo string.

IS50 deve ser feito tambim com informae5es numiricas, que antes de serem gravada~ devem ser coovertidas em stf~ngs.

3 - F~xar 0 tamanho m'x~mo que a jnforma~~o ocuparj no disco.

A quantidade de bytes que uma informa~~o ocup a no di scn • dep e nde do t i ne de informar;.ao. lofarma~5es tjpo strings ocupam 1 byte para cada caractere da informacio.

loformat;oes numer! cas ncup am 2. <1 uu 8 b,ytes

conforme 0 t~po de variivel numir~ca empregada:

"TIPO DE VARIAVEl NU:MeRICA

l nts Ir a

Real de Precjs~o SimpJes Real de Prec~sio Dupta

QUANT10ADE DE BYTES

NO DISCO

2

4

8

ExeRpio: Montar 0 comando fiELD para a defjnl,io des seguintes campos de informa~5es:

- Nome do Funcion~rio Idade

Quanti dade de Horas Trabalhadas _. Salario Anual

Ap6s urn estudo minucioso, pois "byte is moneyu, chegamos a conclusio que os seguintes tamanhos safisfazem as nece§s~dades dos camp05~

67

CAMPO

TAMANHO MA)UM:O OA JNfORMACaO

,.

Nome do Funcion~rio II dade

Quantidade de Horas Trabalhadas Sahlrio Anuat

30 caracteF'es 2 algarism05, 3 algsrismo5 9 a,lgarismos

Esco~hendo um nome apropriado de vari~vel para cada campo:

CAMPO VARJ~VEl

Nome do FuncionArio NF$

Idade ~D$

Ouantidade de Horas Trabalhadas HT$

Sal'rio Anual SA$

o comando FtELD ser6~

F I ElO 11 .. 38 AS, "f, #.2 AS I D'. 4 AS Hrl .. 'BAS S,AI OS comandos LSET e RSET servem para transferir a informa~io de uma variivel comum para a varl~vel de definj~io do campo dentro do comando FIELD.

As informa~5e5 tipo string s~o transferidas diretamente:

lSET NFl ;: N(f1E$

enquanto que as ~nforma~5es num~ricas devem ser transferidas convertendo as mesmas de n6meros para strings usando uma fun~io de convers~o de acordo com 0 t~po d e 'liar i a vel n um a ric a .

LSET 1'0$ :: HI( I $( I, DADE) l5ET HY. = MKS',{HORAS) L5ET 'SA' = MKO$'SALARIO)

Usando-se essas fun~aes, as informac5es OCUpar~o sempre a mesma quantidade de bytes no disco, independentemente do tamanho da informa~30. Assim~ fndepe~dentemente do fato de a vari've~ SALAR10 conter a informa,~o 1.00 au 678450.00 e~a ocuparj semp~e 8 bytes no d l sco ,

BB

Nio existe diferen~a significativa entre 0 LSET e 0 RSET.

o coma~do PUT efetiva a transferincia dos dados da mem6rla p~ra u disco.

Na e x e c u c ao do c omando . de v emo s ~ nd ic ar • our

meio do nGmero de referinci~. em qual dos arquivo5 des e i amo s que a sr ava c s« sei a f e i ta , e dar t amb em.« rlUmero do registro onde a grava~io deverj scr efetuada.

Examplo; 0 comando:

PUT 12,423

far. com que as informac6es defin~da5 no co-

mando FIELD sejam gravadas no 423~ registro do arQuivo aberto com a refer~ncia #2.

o comando GET executa 0 contririo do Gomando PUT, au s e ia. t r ans f er e as i.nformal';oes do d l s c o para it memo ria.

Exemp~o: 0 comando:

GET'1 .. 47

transfer~r6 0 conte6do do 47~ reg~stro do arquivo aberto com a refer~ncia #1.

o comando CLOSE finaliza as t r ans f e r Pnc l a . Como vimos no infcio do cap(tulo. nem sempre a execu;io do comando PUT oC8siona a ida do sjstema operaciona~ att 0 dtsco. EJe Hfaz de contaU que foi at~ 0 disco. mas na verdade, fot 56 at~ 0 ffbuffer".

Vejamos 0 mesmo exemplo util izado para exem~ ptificar 0 uso de urn arquivo sequenciat, definindo, desta vez. 0 arquivo como randamicg~

A iistagem do programa ser~a alga do tipo:

288 MAXflLE5 = 2

211 PH I NT H I n i c i 0 d,g P r 09 r aaP'

i!B3 UPEN "' AM IGDS . A8fT' AS In l EN=42

284 FIELD: 11" 90 AS' NP$. 1 B A5 APS .. 2 A5 10$ 285 OPEN ";PTElEFONE., TEL" AS 12 LEN=l'B

2'86 F ,I' ElD .~ ~ 1.8 AS AL,,, 8 AS fl$

308 N = 9

311 GLS

302 I NPUI "'Nome "" .. N$

303 IF "$=- F I "iO THEN GOlD SIU, '394 I NPUT~" Ape I i do .'; A$

69

385 INPUT ".dade ";1' 386 INPUT "Telefone ";T'

481 N := N + ,

482 lSET NPa = N$ 489 l5,[1 I,PS = AS ~U,;~ lSET 'I, OS, = .s 485 PUT #l,N

486 lSET Al' = A, 487 l5~ET' TLI = rt 488: PUT '2~ N

48'9 GOlD 881

588 PRINT "Incluidos ";N~-registros." 581 P'R'I'NT' ·"IF ina II do Progr alia'"

5,12 ClOSiE 11

5,04 Cl05'E 1.2

'585 END

Se f n sse possfve~ enx ee sar 0' que foigravado

em um arqu~vo rand6mico, ver(amos al90 do tipo:

onde todas as ~nformae5es fiearn gravadas no comprimento especlficadq "0 comando F~ElO.

Olhando a exemplo. podemos tirar algumas con-

1 - Em urn arqutvo randBmico. cada urn dos campos tam 0 tamanho 8specificado no comando FIELD e n~o h6 separadores de campos.

7fJ

2 - As infor~aQ6es 5~O gravadas no tamanho espec~ficado pe~o comando fiELD, de modo que Quando a informa~io t~ver um comprimento menor, 0 restante do campo ser6 preench~do cam e5pa~os em branco.

Caso seja executado 0 seguinte programa:

2,81 PRINT ""'Iniciodo P,rogra .. a",1!

212 OPEN "·AR'QUIVOS.A,RO"· ,A5 11 lEN::;~

283 FtElD .1~3e AS Nf'~10 AS APt,2 AS lOS 284 MX :: lOf(1)142

381 fOR N == 1 TO MX

302 GET 11~N

983 PRINT NF'~ JD$

3'84 N:EXT N

S0e Cl'OSE tl1

501 PRINT -Fim d~ ~rolrama~ 583 END

S Ie r a apr e s e iii t ill do, n 01 v ~' d eo, 0 s e g'u i n t e :

o arquivQ. sendo rand6mico. pode ser acessado em quatquer ordem. Inclusive do fim para 0 come~o.

71

Gaso SeJ8 executado 0 programa:

281 PH I NTN' In i e i 0 do Progr ama ....

212 OPEN no AM I GOS .. After'" A5 11 lEf4=E'

2M3 F I EllD 11,,911 AS NF$r 18 AS APS". 2AS I D$ 284 M)( :: lOF(1)/42

311 FOR N=MX TO 1 STEP -1

'382 GET,1 .. N

313 PRINT NFS;IOI aIM NEXT N

i51~8 C.LOSE 11

5111 PIR I 'NT t-f'im do PrograrnaS82ENO

seri apresentado. no video~ 0 seguinte:

AICESSO AODISCO

Os arqulvos sequenciais e randamicos sio arquivos criado§ e mantidos pe10s programas desenvQlvidos pe~o ugujr~o.

Alim desses ttpos. exi~tem as arqu~vos cria-

dos e mantidos palo sistema operacjonal~ 5~o 05 arquivos de programas.

Esses arquivos. parecidos com D arquivo sequencia', SiD cQnstituido5 de registros de tamanhos variados, contendo. em cada registro. oseguint6:

n6mero da instru~~o em 2 bytes

- c6digo Utcken" do comarido em 1 byte

- parte de texto da instru~~o

- separadores 000A entre urn' instru~io e outra

f t nal i z auur lA para indicar 0 f im do ar qu l vu .

Obviamente. isso ~ viI ida para 05 arquivos de programas em BAS~C. Programas feitos em outras I inguagens 550 armazenados de forma diversi.

A manipu~ac~o desses arquivos~ isto ~. a transfer~ncja entre a mem6ria e 0 d~5CO. i efetuada com 0' a u x f I i 0 do S c om and 0 S se 9 u i n t e s, =

lOAO

SAVE

o camando lOAD efetua a traosferincia de programa do disco para a' mem6ria~

Para a execu~~o dD coman~o~ devemos car em Qual dos drives e~t~ 0 programa, OU mesmo ~rograma em vArios drivesj quat deles carregar e 0 nome do programa. Exemplo~

um

especffihavend10 0 de'se j amos

LOAI) "A: CA.oAST'RA"·

Na execu~io do camando. poderio ocorrer 2 5itua~5es diferentes:

~ 0 pr nsr ama e ncnn t r adn no disco 8sta sr av ado na

forma-de Utoken".

Neste casa, a transfer~ncia ser' direta.

- 0 programa encontrado no disco est' gravado na forma de texto.

Neste casa, a transfer~ncia do programs para a mem6ria serA efetuada com a conversio d05 comandos para 0 ~token~ correspondents.

Maior'es datalhes sobre a forma de armazenamento de programas na mem6rta podem ser obtjdos na p~gina 23 do I)vro "Aprofundando-se no MSX~.

o camando SAVE efetua a transfer6ncta do programa da mem6rta para 0 disco. gravando 0 programa em um arquivo.

73

Para a execu~lo do comando~ devemos espec~flcar em quat dos drives deseja~os gravar 0 programa e Q nome do mesmo. Exemplo:

SAVE n'B: GADASTRA. BAS~II'

Na execuc~o do comando~ duas sttua~6es dlstintas poderio ocorrer:

- 0 arquivo n~o exjste.

- 0 arquivo J6 existe.

Be jl existlr no dtsco urn arquivo corn 0 nnme CADA5TRA.BAS. independentemente do fato de ser au n~o urn arqutvD de programs. ~odendo inc~usive ser urn arQuivo de dados. 0 sistema operacional simp1esmente I jbera a 'rea ocupada peJo arquivo existente e grava. em e i m a, 0 p r 09.r am a q u ee s tan a memo ria.

Neste caso, 0 sistema operational inclue 0 nome do programa no diret6r~o do disco e efetua a gravac;o do programa na forma de um arquivo com 0 nome CADASTRA. SA,S.

A gravacio do programa resume-se em efetuar uma c6pia do programa que esti na mem&rja~ d~ modo que as comando5 5~O gravados na forma de "tokenff a exemplo

... ' r . t·· . ",.

n a qu I 0 que e s ra n a memcr i a.

o programador poderi querer que 0 pr09rama seja gravado no disco na forma de texto. com os comandos gravados conforme digitados. para, pDr exemplo. 58 r ad i r ado com 0 aux r I i I() de urn Pr o c e s s adnr de Te x tns . Neste caso, basta adic~onat 0 par§metro nA~ para indicar ao sistema operacionat que todos as "tokens" devem ser convertidos "as palavras de comando correspondent e s , Exemplo:

SAVE ""8: CADASTRA_ 815(111', A

05 comand05 LOAD e SAVE podem ser usados dentro de programas. E~i5tem situa~5es em que um determi-, nado programa n~o cabe par inteiro na mem6ria e situat6BS em que mesmo cabendoJ nio nos interessa carreg~- 10 por t nt e l r o • p o i s d"~1jnuiria c nn s t de r ave lme n t e a: ~rea I iure ~a membria. causando algumas restri~5es quanto a quantidade de buffers ou a quantidade de vari6veis def~nrveis na mem6ria.

74

Nessas situac5es. 0 corretD ~ ~ividir 0 prngrama em 2 au mais partes e fazer com que uma parte carregue. autDmaticamente. a outra parte para prosseguir com 0 processamento.

Uma das mane~ras de. fazer com que uma parte do programa carregue a outra parte. a partir do dfscn.

e u t t l tz ar 0 c omanoc RUN. mas e s t e c omandu. tern a pr u-

prledade de 'eehar todo! os arquivos abertos.

o camarndo LOAD com 0 parimetro ~R" oferece uma safda e1egante, nio sando necessAria. no prDgrama que estj sendo carregado. abrir novamente 05 arqu~vos em us 0.. i s toe, to do "3 '05 ar q u f v I) S abe r to '3 pel 0 prj mei - ro programa continuar~o abertos ap6s a carga do segundo p r og'r ama .

Vejamos. a seguir. algumas ticnicas de aceS50 ao d~sco objetivando o·seguint~:

- f a: c t ll tar e a um e: f1I ta r a vel 0 r ida d e de des e nvolvimento de um programa

f a c i l Itar e d l mlnu i r 0 tempo sas tc n a In-

terpretac~o da I istagem de urn programa.

1 - Padronizar e agfupar os comandos de abertura de arquivos.

Na digita~~o dos comandos de abertura de arqUIVDS pode ocorrer um erro de dig~tae~o que possa par a perder todo 0 fUnciooamento dD programa.

Rec~menda-se procurar digitar a menes posslvel para Bvitar erros de diglta;io.

Um grande sistema i gera~mente vjrios programas que manlpulam diversos desses arquivos poderja~ por exemplo, seguintes instruc5es de abertura=

composto POI' a r q U. i v 0 S . Urn apresentar as

2'90 OPEN "":B;HOV 1'1 • I PN"" AS tn l EN=BB

281 fIELD 11#20 AS N$.15 AS N1$.11 AS i5$.5 AS 85$

Veja bem. SiD instrucBes de digita~io diffc ii, P 0 del. n'd 0'- 5 e come t e r fae i I me n tea I 9 urn err 0 de d~ 9 ~ - taqio. Se esse arqulvo i urn daqueres Que ~ manipulado em todos os programas~ essas ~nstru~5es deverio ser digitadas em lodos elss. Fatalmente algum erro de digltaqio serj CDmetido.

Podemo5 criar um arqu~vo contendo todos os gabaritos de arquivos uti I izados palos programas do s l s t ema. Tal ar qu i vo p o de s er 9'rav,ado n a forma de t e x-

75

to com 0 nome de GABARITO.FNT e quando um novo prograrna precisar de urn dos gabaritos. poderfamos carregar 0 gabarito que nos ~ntereS5a com a instru~io:

MERGE -GA8ARITO.FNT~

Exemplo: Vamos supor que os programas PROG1. PROG2 e PROG3 acessam 0 mesmo arquivo, de modo que as instrucfies ::

OP'EN "'A: ,CADASTRO. AHI1''' A,S In lEN :: 88 f I: ,ElD tn .. 39 AS NI,,51 AS ES; 8 AS 5$

devem estar presente nos 3 programss.

Iflm de evitar erros de digita~~o per exemplo. queremos evitar de digitar essas instru~~es ern cada urn desses programas. Para jSSQ~

1 - Digitar somente as ~n5tru~5es comuns e salvar no disco na forma de texto.

NEW

ala OPEN "·A:CADASTRA.AR'CY" AS '1 LEN=88 282 FI EtD '1 .. 31 AS N' .. 51 AS E':' .. 8 AS S'

SA,VE ""G,AB,an I TO,. fNI ,~, A

2 - Inctuir as instruc5es em cada um dos 3 p'r 09 r amas •

LOID ·"PIOG1"

MERGE "IIGA,BAR I TO. FNT' SAVE ... PROG1' ....

LOAD ·'PR'OG~p

MERGE IO·GA'BAR I TO .. FNI' SAVE-PROG2"·

LOAD ··PROGT

MERGE ·JPGA,HAR ITO. fNr SAVE ·"PROGS"

2 - A numeraGio das I inhas d05 comandos de abertura dos arquivo5 poderi ser padronizada entre 6000 e 6999 e a execu~io da abertura poder~ ser efe-

76

1 t uad a par um comando GOSUoB. Ass.il1'l, todo s os cnmando s de abertura de todos os arquivos que possam ser necessArios 80S diversos programss do -sistema ficario agrupados entre as 1 inhas 6090 e 6999.

t s tc fara com que a .1 i s t as em do e r nsr ama se i a menDs polufda. pois no nGcleo principal teremos apenas uma in5tru~io do tipo:

sem a poluic~o causada pelas instrucfies:

2~00 OPEN ., A: CADA5TRA. ARC·· AS 11 LEN = 68 202 FIELD '1.30 A9 N$~5. A5 E$.8 AS SS

Neste caso. a rotina fonte deve ser digitada conforme 0 seguinte:

6810 OPEN "A:CADA5TRA.ARV~ AS 11 LEN = BB 6112 FtELD 11_38 A5 N$.58 AS EI.B AS 5$ 6014 HETURN

SAVE .IIGA8A:R I TO. FNr· # A

3 - 0 nGmero do drive pode ser defin~do em uma v a r i 8' vel, par a que 0 pro 9 r ama d 0 r p o S 5 a, r ap i dam ente. deflntr os arquivos em drives distintos. 0 que ~ importante, principalmente na fase de imp~antae~o do sistema.

Em vez de:

OPEN ... A: GADASTRO'" AS 81 lEN=47

onde a vari6vel DG$ possa ser definida no inrcio do programa com:

DCS = "A.:u

o u lid a, a par t i r dot e c la doc om t

I NPUT"" Em qual d r i w· eo 5 tao Gad as t r 0 "' .. ~ DC$

:0 u, a i 11 d a , ! ida a pa r t i r d e um a r qui v 0 d epa r am:e t r C!I 5

77

ande estj gravada a configuracio do sistema de arquj-

\I' (!I S .

E S 5 a po S 5 i Ili I i :d ad e e mil ito. I mp I) Ii' tan te nos c asos em que 0 programador pretenda faler farta distribUi~io do ~ro9rama_ po~s haveri tnteressados que dispfiem de apenas 1 Onico drive. enquanto que outros. mals afortunado5. d~spor§ode muitos drives. Nestes casas, 0 programador nio precisari percorrer a I istagem. jnstru~io por l~stru~iD~ a procura doe A: e B: para s er emal! t e r ad 0 5 .

4 As mesmas observa~5es acima podem gsr

apl i cad as an nome do ar qu tvo , l sto e mul to Importa~te nos cas os de programas que 8xecutam processamentos

Nestes c aso s . e e omum uti I fZ31rmos aidentifjca~io do mis como parte do nome dos arqulvos. como por e l(,emp I :0 :

NOVTD. JAN PAn' AM. JAN

Definindo-se 0 nome do arqulvo em uma varjivel. 0 mesmo programa poderi ser executado com arquivos de meses djfere~tes:

191 INPUT "Oual 0 mes HiMES

181 ARO. == .. "MOVI0.·" +ME$

182 OPEN .... A = .... "'AHOS AS In L EN=41

I -

5: - Os ar q u HI' 0 sac es sad os p e 0 pro 91 r ama na 0<

necessitam estar tad os simijltaneame~te abertos. Em cada parte do programa. devemos abrir somente aqueles arqU~V05 que ser~o acessados por aque~a parte e t~o logo urn determinado arqulvo nio seja ma~, necessArio, devemos proceder ao seu fechamento, inc'us~ve para maior prote~~o e 5eguran~a do! dado!.

Desse modo. se urn programa for operar com 7 arqu tvus , nao e r a c l cn al aar i r tudes e t as no initio do er osr ama e fecha-I 05. tudns , sanent e 30 f ~ na I: do programa. A nio ser que [sso seja realmente necessirio.

lembre-se que a quantidade mixima normal de arquivo5 que podem estar simultaneamente abertos ~ fix a d ape I 0 sl s t ema 0 per a c ,i 0 na I d u ran tea i n i cia I i za cit 0 do s~stema. quando sio definidos os "bufrers~. urn para eada a r au t 110. Havendo a 1'lJ(!tC e ss i dad e de ma n i pu I acao de

78

mais de urn arqu~vo simuitaneamente. 0 arquivo dever~ def~nir mais espa~o para os "buffers". No M5X, por exemp~o. isso pode ser feito pBlo comando MAXFJLES.

Lemhre-se tamb~m que eK~8te uma correspondBoc~a inversa entre a Quant~dade de ~buffers" e 0 espa~o

disponfvel na mem6r~a para a ~rograma. .

Para poder operar somente com aqueles arquivos neces5~r'o5 em cada parte do programa. 0 n6mero de referincia do arquivo pode sar defin~do em uma var~'vel; como no e .I( emp t 0 s e 9 u i Ate:

OP EN "it ,A :: GAOASTRO" AS tI NARQ, l EN=4 7

6 - Para fac~litar a compreensio da estrutura dos d~ver50S arquivos acessados pelo programa. as instru;5es de abertura e correspondentes jn5tru~6e5 de defini;~o de campos podem ser agrupadas em um certo trecho do programa. sendo executados par meio de coma n d os 'GOSUB.

6·'88·8. II'

v ----------------------------------

61112 ~ ABREAR'O. FNT ;; Aber tu'r. de Ar qu i vos

6. ". A.A ......

~ -----------------------------------

681. if ---------) Arqu i ',0 de Pa:rHlotr05

&1',2 OPEN OR,+"l'atPAR .. ARO- AS 'NARO lEN=51

6814 FIE10INARO .. 38 ,A5 TT'~,2 ~5 "'$, .. 9 AS lJItS .. 2' AS RG'~ .2 AS RM'~2 AS UD'~2 AS lI'I$ .. 2 AS, UA$

6816, RETURN: &821 • ----- .... ) Cadastr 0 d'e Mate ria is

- -

6822 OPEN DR'+~CME"D_ARI1" ISINARQ :lI5N=6:8

6824 fiELD INARQ., 4 ,AS CDI .. 2'5 AS DCI. 1: I) A5 Tel .. 4 AS SRI ..

4 AS st ... ,4 A'S ''''I .. 6 A5 UE.S ~ 'B AS US.

6826 RETURN 6838 .. ------) Arquivo de Mowl.eoto

6892 OPEN DR.+-GMMOV~IRV· AS .NAAQ LEN=25

6834 r;: I: ELD 'NARQ ... 6AS MOl, 18 A5 MHI.,~' AS Mel ~ ~ AS MOt e ,

1 AS MV,' ,

6836 R'ETUAN

SAVE "'ABREARO.FNr" .. A

Sa I' va .. e st a rot ina, para ser ut i I: i z ad a 0:0 S E sterna apreseRtado no capitulo 9.

7 - 0 comando FIELD. como v~m05, define a estrutura do arquivo rand6mico~ separando os campos que constituem 0 registro.

79

De acordo com 0 objettvo de urn trecho do programa. os campos contr9UoS podem ser agrupados em ou-

t r 05 C amp·o 5 par a fa e i 1ft a r a ma n j; pull a II; ao do s me SPIO s.

Nestes casos. podemos encadear vArios coman-

d05 FI E L 10 , GO n ten d 0 em ca d a um. a est rut u ram a i s con-

veniente para a mantpula~~D adequada das informao6es.

188 OPEN ~ClIENTES.ARa' AS .1 LEN=77

182 F I ElO 11 ~.2" AS NOME$ •. 38 AS EDRS,5 AS CiEP.~

20 AS MUN$.2 AS FEOS 184 FIELD 11.50 AS X$.27 A5 LeAL' 106 MAX = LOF(1)/77

11B FOR R [IG :: 1 TO 'MAX

118 GET 11.REG

112 PH I NT ''''Nom'e :. .. .. NOME'.

114 PRINT "Endere~o : ~EDR'

116 PRINT -Localidade = LGAlS

118 NEXT REG

120 END

Observe que no programa acima. a ~nstru~io:

e qUi vale a i ns.t r u c; a, Ch

116 PR INT "Laeat i dade:: II"GEP$.MUNS. FEDS

Para compreender bem 0 functonamento do! £0- mandos de acesso ao disco, recomenda-se elaborar diversos programas curtos, enfocando, em cada urn deles. um aspecto diferente do aceSBO ao disco.

P~ra sentir a performance do! acessos. 0 programador deve eXBcutar os testes em cima de arQuivos com uma quantidade con~~der~ve~ de registros 8. para e v l t ar umagra,nde parda de tempo digitando um g:rande arqutvo.· recomenda-se desenvolver um programa especffico que ~criaH automaticamente tais arquivos.

1 iIII .. 0.. "

aa =======~======~=~=:=:~::~=~=~=~=~==============

192 • CRIARO = tria um arqui~o com dados ficticio5

,-- .. ~ ----------------------------------------------_v, ~----------~-------------------~------------~--

188 • Roberto Watanabe 22/83/87

198 "

281 -------------------

e02 Definicoes iniCials

~Q4 --------~----------

c.. v ~

218 N·IRO:1

80

212 DRIVE.=nA:n

214 ARQ:"=··CADASTRO .. ARIT" 216 GOSUB 6111

Ble .. ----.-----------------------------

302 II' Gr i a as i n,fo rmif:coes al eato, iiHlle ate

384 .. ----------------------------------

318 fOR REG = 1 TO 1881 312 NP$:: ••••

31'4 II;;; RNO( 1). 28 316 II = 1\ + 18

318 FOR J = 18 TO .,

328 NP$ :: NP$ + CHR$(S5+'RND( 1 ).26)

322 NEXT J

3.24 SALAH In=: R'NO( 1 ... BiBeel

326: L SET NF$; = NP$

328 LSET Sf$ ;: HK5,${ SALAH t 0) 331 PUT *NARO.REG

332 NEXT REG

188 .-------------------

402 • Final do Programa

494 '-------------------

418 CLOSE INARO

'4,12 :PR I NT ';'F ina:1 do Pr nc ess.ame!nto·" 414 END

6889 .---------------------------------

8882 • Rotjnas de abertura de arquivos

6884 .. ---------~~----------------------

6910 .. Cadastro de funcionarjos

6812 OPEN DRIVE$+ARO$ A5 BNAnG lEN=34 6814 fJE1D 1"IARQ .. 39: A5 NF .• ~q AS Sf' 6816 RETURN

ORDENAC~O DE ARQUIVOS

Uma das grandes vantagens do computador 6 sem sombra de d~vida, a sua capactdade de manioular grandes quantidades de dados em pouco tempo.

oentre as manipula~ijes possrveis, aquela que mais caracterjza a fact I ~dade de tratamento de dados ~ a pos5ib~~ldade de orden'-1~5 segundo um certo

cr t t e r t o , Na cont an l I t dade • po r ex emcl o , l ndec e ndent a-

mente da ordem em que as dado! foram inseridos, deveS8 emitir determinados relat6rios com os dados ordenados segundo a data~ como i 0 caso do Di~r~o~ e QuIros relat6rios devem ser emitidos com 09 dado! ordenados segundo 0 c6dtgo das contas. como i 0 caso do Razio.

B1

No Controle de Estoques. eX~5tem relat6rio5 que devem apresentar os materiais por ordem alfab'tica e 0 u t r ns po r 0 r d em dec 6 dOl go do p r Ii) ,d u to.

Anal i s ando as mui t as ap Ii c:a'f1:oes de comou t adures iremos constatar que em todas elas~ havendo a posslbi I idade de apre5enta~iQ dos dados ordenado~ conforme critirios diversos. 0 programa ganha novo~ ~mpulsos

sando majs uaJorizado. 0

Para a computador ~ indiferente sa. para a

rea liz a C it 0 de urn de t e -rmd n ado s e r v i ~ o. e let era que

executar algumas poucas OU mJ~hares de ~otru~aes.

Compete ao programador. programar 0 computador para tal.

Manipular dados i sempre uma ativ~dade trabaIhosa. repetitiva e cansativa.

Pesue. par exemplo. urn relat6rio de 200 pagl"as e tire 10 cfip t as . 1550 v·ai r e sut t ar em uma iPilha com 2.000 foihas. Agora separe os 10 exemplares. Trabalhoso e cansativo nio?

Analisa,ndo as d l v e r s as a l t ernat lvas em que

i550 pode ser feito. irem05 veriflcar que a~9umas delas, ma~s racionais, irio ocasionar 'lim trabalho menor.

No caso em qUe5t~o~ S8 djspusermos de uma grande mesa podemos empregar a t'cn~ca de "coloca~~o". Est '0 I~. d a pill hap r t n c i p s l . p e 9 amo 5 urn p e que nom a C 0 de folhas. e andando ao redor da mesa# vamos "colocandou, folha por folha. cada uma das 10 c6plas. Completada a cOloca~io das 10 cbpjas. 0 ma~o que est' em nossas mios e5tar~ automaticamente poslc~onado na segunda pjg~na do relat6ric, de modo que podemos repetir a ·opera~~a anterior~ "cofocando". desta vez. a segundo p'g~oa. Repetindo-se esse cicio 200 vazes. teramos os 10 ex emp l ar as perfeitamente s epar ado s , 1550. i c l ar o , sa a m'qu~na copiadora nio cometeu nenhum engano. tirando algumas c6Plas a ma~s au a menos.

A t~cnica com que irem~s manipular os dado5. pode depender do tipo de dados Que dispomos.

No exemplo de separar as c6pias de um relatbrio. podemos ter urn outr~ caso em que desejamos ttrar 200 c6pias de um re~at6rjo de apenas 10 p~gjnas.

Empregar a t~cnica anterior neste caso. sigHi·fica que teremos que ter a nossa d~spos~~~o~ uma enorme mesa ~ode possamos di5Por todas as 200 c6pias. Nesse caso. recome~da-5e a t~cnica da Nremo~ioH. Nessa ticn'ica. retiramos da p i Iha pr·incipal. onde ha 2 .. 000 fothas_ ma~os de exatamente 200 folhas e d~SPDmos taJs 1l8(:OS. I ado a I ado~ao lunso da mesa ~ Teremos. port anto, 10 pi Jhas distintas. Fetto iS50, afidamos em redor

82

da mesa. ~retirando» uma folha de cada pi lha. Ap6s a u I tim a p i I hi a • t e r emo s ~ n as ma 0 5, um r e t a t:o r ~ 0 C om,p !I eto. Repetindo esse ciciO 200 vezes~ teremos separado os 208 exemplares do relat6rio.

Para a ordena~lo de dados atrav~5 de um computador, tambim nia existe apenas uma 6n~ca t~cnica.

Muitos pesquJsadores elaboraram tjcnicas especiais e algumas delas ficaram tio famosas que s~o conhecidas pelo nome do seu autor.

D programador deve analisar a~guns aspectos importantes antes de adotar alguma ticnica de ordena~~o de dado,. Veiamos algums desses aspectos:

A - Como os dado5 se encootram e Que t~po de classifica~~o ~ deseiada.

B Qua I 0 t amanno do_ e spaco de tr aha I ho d:i spun I~'

v e t • em 0 u t ra s ,po a I a v r a 5 ~ 'q u a lot ama n hOod a

"mas a"?

Vamos ana I j, s ar 0 pratt lema daor'de,nac;ao de da~ dQs~ em funGio da 5itua~io em que os dados Sf enco~tram. antes da ordena~§o.

ORDENANOO UH ARQUIVO COM POUCOS REGISTROS FORA DE ORDEH

Vamos supor que urn arquivo Ji SB encontra or-

de nado .

Urn cadastro de cJ ~entes. por exempl0. encontra-se normalmente ordenado por ordem alfabltica de nnme s • e n e sse cadas tr o auer emns j, ns er i r urn novo ell i~ ente.

Inserir ~m novo c~jente~ significa adlcionar apenas urn novo registro, e neste caso. querer apticar um a I gar i tmo de or den a c a 0 8:m to dOD a r q u j 1I 0, e una tentativa meio Irracjonat~ mesmo que 0 tat atgoritmo seja d05 ma~s eficientes possrveis.

Masma S8 tratando de uma simples inser~io, iSlo nio pode ser efetuado diretamente. pois um arqujvo em disco n~o 6 como um fich~rio com fichas de papelio. onde inserir ~ma nova fjcha significa Hencaixar~ a mesma no meto das outras e, se fiear apertado~ dar uma empurradinha nas outras ftchas.

Nos arqu~vos em meio magnAtlco, os registros ficam fisicamente ~presosu naquilas posi~6es onde foram gravados e a atlvidade de ~deslocarH 05 registros

83

e j, n v i a ve l . 0 que e po S s f'v e Lea I e i t u r a n urn I u gar e a 9 r av a ~. a 0 em 0 u t r 0 1 0 c a I um po u cod e s I (I cad a. par a f a~ zer de conta que estamos des~ocando.

Depenoendo do e sp aco d:isponivel no di s cc. podemos empregar uma das duas t~cnicas apresentadas a seguir:

A - Empregar 2 arqu~vos·.

Griar um arqu~vo tempor'r~o e transferir os registros~ anter~ores ~~ue~e Que deseiamos Inserjr. para 0 novo arqufvo. Gravar no arquivo novo. 0 novo registro.

Traosferir 05 demais registros para 0 arqujvo

Exem~,1< 10;

novo.

3,0. 0, .... ~

vv ~-~~~~~~~~~~~---

302 ~Entrada de Dados

384 ~----------------

'318 I NPUl ". nome·" • N$

312 I NPUT·"ender e.,.o·"; E."

490 -----------------

402 ~Abre os Arquivos

4B4 -----------------

418 Q,PEN: •• A = CADASfRO .• 6RO.... AS 11 l EN=98

112 FIELD 11.38 AS N1'~5U AS El'

414 F~ElO ff1~BI AS el$

41 G OPEN , ... A; GADASIRO .• $.f'~ A5 12 L EN=8B

q., B fiELD "2,30 AS N2$~ 51 AS E2$

421 FIELD 12.S9 A5 C2,

598 ~---------------------

582 ~T'ansfere"cja Inicial

Seq .-----~~--------------

518 CONTROlEt. = 1

-12· M -X-EGI = t.' OFf 1 ) .. J 99

5 .1t.R.

514 F:OR Fh:Gt.=1 TO MAXREGI

516 GET #l~REG'

510. ~f GONT'ROlE'=2 THEN GOTO 119

528 1 F N1 S>'tt$ THEN L5ET [;2$, :: Gl, $;:

L SET N2'$ :: N$: l5ET E2$ ::: iE$ PUI fi32~REGI CONTRO lEI:: 2· COTO 618

522 524 526

6:1'1,01 ~

~o -------------------

602 -Transferencia final

684 ~-------------------

61 '8 lSET IC2S :: Cl $

B12 PUT D2rREG'+1 614 NEXI R E'G'

780 ~-----------------

7f)"2 "F ina I do P r () 9 r ama

78~ .. -----~--~~~~~--~-

l5ET G2$ :: &1'. PUT D2 .. REGt. GOlD 814

- , -

11' 8 MAXREC1. ... IMAXREG'J.+1

1112 PR I N!T ·"0 Cada'stro conte .. "":MAXREG"" reg i:stlros'~" 714 CLOSE '1

116 GlOSEI2

71 B K I' l L ,..,,:: CIOASTRO. AR'O'"

728 NAHE •• A = CAo'A,5TRO • S$$"' AS '''A: GADASTRO@ ,AHQ"· 722 END

B - Urn Gnico arquivo.

Neste caso. iremos ~deslocar~ os registros.

~endo-os e grauando-o§ urn pouco des1ocados.

Na atternativa de nio se conhecer. a pr~Dri. a p05i;~o onde a novo reg~stro deve ser encaixado, 0 programa deve procurar essa posje§o. varrendo todo 0 ar qu i vo ,

3·, A A.'. "

00 ----------------

382 ·Entrada de Dados

384 .. ----------------

31 B INPUT ""nomeu.: NS

312 I NPUT .... :endere~o .... ; E$

4·'0,°, "

UU ........ ~!I!!!!!i!!-._,_. _

492 "Abre arquivos

484 ~-------------

4118 OP EN .... A: GAD-ASTRO • ARft.. AS '1 t EN,= 89

Q'12 FIELD .1;38 AS Nl'~58 A5 Ell

114 FIELD 11.88 AS C1$

588 .--------------~------

582 "Transferencla Inicial

5-0.4· ,

. u ---------------------

51 II GON:TROl E\ = 1

85

r f

512 M,AXREGI == tOff 1 } lOa

514 fOR REG'=MAXREG$ TO 1 STEP -1 518 GET' ft1,REG'

51 B If 'Nl '$>N$ THEN PUT 11" REG'-+l I: GOTO 529

5~B lSET Nl$ :: N$

522 LSET E1 ,$= E$

524 PUT.l ~ R E'G1.,+ 1

526 REel;;: 1

528 NEXT R EGI

S8e "'-----------------

012 "final do Programa

684 "-----------------

61,9 MAXREct. == H,AXREGt. + 1

612 PRINTP"O cadastr e contem""MAXR'EG,·"reg f sr cs" 611 CLOSE 11

61'6 Cl05ED2

618 END

;;

o m~todo B apresenta a vantagem de necessitar de urn esp acu menor no disco, porem e x i s t e a pnss i n l t l> dade de ocorrer urn imprevisto durante 0 deslocameto d05 registro. provocando a perda do arquivo.

Be 0 programa jA souber a p051~30 em que 0 novo registro dave ser eocaixado. 0 programs pode valer-se de uma rot~na. como a abaixa apresentada. para deslocar 05 registros finais e Uabrir" uma vaga para poder-se inserir 0 novo reg~stro.

1"3,.-·. ..

~. ---------------------------------

1382 • ROT INS. FNT II I nSllre Novo Mater'ill

1,318 I F IR'EGI ) MXI THEN Guru 1358 1312 lOCATE 81,.12

1314 PH I NT TAB( 9)STRING"(22 .. "'k")

'.31 B P'R INT TI:8,( 9 )",'''Est'ou prow i de:nc i ando a·~ 131BPRINT TAIU91""'inse"cao do regi,str'o." 1328 PH INT TABe 12 '··NAO I NTERRII4PA 1-

1,:E2 PH I :NI TAB( 9 )51R I N:C$'I ~2" ..... ')

1321 GOSUB 5,358

1332 REf = 14ft - REGtt

1341 FOR C\=MXI: TO FIRS"" 5T EP -,

1342 GET INARQ,CI.

1344 PUT aMARO. C\+1

1348 lOG"IE 5+3".CMXI-ct.+1 )JREF. 19

, 348 PH I NTW)rI' '

1358 N:EXT CI

BS

1352 LOCATE 8~ 1.2

1354 PRINT SPC(188) : PRINf SPG(160)

1358 RETURN +98W( Md.-ct.+l J/REF .. 19

1 34B !PR I NT -) ....

5_','1" 5, A, ,~

~U ------------------------------------

5352 .. MAPI,A,CC .. FNT :;; Mapa de Aco.panll_ento

5354 II _

5356 ·Mostra 0 8stjgio dB processo

5362 LOCATE 5 .. 17: PRINT ·'!lltt'SPACES( 13 )'""50!-""; 5,3'66 PH I NT SPACES,(11'··1 0"' .. • = lOCATE 5. 18

5368 PRINT ~:u;:fOR N=1 TO ~~PRtNT" :-;~NEXT N

5378 RETURN

SAVE, DROTINS.FNr"~A

Salvsr asta ratioa para set uf} 1 izada no sistema apresentado no capitu10 Q.

As tee n i c as a P f e 5 e n tad a 5, sao vall i d as qua n do

se pretende inserlr um AOVO registro em um arqulvo ji existente.

Vejamos como proceder para arqujvos que possuem alguns registros da ordem. ainda sem ape~armos para orclena!l;ao.

Existem ,Arias t~cnicas para i550. mas vamDS deta1har apenas uma delas. paS90 a paS50.

eolocar em ordem l€. gravado5 f!o,"ra uma ~ sor II tmo de

1 - Varrer 0 arQuivo todo a procura d05 registros que ~st~o fora da ordem.

A cada registro que estiver fora da ordem. cOpjj-to em U~ arQuivo provls6rio.

Colocar uma marea. par exemplo H$$$". no reg~stro que fo~ copiado.

o arqulvo provis6rio ficar6. assim. cam todos 05 registros fora de Qrdern.

2 - Para cada regtstro do arqujvo provisbr~o, varrer 0 arqulvo a procura da posiGio correta de encaixe do registro.

3

Varrer novamente um r eg i s t r 0 'I i v r e , .J $:$$".

o arquivo a procura de que fol marcado com

87

4 - Deslocar 05 registros entre a posi~~o livre e a posj~~o de encaixe. transferindo a p05jcio livre para a de encaixe.

5 Copiar 0 registro do arquivo provis6rio na poslr;,alJ livre.

6 - Repetir 0 cicio a partir do passo 2.

AI i s tasen da rot ina e' anr e sent ada a segu t r .

218. • ---------------------------------------

211'2' .. :RTPOE'ORD. FNT :; Poe .. ordell 5e. orde'naF

2114 • ---------------------------------------

2118 GET IA1 .. 1

2112 A$ :;: N.

2114 MY :: '.

21 " B • Ret ira os reg" stros for I de ord_.. j o'gando-os

no arqglvo provisorio 21&!8 FOR REG ;; 2 TO "'iEG 2122 GET BA1 .. REG

2124 If N$ > A'THEN AS ;: Nil. GOTO 2141

2126 M[;; M' + 1

2128 GET IA1 .. REG - 1

i!1i!9 ,LSET HI = NI

2131 PUT IA2.MT

i 2132 lSET NS ;; 1111"',""

2134 PUT IA1 .. REG; - 1

2136 GET IA1., RE'G

2'138 AS c NS

2148 NEXT RIEG,

2158 ~ Pracara a posicao de encaixi. des' Dca e encaill. 21'52' fOR ,RT == lTD MT

2154 GET'Ai! ,. HT

2158 A$ z; MI

~1611 GOSUB 2Z88; II Procu ra a P,IS i cao de .,11,01 i xe,

2162 I f EX == • THEN EX It tIIEG

21711 G05UB ,23.11 ~ II 0851 olea e anca i 18.

217,2 GET laz. RT

2173 LSET N, =", 2114 pur IA1~EX 21 '7,6 NE,XT RT

2198 RETURN

SAVE PRTPOEORD.FNT"~A

B8

2, 2· .'8. '. .'

-------------------------------------------

2212' I' RTPROCPE~, FNT =Procu,ra a pos i cae de enea i xe

221.4 .. __ ,-._, __ ,~ .. ~_ ... wa .. iiIII, ... __ .. ,~ __ ,~_~illiliiliiil .. t ...... ~~,..Mi!!iiiiiiili!iiii _

221. EX= e

i!212 FOR REG = 1 TO MREG

2214 GET IAl _ R'EG

2216 IF H$ c ....... " THEN GOIO ,2224

221 H I F N$ < ,A$ TH:EN G,OTO ,2224

2221 EX = REG - 1

2~~' REG = ,MltEG

2~24 NEXT REG 2228 RETURN'

SAVE "RTPROGPE.FNr~.A

238. • ---------~----------~-----------

2382 • RTDE5ENC. FNT :; Des l' eca e e n'el j ,I a

~3- ad ,.

~~, ---------------------------~----

2319 fOR REG = 1 TO MREG, 2318 GET 'Al~REG

2'312 IF 'N' c- ,j$$,·"+SPACE$(17) THE" 'GOTO 2~nB

2314 llV = REG

2'3'16 REG; HREG,

2318 N'EXT REG

2338 If llV < EX THEN PS = 1

2932 IF llV > EX THEN PS = -1 233:4 FOR K = LIV T.o EX-P5 STEP PS 2936 GET .A1~K+P5

2338 PUT 'Al~K

2948 N,EXT K

23ct2 RETUR'N

SAVE ·"RTDESENG. fNrp .. A

Testar a rot1na com 0 programa:

,.8 · 112 p 184 I!' 118 .. 112 • 281 • 282 j

214 •

-------------------------------------------

-------------------------------------------

R. M. ",'atanabe

23/85/87

-------------------

Oefinicoes iniclais

-------------------

89

211:6 OPf'N ··cadastro·" a,rq" A5 '1 LEN.21

288 FIELD '1~2. AS N$

218, OPEN ·"arquj'vo~prv'" AS Ii! LEN.a,

212 FIELD 12~~1 A5 M,

214 lSET N' = -Antonio ":PUT 1,1 218 lSET NS = "BeneditD ";PUT 1.2

219 tSET N:$ == ··Ca r I os ... :: PUT 1;; 3

2'2'8 l5ET N"= .. , vo...... IN': PUT 1 #4

2,22 lSET NS == -De n, il S8 •• ' :: PIUT 1;; '5

224 l SETN$ =: , .. Ed,o n, 1" ;: PUT 1 Ii B

22'6, l5ET NS == ·'ife lie i 0 "' : PUT 1. 7 2,28 LSET N:S :: ·"Gastao •• ::PUT 1,8 238 L5ET NS = "Koesl ww H:PUT 1;;9

2E' l SET N,' :: ··He I i 00 l1li ;: PUT 1 .. ,.

234 LSET ,NS = '." J:a i.e ... : PUT 1 # 11

236 lSET NI = Dluciana D:PUT ';;12

,238 PIlEG;: 12

248 .1 'I: 1

242 12=2

~.- 418 p

~u ---------------------------- -

382 • Test'e da Rot i aade Orden.caD ~1Ii .. · ,4 II

au ----------------------------

31. PH I NT "t... I N I C I ,At •• '1'"'

a12FOR N • 1 TO MREG

314 GET 1,N

316 PRINT N~NI

318 NEXT N

328 G05U8 2111

3311 PH II NT -.'.... OR'DEN'ADO * .....

332 FOR N: = 1 TO MIIEG

334 GET 'I1N

aa& PRINT N .. NI

338 NEXT N

a48 PRINT .. ' .... flM .......

342 CLOSE 11~'2

344 KilL ··CAD'STIO. AOr'

348 K I, L L .. ',IOU I VO _ PH"'"

348 END

... ~" ...

MER'G'E NRTPOEOR'D ~ fNr' M,ERGE ""RTPROCPE .. fNTJI "E,RGE ·~RTDESENG .. fNr· SAVE ··EXCOSORD .. B,AS''' RUN

90

ORDENANDO UM ARGUIVO COM MUITOS REGISTROS FORA DE ORDEM

A ordena~io de urn arquivo em situac5es em Que a ordem dos registros i des,onhec~da. isto 6. 05 registros poder~o estar totalmente m~sturados. parcialmente ordenados au mesmo ordenados segundo uma ordem desconhecida. , uma tarefa urn pouco mais complexa. comparada aquela 5jtua~~o em que i conhecido 0 cr~tirio de ordenac~o.

Nestes casus. antes de adotar um atgoritmo e fie ji en t e ~ de v emo sana lis a r a 19 u n 5 p n n to simp 0 r tan tie s que inf~uem na ve~ocjdade da ordenaC~D.

o s tsor t tmn . qu at quer que s e i a e l e . fr,a efetuar uma certa quantidade de comparac5es e ·trocas ~e

posi~5es. .

o programador deve estlmar 0 tempo totar dessas comparac~es e trocas. Cons~derando que ta~s tempos dependem fundamentalmente da configuracio do seu computador. real~ze algun~ ensaio5 comparativos e anote no seu Caderno de Dicas 0 tempo unjt~rio, executando prDgramas do tipo=

190 II-ME:: 9

182 FOR N=l TO 1080 1 8'4 NEXT :N'

1,96 PH' NT "'TEMPO:: .... ~ T IHE/S8. "s .... 108 lEND

108 T :1 ME =9

102 FOR N=1 TO 1988 104 ,A :. 6,

186 NEXTN

198 PiR I'Nl ." T EHPO:'(IP ~ T I HElH8 ~ ... s .. •

110 END

1:08 TIME;;; 0

102 FOR N;;;l TO 1089

184 If A=B THEN GOlD 186 10'6 NEXT N

108 PR tNT .... TEMPO= ""; T IME1B0; i'''5~j>

118 END

91

No computador em que efetuei esses BnSa~Og,

"r obtive as segu~ntes tempos~

cada fODP FOR ... NEXT

- cada transferlncla do t~po A=B

- cada comparae~o com If

1,98 mseg 1 ,42 " 2~ 55 I'"

Suponhamos que desejamo5 ordenar urn certo conjunto contendo 100~ n6m~ro5 e 0 a~90r~tmo empregado efetue NwN/2 comparae5es e MwN/4 trocas. Neste caso, 0 tempo total serA calcutado conforme 0 seguintB:

- FOR ... NEXT Com par a 1;0' e 5 - Trocas

1000*1000/2 w 1~96 = 1000.1000/2 w 2~55 ~ 1000w1000/4 ~ 1,42 =

960. ~un' 1.,275.000 355.0010

TOTAL

= 2.590.000 mi Jjssegundos

o que representa cerca de ~3 minutos.

Observe que esse tempo, cor responde a ordena~io do conjunto. 5upoodo que 0 mesrno j6 esteia na mem6rla. No caso de ordenac~o de arquivos em d~6CO. devemos considerar 0 tempo gasto pari a transferincia das Informa;6es do dtsco para a mem6ria e. ap6s a ordenac~o. D tempo gasto para a transfer@ncia das ~nformaG5es da mem6ria para 0 disco.

o tempo de leitura e de gravac~o no d~sco deve sar ~evantadD par me~o de enBa~05J po~s depende t amhem da e onf i gura~ao do s eu comcut aecr . Ut Iii i ze urn programa do tipo:

191 OPEN. nA:'TE5TE~ARO"'''AS.n lEN~l 192 FIELD :111.1 A5 CAMPOS

194 LSET 'CAMPOS :: '··A""

lOS TIME;; 9

108 FOR REG=l TO 1899

110 PUT 11,RE&

112 NEXT REG

114 Tl = TIME = TIME = 8 116 fOR REG:1 TO 1060 '19 GETU1.R'EG 12BNEXT REG

92

122 T2 = TIME

124 PR. NT ·'TEMPO PARA GRA'VAGAO=tI~. T1/6'9 /·5·· ',26 P'RtNT ""TEMPO PARA LE]TURA ;"1';12.16');"·5·1' 12B END

Repita 0 ensaio com outros tamanhos de registros e monte uma tabefa comparafiva do tlpo:

TAM;ANHO DO REGI STRO TEMPO GASlO POA R'EG' SlRO
( BYTES ) I NA GRAVAC-.aO f :N,A lEI'TURA
I -
I 1 0 I
,
40
1,0 I
1 00
l' 30!
I o programador veri que os tempos de acesso aD d~sco 530 relat~vamente #grandesff Quando comparados aos tempos de manipula~~o de dados na mem6ria. Porisso i importante escolher urn algoritmo de ordena~50 que efetue 0 mfnimo de leituras e gravac5es.

Na ordena~io de um Cadastro de Fornecedores. por exemplo. estario em jOgo as seguintes ~nformac5es;

Nome 20

- Endere~o 50

- CEP 5

- Cidalde 17

- Estado 2

- Valor ~

- Terefone 7

- C.G.C. 11

- Inscri~io Estadual 9

TOTAL = 128 bytes

Uma das id6ias seria a de se efetuar a ordena~~o totatmente na mem6rla. Para ~sso. 0 programa feria que inic~al~ente. transferir to do 0 conteGdo do ar eu ivo para a mem6li'ia~ em var l ave i s do t tpo NOME${NL ED R $ ( N). etc. J' d e poi 5 e f e t u a r a 0 r d ,e n a cs 0 pro p r i a'm e n t e dita e. terminada a ordBna~~o~ gravar de votta no disco, as i nf nrmacfie s j al or de n adas .

93

1__ 1lI .. -. :D, -_.. "

uu --------------------

192 ' Ordenacao na Memoria

18.4· .•

--------------------

186 OPEN ·"ARQUIVO·" AS 11 LEN=128

168 FIELD D1~20 AS N$~5. AS E$.5 AS C$~ 17 AS M$.2 AS FSp4 AS VI. 1 AS T$~lq AS G$~9 AS IS 111 fiELD *1~128 AS X$

112 N = L OF ( 1) I 128 '114 D n1 G$('N)

116 FOR REG=1 TO N

118 G£1 ·1.REG

129 G$(REG) = X$ 122 NEXT REG

126 K :: N

138 )( :; 8

132 Zl :CVS(HID${G$(1).95.4») 134 FUR J=2 TO K

136 ZH ~ GV5(MID$(G$(J)~95.4)}

138 IF Zl (lH THEN SWAP GIS(J). GS( J-l " :

X := 1:

ELSE Zl=ZH

148 NEXT J 142K := K - 1

1+1 If X=1 AND K>2 THEN GOTO 138

A vantagem de sse procedimento ~ que serA efetuada apenas uma Gnica leltura e uma ~nica grav8cio dos registros. mas. na maioria das apl~ca;5es. iremos deparar com 0 problema da 'rea livre na mem6ria para podermos armazenar todas as informa~6es.

No Cadastr~ acima. cada registro acupa 128 bytes. Essas ~nformaG5e5_ quando defin~da5 na mem6ria. na forma de strings, pa5sar~o a ocupar 3 bytes a mats p o r \J a ri a 'V el . (I que f a .r a c 0.01 que cad are 51 i 50 trod s , ,28 bytes. quando transferido para a var~~ve1 G$. ocupe ( 1 28 + 3) =1 31 bytes n a mem6 r j a .

Vamos calcular a quantidade de registros q~e ac de rao ser ar"¥lze:nados na memor ia .

Supondo que a m&m6ria do seu compu1ador, descontado 0 espa~o ocupado pelo programa de ofden8~§o. d l sno nha de 12'0.000 bytes 1 t vr e s , 0 'que pode s er constatado pelo comando PRINT FRE(HH). a quantidade mAxima ser~ de 20000/131 = 152 registros na mem6r~a. 0 que i

mu ii t n p oucc para a rna i or l a d as ap,1 i c a cfies ,

94

Uma das sardas 5er~a a de se aumentar a tamanho da mern6ria do seu computador. mas isso n~o , f6c~ I nem b ar at c .

Re sta . entaD~ a at t e r n a t l vs de nr denacao in'-

d i r et a. armazenando ap e nas . as i n+o rmacbe s que farao parte da chavs de ordena,~o. Nesta alternativa. 0 programa deve efetuar os seguintes passos:

1 - leitura de todos os regjstros, definindo, na mem6riaJ uma var~Avel com as informa,5e5 que comp6em apenas a chave de ordenal;ao;

2 uti I Izar um algOritmo que ordene urn vator de postcio. que ap6s a ordena~io, Pos5ua a Posi~50 relativa do! reg~stros.

3 - Trocar as posi~5es relativas dos regist r o s no ar au l vo , lando 0 r as i s tro em urn endere~o e gravando-a no endere~o ~nd~c'ado pelo vetor de ordena,10.

Nesta atternativa. a ~rea I ~vre da mem6ria ser~ usada para 0 armazenamento somente da chave de Drdena~~o e nio para 0 re9~5tro todo~ Para a ordenac~o de 500 reglstro5 segundo 0 rn6mero de te'efons. necessttaremos de (7 + 3). 500 = 5.800 bytes na memfirla.

Sa a chave for constitufda de CEP + TELEFONE. nece5sltarem~s de (5 + 7 + 3) w 500 = 7.500 bytes na mernor II a.

Sa a chave for constitu[da pelo endere~o. necessitaremos de (50 + 3) • 500 ~ 28.500 bytes, Q que~ evjdenfemente_ 56 teremos Quando a mem5ria for increme n tad a C om ma i s m6 d u los de - ex pan 50 a: a .

Esgotadas as a'ternat~vas de ordena~io tots' I:) til par cia I n a memo ria, . res tar i €':I a s a I t ern a t i \I a s de 0 rdena~~o direta no disco.

A ticntca de se efetuar a ordena~io direta no disco. isto~. comparando 2 reglstros de cad~ vez e trocando au n~o sua! posi~5es a cada compara~io. deve ser utllizada ,omenta em casos axtremos~ pols esta tecnlica ir,a promovs·r uma grande t r e ea de poslcoes dns relg1jistros. e t ssa ,r,ij alminuiir., consfdera'vermente. a Conf(abl'ldade nos dados. tendo em vista que em cada grava~io~ e~lste 0 risco de 0 cabeQote de gravaeio nio conseguir gravar a informa~ia com a fide~idade neces-

95

sarlij. alim de aumentar consideravelmente 0 tempo de ordena~50 per causa da grande quantidade de leituras

ftl" ,_ . . -_," ~

e gravaeoes que serao necessar~as.

Antes de partir para esse caso eltremo. 0 programador dave pesquisar a efici8ncJa de outras alternativa§. tals como divid~r 0 arquivo em v'r~o5 arqu~vos menore5~ ordenar iod1vidualmente cads um deles e. apes as otden,a~5,es.j unt ar novamen t e todos as s e s arquivos em urn ~nico.

Por exemplo~ desejando-se ordenar urn Cadastro com 1.000 Funcionirios. tendo cada reg~stro 0 comprimento de 67 bytes. iremos necessitar de um e5pa~o na mem6ria de (67 + 3) x 1.000 = 70.000 bytes. 0 que tornar i a j nv ia,ve I 9, ordena~ao na mem6r j, a. - Por@m. s e esse arquivo for divtdido em 4 outros arqu~vos menores~ cada um desses outros arquivos irj fer em m6dia

1.000 I 4 = 250 registros,

de modo que 0 espa~o necess'rio na mem6ria~ para a ordena~~o de cada urn desses arquivos separadamente. sari

. .

de (67 + 3) x 250 = 17.509 bytes. 0 que torna viAvel a o:rdellacio.

Vejamos 05 passos dessa t~cnlca:

1 - Anal isar 05 Names no Cadastre. tentando estimar a distribui~ijo percentual da primeira letra dos names. Assim. descobrimos. por exemplo~ que 25\ ~05 funclon~rlos tem 0 nome come~ando com as letras dell. a E " m a i s 25' c om a 5 let r as de F aLe 25% c om as l e tr as de Ma P.

2 - Executar urn programa que~ a partir do Cadastro~ cr~e q navos arquivos. para oode serio transferldos os dados cadastrais. em fun~~o da primeira letll'a do nome.

98 MAX;F IlES = 5

188 QP EN 1111 A : CADA5lRO .. AR'''''' AS 111 L EN=67 182 fiELD 11.67 AS &.

1814 REG;: LOF( 1) I 67

186 OPEN ... A: PARTE. A'" AS Ie L EN = i67 18B FIELD '2~67 A5 GA.

110 OPEN uA:PARTE.W" ASia lEN=67 112 FIELD *3.67 AS G8$

114 OPEN "I'A:PARTE,.f:· AS 14 lEN=67

96

116 FIELD 14,61 AS GCI

11'8 OPEN "iOA::PARTE.O"" AS *5 lEN:67 128 FIELD 15.67 AS GD$

122 GA :: 8

1~ GD :: It

126GC ;; B

128 'GD = R

138 FOR N=l TO REG 1'32 GET 11" N

'1 34 If LEFT$( G$ .. 1 )<;;;"~"'THEN GA=GA,+l PUT 12,GA = GOlD 142

13& IF LEFT$(C$ .. l)(="LU THEN G8=GB+l PUT 13,GB: GOTO 142

138 IF L EFTS( GS .. 1 )(= .... p ... THEN GG=GC+l

,PUT 14 ~ REGC : 'GOTO 1~. 149 GD;: &0+1 ; PUT B5 .. GD

1-12 HE'Xl N

144 CLOSE

146 END

3 - Executar 0 programa de ordenaQ~o na mem6- ria em cada urn desses 4 arquivos crlados.

4 - Juntar todos os 4 arqujvos em um 6n~co.

Dos in6meros aigOrjtmo5 disponfvets para a ordena~io na mem6ria. pode~o5 empregar urn. multo conhecldo. e ampJamente empregado. que cornsiste em se comparar os elementos do conjunto, 2 de cada vez. par exemplo CHAVE(m] e CHAVE(n). Nos casas em que CHAVE(m) for major Que CHIVE(n). um vetor de posi~~o OROEM(m} d eve 5 e r inc r em en tad 0 , i n d j can d 0 Que 0 e , em e n tom ., seodo maior que 0 e1emeoto n. dave ocupar uma ordem maior, 0 que serb representado pelo lato de ORDEMlm) ser malor que-OROEM(n),

o n~cleo do algoritmo ser6 0 seguinte;

188 FOR M= 1 TO :REG 182 FOR N:1 TO REG

184 If C'ttAVE(!M )(CHAVE( N: J THEN

ORDE.I(' N.)= ORDEI1( N ) + 1

186 NEXT N

188 NEXT M

97

Vejamos um exemplo pr6ttco do funcionamento desse algoritmo:

Sejam 5 nQmero5 dados na sequ@nciar 47~ 87. 13. 86 e 10. Vamos dispor esses n6meros segund~ uma tabela. para que possamos acompanhar~ etapa por etap a , 0 desenvolvimento do '8Igorltmo. :Em c ada et ae a .. urn n6mero ~ comparado com os· dema~s e n05 casos em que 0 nGmero que se campara for Menor que 0 n6mero comparado. 0 vetor OROEM# correspondente ao n6mero comparado & incrementado:

, 47 87 1 a 86 " 0
" ~ i n i c i a Jmente 0 vetor
,
ORDEM contem z e r O,S . 0 " " tel 0,

2 - ,compa r a r 0 <17 com todo,s : 0 1 " 1 '0
3' - compar ar 0 87 com t odos i 0 1 0 1 0
4 - comparar 0 , a com todos = 1 ,2 0 2 "
5 -, comparaF' 0 BEi, com, todos : , 3 0 2 I
6 campa r a r 0 1 " com todos .• 2 4 1 a I A t:)IIl s e S 5 as· C om:p a r a f; 0 e 5 ~ o sa 9' u i n tee om and 0 dar,a, 05 nU1meras; na sequencia l at et al e·na sequencia ordenada,;

288 fOR I =1 TO iR,EG

282 S,A I 01,( ORDEM{ I )+1) ;; CHIVE( ,J)

284 NEXT I

2'BIIFOR )::=1 TO REG

282 PH I NT CHAVE( I ) ,.SA" OA( I: )

284 NEXT I

o vetar OROEM{n) cont'm~ em cada elemento. a p05ie~o relativa dos elementos da CHAVE ap6s a orden a~50. Obt~do 0 vetor ORDEM. 0 programa poderl adotar uma das dUBS s t tuacses sesu i n t es , '

1 - Utj1~zar 0 vetor OROEM para poder. por exempto~ imprimir um relat6rio .onde os itens apare~am em 0 r de m ~ m~ a 5, n a 0 a I t e ra ra or d em rei at i va d 0 S r e s 1 S ~ tros no arQulvo.

2 - Ut~Jizar 0 vetor ORDEM para efetivamente alterar a posi~io relativa dos regfstros no arquivo, de modo que 0 arquivo ficari ordenado.

98

Na prl~eira situa~§o. os registros do arQuivo contlnuario na mesma seQuincia em que sa encontravam. A desvantagem i que se 10r necess~rio i~prjm~r mais uma vez a relat6rlo~ os reg~stros precisario ser novamente ordenados. enquanto que a vantagem se resume em nio se ter riscos de erros de gravac5es~ vjsto que 0

. .

arqulvo I acessado somente para lelturas.

. Na segunda situacio~ as posi~5es relativas

d05 r as t s t r ns SaiD a l t e r adas. i s tu e. pr lme l r e re9~s,tro ae rag ra va don 0 1 u gar Id '0 t erie e i r 0 que P (I r sua v e r s era gravado no lugar do segundo. este no quinto e finalmant e • e s t e no primeiro l usar • olbrLgando a uma, le I tur a e a uma regrava;io de praticamente todos os reg.istro5 do arqu l ve .

Uma ,('I r qui vo ~ 'em IORDEM~~ t em 0

rotlna que reorgan~za os re9istros de um fune50 da sequincia contid~ em urn veto~

seguints aspecto: .

98 :MAXfllES = 2

190 OPEN ili' OR I GEM"' A5 111 LEN=5B '92 FIELD .1,,56 AS GOI

1 84 OPEN 1111 DEST t NtTJ' ,AS 12 L EMeS6 liDB FIELD .2,,56, AS GDS

118 REG = lOF(1) '66

118 FORM:: 1 TO REG

112 GET,1 .. N

114 l6ET GO. =: '601

11S PUTI2"OR0El1(N,.1 118 NEXT N

Com~ Qltimo recurso, esgotadas as tentativas de ordenaeio na mem6ria~ restar' a alternative de ordena~§o direta no dt5CO.

Um a~90'itmD. de Qrdena~iQ d~reta no disco i apresentado a s~gu~r~

118 '------------------

112 -Ordenacao no Disco

, IS Q,PENI .. " AROU I vr AS .1 .L EN:: 12B . ,

18B FIElD 11 .. 14 AS AI .. 4 AS ZI .. 38 AS 0$ 118 F I EtO 11 ,,112'8 AS T$

114 K c LO~{1J I 128

1211 'I .;: I

122 GET tn 41 124 Zl .: eVS( Zs)

(-

99

Você também pode gostar