Sie sind auf Seite 1von 69

tfE|.lr,, | trt/ll ."''.

- --

rHl..i,lJ{;{i!J
l r ior A l )^'n i rr I t r lr or luc Al)^) rrrurca rcgistrada do U.S.(ovcrnment ADA Joint PiogramOffice. ('opyrightO l9tt3 by Springer-Verlag New York Inc. () l9ti5, l-ditoraCampus Ltda. 'l'udosos tlircitos para a lngua portuguesa reservados e protegidospela ki 5988 de t4l | 2 l te 7 3 . partc desteliwo poderserreproduzidaou transmitidasejamquaisforem os Ncrrlrunra nrcioscrnpregados: eletrnicos,mecnicos,fotogrficos, gravaoou quaisqueroutros. 'lodo o csforo foi feito para fornecer a mais completa e adequadainformao. ('ontudo a editora no assume responsabrlidades pelo uso da mesma. A lrtlitora Campusno filiada a nenhum fabricante de sistemascomputacionais. ( lapa OtuvioStudart I )iagramao, composio,paginaoe reviso l',ditoraCarnpus Ltda. lua larode Itapagipe,55 Rio Comprido 'l'cl.:(021) 284 8443 10261 Rio de JaneiroRJ Brasil lirrdcreo telegrfico : CAMPUSRIO

PREFACIO

B i B Lio T t r - A
Jac

o pai da atual tecnologiade computadores, considerado Babbage deve.ser Se Charles Augusta Ada Lovelace,de cujo nome derivou'seo ento com certezaa Condessa tecnologia. destalinguagem,deveser lembrada como a parteira dessa Foi ela, a filha do poeta ingls Lotd Byron, quem traduziu os trabalhos do seuscomentrioscientficos matemtico italiano L. F. Menabrea,acrescentando entre a mquina de diferenase a mquina pessoais sobre as dissimilaridades analtica. Foi lady Lovelace,a grandedama dos computadores'quem preparou as notas e organizou os escritosde Babbage,com suasinestimveisemendas,para um para os receber. mundo ainda meio despreparado O esforo de produo da linguagemempregoucentenas,se no milhares, de mentes e uma valiosasoma de dinheiro desdesua concepo.Ada foi patrocinada pelo Grupo de Trabalho de Linguagensde Alta Ordem (HOLWG) reunido pelo U. S. Department ofDefense emjaneiro de 1975 com o objetivo global de desenvolver um enfoque sistemticosobre o melhor uso de software pelcs militares. pensarque o Pentgonoseriaum padastroimprovvel para uma nova Poder-se-ia linguagemde computador. Independentede sua linhagem, uma pergunta que se impe - Por qu? A respostade modo algum simples,mas um rpido pano de fundo pode ajudar a clarear a matria. Atualmente o Department of Defense(DoD) o maior consumidor de software dtr e dialetos de mundo, empregandoaproximadamente400 diferentes linguagens computao.A situao,algumtem comentado, pelo menos confusa. retrica, e mais de metade do custo de sua manuteno,deveser O grossodessa encontrado em "Sistemasde computador embutidos" - aquelessistemasque s'o parte de um arranjo eletromecnicomaior. Encontram-seexemplosnos armamentos em redesde trnsito rpido, ou sofisticados,nos avies,navios ou navesespaciais, As sadasso os familiares sinaisde em sistemasde comutao de mensagens. controle de computador e as folhas de dados.Um sistemade computador embutitlo o computador dentro de um dispositivo, o esquivo agentepor trs da cena que faz acontecerem. as coisas maquinria, uma panacialgica seria uma Dada a vastidoe a diversidadedessa linguagemde computador universal.O produto mais visvel do Grupo de Tribalho

"cg. 1

/)vgt

tsllN85-7001-2ll-x ( lid iooriginal : ISBNO-387-908I 4 - 5 Springer NewYork, USA) -Verlag,

Ficha Catalogrfica CIP- Brasil. Catalogao -na-fonte Sindicato Nacional dos Editores de Livros. RJ.

l-513a

Ada : uma introduoI Henry kdgard ; traduo de JosCludio - Rio de Janeiro: Campus, BeltroFrederico. 1985. Traduo de:ADA an introduction ISBN85-7001-21l-X 1. Ada (Linguagem de programao paracomputadores) 2. Lingua(Computadores) gemdeprogramao I. Tto

84-0842

cDD- OOr.&24

tl c l, ir rg u l g e rr c c rc l l td rri otk s rc u r ttenl l rrdo os t lc s A lt irO r r ler rlrri rrrn is r e { ritl (l a d are l a td l rig p r - rcrl u i si ttl s r r ic os tc de ur r r i ta r l l i n g u a g c rrt. oc rava cottsi cl crvcl irrlercssc tanto dc clcntrocomo tle fora do DoD, Toda a matria cru 0rpcssols geava pcrrsach, persda novamente e finalmente uma novacdio,Esscs rcpcnsada, (homemde palha), Woodenman papis ficaramconhecidos como o Strawman (honrcrnde pau), Tinman (homem de lato), Ironman (homem de ferro) e (homemde ao). o Steelman ultimamente processo, a idia de uma linguagem comum de computadorganhou Duranteesse que era no s um objetivo desejvel momentum. Sentia-se como tambmvivel. poltica de todos os lados,eliminou a idia de A aniilisetcnica,acoplada presso j existente.Foi apenas uma questode tempo at que o lckltar uma linguagem DoD pusesse desse novo instrumentoem concorrncia. o desenvolvimento propostas apresentaram de 1977.Cercade 17 oryanizaes e lsso foi na primavera parapreparaum projeto inicial. quatro foram selecionadas dcntro de poucosmeses de computador,a primeira Assimcomeou,em toda a histria daslinguagens grandecompetiode projetosde linguagem. Os quatro finalistasforam Softeche Intermetrics,ambosde Massachusetts;SRI Internationalda Califrniae a CII HoneywellBull da Frana,ailiada Honeywell. foram reduzidosa Intermetricse CII Honeywell Em maro de 1978 os candidatos franceses com a ltima palavraum ano depois. llull, ficando os projetistas para a Ada@, Semdvidaa versoda minuta dos padrespropostos que aqui estoapresentados, H muitos fatoresde contribuio, compeensiva. pelo DoD pediamuma iinguagem com tipos, Os requisitospreparados bem como subprogramas, recursos de entradae sadaparainmerosdispositivos, processamento interfaces parahardware em paralelo,tratamento de excees, Alm disso,problemas e inmerosoutros detalhes. especficos, especfico pelosindivduosinteressados importantssimos no esforoAda, foram considerados da equipede projet da naturalmente trazidos tona, como o foram os interesses modos de ver compartilhados linguagem. O total desses deu-nosuma linguagem que certamente compreensiva. de Ada@ E assim tambmsuapotncia.No h dvidade que a capacidade problemas to rica quanto a de qualqueroutra linguagem resolver provavelmente de programao. A primeiraparte destedocumento uma introduo linguagem de programao Ada@.Como qualquerintroduo,enfatizamos maisos conceitosque formam os alicerces toda a linguagem ou preparamos da linguagem do que tentamosdescrever programas. um guia autocontidopara escrever Nossoobjetivo transmitir a essncia da linguagem, principalmente medianteexemplos. de Partimosda convico com algumalinguagem de que o leitor tem experincia programao de alta ordem. No previmosnenhumaoutra forma de conhecimento prvio. A apresentao organizada em quatro nveis sucessivos: de vrias : Estecaptulo inicial forneceum breveesquema Captulo,1 baseada em cinco caractersticas importantesem Ada-, A discusso programaspequenos exemplo.

(i tl tttttl tt:t * trt :lir r er r ep t t t lorlt r r t t eceruur r r llr lnnr cr lo r ulir pr olr ur r lo r los ( 'n1t t t r lo recttr(tl t ertptte t t t t t llzt ttdr t ou l. lit t t plr licr r lir o r c( lncet l(t) le t llt osr le tl utl tts, ttsi rrst rrrt ) es hr lsicus r ll lir r gt t it gcrsr tt, r bllr r gnr r r r lr ple i, ot ese c$t r ut ulil gerll do progranil. (bptukts 7 u I I: Esses captulos descreverrr os recursos pariltnuitits aplicaes importantes. Em particular, tratamos algunras cxtcnst)es tlc conceitode tipos,recursos processarnento de entrada e sada, enr paralclo, tratamento de excees e a interface com as implementaes. juntamcntc &ptulo I2: Apresentamos a algunscomentrios de concluso, com um exemploem grandeescala. Um documentocompanheiro a prpria definioda linguagem, o Ada Referencc Manual,.manual de referncia Ada@.Essedocumentodescreve a linguagem completa,como publicadaem julho de 1982 (Military StandardI 8 I 5, proposto como norma padroao AmericanNational Standards Institute). Conquantoo esforoAda@sejaobviamente o resultadode muitas pessoas, quatro delasse destacam. William A. Whitakerfoi o principal responsvel por levara necessidade de uma linguagem comum de computador atenodo DoD, mantendoviva suaateno duranteseuperodo de gestao, e, em geral,cultivandoo apoio governamental a ela. David Fisherpromoveuo esforodentro e fora do DoD, desenvolveu os requisitos tnicose demonstrouuma grandepreocupao com o projeto desdeo incio. William E. Carlsonserviuno DARPA (Defense AdvancedResearch ProjectsAgency - Agnciade Projetose Pesquisa Avanada da Defesa)como oficial de contrato do projeto; h longo tempo adotou uma posiode interesse no esforoe coordenou as contribuies de todos os participantes. JeanD. Ichbiah,o principal projetistada linguagem, devotousuaimensae aparentemente inexaurvelenergia arquiteturado Ada@.Embora apoiadopor numerosos indivduos,a linguagem final , em parte,a suaprpria. aqui, Andrew Singerofereceu Quanto introduo Ada@,apresentada considervel assistncia em seudesenvolmento. JeanIchbiah deu ao projeto um "nihil obstat". Jon Huerasajudou a projetar o programade formatado texto no Captulo 12. Olivier Roubine ofereceucomentrios muitos valiosos. Bernd Krieg-Brueckner, Philip Wetheralle Jean-Claude Heliard tambmcontriburam para o texto. MichaelMarcotty ofereceu seusmetacomentrios;e finalmenteMarvin Israel,como editor do Spring-Verlag, prestouexcelente serviode orientaoem todo o trabalho. , pois, com a publicaodestevolume que reconhecemos a qontribuioda Condessa e de incontveis outros ao desenvolvimento de Ada@. Henry kdgard Outubro de 1982

,.1 liot ttace rrhrcor l)crkn , t (lpatnoar 5,4 ltrlurrrreOcttlrrlvurlur .5,.5 Srrrrrrkl.

,5h .....Stt ..,,.,,.S9 ....... 0 ........3 . .64 ........s ........66 . . ..69

INDICE

11, il

('n1rtrrlo 6:1,,\lruluru(crul xl'rugramos 6.1 lilubora[odcDcclaracs.. .2 ninharnentoeVisibilidade., 6.3 CompilaoSeparada .4 UsodeCompilaoSeparada 6.5 Sumrio Csracter sticas Especializadas Captulo1:RetomandoaosTipos 7.1 TiposdeRegistro 7.2 TiposcomEstruturaDinmica. 7.3 TiposDerivados 7.4 Lim itaessobreTipos..
......14 .......14 .....16 . . . 19 . . . . .22 . . .24

l'rclcio. 0 Panorama ( 'r rp tu l o l :Cinc oE x em plos I.l C onv er s odeT e m p e ra tu ra s ... 1 .2 Cont agem deT r o c o 1.3 Uma ManeiraMelhor de Contar Troco. 1.4 Prticade Tiro ao Alvo. 1.5 Registrode Contagem ('nractersticasDominantes ('uptulo 2: Descio dos Dados 2.1 Tipos 2 .2 T ipos P r im it iv os 2 .3 T ipos deConjun to s ('irptulo 3: Descrio dos lculos 3 .1 Ex pr es s es ... . 3 .2 In s t r u es par a A tri b u i rVa l o re s . 3 .3 In s t r u es Cond i c i o n a .... is 3.4 Instruesde laos ( 'r 1 r t u l o 4 :Su bpr ogr am ns ... 4 .1 S ubpr ogr am as . 4 .2 C ham adadeS ub p ro g ra m.a's ' ..... 4 .3 S epar a odeC o rp o s d e Su b p ro g ra ... ma s 4 "4 S obr ec ar gadeS u b p ro g ra m a s ( 'r p t u l o S:P ac ot es 5 .1 Alnf or m a oV i s v e l 5 .2 U t liz ar alnf or m a o Vi s v e l . . . . .28 ......32 ....34 . . .39 .,.. ,.39 ...,,.4L ...42

.......71 ....71 .......75 ......77 .......78 ...83 , . . . 83 . . . 85 .....87

Captulo8:EntadaeSada. 8.1 ImprimirumaListadePreos 8.2 Usode Subprogramas Especializados. . 8.3 Pac otesPredefinidosdeEntrada/Sada ..

Captulo9:ProcessamentoemParalelo .....90 9.1 AparnciaTextualdeumaTarefa .......90 9.2 OrgarrrzaodeTarefasMltiplas ......92 9.3 ComunicaoentreTarefas ...,.93 EntradaAlternativas. 9.4 EscolherentreChamadasde . . . ; . . . . . . . . .,,96 de Retardos. 9.5 Especicao . . . .99 9.6 InterromperumaTarefa .....101 Captulo lO: Condies de Exceo 10.1 Introduzir Exceges. 10.2 I*vantar e TratarExcees 10.3 Propagao deumaExceo queSurgem DuranteComunicaes 10.4 Excees Intertarefas Captuloll:Utilinralmplementao ll.l RepresentarDados. ll.2 MudaraRepresentaodeDados Instrues ao Tradutor 11.3 Dando sobre o Ambiente l l.4 Inquiries Perspectiva Captulol2:Surruirio. ndiceAlfabtico... ......ll8 ..r....140 106 106 108 ll0 tt2 ......113 .....113 ...... ll5 . . . I 16 . . . 116

......,47 ,...47 . ' .48 .....50 .....,,52 ....53 .....53 .....55

l r I (l l'^( . hr l( il w rl , (lu ili'l'c Pt l'l' ttct:ctw tl tilo, o l) r ot ilnt rer or ;pr occt lir r r er r trol le cr r lr ut lu"su t tl r;t r e ; r nl, r cl{u tl cl l rtl rkn r : lr ur nur lo hllr liot eeu l o l )uco lc r lc I O l'A( 'KA( ; li, lturtetlcclurutlvrt tlc rrosso pr'ogriuta inclui urnatltrcltrirflo tle vuriilvel N ri lI I I t |'|P, Cl t SI US I t llP r L0AI , ^i l R t lissutlcclarutu que asduasvariveis cspecica usadas no progranra trrra propricdade tklr tttttcros tlc ponto flutuante.Uma declarao associa em geralum ou rnaisidentificadorcs corruni" cntidade.Nestecasoos dois nomesde variveis so objetosassociados ao ttpo lf l,O^'f. Essa a caracterstica de todos os programas: cadavaridvel deveserdeclaradu c lssociada a um certo tipo. A parte declarativa de nossoprogramacomeacom a chamada de um subprogranru: | Aprendera comunicar-se numa nova lngua sempreuma experincia provocativa. De incio pode parecer que tudo novo e tudo tem que ser compreendido antesque haja qualqucr ^sperana de poder usar-se a nova lngua. Depois,percebemos que ambasas lnguas t6m ritasrazesem comum. to lhes apresentarAda@,valemo-nosde suassemelhanas com as linguagens em uso corrc,tte e insistimos com voc, como leitor, para que faa o mesmo. Neste captulo aprescnti Lemoscinco pequenosprogmas.Esses progrmasfornecem um esboodas caractersticas de Ada- que so comuns a mtas outras linguagensde programaode ordem rnais alta, bem como outras caractersticasque podem ser novas.Nos prximos cinco captulos vamosesboaressas mesmascaractersticas, mas com detalhamentomuito maior. I.I COI\IVERSODE TEMPERATURAS Escrevemos programasa fim de interpretar e transformar dados.Ao escrever os prodevemos descrever a natvreza dos dados e dar declaraes para executar as opeaSramas essobreos dados. O Exemplo 1.1 ilustra a estrutura de um programa completo. Segueo seguinteesqucnla: wi l h I_ O- P A CK A G t ; p ro ce d uneT t l' lP E RA T U R E_ C 0 N V ER i s SI0 N -- unw parte declarativa -- descrevendoos dados b e g rn -- uma parte de instrues -- descrevendo os cdlculos en 0 ; Note como as palavras chaveprocedure, is, begin, e end formamuma moldura para a descriodo programa. O nome do programa TEMPERATURE_CONVERSION e tem a forma de um procedimento.Procedimento uma forma de unidade de programa.O prefixo t4 T 'lP) GtI (FA H R ENHEI I EI ; Esta declarao utiliza-se do procedimento GET definido no pacote de bibliotccu I _O_PACKAGE para obter um valor de algum dispositivode entradae atribuir o valor declarao varivelFAHRENHEIT_TEMP. A segunda - 32. |P 0) ; TE t P: = ( 5. 0/ 9. 0) o ( FAHRENHEI T_TE|. C TLS IU S varivelCELSIUS-TEMP. A ltima declarao consigna um valor recm-calculado P U T (C E LS I US- TEI 'I P) , como a primeira e se utiliza de um subprograma para imprimir o valor da varivel CELSIUS_TEMP. Note que cada declarao ou instruo termina com um ponto'evrgula(;). w rLhI 0-P ACKAG E, s C0NVt RSIi0N Tt lilPt RATURt 0rocedure use I 0 PACKAG E, ----A comm ent . a eadsa va uer epr esent ing Thr s p r ogr arrn and ahIe nhet t er r t 0er at ur e conver t sr t t o a t s celsius equt va ent val ue r epr esent lng

| .,*.o ExEMPLos

EI P,FLO AT; TE CELS] US TA H R E NHI I T'1P. begn


G t ( F A HR EN H t- TEl ; "l P) - 3 2.0 ) ; c E t s I U S tH P = ( 5 0 ,',90 ) + ( tAH R tN H Ei T- IEtP S P U T( C E LSIU ; - tf'l P) end; Exemplo l.l Converso de temperaturas

l5

No sso ex c r r r plo c ot t ln t(l u i tl r(, l i rtl tu s tl c e o rrtc rrl i ' tri os.' l ' otl os os col nc. cotl enl ri tl rh poclcrrr aparccclcnl (lul(lucr ililr c()1il* -c tcrninlilntut l'inr tla lirtha.Os corrtcntritrs l)ilrtcde ttntattrticlatlc-progriln4. 'l)roccclinrcntos tuis como GET e PUT que fazem parte de um pacotepodenser itlcntil'icados por un ponto.PorexemploI_O_PACKAGE.GETe I_O_PACKAGE.PUT. Arpriiuse rirnt)s uma clusula use rrst, I 0 P A CK A G E ; no incio claparte declarativa, e, em conseqncia, GET e PUT podem ser assimdiretatclltcchamados. Iinahnenteuma nota importante. O pacoteI_O*PACKAGE no parte da defininestaintrodu,contmmuiilo padro de Ada@.Essepacte,usadofreqentemente tos procedimentos tomadosdos recursos que da@tem paraentradas e sdas, e discuti d t l no Ca p tulo 8. I.2 CONTAGEMDE TROCO precisamosatmazena Em muitas aplicaes muitos dados.Tambmprecisamos dirigir o fluxo de controle de modo a executaralgunsclculos. Essas idiasestoilustradas tto Exemplo 1.2. Essepogramal seisnmerosque representam os nmerosde pennies, rtickels, dimesetc., usados como troco, e calculao valor total do troco. wrth I 0 P A CK A G ; p ro ce d u ne rs C0UN - Y 0UR CH A N GE u se I 0 P A CK A G T :
Thrs p rog ramrea ds in 6 r nbeger v a ues , r es pe c t t v e y fe pre se ntrn g th e num bero pennr es , nr c k e s , d t m e s , q u a r t e n s , hal-d ola rs, and s r v er dollans r n c oinage. Th e p rog ram0u tput s t he t ot al v a ue o t he c oi n s r n d o l a r s an d ce nts. COUNI, C OIN T OAL _CHANGE. N UI'I_CENIS, N UI.I DOL LARS. INTEGER; C 0INVALUE. con sta nt ar r ay ( . . 6) of I NTEG ER (01,0s, I 0, 25, 50, 100 );

l r r l^ l r 'l r l I t i l l l ,

tlt^ltl1!

r0 t ^ l

ri l ^ f t l , l

r r rl l i

vAll,l,l{l'l

{ r} l l ! -{ i l l N

tlltlil

: l {tl ^ l { i l ^ l t( ;t / l {r {, u[.1 l t 0 ll ( .1 N ^ Ii l , :, Nllli Ir Il \l l .l i ^ N ( i i Ir ,r r rIr ) 1 ], l 't i ( " I0 l At ( IH AN lIS $ ") , PU i ( N U f,l l ) 0 1 ^ l l :,) r l N UI'1 0 tN TS. l 0 l h r r r r P U T( " 0 ") ; PU I ( N U l lC EN S) ; r lsu P U I ( " ') PU T( N U t'l C TN IS) ; e n d r ,

t:nd; l.xernplo 1.2 Contagem detroc

A parte declarativade nossoprograma-exemplo introduz quatro variveis tlo lipo INTEGER. O tipo INTEGER predefinido familiar, e podem-se fazer com ele asopcrirde inteiros. esconvencionais De maior interesse parans a declarao de um conjunto chamado COIN V^ l.t, li. O tipo de COIN_VALUE especificado na definiode tipos: array 0 . 6) o I NI EG ER:

Assim, COIN-VALUE uma coleode seiscomponentes inteiros, Coletivamente esscs componentes formam um conjunto indexadopelossubscritos 1 a 6. O conjunto inicializadocom os seisvaloresinteiros:

(0 1 , 0 5 , 1 0 , 2 5 , 5 0 , 1 0 0 )
Esses valoresrepresentam respectivamente o valor em ients de um penny, um nickel, unl dime, um quarter, um half dollar e um silver dollar. O fato de COIN_VALUE ser especificadocomo uma constante significaque os componentes do conjunto devemsempreassumiresses valoes,como resumidoa seguir:

Componente do Conjunto COIN-VALUE(1) c0IN_\ /ALUt(2) COIN_VALUE(3) (4) c0rN_\ /ALUt c0rN_VALUt(5) COIN_VALUE(6)

Indice I 2 3
tl

Valordo Componente 1 5 LO 25 50 I 00. l7

0egn I0I AL CHANGE := 0; P Ur-LINt ("tNItR TH t NU1BER OF EACH CO I N") ; fon NtX_ C0INrn I 6 loop COUN ; T) GEI (COIN-

5 6

l6

A l l rtrtctlc t t t s lt t t t ) c s tto s s o t le ct l c nosso i progranra anteri or l rto l l u n rltt s c rrrc l l ri l rl cxcclo (ltlcilllotitletttos trrulirr hxtlt cuttr iJ'stutt,nt(ttl. O laolbr ten a forma to l N [X l 00lN n I - - instru'oes ln (l Io op; . 6 o o p

rl i t pi trl ci rtl ei ritto t r lt ur r : ler rrlc t lit t lc'l'O 'l'Al. ( 'llAN( ill pot l( X) ,c lr r t . r r 'sr r llr t t livisf lo I 0 l A l C H A NGrient 100 clo correspondente restointeiro da diviso. I.3 UMA MANEIRA MELHOR DE CONTAR TROCO o uso de diferentes espcies de objc'to. Um aspectofundamentalda programao Sejammoedasos objetos, nmero de partes, posies ou nonrcsclc de acompanhamento, pessoas, devem ser representados em termos dos componentes* de uma dada linguagenr de programao. H algunsproblemascom nossoprogramaanterior para contar troco. As moedasdc pelosinteiros de I a 6. Mas conceitualmente penny a doliar sorepresentadas moedasnrlo por 3 nos permite somar so nmeros.Alm disso,o fato de um dime ser representado um dime a outro e obter 6 (um dollar). Voltamos em seguidaa nosso programapara contar troco. Nossoobjetivo ilustrar a unidade conceitualde declarartpos, bem como ilustrar a maior clarczados tipos. essenO segundoprogramade contar troco dado no Exemplo 1.3. Suasdiferens assim: 'ciaispara o programaanterior so delineadas proceoure C0UNT- YO UR- CHANG is t D0LLAR) HALF- D0LLAR, type C 0I N s ( Pt NNY,NI CKEL,DI l, |E,Q UARTER, of I NTEG ER= constant array ( PENNY D0LLAR) C0IN-VALUE: => =' (PENNY 01, NI CKEL 05, DI M E=> 10, => t 00) ; => -> QUARTER25, HALF- DO LLAR 50, DO LLAR : D egn for N E XT- CO I in N PTNNY ,nO toop ; end; Vemos aqui o uso de um tipo chamadoCOIN. Diferentementedo tipo chamadoINTEGER, o tipo chamadoCOIN no predefnido na linguagem.E introduzido pela declarao NI CKEL,DI |'t E,Q UARTER, HALF- D0LLAR, D0LLAR) ; type C 0IN i s ( PENNY, seisvalores,os identificadores Essa declaraodefne COIN como um tipo que assume PENNY a DOLLAR. Essetipo chamadoum tipo de enumerao.
Constructs.

() lao Jor controlado pelo parmetro de lao NEXT_COIN. O cabealhodo Iao for titntbrttespecifica que o lao deveserexecutadoparaosvalores sucessivos de NEXT_COIN rta'aixa I6 Assim as instrues do lao so executadasseis vezes, e a cada iterao atribui-se a NEXT_COIN um dosvalores de I a 6. instruo if tem a forma < S r f NUf'1- CE NT l0 t he n -- instrues e se -- instrues e n d i f; Vcmos aqui a escolha de uma entre doisgruposde instruesbaseadas no valor de uma cnclio.Se a condioque testa os valoresde NUM_CENTS for verdadeira, o primeiro grupo de instrues executado;seno, executa-se o segundogrupo. A escolha feita de tal tttodo que, por exemplo,um dollar e cinco cents impresso$1.05 e no $1.5 em que o t,cro n.oaparece. Se examinarmos o programa com um pouco mais de detalhe, podemos verificar algunsotros pontos.Considere a instruo + EC 0 IN -V AL U E(N EX I 0 IAL -C HA NG:E = T 0I A L -C H AN G - )* C 0IN -C 0U N T; C 0IN Vcrnos aqui.o uso do parmetro de lao NEXT-COIN, que deveassumirvaloresde 1 a 6. Note que o parmetro de lao no vem declaradona pafte declarativado programa.Um num laofor e tem o parmetrode lao implicitamente declaradopor seu aparecimento tipo INTEGER com valoresde 1 a 6. Considete, fnalmente,as duasdeclaraes 100; NU l 't-DO LLA:RS = T O T A L -C H A N / GE retl n 1 0 0 ; NU |'1 -C E NT S . = T 0T A L -C H AN G A qui T OTAL -C HA NG E O / iO l8

D0LLAR ioop

t9

0 tipo (:OlN usudocnr vdrioslugrrcsonr nossopograma.O primeiro na declaratlc COIN VALUE, que tem a definio tle tip<r o a rra y (PE NNY 00LL AR )o IN T EGT R

NUf 0 0ttAR s = t0 t,l t {,i l AN ( ;t / I0 0 , = I0 l At ( :ti AN ( irte m 1 0 0 . NuliC l tN S P U ( " T 0 TALC H AN GE IS $ ") ; PU T( N U l '1 _ .D 0 L L AR S) , i N U ll _ C EN. TS l 0 th e n P U ( ".0 ") ; PU ( N U l l _ C EN IS) ; ese TS) P U T( ". ") ; PU T( N U II_ C EN ; end if : end: Exemplo 1.3 Contagemde troco usandoo tipo COIN Esta listagem de pares de valores de ndice equivalente simples listagem dos valores

Essa denio aniloga anterior a rn a y (1 . . 6) of I N T EGE R com a importante diferena de que os ndices no so denotadospelos valoresde I a 6 do tipo INTEGER, mas sim pelos valores PEN.IY a DOLLAR do tipo COIN. Os componentes do conjunto so, claro, inteiros. A inicializao do conjunto COIN_VALUE sebeneficia do tipo COIN para explicitamente associar cadamoeda com seuvalor correspondenteem cents.Temosem particular = > 01 , => 05, ( PINNY NI CK EL D Il l l E= > 1 0 , =R > 50, DOLLAR = > 1 0 0) QU AR E= R> 25, HA LF -D 0 L L A wi th I-0 -P A CK A G E ; pro ce d u rCO e UNT _Y 0U R _ C i sH AN G E u se I - 0_P A CK A G E ; -----n ads T his pr ogr ane i n 6 i n te g e r v a l u e s ,re s p ecti vel y r epr es ent ing n t he n u m b e n i c k e l s , di mes,quarters, o pennies, ha f . do lar s , an ds i l v e n d o l l a rs i n c o i n a g e . n p u tsth e to ta v a l u e o f th e c o i ns i n dol ars he pnogr ar out ' andc ent s .

(0 1 , 0 5 , 10 , 2 5 , 5 0 , 1 0 0 ) Nosso conjunto COIN-VALUE de interpretar esses valores. maselimina a adivinhao


pode portanto ser assimresumido:

Componente do Coniunto C OIN _V ALUE( PI NNY) C OIN -V ALUE( NI CKEL)

ndice PENNY NI CKEL

Valor do Componente I 5

type C0I Nis ( P E N N Y, N IC KE L , Itl E,Q U AR ItR D H,AL F D 0ttA R D , 0LLA R ); COI N_CO UNT , TOT ACHA L NG E , N UI I NT S , - CE N UI ! _D0LLA RSE : GE R : I NT V A LUT C 0 IN c:ons t a n t a rra y:(PfN N Y D 0 L L AR o) INTE GE := R =Y > 0 1, => 05, ( P E NN N IC K EL D Il l t = > 10, be g tn QU A R E R= > 25, H A L F * D 0 L L A R = > 5 0 .D O L L A R = > 100);

( DI}IE DII.E N-VALUE COI ) COIN_VALUE(QUARTER) QUARTER HALF_DOLLAR COIN-VALUE(HALF-DOLLAR) DOLLAR COIN-VALUE(DOLLAR) O prximousode moedas no laofor .. D0LLAR oop for NEXT-C0IN rn PENNY instrues end loop;

l0
25 5O

r00

peloNEXT_coIN nosoosinteirosna faixa assumidos Aqui osvaloes


0 A L_CHA NG E : = 0; ( " E NT I R PU - LI NE H EN U Il BE R H OIN ' ' ); O FEA C C fo r NE X T _C0I inNP T N N.Y . D 0 L L AR o o p ( CO I N- CO U GET ; NT) T0T A L_CHA NG E A L _ C H AN + C := OT G0 E IN _ VA L U E ( C N 0IN EX* T_ )C 0IN _C 0U ; NT e n d oop;

I ..6 na faixa de enumerao masosvalores PENNY . . DOLLAR

20

2t

rl o lt po ('Ol N. s s ir r(r) ll o d e x e l c u l a (li () p o r s c i sv c z ,cs, ti rttl a nl l s a cadanova i tcrai i o rlibui-scsucorisivanrcntc a NUX' COIN un dos valorcsde PIINNY a DOLLAR tlo tipo ('OlN. ('rlrro lntori<lrmcntc, por seuuso como declarado NEXT_COIN irnplicitanente plrtnrclro do lao, mas aqui NEXT_COIN s pode assumivaloresdo tipo COIN e com clcs n{o podcm ser realizadas operaes aritmticas. Cada um desses usosdo tipo COIN ilustra um ponto geral.O tipo COIN representa Em vez de confiar em representar runra unidadeconceitualintroduzida pelo programador. dando-lhe uma definirrrocdas por inteiros,o progamador pode captara noode moe<la que, uma prpria tipo tem a segurana extra de uma vez varivel de tipo. O uso desse do tipo. tcnha o tipo de moeda,ela s pode assumir valoresdesse I.4 PRTICA DE TIRO AO ALVO uma parte importante A capacidadede organizar um programa em subprogramas de parametrizar um subprorlc toda linguagemde programao. Alm disso,a capacidade grama permite ao programador resumir seu comportamento em termos de suasentradas c sadas lgicas. Essas idiasestoilustradas no programado Exemplo 1.4. Esseprogramal os componentes X e Y da velocidade de um projtil, bem como a distrtciaa um alvo sobre o rncsmo nvel e ainda a altura do alvo sobre essenvel. O programadetermina se o projtil irccrtar no alvo usandoleis simplesda fsica. wrth I-0 -PA CK A G E ; pno ce d u ne ts T A RG E T , P RA C T IC E u se I 0- P A CK A G E ; --'' ---y n ng eadsi n o u r v a l u e s ,re s p e c tL v e lrepresenLi l h r s pr 0gr atr th e r nit r a X andY v e o c i tre so a p ro j e c ti e , the dtstance t0 a t ar get , andt h e h e tg h to f th e ta rg e t. r e p ro j e cti e w i in ed rc a ti n gw h e th e th It pr r nt s a r nes s a g hrt t he t ar s et or n o t. .

{; l l ( Y Vl l 0 ( ,l l Yr , (l I rlAH(it I l ) l l i ^ N {,t ), (il ( TARtil ilt I(;il ) , R IST ( L VEL OC ITY, COIlPUT E Y VEL OC ITY. TAR GI.D ISTAN C N , L T R ISt) > 0 .0 a n d N ET- R SE < IAR GETr N E T -R ISt H tIGH I th e n P U T( "H IT") ; else P U T( "1 'l ISS" ); end i f ,

.end; Exemplo 1.4 Prtica detiro ao alvo Nosso interesse nesseproblema centra-se no subprograma COMPLfTE_RISE,que tem a seguintedescrio: procedun eC0I I PUTE_RI St ( V_X, V_y, DI STANCE: r n FL0AT; RI SE: out FL0AT) r s -- declaraeslocas begi n - - instrueslocais end;

G: constan t FL0 AT.= 9 81; - - m et er s per s ec ondper s e c o n d Y_VTLOC I Y. X V T LOCIY. NET- RI SI ,FLO AT; TARGEI - HE G T A RGT_DISIANCE, , HI ( V, X, V Y, DI S ANCt .in FL0A T ; procedu ne C0llPUE-RISt RI SE: out FL0AI t r s II. FLOAT; begt n T I| ' 1t := DISTANCE / V- X; R I St := V y+E _ ( G |2. 0) + ( I t it t + { 2) ; end, b e gin (..ENIER ANDH E I G H T : ', ) ; DI STANCE, Y VELO CI I I ES, P UT -L INE X AN D GII t X VELOCITYI;

Esseprogramatem trs parmetrosde entradae um parmetrode sada,cadaum do tipo FLOAT. Dentro do subprograma, os parmetros tm os nomesV_X, V_Y, DISTANCE e RISE. Essesparmetros caractezamo comportamento do subprograma,Internamente, o subprograma calculaum valor de RISE baseado nastrsentradas V_X, V_Y e DISTANCE. Essesubprograma usadono programaprincipal, que contm a chamadado subprograma: y_VEL0CI Ty, ( X_VEL0CI Ty, c0r' rP U Tt _RI SE TARG ET_DI STANCE, Nt T_RiSt ); Correspondente definio do subprogramaCOMPUTE_RISE, a chamadado subprograma contm quatro argumentos,cada um do tipo FLOAT. Os trs primeiros argumentos do os trs valoresde entrada para o procedimento. Depois de chamar, o quarto argumento NET_RISE assumiro valor de sada computado para o parmetro RISE. is pnocedun e TARG ET- PRACTI CE pnoced ur eC0 , I PUTE- RI SE, Q nr m et r os) s en0; en0; i

22

23

FF I

Nrlsstlcxctttplo tutttbntilustra urrraoutra idia bsica. As unidades dc programa (tlcstc citso procoditncntos tlo subprograma) podem ser aninhadas. No nossocasotemos rr ltirrracstruturada pgina23. Notc quc a unidadede programainterno COMPUTE_RISEse refere acelerao causada G que declarada n" unidad. extema. Note tambm que a Pcllt constantede gravidade unicladeinterna contm a declarao de uma varivellocat TIME. Assim vemos o duplo pttpcl do aninhamento.Uma unidadeinterna pode-se referir informaoglobal dadapor unta unidadeexterna,e pode tambm conter informao que seja (e {everia ser)inteirarrrcnte interna. I.5 REGISTRO DE CONTAGEM Uma caracterstica central de Ada@ sua capacidade de coletar dados,tipos e subprogramasnuma unidade que pode ser usadaem outros programas.Essacaracterstica, bcrn naturalmente, chamad a de pacote, Considere o pacote simplei mostradono Exemplo l.Sa.Iso definidoscinco tipos . tlc dados,duas constantes e um procedimento,cadaqual relevante para a aplicao dada. Iim particulara declarao ER ra n g e I .. l 8 ; typ e HO LE - NUI I B is tlcfine um tipo numrico cujos valoresso inteiros na faixa de I a 18. p a cka gG e 0LF _I NF is0 , typ e G 0LF _CLUB , 0 N ,p U T tR IED is (D R IVE R IR G t,tl A S H IE ); typ e C0LF _S C0Rt is ra n g eI .. 2 0 0 ; typ e H|) LE _NU|I ER sBn ange I .. 1 g ; typ e HA NDI CA pr s ra n g e0 .. 3 6 ; typ e S C0RE _DA Aa rra y (H 0 L E _ N U BE ) F _S C 0R E : is of R GOL PAR- F 0R- C0URS Es : ta n t c on G0LF SC 0 R E := /2 : PAR V A LUT Sc : ons t a n t = A S C 0 R E_ D : AT
(l=>5,2 = > 3, 3= > 4, 4= > 4, 5= > 3 , 6 =>4 , 7 =>5, 8= > 4, 9= ' 4, l0 = > 3, ll => 4 , 1 2 => 4 , l3 => 4 , l4 = > 5, l5 = > 3, 16 = > 4, l7 => 4 , l g => 5 ) ;

Iur' l l 0[ [ l0lA[ l rrt! l oop, r,t0 , ertd;

i tl i l l l l R Ittop trt f' l (]l .l 0l A l , l i ((]l l l S (H Ott);

Exemplo l.Sa Um pacote de golfe

Noteaindao cabealho do procedimento: (SCoRES: C0l'tPUTE-T0TAL in SC0RE-DATA; Brocedure T0TAL : out G0LF-SC0Rt);
Tal como a declarao do tipo HOLE-NUMBER ou a declarao da constantc de um procediPAR_FOR_COURSE, o cabealhodo procedimento uma declarao mento chamadoCOMPUTE_TOTAL. sob a forma: socoletados Todos esses itens declarados packageG 0LF- I NF0 is deelaraes -en0: a parte visvel do pacote. so chamadas Esas declaraes I - O - PACKAG E, w i th GOLF- I NF0, procedur KEEPe is SC0RE I NF0,I - O - PACKAG I ; use G0LF -- This pr ogr arr n or eacho l8 ho es eadsr n t he go scones -- It com put es oven( on under )par t he t ot a scor eandt he am ount : SCORt-DATA; lY-SCOR'tS I0IA L- SC0RE: G 0LF SC0RE,
0egln TH ESC OR IS FOREAC H H OL E. "), P U T( ''L TT'SH AVT o r H 0L En H 0 L E- N U tIBER o o p N E I,_ L IN E; P U T( H OtE) . PU T( " = "1 G r T ( 1 4 Y_ SC 0 R tS( H)0;L E) e n d I o op ; T0 TAL( l 1 y- SC OR ES, T0 TAL - SC 0 R t) ; c O i l p u TE N E I IL I N T; P U T( " YOU R T0 TALIS ") ; PU T( T0 IAL SC 0 R E)

p n o c edune (S C CO I I P UT E_ OT A0 LR ES i n: SC 0 R E _ D A T A; T 0 AL: o u t G0 L F _ S C 0 ; RE) en0;

p a cka gb eodyG 0LF _I NF0 rs p ro cedurCO e I ' I P UI E _ T(S C 0T A0 LR ES i n: SC O R t_ D A IA; 0 T AL: o u t G 0 L F _ S C 0 iR sE ) b e g rn T0 A L = 0,

24

25

N tt'/ l tNl , rl I()l^ l S(i{)Hl t,AR_l 0lt _00URSt t , lr ur r l'Ul rl'AR_l0 R_0 0URSt - I 0t AL_SC0Rt ) , pU ( " U N D E P RA R" ) ; = PAR_FO R_C0URSt lisrf I0 IA[_SC0 Rt t hen PU I ( ,.ANIV[N P AR, ), . r,lse ); PUT(T0IAL _SC0 Ri - pAR_F0R_C0URSt pU r , , 0V t R p A R . , , ) :
{,10 I I

ie r l lur lc C or r r illdo O cor gxr t lo pt t cole dr t r llet t r de pt t t lcvis vcl, n dollr r l8o corrrpl otu vlsvolllr uutocontltlu. Qualqucroulrtt utlltludc Segundo,um pscoto prltlc scr compilado separadarucntc. witll tto co' tle programa que use o pacotc dr:ve dar o nome do pacoteconl una clusula meo da unidade de programa. Terceiro, uma clusulause da forma use nome do pcote

, , rrt l, l,remplo l.5b Uso do pacote de golfe

Paracompletar a definio do.pacote, ascomputaes executadas peroprocedimento coMpurE-TorAL devemseroriniaas. Issosefaz Lr^;;rrp""ro w"o*q"" tr package bodyGOLF_INF0 is - - definiao do procedimento end:

quecon' na unidadede programa disponveis torna os itens da partesvel diretamente zse. tm a clusula e serotratadosmaic um tanto novade Ada@, so uma caracterstica Os pacotes paradesenvol' importante ferramenta so uma Noobstante, detalhes. tardeommaiores disponvolr torn'las e correlatas iriformaes grupos de reunir Permitem ver progrimis. suainterfaco somente ieleiiva.Comonos subprogramas, uru.r com baseem escolha " ao usurio. pblica exposta

C0|||PUTE_TOTAL

Agora o procedimentocompleto est definido. Tanto a parte visvel do pacote quanto o corpo do pacotepodem ser compilados separadamente.' O pacote GOLF_INFO pode ser usado em outra unidade de programa, como ilustrado no Exemplo l 5b. Essepiogramatem a forma wrth G 0LF _I NF 0, I _ 0 _ PA C K AGt; p ro ce duneK t t p_S C 0 R E rs -- dec'laraes locais b e g rn -- instrues end; c faz uso de alguns itens especicadosna parte visvel do pacote GOLF_INFO. Note, por exemplo, a declarao

l.lY SCORES : SCORE_DATA: lnfrooy um conjunto chamado My-scoRES cujotipo, scoRE-DATA, decraiyl raoonapartevlsivel
<lo pacote. Notetambm a chamada (IY-SCORES, CO|\|PUTE_TOTAL TOTAT-SCORE) ; do procedimento coMPUTE-TorAL declarado na partevisveldo pacote. o Exemplo 1.5 mostramuitos pontosgerais primeiro, cercado uso dis pacotes. um pacote geralmente.denido em duaspartes:a partevisvel,que specifica os iten que podem car disponveis paraoutrasunidaderpiogtumas, . o co pacote,que "-po 26

27

t llzctr lt t e t lt t clxr r lclt t os M ( ) N lr St lN ll llcslcsclt llt lo ttt t tt lct t lt c$clcvalr r t r "' l rrrl c rtrsttt.tttt , lc clit sst ' v, t lt t t r 's t t lt t it ttrttl tl to tl cscrcvc /x),rlt't'ruttncrur",N()$tilxrstlc socharuacl0s rrcirrr os rf0is tipOsirrtrotluzitl(}s valtltus' <l;ls a classc explicitarrrcntc cttuncra. crru'rcrl., a tliclara'6c.tip. so tluc os val.rcs. numerao e de tipoi os toaor J 'rdcttit' Uma das proprieOuO.s Paru crcsco.tc. .rrder' enr sejamenumerad.s arp"iu-r, que os valores dos. Em particular, SUN' o tipo DY o primeiro valor MON e o ltimo valoser fcitas stlbresctrs que podem validamente Para todos os trpos h operaes para cotnparar relac;onais stasincluem os operadores res. Paraos tipos de enumera-o, valor TUE, podemoster assc. o toma TODAY varivel a se Assim, tipo. do valoresdentro guintesexpresses: valor FALSE TODAY= |ON -- testede igualdade, TOD A Y <=FRI - - t est edem enor doqueouiguala, valor TRUE pode introduzir um tipo para um programador o exemplo acima ilustra uma idia bsica: aplicao' para uma de valoresnecessrios definir ma classe de tipo pol uma declarao Os tipos denidospelo programadorso apresentados da forma: type ldentifcador ts definio do tipo;

Um todas as aplicaestemos muitas espciesde objetos, cada qual com propriedadesdi'crentes. Parabem resolverum problema,precisamos descrever os objetosdo mundo real c suaspropriedadesem termos dos construendosde uma dada linguagemde programao. Alm disso,precisamos no s escolheruma descrio adequada parauma entidade,mas ainda assegurar que uma operaovalidamenteexecutadanum programa tenha um signicadoem termosde objetose operaes do mundo real. Podemos, por exemplo, realizaras operaes aritmticas convencionais sobredados tlumricos, mas, conquanto possamosdescreverdatas de calendrioscom nmeros inteiros e possamos subtrair duas dataspara ter um intervalode tempo, no tem nenhum sentido extrair raiz,quadradade uma data, ou multiplicar uma data por uma velocidade. Assimvemosdois pontos crticos de um programa: r A necessidade de descrever objetos e suaspropriedadescom precisoe clareza. r A necessidade de garantir que as operaes com objetos no violem suaspropriedadesintrnsecas. lssonos leva ao conceitode tipo. 2 . 1 TIPOS Comeamos com dois exemplos: typ e DA Y is ( l, l0N,TU t, t/tD , H U , F R I, S A, S UN );

de a-classe um nome parao tip-o.A defniodo tipo especifica o identificador especifica os pode usar que se com as maneiras que dnem valorese implicitamenteas operaoes diferente' tipo um introduz tlpo de valores.Imprtante: cadadefini em mente, damosa dfiniaobsicade tipo: discusso Com essa que se I um tipo caracterizaum conjunto de valorese o conjunto de operaes valores. aplicama esses o tipo o que foi especificado tm um tipo associado. todas as variveis Nos programas, a varivel foi declarada. quando 1com que sepoderoex a segwana um dos pontos importantesem pogamao declaraes: as seguintes trair concluseisobre.t* ptogturnu'Considere

t v p e c 0i Nis ( PEN Ny, NIcK E L, DIr'rE , HA A R, QUA RE R , L F _ D0 L L D0 t L A R):


A primeira declarao introduz um tipo chamado DAY, a segunda um tipo chamado ('OIN. Exatamente como podemosdizer C OUNT E R: I NT E G I R; para declararuma varivelCOUNTER do tipo INTBGER, podemos dizer IODAY:D A Y ; para declarar uma varivel TODAY do tipo DAY. Similarmente, do mesmo modo como uma varivel do tipo INTEGER pode assumirvalores inteiros, uma varivel do tipo DAY 28

TODAY : DAY; : C0IN; NEw-C0iN C0UNItR: INTEGER; ter asinstrues Fariasentido TODAY : = TUE; ;= NICKEL; NEI^I-C0IN + l; := COUNTER C0UNTER

29

&

*,.dlq;

*r

nl$ttl(,teriaserrtid() ter as instrues TOD A Y : = NI Ct ( tL ; _ _ n o u m dia Ni t/ C 0lN : = T UE ; _ _ n o u ma mo e d a C .UNI . R : = T ' DA y + l ; _ s o m a n o u m a o p e raol egal paradi as usartipos: L A uma varivelno se pode atribuir um valor de tipo diferente. 2' As nicas operaespermitidas com um valor so aquelasassociadas com a definio de seutipo. l.)ssas regrasso esrriramenr::!*ry,udT n3llcompilador da linguagem, e qualquererro tlc tipo apontado oi:"|,t:i compilaao.'iar-os assimtirar uira lonclusao fundamentul garantida pelo usoce tlpos. r As propriedadesdo tipo declaradas por um programador no sero violadas durante a execuo do programa. uma vez declarado o tipo de uma variver o programadorpode se referir a algumas tto" urundo lssonos levas regras bsicas para

ou de modo equivalente FI RSI H OU R S -W0RKED: annay ( DAY'

DAY'LAST) of INTEGER;

ou ainda H0URS-W0RKED'. artay (DAY) o INTEGER; Alm disso, temosum laoiterandosobreos diasda semana f or CURRENT_DAY in l'0N .. SUN loop - - o quefazercomcada valorde CURRTNT_DAy end loop; ou demodoequivalente for CURRENT-DAY in DAY'FIRST .. DAy,LAS tooo -- o quefozercomcadavalor de CURRENT_DAY end loop; Note a clarcza doslaosacimasobre: for DAY_INDEX in I .. 7 toop - - o quefazercom cadavalorde DAY_INDEX end loop; A Tabela2.1 define algunstipos de enumerao. Usando esses tipos pode-se aumentar consideravelmente a expressividade de um programa.
Tabela 2.1 Exemplos de Tiposde Enumerao ( li10N, TUE, is |r 'lED, T||U,FRI , SAT,SUN) ; rs ( PENNY, NI CKEL, DI 'lt ,Q UAR t R, HALF*D0LLAR, D0LLAR) ; ( N0R H, EAS ,SO UTH, WEST) ; ( ADD, |t |UL, t DA, STA,SI Z) ; SUB, ( Af ! , Pt ) ; ( O PEN, CLO SED) ;
( PR IVAt, C 0 R P0 R At, L IEU IEN AN I SER GEAN I, IAJORC . OtON TL C APIAIN . GEN . IR AL ); ( N U L t, IN 0 0 t tR /\N Si l tSSI0 N IN , QU IR t,Ett r , BA0 KSPA0tl t,{t r tt0 , cAN cr L , tscAp i ) ,

li"#?:n:

;;t.;;,

atrib;to;p,.o"iioioor. umatributo prede_

entitlade ,designadordo atributo

lil$"JtrJ:t,flJr:''erao,
DAY' FIRS

podemonos referir aoprimeiro eltimo varores doti-

DAy LASI :i,',fr.i#'$JJ'"


do tipo de enup,io, d il; (para osucessor) iilii,r,til""J?3;ff:,.enotadas e "iuut;i Alrtr disso' as funes para calcular o prximo valor e valoresanteriores

type D A Y type C 0IN

DAY'SUCC(IUt,y = gp DAY = t'10N PRtD(IUt) 'lrrrrar o sucessor de SUNou o antecessor deMoN d um erro,queinferizmente ('(.rto noest paratrabalhar comosdiasda ,rrnunr.i('<lmo mencionado anteriormente, um tipo.dee-numerao definido t:rih dc seus -qrrrr" pelaenumevaloresTais tipos podemtri u"roo, teo tivreente os inteiros, .rriirs vczes e com maior_crareia..paem;r ;;;;;;auera ;;;;";pb dando rrrr,ro o n_ tlc horas trabalhadas cada aiaaasemaai li0t,RS t/0RKtD. anray (tl0t .. SUN) of INTEGER;

type D IR tCTI 0N is type 0P ,C0Dt type H A LF- DAY is is

type FILESTATUSr s
R AN K type ARIIY is

lirt't'ss.r tle s'N c antcccssordc MoN s1o valorcs bra da faixa pcrmitidaparao tipo. (N. do T.)

C H AR r s t y p e C 0 N R 0 t

.0

3l

I y1 rr, l 'l l :, | ^ l ,yyrl i i l i l 'l

| 1l

r', r :,

r | ) { ll' r l, t/1 ,r , ( IRIAllcti, ( .} U[) RAN0Lt, ptN rA G0N ,

l t (, l l l l l

H txA G0N ),

l,v1tt' ((]Dt s DtilVlN(


tyJrr,[[IIIR

( N0R| AL, t I ilI I t D,

* /

subtrutr rrrultiplicilllo diviso

Spt 0 I A L , V I p ) ;

rs

(A ' , ,9 ,, ,c ,, ' D " ,E" ,F,, . G " 'H " 'I ' ,J ' , ,K1 , ' 1 .. ,t,, ,[ ,, ,0,, 'P , ,R Q,, ' S' ,' T ' ,' ' ,' V' ,' ti ' ,,X , , 'Y

relacionais benrcomo os operadores

'z');

t ,yp eHtX L ITTIR

( A' , ' 8 ,, ,q ,

' 0 | , ,t,, ,F' ),

"
I

- igual = - -no'igual

2.2 TIPOS PRIMITIVOS

jil,,n:Hj,,:i:,i:,*ffg;:hm-#
an0 0r n0[

que vm f:l11,"*:lte Soos tfoosfurmitivos. ns tipos'ur,.o, s por elesmesmos, soteisno mai pdemt.-il;;;irra'o, po.uii;ffir* -- --tipos,maiseraborados e necesMrios a outraiaplica0.r. l Talvezo maissimpres . iofuorLr tipor piimitivosseja o tipo chamado B'.LEAN.

nr:rios tipos q::j-:..r:: ,,,.,,-,.1 Jualr.u". crnrdos na prpria "L*:i.g^--T linguagem.

usads

Alm daspropriedade-s .o_unr * rogrcas algumas sodefinidas operaes paravalores ::,11. oslnumelao, boor"unorllnrlu.*_r. operadores
conjunolgica,p. ex. disjunolgica,p. ex. negao lgica, p. ex.

Erearmente u* tipo de enumerao pre-

do tipo BOOLEAN' do resultados relacionais Todos os operadores tipos reais.Os tipos reaisdo aproxitttutt os incluem tambm aritmticos Os tipos durr' do tipo especificatla de nmeroi reais.Com um tipo real de ponto fixo, a preciso do tipo do um limite de erro absolut.Com um tipo real de ponto flutuante, a preciso dando um limite de erro relativo. Considereas seguintesdeclaraes: especificada

(RUt and FATSE) = FALSE (TRUE = RUE on FAIS) (not RUt) = FALST

type VOLTAGE is delta 0.1 nange 0.0 .. 10.0;--umtipodepontofixo --um tipodeponto flututttttc type l,lEiGHT is digits 10;
O tipo VOLTAGE denota um conjunto de nmeros de ponto fixo cujos valorestm untu pelo menos to exata quanto 0.1. O tipo WEIGHT indica um conjunto de-rtttle' precso de pelo menosdez dgitos.Quattttt ios de ponto flutuante cujosvalrestm uma preciso aos intiros, os operadoresaritmticos e relacionaisso definidos para os tipos reais' tais ctltlttr pode ter um ou mais tipos reaispredefinidos, LIma dadamplementao -ONC_F'OA aritmti' corresponder deveriam tipos Esses e outros. os tipos FLOAT, t pelo hardware' ca fornecida de Ada@ que os nmerospodem sercscri' u tanto agradvel Uma caracterstica tos com sublinhado interno.* Assim por exemplo os nmeros

Um outro tipo predefinido,importante o tipo de enumerao denominadocHARACTER' os .u.ctri* sao p"r" i;;;Gnsagens e rexro. os caracreres scu ordenamentoso os 1s1dqs. permitidos e denids no-;og"tr"racteres Asc[,* o's caiacteresriterais simples so envolvidos po aspas simpls.-voce precisat", curuuJo-iloru, (cordes)de caractere poi, os snngs fird *i;;rp., "r" "0*, t;;;, rr,,*... 'A' - "4,, -o c ar ac t ere A o cordoA de comprimentoum

exata. ttpo denotaum subconjunto o finit de tbs nmeros. A.faixa dos valores inteiros implicitamente limitada p"lu-reprerrniaE"-no.i ro" pur" "i-ptementao. operaes As desse tipo sofamiliars, e inclLm o operadores -n', aritmticos

Nenhumalinguagem seria,muito til sem alguma-.lcilidade de computaoaritmtica.O Itpoaritmtico mais ramiliar o.tipo

chlm'ooir.rfCri;;;firitmtica

I000000 022325795
que podem representaruma quantia de dinheiro e um nmero de segurosocial, respectivit' mente, podem tambm ser escritos

,, t
American StandardCodefor Informaticll Intlhanee.
JZ

Medialunderscore

33

1 0 0 0 0{ ) 0 t)/,) .l/ I lgt t Atltcs tlc cnccrar.c.on-l os-pos primitivos, enatizaremos doispontosndarnentais. os tiprs looLEAN e GHARACT'ER,r'' .o,no os tipos aritmticos'e os tipos de enumerau dcfinidos pelo programador,cada um desses tipos ,;p;;-r;;"un,a unidade concei_ lua para descrever uma lasse de valores.rc* olrr pr"pii.aes do tipo declaradas Jrcl. programador soinvariantes "r durantea execuo oo pgma. Isro garantepor exem_ pl<lque uma varivelinteira semp* rapt.r.ni, um inteiro, e que no pocemospor engano uma letra a um nmero reil, nem comparar um da da semanacom um nmeiliil:..,:r 2.3 TIK)S DE CONJUNTOS Precisamos ter meios de representar objetos tais como um catirogode cdigos de ircas'um baralho de cartas,ou utna lia de caracteres. Esses objetossodiferentes dos cltteforam anteriormente descritosnesta ,"fo, no sentido de que suas estruturasso de Em parricular, tm compottrnt.r'qu. guardam ctrretaaouns com os n:r "tguriu Talvez os *utr,fullllures desses objetos na progamaosejam as taberas. uma tahcla uma coreode componentes do msmo tipo. n ruu ior.u?uis simples uma tabela a descrio de uma tbua.considerea seguinte tbua que descreveu ashorastrabalhadas em cadadia da semana. Dia Segunda Tera Quarta Quinta Sexta Sbado Domingo Horas Trabalhadas g g g l0 g 0 0

,r' r' ,rv rl )l1Yl lll: , 1 lt / t li, lr r r l lNll( ; l ll ,rl t' ,rv tl ( ) N lit iNt r r lNll( illl (l )AY) r r l lNll( ; lR ,rr' r' ,ry ('nrlirurrrt tlcssts slkros valttrcs Os lrdices MON tt S(.lN soutras. tlc'inics cquivalcnte dc scupritncirontlicc cletttllttrlo lipo l)AY. l'ara<lualquer conjuntoA, o lirnitc irr'erior com A'LAST. tl o r:onr o srnbolo A'FlRST,e o lim it esupcr ior e atualizar comopcrao bsica com conjuntos indcxar.Permitereerenciar lJrrra gxrncntcs. por exemplo, Com as declaraes, I IN IIGTR; A l rrav ( l

10) of I NI EG ER;

: DAY; IODAY FIRST |./0RKED: H0URS annay(DAY


c as atribuies

DAY LAST) o INIEGTR;

. = l'10N; T0D A Y de A e HOURS -WORKEDcom podemos atualizaros primeiroscomponentes A (I) := A( I ) + l' + I; ( T0DAY) ( T0DAY) : = H0URS- f i0RKED H 0U R S ,|, JO RKt D Alm de indexar, atribuir e igualarso tambm definidosem conjuntoscompletor, O valor de um conjunto completo pode ser indicado peio nome do conjunto. Pode tnm. bm ser construdo dando-seum agtegado.Um agregado uma listagem dos valores do uma ordem posicionalou dancada componente.Esses valorespodern ser dadossegundo do cadandice de componentee seuvalor associado. atribuieslevariao valor de HOURS_WORKEI) Por exemplo, cadauma dasseguintes aosvaloresdadosno conjunto anterior: : = ( 8, 8, 8, 10, 8, 0, 0) ; H 0U R S -W0RKED => 8, THU='10, =D ( l'l0N=> 8, TUE=> 8, l, , lED H OU R S - |. / O RKt FRI => 8, SAT=> 0, SUN=> 0) , '= ( l't 0N I TUEI l'lED I FRI => 8, H 0U R S -WO RKED =' 0 SATI SUN THU=> 10,

Dado o tipo de enumeraoDAY acima declarado,essatabela poderia ser declarada como: H0 URS_ I , J O RK E D: (D Ay F IR S .. D A y ,L A ST ) ar nay o IN TE GTR : l)o mesmo modo que tipgr de enumerao,as definies de tipos de conjuntos podem . : ser nomeadas numa decrarao de tipo, . o norne pode sruruoo f -..turu, variveisde conjuntos.Podemos ter, porcxrmpl,o, t yp e l ,l 0RK . T Ar s ar r a y (D A y F IR ST .. D A y L A S) DA of IN TE GE R ; H0 URS_ t / 0RK D : E W 0R( _D A;T A Jma propriedade intrnseca de cada conjunto que ele tem ndices. os ndices permitilos so especificados dando uma faixa duutr* discretos. podemos,por exemplo, ter as lcfiniesde tipos de conjuntos: l4

podem sor Note que quando os ndicessoexplicitamentedados,os valores componentes listados em qualquer ordm. Note tambm que as atribuies do conjunto requeremquc o nmero de componentes atribudos seja igual ao nmero de variveisdeclaradas para u conjunto. r

35


A t t ' lit il, tlc ltglcglttl . s lc t t t v iit ut s ' ullir s l ) ' nit s ( l' c s f l o e s 1 r r , : l n l t t t r , t t t li rl c t \ c 'l . prr t r rrlr,s cotr.jttrr I o s. Nrrrrrcort.jt t I t o. r llor c x c r r r plo, r Vr tti tl ve l l tl e r sr l l |xr r l cve r r r . r r r r f r r tr l e c r r t t l tttttr tvt,t h t,tl t l '1 e .r l ]( ]r tl tl vf/ r l r n c o r r r r r t r r l l r l xr rtl e r r r l l e r ,s e s1 x,e l l e r t. ( 'o r r s i t l c rc. r l e cl r ttr tt1 e s: l tttr e xe tttl l l o , u s scg tti ttl cs :r ( 'rr l r ,r 'l l r i t

. li

,rr,r, iy ( I

100) o INITGER;

o i r gr cg a d o (l 1 0 0 = , 0)

'10 INIt(tR NtJl'l Al'l't l(]ANtS r:ortsL;trtL , : = 1000; r;onslantINTEGTR NUI''l il'1PL0YtIS,

: INTTGER; l'lAX l./AGt SC0Rt , l'1AX ARRAY t s array ( I NI ECt R r ange <>) ot I N [ t t R INIEGER lype ANY
APPLI CANTS . NUl'1 ARRAY(1 TABLT, AI.IY-INTEGER ). SCORT EI 'lPLO YEI ARRAY(1 NUI *I |l/AGE-TABtE : Al'lY-INEGER ) ,S Aqui o tipo ANY_INTEGER_ARRAY define uma classe de conjuntos con corporrcn. tcs inteiros e ndicesinteiros. O smbolo ( ) (um ( seguidode um )) usadoparl itttli As variveisSCORE l'AtlLl.i c cu a range possvelpara um ndice no-especificado. \ryAGE_TABLE so ambasdessetipo, mas com uma faixa de ndices especificulrrcrrlc tlada. Podemosagoraprontamenteescrever um procedimentopara calcularo valor rtulxl. nro de um conjunto de tarnanho arbitrrio: pr0cedu neG ET- l'1AX ( A: in ANY- I NTEG ER ARRAY, l'lAX:out I NTEG ER) s begtn II{A X : = A( A FI RST) ; for I in ( A'FI RST+ 1) . . A'LAST I oop i f A( I ) > l'lAXt hen I t lAX: = A( I ) ; end r ; end oop; end; Note que os atributosA'FIRST e A'LAST nos permitem fazer uso dos limites verdadcirrls de um argumentodo conceito dado. Esseprocedimentopode ser assimaplicadonos ttos' sos dois conjuntos com as chamadas: t 'lAX- SC0RE) ( SC0Rt - TABLt , ; GE T-| ,1AX , l'lAXWAG ; E) GtT-| ' | A X( l. iAG E- TABLt Cordes ' para descrever mensagens e textos, e tm assittt Os cordesso as unidadesbsicas aquelascom muitas entradasc um papel importante em muitas aplicaes,especialmente sadas.O tipo predefinido chamado STRING um tipo de conjunto predefinido cortt

irltlicittttttvalor de conjuntoem que todosos componentes sozero.Seos quatroprimei los colpolcntesforem um, e os componentes restantes forem zero, podeemos-usar o ltgrcgldo (l => l ,
( )l.l

2 = > 1,

3 =' 1,

4 => l,

5 ..1 0 0 = > 0)

(1 . 4 = > l, ou nesmo ( .4 = > 1,

5. . 100 = > 0 )

ot her s = > 0 )

t1uia escolha others pern:.rinece para todos os valoresrestantes. Alm de operar com conjuntos compleios, partes de um conjunto podem ser denotadas como fatias de coniunto. Uma fatia de conjunto uma seqiinciconsecutivade ctltuponentes de um conjunto unidimensional. Os primeirosdez cponentes do conjunIo l acimapodem ser denotados pela fatia B(1 l0)

lssesdez componentes podem recebervaloresdos dez ltimos componentes com a atribuio;

B(1..10)

= B(91. .100);

('onjuntos com Faixas de ndices* No-Especificadas Considere o problema de escreverum procedimento para calcular o valor mximo , dc qualquer conjunto com componentesinteros, no impoita quantos componenteshaja rr. conjunto. o problema tpico dos casos em que se qur definir uma operao do coniunto paraa qual a faixa dos ndicesno foi especcada. O problema de lidar com conjuntosde tmanhoarbitrrio pode ser tratad.odando o tipo dos ndicesmas deixandosemespecificar a faixa dos ndices.Chama-se um conjunto

Index Ranges

Unconstrainedarrays

36

37

c ( tr lllx l l l crl l e cs lit c lc t es c it t t l i c c s i ttl c i ro s . l ri x l d o s rrtl i c cs n0o ospocl l enrlrrrl n, so lir rrilci rr'cri otlc r v cs c r I ou r r r a i o r. tlnta vcz qrrc S'l'RlN( unr tipo tlc conjunto,uma varivel do tipo S'l'tlN( podc scr tlcclaratla dando-sc os limitesde seurndices. Podemos por exemplodizer:

fIRSTNAI'lE, LAST NAI'lE: SIRiNG(l INPUT LINE SIRING( 1 72)

10),

our.RrAo Dos cALcuLos

Os cordesexplcitos de caracteres podem ser escritosde um modo conhecido,incluirrtloa seqncia de caracteres entre aspas duplas.Podemos, por exemplo,escrever: FIRSI N A I ' I E . = " G E 0R G E " : tASI N A l4t : = " l, r lA S H IN GION " , PU T ( ''TH I S I ' lT S S A G ') E : Obscrvcque um cordoexplcito de caracteres pode servisto como uma notaoem estetlografiade um agregado de conjunto posicional.O nmero de componentes do agregado o nmero dos caracteres do cordo. Ateno,entretanto, paa um obstculoimportante.Como os cordessorepresentados por conjuntos,o valor de um cordo deve ter o mesmonmero de caracteres que tttttavarivelde srie qual ele seja consignado. Assim,emboravoc quisesse muito, no podcriadizer t IRST-NAl'1E : = "Gt0RGt" l0 caracteres ; --problema, sonecessrios l.| maneiras de reduzir esseproblema,usandopor exemplo procedimentos com conjunlos semlimites como parmetros, como no GET_MAX acima,mas precisocuidado. Finalmenteo operadorde concatenao & pode seraplicadoaoscordes. Podemos escrever lxrr exemplo I NPUI-L I NE ( l 20) ; = F IR ST _ N Al '& EL A ST _ N Atl t; Isso completanossaprimeira olhadelaaostipos de Ada@.Tomaremosa falar neles, c vamoscontinuarno Captulo 7.

Todalinguagem inclui construes paracalcular tomar decises valores, e calcular resultu. dos.Voltamo-nos paraessas agora asexpresses bsicas construes, e asinstrues^da llrt. guagem. Essas construes sofamiliares a todos os programadores, masem Ada- voc6 ir encontr-las especialmente bem projetadas. 3.I EXPRESSES Uma expresso uma frmulaparacalcular um valor.Oselementos brsicos de umr expresso pelosseguintes sotipificados exemplos:
um valor nurnrico um valor booleano um valor de enumeraco umvalor de cordo um valor agregado

TRUT 'l0N -SY}IBOL'' -"ILLEGAL (1 .. l0 => 0) -I NDEX TEX(I + l)

---

- - o valor de uma varivel - - o valor de um componente de conjunto

A(1 .. l0) - - uma fatia de conjunto (TOKEN) - - valor da chamadade uma funo LENGTH -valor de um atributo A'FIRST

Os elementosde uma expressopodem ser combinados com opeadores.Como de para especificara ordem de avaliao,ou na ausncia costume, podemos usar parnteses de parnteses h nveis de precednciaque especificama ordem de avaliao.Por exemplo as operaesde multiplicar * e / se aplicam antes dos opeadores+ e -, os operadoresde soma so aplicadosantes dos operadoresrelacionais= e ( e os operadoresrelacionaisse aplicam antes dos operadoreslgicosand e or. que os tipos oferecem,cada operador numa expesso A fim de manter a segurana e obtm um resutado de algum ti aplicvel apenasaos operandosde tipos especificados

38

39

* e -- sosomente a vaoaplioveis osoperadores desona lrr cxcrnplo, lx) csl)ccilicutlo. tipo. demesmo resultado tipoe obtm rcsnurrrrictls dc rrtcsnro Porcxemplo, comasdeclaraes i s range-10000 t,ypeD0LLAR-Al'10l.jNT i s nange1 .. l8; lype HOLE-NUi'1BER : DOLLAR_A|'OUNT; BONUS SALARY, NtXTH0LE : H0LE-NU|\|BER: asseguintes expresses sovlidas - 100 -- oresultado SALARY dotipo D0LLAR-A|iOUNT + -o resultado do tipo D0LLAR-A|'!OUNT SALARY B0NUS o resultado do tipo HoLE_NU'BtR + -NEXT_H0Lt 1 cnquanto + 100.0 - - 100. SALARY 0 no do tipo DOLLAR_Ai'|0UNT + NEXT-HOLt -- tiposdenomes diferentes SALARY
no o so. Um sumrio de algunsdos operadoresem Ada@e as regrasde tipo para seu uso vlitradidasmaneiras podem ser combinados operadores do so dadosna Tabela 3.1. Esses expresses: cionais,como nasseguintes -+ SYt'lB0L-LENGTH LINE-POS |n0d PAGE_SIZE-LINt_cOuNT -not SY||BOL-FOUND -( B*o2 - 4 . 0oA*C) SQRT I in i . . 10 -soma simples por mdulo inteiro restoapsdiviso lgica negao clculode um valorreal faixa de testede I

+i0000;

(flrcrrrkrrer hlrrrtrios rlc Iipo lrlcttItco: lurtt oltcruttrlott I'i1xtdc Opcraru.lo oltrrutkr Opual + nurnrico soma subtrao numrico mod mdulo inteiro resto inteiro re11 = j /= j= igualdadee desigualdade teste de ordenao conjuno inclusivedisjuno

I ilxt t lrsultultt rosno tipo rrttrtrtliuo mcsnrotpo nururico mesmotipo inteiro mesmotipo inteiro

qualquertipo BOOLEANO qualquertipo escalar BOOLEANO booleano booleano BOOLEANO BOOLANO

and 0r

Operadoresbinrios para operandos de tipos diferentes: Operador s 0perao multiplicao Operando da Esquerda inteiro flutuante fixo INTEGER fixo inteiro flutuante fxo fixo Opemndo da Direita intiro flutuante INTEGER fixo xo inteio flutuante irteiro fixo inteiro inteiro Tipo do Rewltado mesmotipo inteiro mesmotipo flutuante mesmoque o da Esquerda mesmoque o da Direita fixo-universal mesmotipo nteho mesmotipo flutuante mesmoque o da Esquerda fixo-universal mesmoque o da Esquerda mesmoque o da Esquerda BOOLEANO

diviso

*a

exponenciao inteiro flutuante participao

ln n0t 1n

qualquertipo T faixa ou subtipo T

3.2 TNSTRUESPARA ATRTBUIR VALORES de programao a atriUma operagofundamentalem quasetodas as linguagens buio de valores,pela qual o valor corrente de uma yarivel substitudo por um novo Uma instruo de atrbuio tem a forma valor especificadopo uma expresso. varvel i= expresso; podem ser de qualquertipo, incluindo por exemplo conjuntosinA varivele a expresso sobretipos, a teiros ou fatias de conjunto. Contudo, como lembramosde nossadiscusso de varivele a expesso devemserdo mesmotipo. Essaregragaranteque as propriedades durantea execuodo programa. tipos dasvariveis sopresewadas por exemploas seguintes atribuies: Considere

-- testeavaliado por booleano INDTX< LINE-SIZE por booleano -teste avaliado l,JARl't on (C0LDand SUNNY)

Tabela3.1 Bsicas AlgurnasOperaes ( )oeradores unitrios: ( )lre+rador Operao


identidade negao

Tipo de Operando numrico numrico numrico booleano

Tipo do Resultado mesmotipo numrico mesmotipo numrico numrico booleano

,rh s rr o L

valor absoluto negao lgica

INDEX : = 0; T0DAY := TUt;" DISCRIT'I .= (B**2 - 4.0*A*C) ;

----

uma simplesinicializao atribuiode um dia atribuiode um valolreal

,l()

4l

t0UND := FALST; SYt80t (T0KEN) : = SIZE LTNGTH ; SYt'l801 + l; := TABLE(I) tABLt(J)

-----

boleana uma inicializao atribuio do resultado de uma funo atuizao de tabela atribuio de valor a srie igualandoa zero uma tabela

r[ x T( 1 . . 4) IO R V TC

= "J0HN", = (l .. 10 =' 0);

el se -- seqnciade instruesdescrevendo -- o que fazer se no chove -- e o sol no est brilhando end i f;

Mais geralmente,uma condio qualquer expressocujo tipo BooLEANo. Assirn, as condies de seleo podem sermuito variadas, como:

sovlidas',Note atribuies llue, com o uso de todasessas apropriadas, l)adascleclaraes mundo real que do objetos os refletir iif,rt uO.quuar,o, uulor.r atribudos podem bem representar. prctcndem na Finalmente lembramos que quaisquerlimitaes sobreuma varivel so checadas valor atribuir um irtribuio.Isso garanteque qalqervilaaoque se tentar fazer, como a NEXT-HOLE, serreportadaao programador' rrcgativo

if. if if i if

S,Yl'lB0L_F0UND then ... < INDEX LINt_SIZE then ... X in I .. 100 then ... A(l .. 10) = A(11 ,. 20) then ... 0CCUPIED(R0l.J, C0L)then ...

-- uso de uma varivelbooleana -- uso de uma relao -- teste de participao em faixa -- comparao de fatiasde tabelas -- chamada de funo booleana

CONDICIONAIS 3.3 TNSTRUES ondicioSituaesdiferentes exigem computaesdiferentes' A noo de seleo case' a instruo e if instruo a rral tratad por duasinstrues, baseadano valor A instruo if permit a seleod uma seqnciade instrues simples, condio ter uma vcrdade de uma ou mais condiei. Podemos,por exemplo, como em: l ' l 3 1 ) th e n |' E DE C )a n d (D A Y-N U = r f ('l 0 NT H- NA = 'l ONT H- NA:= ' lEJ A N ; D AY- NUi| : = 1 , I' II ; YEAR- NUI ' | : = Y E A R -N U+ en d i f ; Aqui a verdadeou falsidadeda condio = '0E ' l 3 1 ) (1 1 0 N T H_NA t E C) a n d (D AY -N U = ou no' Note e os parnteses executada inclusade instrues determinase a seqncia por clareza' apenas includos foram e condio nessa necessrios no sorealmente qual a seCom condiesmltiplas a primeira condio verdadeiraque determina como: estrutula uma ter por exemplo qnciade instruesque sr executada.Podemos = R AIN th e n i f l ,l tA T HE R- C0NDIT I0 N de instruesdescrevendo -- seqncia -- o que fazer quando chove = SU N S H INth Een e si f l{ E A T HE R- C0N 0 IT I0 N -- seqncia de instruesdescrevendo ,, tue azer quando o sol brilha 4.

Uma instruo case anloga a uma instruoif exceto quea seleo baseada n<r - deuma valor simples expresso dada no topo da instruo ccse. onsidere, po. exemplo, a instruo case: case T0DAY is => 0PtN_ACC0UNTS: whenI'l0N COI'IPUTE-I NI TI AL-BALANCE ; => GENERATT-REP0R , when (TODAY); TUE => GENERATT-REP0R (T0DAY) when l,lED : => (T0DAY); when THU GENERATE_RtP0RT whenFRI => CO|I|PUE-CLOSING-BALANCE: CLOSE_ACCOUNTS; whenSAT=> nulli => nul: when SUN en0 case' Baseado no valor de TODAY do tipo DAY, umadassetealternativas de case ser selecionada.Aqui, comoem todasasinstrues case,deve seroferecida umaalternativa paracada valorpossvel da expresso de seleo. Os valores de seleo dadosnumaclusula when noselimitam a valores simples. Em particular,pode ser dadauma listagem de valores ou uma faixa de valores. Assima instruo case acima poderiatambm serescrita: => 0PEN-ACC0UNTS; COI'IPUTE-INI TIAL BALANCE ; => GENERATT_REP0RT whenTUE,.THU (T0DAY) ; => C0l'lPUTE-CLOSING-BALANCE whenFRI : CLOSE-ACCOUNTS; wtren SA I SUN => nul, en0 case; case TODAY is whenI'l0N

43

lFe

mltiplosc ottdc,cxceto tetn valores de seleo cr quc a exprcssrlo lr casos liirrirlrrrcrrtc, casosa escolha seremtomadasso idnticas'Nesses pitra uns poucos valorcs,s aes-a anteriores' pelas escolhas dados no valores i,tltcrs pode ser usadapara cobrir quaisquer ter, por exemPlo: l)<ldertros

ts case I0DAY wh en I'l0N w henFRI w henothens end case;

or N [XT C0I N in C0I N TI RSI . C0I N'LASTI oop para valoressucessiv<ts instruesa seremexecutadas de -- NEXT- CO Idesde N C0I N I AST CO I N'FI RST at end oop; A faixa de valorespode tambm ser dadapelo nome de um tipo discreto,como em: fon N E XT_C0I in N C0 N oop -- instruesa seremexecutadas para valoressucessivos de -- NEXTClI N desdeCO I N'FI RSTd/ CO I N'LAST end oop; A segunda forma de especificariteno uma cLusulawhile que define uma condi. o que testadaantes de cada execuodo lao bsico.O lao terminado quando a while liver o valor falso.Podemos, clusula por exemplo,ter os laos: w hi e Nt XT- CHAR ooo / = Tt Rlr lI NAT0R ( FI Lt _NAr E,NEXT_CHAR) sK IP_CHAR ; end oo p; w hi l eX ' EPSI LO N oop X := F( X, Y) ; Y := G ( X, Y) ; end oo p;

=> => =>

INITIALiZLPAY-DATA; I.,iRITT-PAYCHTCKS; nui :

A escolhaothers devesempreaparecerpor ltimo. DE LAOS 3.4 TNSTRUES O mecanismobsicopara clculosrepetitivos ainstrudo lao. Os clculosrepetidos formam o lao bsicoe vm semprereunidosassim: Io o P -- instruesa seremrepetidas e n d ooP :

Um lao bsico pode ser prefixado por uma clusula de iterao ou conter instruesde sada do lao dentro do lao bsico.A execuodo lao bsicotermina quando estiver a instruode sadado lao. de iteraoou quandofor executada completaa clusula Uma forma de clusula de iterao vma cliusula for, que define um parmetro de atribudos ao parmetro em cadaitera' lao e uma faixa de valores que so sucessivamente lao: por ter o exemplo, Podemos, o.

Comomencionado acima, os laospodemtambm conterinstrues explcitas de sada. Considere, por exemplo, o lao: oop (DEVICE, GET-COI'|I'IAND COI'II'IAND) ; = ST0P); exit when(C0l,ll'1AND.-STAUS ( USER, PR0CESS_C0l'll'IAND C0l,llrtAND) ; end oop;
Este lao continua a recebere processar comandosat que o estado do comando de entrada designeum stop. Finalmente, laos podem ser marcados,e uma instruo exit dentro do lao pode serusadapara causar a terminaodo lao marcado.Podemos ter, por exemplo:

:= 0 : S U t4 f o r I tn 1 .. 10 ooP := 59 1+ 1 A(I); S U ,t
e n d I ooP , do conjunto A. Estclao somadez elementos lao pode ser qualquer tipo discreto cuja faixa de parmetrodo o Mais comumente, ter por exemplo Podemos valoressejadadaexplicitamente. o r DA Yin l, l0N. . F R I o o p valoresde para sucessivos -- instruesa serem executadas -- DAY ,Jesde l{Oft} aft FRI e n d oop:

FIND: for I in I .. 10 oop fon J in I .. 20 loop 4S

ll A(1, J) '0 lhen fl := Ii N := J; exit FIND; end if ' end I oop ; end loop FIND; o valor zetoparaum componente quando achado Aqui ambosos laossoterminados conjunto. le

rurrRoGRAMAs

e dificilmentese poderia com o conceitode subprograma Estamos todos familiarizados permitem delel.Ossubprogramas semter alguns de programao imaginar uma linguagem seu (muitasvezes e parametrizar elaborados) ao programador fazer pacotesde clculos compotamento. 4.I SI,JBPROGRAMAS procedimentos e funes. Ossub. existemduasformasde subprogramas: Em Ada@ Os por meio de uma instruode chamada, progamasde procedimento so invocados que produzaum resultado; as subprogramas funespermitemdefinir uma computao Osefeitos por uma chamada de funodentro de uma expresso. funes soinvocadas quangiobais, tanto nasfunes sopermitidos a variveis isto ; consignaes colaterais, to nosprocedimentos. j dadona Seo 1.4: subprograma, o seguinte Considere procedure V-Y, DISTANCE: in FLOA; CO|,|PUTE-RISE(V-X, RISE:out FL0AT) is TII'lE: FL0AT; begin := 0ISAICE TI.lE / V_X; - (c/2.0)* (TIl'lE**2) RISE:= V-Y*TIl''lE ; end; forma geral tem a seguinte procedimento Esse procedureCO|IPUTE-RISE Qnrnefios) i s -- dccloaeslocos begin " instrues locais end i

t6

47

( )s 1r:tt:ttttt' l t)s l e n rc i t(l i(1 l ( l( 't lt r tpt r t t ' t ' r l tn re rrtr) t tl rl rrtr rtto tl tl tl cl rri tl lassi ttt: r Pilrurrrr.rtros irr, pol cxcrrrplu V X, V y c DISTANCE, que agemcomo entradas lrigicls out, po exemplo RISE, que agemcomo sadas Parirrrrctr,s lgicas r parntctros itt out, que agemconto variveis cujosvalorespodem seratualizados durante a execuo do procedimento. sc no br especificado algum modo, assume-se o modo ln. Dentro de um subprograma o vrrlol de urn parmetroin agecomo uma constante e no pode ser atualizado. O nome de um procedimentoe a especificao d seusparmetros identificam a :iPrirncia do procedimentopara o usurio.Os nomesdos parmtros soconsiderados lc,cills ao corpo do procedimento.Importante: um procedimentopode conter informaes Iocltisdescrevendo informaesinternas.As instrues no co.poo procedimentodescrevct scu coinportmentointerno necessrio para alcanr o efeito desejado. Na forma, um subprograma funo similar a um subprogtu- dr procedimento, tils,como mencionadoacima, utilizado para calcularum valor para serusadodentro de uracxpresso. Uma funo s pode ter parmetros in. considereo seguinte subprogram funo, que baseado no exemploanterior: fu n cti on NE T - RiS E (v -x ,v -y , D IS T AN C E : L 0 AT )neturn FL0A Ti s F TIl '4E ,RI S T : F LO A T ; be g tn TIt'lE : = DI S T A NC/E Y,X ; RISt : = V _y *T I l' 1 E - (G /2 .0 )" ,(T It' l t* * 2 ); n e tu r n RI S E en0; lrssa funo tem a seguinte forma geral ( q n r m e tro s ) re tu n n fi p o d o re sul tado s f u n cti o n NE T _RI S E -- declaraes locais be g rn -- instrueslocais en d : ohserveque o tipo do vaior retornadopor uma funo deveser especificado, e que o corPo da funo deveincluir uma ou mais instrues de retorno. A eiecuo de uma instrudo subprograma lttl de retortro termina a execuo e especifica o valor a serretornado. 4.2 CHAMADA DE SUBPROGRAMAS Uma vez definido.um queremosus-lo muitasvezes em muitos luga,subprograma, rcslum progrma. Isso realizadocom chamadas de subprogrmas. A forma mais familiar de uma chamadade subprogramausa'uma notao posiciorral,onde o nome do subprograma seguidopor uma lista de argumentos, um paa cada 48 r

'O M l't l'l'li lt lsll pi trl rrrctro a dcntquc os llar nt et r os. u pr t lccdir t t ut t( o c ra rlcsnor Par a podorlos tcr as instrues de chamacla do subprograma:

RI ST); ( X_VELO CI TY, TARG ET_DI STANCT, Y_VELO CI TY, C OI.IP U TE_RI SE + 10. 1 0) , Y, VALUE) ( 50. 0, 60. 0, ( EDG E- PO SI T19|t ; C 0l ' l P U Tt-RI St

Essaregrade. Cada argumentodeveter o mesmotipo do seu parmetrocorrespondente. corre naturalmente de nossaviso de tipos e garante que um procedimento no sercha' mado com argumentos de tipos incompatveis. Como ilustrado pelas chamadasacima, um argumento correspondentea um parParaparmetosout e in out, o agumento deve conesme1roin pode ser uma expresso. ponder a uma varivel; o valor de tal varivelpode ser atualizadopela execuodo procedimento. PodeAda@ofereceum outro mtodo, menostradicional,de chamarsubprogramas. e seusparmetroscorresentre argumentos expliitamentea associao mos estabelecer de procedimento: pondentes. a especifcao Por exemplo,considere procedure 'I ERG( NEI . J- I TE , lS: in out TABLE) ; E in TABLE;I TEiI S- T0- UPDATE: Em vez de uma.chamadaposicional, como (S OURCE_DATA, LI NE_DATA) I' E R GT ; podemoster => t I NE- DATA) ; => S0URCE- DATA, (N ti .J- iTEl''lS I Tt t 'lS T0- UPDATE l ' IE R GE Em tais chamadas,os argumentospodem ser dadosem qualquer ordem. Podemoster, por exemplo: => S0URCI - DATA) => LI Nt - DA 4, Nt t '/ - I Tt l'lS (ITE t - 1S- 0- UPDATt l ' 1E R GE ; Quando forem comuns longaslistas de parmetrose houver valorespades de subslevam a outra tituio automtica*, como nos pacotes de utilitrios gerais,tais chamadas automticapode serespede Ada@.Em particularum valor de substituio caracterstica cicado para um parmetro lre dando o valor de substituio automtica na especificao do subprograma.Quando o valor de substituio automtica tiver que ser usado na chapode ser omitido. mada,o argumentocorrespondente de procedimento: Considerepor exemplo a especicao

Default values

49

(;lNlli^ll llll'0lll t)/\l/1 r'(tilr'r' t)r'(r( | lil rrr I lll sul'l,Ly tiAIA, NUl'| 00t'llS, rrr INL(]IR := ; HtADtR :rnLINt :=STND_HEADIR; CTNTERING : rn B00LtAN:= IRUt; PAGE_L0C : in p0SITI0N := I0p_RIGHT; TYPt_F0NI : in pRINTER := N0RilAL); 'Irdas aschamadas seguintes soaceitveis: GENERATT-RTPORT; cENtRATt => 5); ( NUtt_C0pItS REPORT GENERATE => E|'|ERGENCy_DATA); (DATA-FILE REP0RT GENERATE_REP0RT (HEADtR => FINAL_Rtp0RT_HEADER. => T0P-CENTER. PAGE-L0C => SPECIAL, TYPE_FONT => 100); NUt'l_C0PItS Cada chamada acima fazusodosvalores de substituo automtica fornecidos nasespecificaes' Noteainda queosargumentos podem serddos emqualque, ordem. Finalmente, h procedimentos em que certos argumentos esto sempre presentes, normalmente numaordempadro,e os reitantesargumentos soopcionais. Nesses casos os argumentos iniciaispodemserdados posicionalminte, e qualqueiargumento remanescentepodeserlistadocom os nomes deieusparmetros assciads. Considere por exem' plo a especificao deprocedimento: pL0T(X, y : in procedure PEN : in GRID : r n ROUND : in FL0AI; PEN_p0SITI0N := D0WN: B0OLEAN :'= FALSE : 800LEAN := FA LSE):

r r

( luf t chilnt r sur lr opt t ct lt t t lcs I l nrr trr lu it t : c. ' r pr lt t t t t ( t t lt $lt llr l( t . t te t t t it t t cr t t t t . scuonr por t unt tl rnai rr r plcr t r cr r la1f t 1rur r t le , . scr cvc

dc sua irrrplc a interlacctlc um subprograltra tlc sr:parar l)iscutirnos agoraa capacidaclc rnentao.Em particular,.qualquerprograma pode ser defnido em du&spartcs textuul' nrenteseparadas: r I que especificasua interface. Sua declarao, Seu corpo, que especificasua implementao.

tlo de seu corpo uma nova caracterstica de separaruma declarao ^ A capacidade con' Podemos para objetivos. alcanar vrios simples uma base Ada@.A separao oferece solidar as declaraesde subprogramasrelevantescom outras informaes declarativas. se alongapor de seuscorpos,o que mtas vezes Alm-disso,podemosisolar a descrio para os pacotes(Cap' essencial vriaspginasde texto. Finalmente,essacapacidade tulo 5). Nos subprogramas,uma declarao de subprograma d o nome do subprograma, seusparmetros e o tipo de qualquervalor de retorno. O corpo do subprogramad as declaraes e instrueslocai,s. Considerepor exemplo a seguinteseqnciade declaraes:

( I : in I TEt 'l; Q : in out Q UEUE) ; pr0cedu r e ADD ( I : out I TEt 'l; Q : i n out Q UEUE) procedu neREt 'l0vE ; functi on functi on FR0NT ( Q : Q UEUT) r et ur n I TEI ' ; net ur n B00LEAN; I S- EllPTY( Q : Q UEUT;

Essasdeclaraes especiicarnprocedimentos para acrescentarum item a uma fila e paru remover o item da frente da fila, bem como funes para exminar o item da frente e pasubprogramasdenem um conjunto dc ra testa se a fila est vazia. Coletivamente,esses operaespara trabalhar com filas, e suas declaraespodem assim ser grupadascomo acima,num nico lugar. e Os corpos dessessubprogramaspodem ser dados depois de todas as declaraes tm a forma: proceduneADD( I : en0: in I El'|; is Q : in out Q UEUE)

Asseguintes chamadas podem serdadas: (0.0, 0. 0) ; PLOT PL0T(LtlIN, Y_t'lIN, => IRUE) GRID ; (X_tlAX, PLOT => TRUE, pEN=> Up) Y_l,lAX, R0UND : PLO(L|AX, Y_t'tAX, => TRUE) up, ROUND ; 4.3 SEPARAODE CORFOS DE ST.EPROGRAMAS Todasasunidades de programas (subprogramas, pacotes e tarefas)socaracterizadaspor duas partes: 50

functi on I S- EilPTY( Q : Q UEUE) r et ur n B00LEAN is en0; de parmetros de cada subprogranaesto repetidasno copo Note que as especificaes do subprograma. r

60fH .tq N!bI{@tDfi

51

lrtttlt ltttcttltr, ('o lllo o col lr ( ) ( lc ur n s ul) l) l( ) ! ir lnr l r nc lui il i s i n r a i n l o r n t a d <l nunta dcellttltlkrtlc.sultPt,gratltlt.rt tlcclitnrllonilo prccisa scr dada a nlcros que o subpr'granra st'ilt cltltttl:ttlolult c()rl)o prcviarrrcrrlcclaclo. Estc o caso aotuUfr-ogr31nadado anteriorrr(:lrtc n() rcxt.. N.lc, c<lntudo, que podernos sempre separar uma declaraodo procetl i n rc r rt odc scu co rpo .

4.4 SOIRECARGADE SUBPROGRAMAS Ilxistem situaesnas quais queremosdefinir a mesma operaoconceitualsobre Ittguttretttos de tipos diferentes.Um casoclssico uma operao prinT paraimprimir di'crcrrtes tiposde valores. Considere as declaraes de procedimento: pro ce d u nepUT ( X . I N EGi R ): pro ce d ur e pU ( X : F L0 A T:) p ro ce d u r e pUI ( X : S TR IN G); para imprimir respectivamente a representao serialde um inteiro, um nmero de ponto lutuante ou de um cordo. os corpos de cada procedimento iro diferir, uma vez que dependerodo formato para imprimir inteiros, nmeros com ponto flutuante e cordes. o uso de dois ou mais subprogramascom o mesmo nome mas tipos diferent"r o. puia."t e chamadooverlooding (sobrecarga). subprogramas com sobrecarga podem ser chamadosde maneira convencional, por oxemplo:

5,o.or*

PUI (I + l) -- chamadapara imprimir um inteiro PUr (SQRT(Y) ); -- amada para imprimir um nmero de ponto flutuante PUI (' THISIIIESSAGT' ) ; __ cnamadapara imprimir uma srie Aqui a idiachavefoi que a escolha do corpodo subprograma correspondente baseada lm usaro subprograma com os tipos de_pametros aprolriados.Assim,comocadauma las chamadas acimacombinacomuma ( apenas uma)dasdeclaraes de pur, podeser l"lTlnado o,corpoapropriado. Notamos uo purru,queesteuso e sobrecarga semeuso de um * comooperador tanto na-soma d inteirosquantoparaas"de ponto ff[";'

A organizaode unidades de programas um tema central na construo de progamas. Os subprogramasconstituem uma forma importante de orgaruzao. Em particular pernritem a descriode um clculo (as vezescomplexo) que para o usurio pode ser caracterizado como uma simples interface. Assim, constituem-seem unidade bsica de decomposio de programa e permitem o desenvolvimentoordenado tanto de programasgrandes quanto de pequenos. Nesta seodescrevemos urna outra importante forma de organizago de programas, os pacotes Ada-. Veremos que os pacotespodem cobrir uma ampla faixa de usos, incluslve colees com nome de dados comuns, gupos de subprogramasrelacionados que, em conjunto, executam alguma atividade e definies de tipos particulares com operaes especializadas. Geralmente falando, um pacote executa um servio.Como qualquer servio, pode dependerde dadosinternos e serviosque no estejam(nem devam estar) expostos ao usurio. s.l A TNFORMAO VrSVEL Todo pacote especificadodando-seuma lista de informaes declarativas. Essainformao declarativa pode ser tomada acessvela um usurio, e chamada stJaWrte visvel. Considereo seguintepacote: packagel' ETRI C_C0NVERSI 0N_FACTO RS is C l l _PER_I NCH : const 'ant FL0AT : = 2 . 54; C I4_PER_FO 0T: const ant FLO AT : = 30. 48; C ,| _PER_YARD: const ant FL0AT: = 91. 44; K l ' l _PER_lt lI LE : const ant FL0AT : = I . 609; end; Este simplespacote define uma coleo de quatro constantes.Rapidamentepodemosintuginar oferecer uma lista mais completa dessas constantes,inclusive para reas,volumes c peso. Isolar tal informao declarativa de um pacote no s permite que outras unidador de programas faam uso da informao como tambm garante que as unidades usem o rnesmonome e o mesmo valor para as constantes. r

53

n il( )s c (l crri r r t lnl rk r rro ru c tl o p ro g rl rtru i rrl c i ro N . urrr grarrtl si c sl crtta dc prol) eloc s l) it () grlttttittkr, orttlcpossa (catlaurolrcccndo ltuvcrrrtuitus pacolcs assirn visibilidadc a ccrta irrrrnrallo), o cotrtrolcc o uso seletivo tla inbrmao podem resultar num alto graude s cgura n a . Finalmente,o efeito exato de pacotese subprogramas bastantecomplicado(vejasc o Captulo 8 do manualde referncia do Ada-), principalmcntepor causade sobrecargu, aninh:uncntoe possveisconflitos de nomes dos vrios pacotes.De todo modo, um itern decleuado num pacotepode tambmser denotadopor uma notaopontual. s.3 FORNECEROPERAES SOBRBOS DADOS Nos exemplos anteriores, um pacote fornece um certo servio - acesso informao. S dados no bastam. Podemos querer oferecer operaes que transformem os dados. Como mencionado anteriormente, a parte visvel de um pacote contm uma seqncia de declaraes. Relembreque um subprograma pode ser dado em duaspartesseparadas:declarao e corpo. Issod origem segunda forma bsicade pacotes, na qual aparte visvel contm no apenasa declaruo de constantes,variveise tipos, mas tambm a declarao de subprogramas relacionados.O comportamento desses subprogramas descrito separadamente num corpo do pacote. O corpo de um pacote serveaos mesmos propsitos que o corpo de um subprograma. Em particular, define os detalhesinternos necessrios para implementar a interface fornecida ao usurio. Do mesmo modo que os corpos dos subprogrlnas, zscaractersticas dos corpos dos pacotesno sovisveispara o usurio. Considereo problema de definir um pacote para tabela de gerenciamentopara inserir e recuperar itens. Os itens so inseridos na tabela proporo que so fornecidos. Cada item lanado tem um nmero de ordem. Os itens so recuperados de acordo com seusnmeros de ordem, os itens de nmero de ordem mais baixa sendorecuperados primeiro. Do ponto de vista do usurio, o pacote muito simples.H um tipo chamado ITEM e que designaos itens da tabela; um procedimento INSERT para lanar itens, e um procedimento RETRIEVE para obter o item que tiver o nmero de ordem mais baixo. H um item especialNULL_ITEM que surgequando a tabela estiver vazia. A parte visveldesse pacote assim:

prorl rtut 'r 'lNlil l( l pt' ort' tlur l Rt ll llVl ctrti .

r lll ll llll'l ( llRl; l llil't

t r t I lll) , r r t r Lllt l'1) ,

definir a implementao dtls dois procctlintcnPara completar este pacote precisamos definindo os dois corpos dc proccdinrcntrr tos INSERT e RETRIEVE. Isso se consegue dentro de um corpo de pacote. dc Um corpo de pacote que dene a implementaodo pacote de gerencianrcnttt dessepacote no Exemplo 5.1. Os detalhesde implementao tabela est esquematizado ern duastli' podem ser bastantecomplexos,envolvendoneste casouma tabelainterligada usadtl EXCHANGE, a casa, de arumar local procedimento ieesde itens internos.Um para movimentar um item interno entre as listas livre e ocupado. Duas funes l<lcais, F'RES_LIST_EMPTY e BUSY_LIST_EMPTY, bem como constantese variveislocals, na parte de iniciall' so tambm usadas.As ligaesiniciais da tabela so estabelecidas zao. Vemos aq a forma geral de um corpo de pacote cuja parte visvel contm declara' de es subprogramas:

is ER packagebo dY TABLE- |I ANAG -- corpos de subprogramasvisveismais qualquer informao -- intema necesxriapara implementar o pacote begi n -- instruespara inicializar o Wcote en0;

visEssencialmente,o corpo do pacote fornece os corpos para quaisquer subprogramas corpos pode por sua vez requerer a execuo de instrues para veis, mas escreveresses inicialnar seus valores. Essasconstrues so executadasquando elaborado o prpri<l corpo do pacote. Em geral o corpo do pacote implementa o servio prometido ao usurio. como mencionado anteriormente, s a parte visvel do pacote exposta ao usurio'

package TABLE_i'1ANAGER is type ITEI'l rs record 0RDER_NUl'l: INIEGER; IEl,l*C0DE : INIEGTR; : INTGER; QUANTITY ITtl'l_TYPE : CHARACTER; end recond; NULL_ITEltl: constantITEfI :=

p a c k a g eb o d y T ABL L T'IAN AGER s 6000; S I Z t : c o n s ta n t IN TEGER := r a n g e 0 . . SIZE; i s IN TEGER s u b L y p eI N D EX is t y p e I N T T R N AL - ITtt'l recond : IIEI''l C0NTENT ; N E X - ITEI'lIN : D TX; : IN D EX; P R t V - ITEt'l e n d r e co n d ;

(0RDER_NUt'1 => 0, I rrrN_COOE I QUnruriry


)

ITE l rl _Y P= E> , ' ) ;

57

cx t ' t t t P hr ilt t s lt r t i t l rrttttl g c ri tltl tr l .rl .s ,s p a c ' tcs (rac torr upcnas , " u, *ri .'," unrapar-

par;kage ftitRIC C0NVERSI0N FACTORS rs -- irirmacovisvel end: A irrlrmao visvel dada comuma.seqncia de declaraes. Mesmo dentrodessa^moldur" ril;;stem muitasvariaes teis.podemos cxcrnplo por grupar variveis comuns nurnp.oi, urri_, package I/EAHER_DAA is ALTIIUDE : arrv (-90 -en
en d ;

tt :t t tl) lt co e cslt eci clr t t t t t it colc o l i ttt l odos cst cscxct t t plo!o elt llo o r r t csr ut tlc inlrrnarles s0 tornilr uccssveis l oulrils logicamcnlc e quc possanr t:orrcluciorratlas tunidadcs de programa.

s.2 wrLrzAR A INFORMAO VISVEL


a informaono dircConquantoum pacotedefinauma coleode informaes, tamentesvel a outrasunidadesdo programa. num pacote medianteum noUm modo de se referir a um identificadordeclarado me sob a forma de notao pontuada: nome- do -pacote. identificador - declarado

n ^"u' (-s0 90'-:9 rr1prRATURr , u"u' -:9 ' frrND-sprrD , ar r av (-9 0 " 9 'o' 0 ' -9 0

'

99)o FLoAT; !91or FLoA; 90)


o f FLoA T;

Considerepor exemplo o pacote \ryEATHER_DATA anteriormente apresentado.A tabela WIND_SPEED pode ser denotadapelo nome: l. lIND- SPTED I.IE A TH ER- DATA. e assimpoderamoster a seguinteatribuio:

Quanto s constantes, outr_as unidadesde programa podem fazer uso desses nruns,?or exemploler, atualizar dadoscoou analisar s tabelas. a tipos?. Numa linguagr- o,ip-.-mo .,,,-,-..^!--nl'nto Ada@,gupos de constantes e

= It,, JI ND- READI NG ; J) :D( I.IE A TH ER- DATA. I . JI ND- SPEt Alternativamente, toda a informao numa parte visvel pode ser tornada diretamente visvel numa outra unidade do programa dando uma clusula ase no comeo da unidade.Podemos ter, por exemplo,o subprograma:

Jlffi.ot""avelmente

incluiroidelaraaodostiposrelacionad-os. poderemos ter, por

package GOLF_INFO rs type G0LF_CLUB is (DRIVER, pUTtR,lrlEDGt, IRON, tASHIE); type GOLF_SCORE

PAR_F0R_C0URSt: constantG0LF_SC0RE := /Z; PAR_VALUES : constantSC0RLDAA := ( =t U, 2 => 3, 3 =t 4, O => 4, 5 => 3, 6 =t 4, 1 =t S, 8 => 4, 9 =r 4, l0 =r 3, ll => 4, 12 => 4, .J 13 => 4, 14 => 5, 15 =,3, 16 => 4, 17 => 4, 18 => 5 e n 0; ); ,,sre pacote nos defineasconstantes comuns comodefinetambm vriostipos.Assim. turlquer unidade que faa.uso do pacote tetu*brn acesso aostiposrelevantes. ()rtante notaqueum usurio impodedeclarar ronrt*t* e variveis desses tipos,como: NtXT_H0LE ; H0LE_NUTlBER; lilY_SC0RE : G0LF_SC0RE; IY_HANDICAp: constantHANDICAp := l0;
I

type scoRE-DATA i: ;:ff; friJfnmR) or G0LF_scORE;

type HANDICAp

type H'LL'.UTBER i: :il:i

31

pnocedune UPDALt/EAHtR_DATA is use I,TIEATHELDATA; I, J: INTEGER range-90 .. 90; ALT_READING, Ttl,lP_READING, t{IND_RtADING: FL0A; begin (I, J) ; GET_ZONLCOORDINATES (ALT_READING, GET_SEl'IS0LVALUES TEt'tP_RtADING, WIND_READING) : ALTITUDE(I,i) := ALT_READING; TEltPtRATURE(I, J) := TEl,lP_READING: I./IND-SPEED(I,J) := l,rlIND_RtADING: end;

use tomarosidentificadores O efeito da clusula declarados no WEATHER-DATA diretamente visveis na unidade de programa quecontma clusula use. Vemosacimaque a informao no pacote tornadavisvelembase seletiva. Qualpodetornar a informao querunidadede programa que necessite da informao visvel; asoutrasunidades no soafetadas. Assim,os identificadores declarados ne partevisvel 55

I A B Lt : ar ra y ( INDEX) of I NTERNAL_ El{ ; FI RS F REt_ ITtll: INDEX; FI RS TB USY IITII: INDEX: I unctron FREt_L IST_ El'I PI Yur n 800LEAN r et is e n 0; l unct ron BUSY L IS tl,tPYr et ur n B00LEAN is e no: (FR0 ll: in I NDEX; TC: in I NDEX)is 0 rocedureEXCHANGE e n0: p rocedureINSERI(NEl,J- I Tt ll: in I TEI ' l) is e n0: p r ocedureRtTRItVE(FIRS TI I t lt : e n 0; 0 e g rn -end. Exemplo 5.1 Corpo do pacote de um pacote de gerenciamento de tabelas code lor initialization o the toble linhoges out I TEI t ) . r s .

pn0ce.dure READ (F; in FILE-NAtlE; iTEltl:out iNTEGtR); (F: pr0cedure FILE-NAltE; [,lRITE ITEltl:in INTEGER); in orivate type FILE-NAl.lE is range0 . . 50; end; package bodySII',lPLLI-0 is -- implementaa de trunuseiode arquivo do procedimento en0; podedeclarar pacote do tipo FILE-NAME e po' variveis Comoacima,um usuriodesse como de passar essas variveis aosprocedimentos CREATE,READ e WRITE.Entretanto, como privado,o usu:riono sepodevalerdo fato de o nome FILE_NAME declarado nopoderealizar que esse tipo internamente denidocomoum inteiro,isto , o usurio operaes definidas do tipo FILE_NAME. As nicas operaes aritmticas com variveis de igualdade e desique poderr serrealizadas soatribuioe comparao na linguagem gualdade. FILE_NAME podem serproibidas declarando essls operaes Seo quisermos, mesmo comodo tipo privadolimitado,comoem: type FILE-NAME is imited private; deumaprteprivada,naqual Em cadaum doscrsos, a partesveldo pacote seguida 'sed uma denigo de situaforma aracterstica completade cadatipo privado.Essa de um tipo. nasquaissequercompletocontrolesobreasoperaes es um Por um ladoimpedem servem a um duplopapel. Os pacotes com tipos privados pacote. o conceldefinidos naquele Por outro, implementam usrio de operarcom dados tipos(almde atribuio o cujasnicas operaes com esses to de dadosde tipo abstrato, igualdade) soaquelas dadas no pacote. 5.5 SUMRIO paraabstrao, ferramenta oferecem uma poderosa Pacotes, como subprogramas, por um arrtplo que os pacotes seespalham continuumm cadopot Os servios oferecem trscapacidades bsicas: I A declarao e de tipos comum nome. de colees de dados I A definiode uma coleode subprogramas correlacionados. I A declarao privadas.' de tipo sejam de dados cujaspropriedades . seletivo pontuale asclusas use,o rsrio podedar acesso Alm disso,com a notao informao visvel.

s.4 TNFORMAES PRryADAS Embora o mecanismo ilustrado acima ofeea uma facilidade simples e rica para abstraes,ele no gaantea integridade dessas abstraes. No nossoexemplo de gerenciador de tabela, nada impede um usrio de ter acesso aos componentesde um item e alter-los arbitrariamente. Isso por um lado pode ser convenientemas por outro pode levar a srios problemas, especialmenteem aplicaesnas quais se queira impedir o acessoaos dados. Assim, algumassalvaguardas so necessrias, se quisermosgarantir a integridade da infortttao. Isso traz baila o item de informaes privadas,em paicular o uso de objetos cujo tipo especificadocomo tipo privado. Considere pacote: o seguinte packa g eS I t . |P LT I 0 is typ e F I t t NA |t itis p n rv a te : p r0 c{, dune CRT A I F( F : o u t F Itt N A tE); (t

^ Ll

DosPRocRAMAS esrnuruRAGERAL

men^te a rainha, at que sejaencontradauma posioseguranaquelacoluna. Se surgir uma configurao na qual nenhuma rainha possaser colocadacom iegurananuma dada coluna, a rainha j posicionadana coluna anterior avanada para a prxima fileira. Todo o processo continuaat que sejaencontrada uma configurao completa. Um pequenoponto. Duas rainhasficam numa mesmadiagonaldescendente se a diferena entre as coordenadas de fileiras e de colunasfor a msma.Similarmente,duas rainhas ficam na mesma diagonal ascendente se a soma de suasfileiras e colunas individuaisforem idnticas. 12315678

-como N amedi d a e mq ueos pr ogr am a s s e to rn a m m a i o re s ,o s p robl emasdel i darcomel etor. das organizao pr"ulemas tais -unidades ,'am-semuito maior.r. ?;t;;;;ri,.", e as dificuldades de fazer modiicaes do programa,escopo dos nomes, controlee erros serresolvidos precisam , - ---:r^r^- r^ programas *-tu (subprogra' '"--'-il;ri;;upit.rfo discutiremos o aninhamento das unidadesde deidentificadores o.s que definem WaiJ mas, pacotes e tur.far; 1, rg.r t "*iUiiidade programa' de texto um de regio numa dada que podem serrefereniados clarados uma importante facilidade para con' Trataremos tam; e compilaao separada, a, progtu*as. conuanto til mesmopaa pequenolqtogtnat' trolar o desenvolvimento per' ,.pu.uu fundamental. Seu objetivo bsico para grandesprogru-ur"ul'o.manipulao' fcil mais ede simples mais rrritir a diso dos grandesprogruTu, em partes algunscon' e ompilao.separada, Ao discutir ,rgr"t . lda@ para aninhamento so conceitos esses ", ,i; introduzidos. Em suJessncia ccitos inter-rrfurionuo..;;|fi a indicaremos especalmente, captulo rrruito simpler, *u, ,.,r"r-o"riJtresnao o so. Neste referncia. de o manual para os detarhes conceito, desses cssncia o problema das Oito "ai"ur.-os um ptog'u para.resolver Como ilustrao, consideremos um pro' escever posto assim.Queremos lainhas.o problema das oito Rainhaspode ser xadrez de padro tabuleiro um g,ramapara Oet..mlnar um .ri.n1o de oito rainhas sobre xadrez de tabuleiro yP qualquer-outtu' tlc tal modo que nenhumarainh possa.capturar uma pode capturar rainha Uma 8. por 8 de quadraos d lxrtlc ser vlsto como uma atriz dia' mesma uma ou sobre outra se estiveremambasna mesmafileira, na *"nu coluna gonal. da Figura 6' I ' por exemploa configurao Considere l ou A rainha na |rleira 1, coluna 3, pode capturar qualquer outrarainhanafileira soambas esto porque 6, 4, cluna fil.it" pode d" mrtu o tu-uZ*'"ultu.ut .ir c.luna 3. ser captupode A rainhada fileira 6, coluna 5, no 5rc unra mesmadiagonalescendente. uma das rainhas. outras das Queremosque nossoprogramadescubra qualquer p<lr firrlu arrumadas' ser possam c.,rrliiuracs iossveisem que asoito rainhas coluna l' Como a gr'ir cstratgia comarcolocandouma rainha na fileira I ou na coluna2 onde acharuma posio sejura.O prximo passo ctacstar, ,rirrl*r a rrica, na ser colocada poderia rainha Uma com segurana' scr cl<lcada ptlssa rttittlta ;r scgrrrttlit nmero I o de itulenla-se ittaclttla, scr lilcira I tla c()luna2, tttasctltttocssaraillltapoclc succssi vaatrdtl t oo tl l i ttttlavatl O i ' p ro c tts sc s tl t:tta tl ri ttl < l t c ' s lat l ttt:s r l c lilci l l t'i t Ilt it t lllt

FiSurr6.1 Trsrainlras Uma soluodo problemadasOito Rainhasem Ada@ dadano Exemplo 6.1. Nessa soluouma matriz chamadaCONFIGURATION usadapara amazenaas posics dasfileirasdasrainhascolocadas nascolunasde 1 a 8. com segurana Aqui, so introduzidasmatrizescom valoresbooleanos. Para cadafileira de I a tt, a tabelaSAFE_ROW tem valoresTRUE ou FALSE dependendo de aquelafileira ter alguma outra rainhaposicionada em algumlugar sobrea mesmafileira. Similarmente as matri. zes SAFE_IIP_DIAG e SAFE.DOWN_DIAG tm os valoresTRUE ou FALSE corrrr' me existauma rainhanasdiasonais ascendentes ou descendentes dadas.

w rth I 0 P A CKAG T; procedure rs QUEENS use I- 0 P ACKAG T:


= f 'l I NR 0 W c o n sta n t IN TTGER l 'l A X R 0 l l / .c on sta n t IN TEGER := l '1 I N . 0 L : c o n sta n t N TtGtR . = C ItlAX C 0 L : c o n sta n t IN IEGR .= t l N U P D I AG l A XU P D I AG I t l l ND 0 | . / N DIA( l l 'l ^ X0 0 1 , DIA( N
I l l I l ) l ./l l )l l l

1; 8, I; 8; tl l N R 0 l l * + l 'l AX R Ol ./ l ,l NR ( ) |./ l 'l AX R O|./ lllN C0l, l l AXC t) t , l l AX( l ( ) t l l IN ( ;0 1

:= c0 n sta n t IN TTGER = r 'o n sta n t IN TFGTR r r r n st,l n t IN ItGtR r o r tst,a r tt, IN l t( tR


I

r orr,;l ,,rrrl l , N It (;l R

( )\ (o lr s lt lt lnl( \ r l( 'unu tl )i u l crl c c l trtl l i v i sri (| ettt tr' (l tl nr(' tl l . l )r()c c s s i l (l os ortl ottt ll nur c o rtst:r;u t ir rrc lc irs t s it r c l{ r ir i rl ro (l u z i d o u n t nome,el c potl cscr ttsrdo (l u c ,u ru av c z . sulrscc;ucntcs partcdeclarativa. crrrrlcclulrr)cs tlcrrlroda nrcsnra r 6 .2 A NINHAM E NT ' O E V I S I B IL ID A D E Obscrvcno Exemplo 6.1 que os programase subprogramas podem conter partes rlcclirnrtivas, que por sua vez podem conter declaraes e corposde outros subprogramas. lrssccrrrbutimentotextual de unidades aninhamento. de programachama-se O aninhamento servea diversos Maisimportante,permite objetivosde programao. rtrttaorganizao lgica das unidadesde programa.Pode-se fazer uma analolia com uma urciclopdia,onde as matriasso arrumadas Asimtambm, em assuntos e subassuntos. rrnidadcscorrelacionadas podem ser grupadase mantidasjuntas ao nvel em que forem rrcccss rias. O aninhamentotambm permite que demos nomes locais aos objetos localmente dcclarailos, mesmosnomes.Assim os proindependentede qualqueruso externo desses granradores podem dar nomes aos itens sem se preocuparcom que os nomesdsobjetos scjam distintos em nveis diferentes.Finalmente,o aninhamentopermite-nosestendera visibilidade a informaes externas. comunsdadasem partesdeclarativas Assim,no Exemplo 6.1, temosa estruturageral: wi th I-0 - P A CK A G E ; pro ce d u r e Q UE E NS is U SCI _O _P A CK A G E; ---globais declaraode constantes declarao de tabelasglobais declaraode ROII e COL

( ) t lt ll: NS, r r onlr inr () l l togl ttttu1,,i ,,at'1rrul, t t:t lt t lt ; t r ; t t it lt ost t lt lr t opt it t t ttit l pr r r r llnt r ! t r lu (' ttdtt t t r slt t t f il( , olr t tlsit r lit t ut gr it t lr 'r lc nubprog r t t t to ttt r : or r ccllt lit cleo r lgr r r r ur er likr rl ol . rl o progrnrnrr pri rrci p ul, lt os lt t cit ls ct s tttto l O W c ( 'O l, sikt i: r t t t sit lct it r kr N otc quo os non $ dos plr lir r r et r os lu a cor t st at t tVA( Not e t anr bn e : ^N'l't t o pt occt ll procctl i rncrrl os em q uc sodados. r:,-.nsitierada lrt tarnbm conrc local quclcproccdirttento. rrrcntolI-NIOVE_QUEEN oulro latlo,as quatro matrizes no procetlitttctltocxlcrdo estadodo tabuleirodeclaradas aninhados. rro QUtrbNS nos quatro subprogramas sousadas do aninhamento: Esse fundamentais exemploilustra as duasregras r unidadc. ltens declarados dentro de uma unidadede programasolocaisa essa r Uma refernciaa um item no declarado sc dentro de uma unidadede prograrnu na unidademaisprxima que o contenha. refereao item declarado Note que, como resultadodo aniamento, uma unidade de programapode declararuttt novo significado para um identificador que tenha tambm sido declarado numa unidurlc a seunovo signicutlo. cxterna. Dentro da unidade aninhada,o identificador associado mai$ln' Assim,o significadoassociado a um identificador sempredado pela declarao terior disponvel do identificador. podem tambm conter pacotes, casos as regras de visiblliOs subprogramas e nesses dade necessitlmser estendidas.Em particular, urna vez declarado um pacote, sua purto svel fica disponvel para outras unidades de programa. Isso se conseguepor ntelo dc uma clusulaase em algumaunidade de programaseguinte,ou usando a notao pontuul, Alm disso, o corpo de um pacote tem visibilidadedireta sobre sua parte visvol. Neste caso, a parte visvel do pacote e a parte declarativa de seu corpo so considcratlus como uma nica parte declarativa. Para os pacotes h pouca necessidade de aninhar um pacote dentro de outro, enrbora nesses Isto , um pacote inteiro pode conter itctrs casosse apliquem regrassemelhantes. localmente declarados,e itens no-declaradoslocalmente se referem a itens de um pacotcr externo.

p n o c edune is CLE A R- H I-B0 A R D en0; p ro cedur e S E T - Q U E EN Qn r me tro s ) i s en0; p n o cedune (q RE t l0V E -QU EE Nn r me tro s ) i s en0: s fu n ction I S - S A F E Q ta r me tro s )re tu rn B0 OL E A iN en0: begin -- instruespara o programa principal end: 6.3 COMPTLAO SEPARADA No desenvolvimentode um programa de grande escalafaramos uso provavelmentc de vrios pacotes e numerososprocedimentos. Isso traz baila a primeira regrabsicada compilao separada: I Subprogramas e pacotespodem ser compilados separadamente. (Captulo 4) e pacotes (Captulo 5) notamos Em nossadiscussode subprogramas que todas as unidadesde programa podem ser especificadas em duaspartes: (a) uma declarao, que resrmeas convenes de chamadade uma unidade, e (b) um copo, que especifica a implementao.Isso leva segundaregrabsica: r O corpo de uma unidade de programapode ser compilado como uma unidade separadade compilao Iso se aplica tanto aos corpos de subprogramas quanto aos corpos de pacotes. Considere o progrirmado Exemplo 6.2,uma soluoresadado problemadasOito Rainhas. Esseprograma compilado em trs unidades, indicadaspelaslinhas interrompidas que separmas trs unidades. 3

64

65

'-l|F

,i,/\lI R0l :i A t U P t)lA 0 l)lA(; :iAt D()l.iN (0 N t I (; U RA I()N I R ( )t l l Nl t G I R, 0 0 |' l N I t G R t is Ht 8 0ARD pl o t t t d rtrcCLE AR hu gt n = > TRU E ;) . . t'lALROl''l ;= (IIN,ROI'J SAFI R0l'l = > TRU E ) ; I AXUPDI AG (lllN-UPDI AG ;= " DIAG S A t t UP = > TRU E ;) lALD0llN-DIAG DIAG = (11IN-DOtllN-DIAG SAFt DOI/N cr t d , is (R0 l.i , COL : in I N EG ER) p f o c e dureS E QUETN ln l) o g : = F A L SE ; Rol'i(R0t'J) SAtE. * : = F A L SE ; C0L) SA F -U DIAG(R0il P: = F A L SE : ( C0L) RO|'.l AG DOI.JN_DI T SAF := R0l',i; (C0L c o NF iG UR ATI0 N ) ' end ; y ,rl r',r a llay a rray a rray r rI l'lA)(R0t'/ ) { tl I N ll(}l ot UP t ) lA0) t t AX (f'll{ Uf D I A( DI ilAX DO |. J N AG )o 0lA( (llN D0t4N o 001) (llN C0 L . t "lAX lA t l( ) ( ) l N, B0 0 t l A N ; B0 0 L E A N ; INTEGTR; w h tl o ( C ( ) l .. i l l l e l l ) l r r l l w h tl o ( ROl .. l l l l l l l 0 l l a r r r l( 0 0 1 ..= l l AXC ( ) l ) l o l p t I I S SAI I ( l i 0 l , ti t) l) t,tr r r r

(:or); (Ror.t, st QUttil

C OL:= C OL+ l . ROtrl := I ; eI s e + l; := RO|J ROl,/ e n d i f; end I ooo: = }AX_RO}J + l) then (RO}l C O L: = C OL- 1 : = C ON FIGU R Al 0 N ( C OL ) ; ROI,J (RO|IJ, Rtlr0vE_QUttil cOL) ; + I: ROt'l := R0l'J end if ; end oop; it P U T( " S A F E C BE PL AC ED IN SU C C ESSIVE R Ol 'l S:") ; QU EEN SAN NEI.i-LINE; or I in I{IN_C0L .. ltlAX_C0L loop ( I) . D - I,/ID TH P U ( C O N FIGU R ATIONFIEL ; ) end oop; end, Exemplo 6.1 Uma soluoao problema dasOito Rainhas

R) ( R0l' /, 0 L :i n IN T E G E s R tt'l0V E - Q UE E N' C p r o c e d u re := I NT E G E R0 ; :T co ns t ant VACAN begt n := T R U E; SAFE-R 0 tl( R0ll) + TRUE; := C0L) D IA G ( R0h SAFE-U P - COL):= RUE; SAFt-D0l.lN-DIAG(ROtl C ONFIGURA T I O N( CO L:= ) V AC AN T ;
e nd ;

.r ELABORAO DE DECL{,RAF,S elaboraEm Ada@, o processopelo qual uma declaraorcalizaseuefeito chama-se geral, puramente parte no significao esttica. ExEm uma declarativa tem uma o. presses, por exemplo, podem aparece numa declaraoe terem efeitos colaterais,ou um corpo de pacote pode conter uma parte de inicializao. Assim, o significado pleno pelo conceito de elaborao. de uma declaraorequer uma deinio cuidadosa,expressa O princpio subjacentemais amplo o da elaboraolinear.Considere a seqncis de declaraes

is net ur n B00LEAN C0 L: in I NTEG TR) u n ct ion IS-SAFt(R0l'J, b e gin + C0L) and SAFE-UP-DIAG(R0tll i SAFt-R0ll(ROl'J) t hen C0L) DIAC(RO|. l and S A FLDO|,,IN ret urn TRUE; else ret urn FAL ST; e nd if ; en d; b e g i n -- lain Pn og ram := ; ROt''l C O L:= I, C L EA R_T HLBOARD; PRO BLEI ' I ' ' ) : HT EI G HT O SOL VE Q UEENS PU T(' ' P ROGRAII

l'lIN-RO[/ : constant INEGER'= I ; '= 8: lAX-R0l.l:constant INTEGER SAFE-R01,/: .. ltlAX_R0W) arnay (ltlIN_ROl.l of B00LEAN Aqui, a elaborao de MINI-ROW e MAX_ROW permiteo usodessas constantes na declarao dq matrlz SAFE_ROW Mas,geralmente, uma parte declarativa pode contervriosconstituintes, por exemplo declarao de tipo, declaraes de variveis, clusulas use,corposde subprogramas etc. Issod origem regradeelaborao linear:

63

Uma unidade, um procedimento, defineas compilaes necessrias panr resolvcr rl problema das oito rainhas. Esseprocedimentofaz uso do pacoteQUEENS_PACKAGE,e , de fato, o progrrmaprincipal. Uma segundaunidade, chamada QUEENS_PACKAGE, uma declaraopacote para um pacote de constantes,variveise procedimentos,geralmenteutilizveii. Note que a parte visvel desse programa apenasd nomes quelesitens que so de interessedo usurio. Em particular, no se faz qualquer meno curiosa convenopara determinar se duasrainhasesto sobre a mesmadiagonal. Uma terceira unidade define o corpo do pacote QUEENS_PACKAGE. Note aqui que as declaraesdas tabelaspara testar o status das rainhas parte dessecorpo. Essa representao no visvel para o usurio, o programa principal. As linhas interrompidas entre as unidades de compilao esto aqui para relembrar o leitor de que essas unidadesno precisamde ser textos contguos. As unidadesde compilao, coletivamente, definem um nico sistemade programaoe assimso ditas constiturem uma biblioteca de programns. 6.4 USO DE COMPTLAO SEPARADA Como mencionado acima, num grande programa normalmente se quer definir subprogrimase pacotes para serem usadospor vriasunidadesde programa.O nome de uma unidade de programa compilada separadamente pode se tornar visvel a outra unidade de compilao incluindo o nome da unidade de programa nvma ckiusula de contexto (tambm chamadachusula with) paru aquelaunidade de compilao. No Exemplo 6.2,por exempl,considere a unidade pac k ageQ Ut t N S _ PA C K AGE is en0: Essepacote uma coleo autnoma de dadose subprogramas e assimno tem uma lista de sibilidade. Por outro lado o pacotepode sertomado acessvel a outrasunidades, por exemplo no procedimento principal : wit h I _0- P A C KA c EQU , EE N S _ PA C K AGE ; pnoc edune s Q U EE NrS end; Aqui a clusula do contexto d o nome de cadaunidade de programavisvel. Note que o pacote I_O_PACKAGE tambm est includo na clusula with umavez que o programa principal tambm usa os procedimentospredefinidos de entrada e sadaPUT e GET. Ambos esses casosilustram um ponto geral. Os subprogramase os pacotespodem ser desenvoldos separadamente, e ento tornados disponveis seletivamentea outras unidadesde compilaodesenvolvidas separadamente. Precisamosapresentaras unidades de compilao de uma biblioteca de programa numa ordem que um compilador possaentender. Se no fosse isso, gostaramosde ter o miximo de liberdade. As regraspara a ordem em que as unidadesde compilao devam ser compiladasdecorrem diretamente das reqrasde visibilidade. 66

r tl tt t a t t t t it lt t r lc sirlxr t lcsct cot t t pillt t llt t 'ot t t pllit r lr .r 'or r r I llir lkr t lt t it t t t lo. lr cri lt vct cln tl l s to das ast t t t ir lr t t lcl dc conlcxlo. t nct r t 't or ur tcnl lassuaclusull Sc niIo,a ordemde colrrpilalo scriaarbitrria scr dcixa<Ja e poderia uo prugrarnlrhrr. O cfeito dessa simplcsregrapode ser ilustradocom o programa do lixcnrpkl .J. Assim, l. A declarao do pacote QUEENS_PACKAGEdeve ser compiladaantesdo procedimento principal QUEENS. 2. A declano do pacote QUEENS_PACKAGE deve ser compilada antes do scu corpo.
p a cka g e is QU TEN S- PAC XAGE := tl IN R Ot.lco : n sta n t Ii TEGER := l l AX- R 0 W: co n sta n t IN TEGER l 'l IN - C 0 L : := co n sta n t IN TEGER tl AXC 0 L : co n sta n t IN E0 ER:=

l: 8; 1; 8:

) f IN TEGER ; C 0 N FIGU R AII0 a Ntr : a y ( ,,l IN - C 0 L l 'l AX.C 0 Lo p r o ce d u n e C L EAR - H E_ B0;AR D p r o ce d u r eSET- QU tEN ( R 0 l l , C 0 L : i n I NTEG ER) ; p r o ce d u r eR Etl 0 VE_ QU EEN ( R 0 l ,J, C 0 L : r n I NTEG ER) ; ( R OI,J, fu n cti o n IS_ SAFE r et ur n B00LEAN; C 0 L : i n I NTEG ER) en0;

w i t h I- 0 - PAC KAGt, QU EEN S_ PAC KAGE; p r o ce d u r eQU EENiS s u se I- 0 - PAC KAGE, QU EEN S- PAC KAGE; FI L D - 1 ./ID TH := 3; co:n sta n t IN IEGER R Otl ,C 0 L : IN TEGTR ; b e gi n R0t''/ := 1 ; C OL := l ; C L EAR _ TH E_ BOAR D , p u T ( ,,p R 0 cR Atl R 0 8 L i l t',) ; I0 t s0 L VEIH t tIG|1 l rQU ETNp S wh i l e C OL<= i AX_ C 0 lL oop whie (R0tt<= ilALR0l'/)and (COL<= I{AX_COL) toop r f IS_ SAFE( R OH , L ) th e n C0 ( R Ol l ,C OL ) SE- QU EIN C Ol := C OL+ 1 ; R OW := 1 ; e l se + 1; R0l,,l := R0l,rl end if ; (continua)

67

en d loop; = lilAx-R0l,l + I then r R0t,l C O L: = CO L- 1; R O lJ : = C0NFI G URA I 0N( C0t ; ) ( R0ll, R t r ' r 0v E_Q UEt N C0L) ; + I; := R0tl1 ROl,/ en d i f ; en d oo p; 0l.lS:") PUT("SAFEQ UETNS CANBt PLACED I N SU C C T S S I R VE NEII-L INT; . llAX- C0L loop f or I in li' llN- CO.L I), PU ( CO NFI G URAI I O N(FI TLD_I . I I D ;H ) en d oo p; e nd ;

S AFE_ D 0 l .l N - D IAG( -R 00 1L ./ C ) := R U E; CON FIGU R Al 0 N ( C OL ) := VAC AN T; end, t u n c tr o n IS_ SAFt( R 0 t./, C 0 L : i n IN fEGER r ) e tu n n B0 0 L tAN is begtn i SAFt_ R 0 tl ( R 0 la ,ln )d SAFE_ U P_ D IAG(+ R Ot.r C 0 Ll) (R a n d SAFE_ D 0 1 ,/N _ DOtl IAc - C 0 L ) th e n r e tu r n TR U E; e l se r e tu r n FAL SE; end i ; end; end;

pa ckag ebo dy Q UEENS PACl( AG E is := t4 INUP-DI AG : c ons t ant I NTEG ER := HAX-UP-D I AG c ons t ant I NTEG TR f,IND0|./N - DI AG c ons . t ant I NTt G t R : = := lAX-D0 llN- DI AG c ons : t ant I NI TG ER

Exemplo 6.2 Uma outra soluo para o problema das Oito Rainhas l"llN- R 0 l+ l IN-C0L; + | AX- R 0 i ,,/ | ', | A X - C 0 L ; , llN- R O-f , it 'l A X - C 0 L ; -i I N - C 0 L ; l AX- R 0 |

.. l'lAX-R0l.l) o 8 0 0 L E A R0t,/ . attay (lilIN-R01l/ SAFE ;N . at t ay ( HI N UP- DI AG , . l A X - t i P - D I A G ) o f B 0 0 L E A N ; SAFt-UP- DI AG ( f lI N- DO l^lN- DI AG 'l 'l A X - D 0 t l N - D Io AGB ) 00LEAN; ar nay SAFE-D0|' lN, DI AG : p roced ureCLEAR, HI - BO ARD s be grn TR U I); E-R01./ : = (tI N-R0w llAX-R0tl SAF R U E ); . . t ' lA X - U D PIAG SAIE-U P- DI AG : = ( l I N- UP- DI AG , L D O I I N _ D I A GTRUE). I.G A : AG = ( 11I N_DO I , J N_DI A SAFT_ DO I iN- DI en d; ( R0t . / , pro ce du reSiT Q UEEN i) s C0L in I NTEGE R be grn ( ROtl : = FALSE ; E_ R0|, sAF ) + C0t ) : = FALSE ; DI AG ( R0ld SAFt_U P ( Rot sAFt_ D0wN_DI AG / - CoL) : = FALST ; : = R0llll CONFI G URA I O N( CO L) en d; (EN R0l, l,C0L: in NT E G t R ) pro ce du reREl, , l0Vt - Q Ut is VACAN:T c ons t ant I NI EG ER . = 0, be grn . = TRUE; sAFt RO r . J ( RO ll/ ) + , SAFt UP DI AG ( R01, / ) L) . = TRUt ; C( (trrrrl itttur )

Presumimosque o pacote de biblioteca I O PACKAGE j tenha sido compilado, como prticanormal. _ g*t. da ordem exigida de compilao,resta ao programador arnpla rea de esco. lha. No Exemplo 6.2, por exemplo, o corpo do pacote eUEENS_PACKAGE e o procedimento principal Q{JEENSpodem ser compilados em qualquer ordem. Qualquer sistema de programao,correo ou atualizao de programasexigc rccompilao de unidades de compilao. Em grandessistemaspode at hver milhas de alteraesno progrma. Obviamente, ao compilar uma unidae podemos mudar algunlil informao que sejasvel para outras unidades,e assimtoda uniade que usar essaiirrrmao pode ser afetadapela mudana. A regra de recompilaotambm decorre dasregrasde sibilidade; I Uma unidade de compilaoprecisaser recompilada sempreque for recclnrpilarln uma unidade meRcionadaem sua clusulade contexto. Fora isso,nenhuma recompilaomais sernecessria. No nosso progrmadas Oito Rainhas,por exemplo, a recompilaoda declarlkr _ de pacote QUEENS-PACKAGE exige a recompilao do procedimenlo principtl c tlp corpo.do pacote.A recompilao do procedimentoprincipal no exigequalqueri.,tu te, compilao.Similarmente,a recompilao do corpo do pacoteno exigeoutrasrccoltpl. ) laes. Vlm9s pois que, com uma organizao convenientedas unidadesde compila6o, o efeito de alteraes no programapode ser cerradamente controlado.Alm diss<1, rlrrir ,,r,rdana para outra unidade prxima no necessita resultarnuma cascatadc rccorrrpilunrr de outrasunidades.

6.5 SUMRIO Iso completa nosso segundo rrvel tle irrlnrrlufio r Adu@. s curlclorsilclt tlorcli.

r1 lt t s it li'u tl ttt tct t t ut uilogos t : n r rrrrti l a s o rrtri ts l i n g rrl g c nc s c (, ni c(l u(!nl (rntcnl (:l 11 l xrl paraurnaarnplaixatlc aplicar)cs usarJas de progranrao. Nas sees seguintes descrevemos caractersticas exigidaspo muitas aplicaes especializadas, mas crticas.Muitas vezes j desiremo-nosexpandirsobreas caractersticas critasparaatendera essas necessidades.

Aosrpos ^rroRNANDo

l)iscutimosno Captulo 2 as idiasbsicas que estavampor trs de tiposem_Ada@, bcnr cono os tipos primitivos, os tipos de enumeraoe os tipos de tabelas.Ada@ extrenu. ntcnte rica em recursosde tipos, talvez mais rica que qualquer outra linguagemde prograrrrao. Continuaremosagoranossadiscusso. 7.I TIFOSDEREGISTRO Um programador muitas vezesprecisarde lidar com objetos que tm muitos conr. ponentes.Uma (hipottica) licena de motorista pode ser um objeto tendo os seguintes componentes: Nome do motorista: um nome consistindo de um Primeiro nome: um cordo de l0 caracteres Inicial do meio: um caractere ljltimo nome:um cordo de l0 caracteres Nmero da licenga:um inteiro de 9 dgitos Data de expirao:uma data de calendrioconsistindo de: Ms do ano: um dos mesesde janeiro a dezembro Dia do ms:um inteiro de I a 3l Ano: um inteiro de 4 dgitos Cdigo de motorista: um cdigo para licena normal, limitada, especialou VIP. Dependendode seu cdigo de motorista, talvez haja outras informaes, mas vamos deixar para tratar dissodepois, quando discutirmos registrosvariantes. O tipo usado para grupos de objetos relacionados chamado um tipo de registro. Um registro contm um nmero fixo de componentes,cada um dos quais tem um nome e um valor. Diferentemente dos tipos de conjuntos, os componentesde um registro podem ter tipos diferentes. Considere,por exemplo, a definio de tipo de registro:

recond FIRST_NAIIIE: STRTNG(l . . l0): I'lIDDLT_INITIAL: CIIARACTER; LAST-NAI'IE : STRTNG(l . . l0); end necond;

70

7r

('onllxrttr,ttl0i. its tl,ltttltt tlc rcg,islro c(rllt lt6 runn tleligxr dcscrcvc cslrulurit lisslrlellrrtnrr (ilrnoparu ptlt tlclittillo qualquer dcl'irritto tlell1xr, pesson. lris pitrtcs tlcurna do rrorrrc subscqcntes. endcclurucs de tipo c serusada declarailo tlo rccctrcr urltonlcnunra intuitiva com cssa clclnio quevoem paralelo sscguintes declaraes lssodd origcnr anteriormente: dada de ulnalicena type l'l0NTH_NAlE is (JAN,FEB,tAR,APR,llAY,JUN, JUL. AUG, SEP,OCT. NOV, DEC) ; type STATUS is (N0RtAL, LI'lItD, SPtCIAL, VIP); type NAI'1t rs rec0rd FIRST_NA|,IE : SRING(i.. l0); I'lIDDLE-INITAL : CHARACTER : LAST_NAl'lt : STRING(l .. l0); end necord; type DATE is recond lCNTH : t'|0NH_NA'lE; DAY : INTEGER: YEAR : INTEGER; end rec0rd; type LICENSE is record DRIVER : NAiIE; LICENST_NUltl : INTtGtR: IXPIRAION-DATE : DAE ; DRIVING_C0Dt : STATUS; end recond;

t t t t t r t c g l l l n l , r l o tttr xl l r l ttr 'l r tr scttl l tl r ttl l ze t: ItttttltCrr

' tR l ' l l l D R l vtR l Asl NAI 't l ('orrrl sclcfio tlc utttavuriii' aoscolltpotctttes potlcnros assim rcfbrir-nos tlc conrponcrrtcs lxlcaos conlponentcs de urtt ctlrrjuttto. vcl rlc rcgistrocxatamente corno nos referimos p()rcxenrplo, nr()s, escrever: P tR l ' l l TLIC E N S T- NU14 . = 022- 32- 5795 ; + 4; iXPI RATI 0N- DATt . Yt AR E X P IR A TI 0N- DATE YEAR: = PERlt iI T. P E R I' l T. Finalmente,exatamentecomo com os conjuntos, so permitidasa atribuitl c n conrparao de igualdadepara estruturasinteiras de registrosde tipo idntico. Se tleclapor exemplo: runos, TOD A Y S _D A TE , E i RTH_DATE: DATE; cnto (TOD A Y S -D A= TE BI RTH_DATE) de TODAYS-DATE e BIRTH-DATE tivcserverdadeapenas se todos os componentes rcm valoresiguais. para denotarvalorcs usaragregados Exatamentecomo com os conjuntos,podem-se de registros completos.Podemospor exemplo atribuir uma data a BIRTH DATE conr o posicional agregado . B IR TH _D A TE= (JUL, 4, 1776) ; de nome ou equivalentementecom o agregado => 1776); ' = (| '10NTH => JUL, DAY=> 4, YEAR B i R TH -D A TE Registros com Estrutura Parametrizada Uma estrutura de registro pode ser caracteizada por um ou mais parmetros,cltitmadosdi scriminantes. Considere type B U FFTR (S IZE: I NTEG ER) is rec0n0 P OS ITION: lNTEG ER; V A LU T : STRI NG ( l . . SI ZE) ; end necond; um inteiro e utrt ctlrtliltt, Este tipo define um registro que consistede dois componentes, o compritncntq do crtrrlio, O tipo tem um parmetro,SIZE, que usadoparaestabelecer dando umalimitaoa<ttlisc'rimiiarttc(discri' tipo podem ser dclarados Os jetos desse

por exemplo: agora umavarivel do tipo LICENSE, Podemos declarar LICENSI; PTRIT: ParanosrefeA operao a soluo de componentes. sobre tipos de registro bsica podemos dizer: rirmos, por exemplo, dePERMIT, ao cdigo demotorista PERI',I I T. DR IVI NG_CODE Noteque DRIVER PER'IIT.
1)

73

llllliltllcolstriitlt), tluc tl tttttvalorcspecco podemos parao discriminante. ter,por cxcrrrplo: ' => 100) SIALL-BUFFER: BUFFER(SIZE => LARGE-BUFFER: BUFFER(SIZE1000) ; Ambasasvariveis sodo tipo BUFFER.No primeirocasosepermitem100 caracteres, no segundo caso sopermitidos 1.000caracteres. Registros com Estruturas Alterrtativas Como mencionado anteriormente, lucasos em que se requeiram informaes adicionaisquandoum outro componente do registro tive lrm certoalor. No nosso *r-pio de licena, o cdigodemotoristapodeindicruma.permisso especial, ou limitada,e que rcqueira outrasinformaes. Esse tipo de estrutura manejado umuvariante Aeregistro. Um tipo de registro "tn com estruturas alternativas deveierumdiscriminantee deve-incluir umaparte variante. A partevariante d asvrias subestruturas paravalores possveis do discriminante. Considere a seguinte defnio revista do tipo LICENSE. type FULL_LICENSE (DRIVING_C0DE: STATUS) is nec0r0 DRIVER : NA|'1E; LICENSE_NU. : INTEGER; EXPIRATION_DAE: DATE: case DRIVING_CODt is => when SPTCIAL VEHICLE_ypt: INTTGER: PASSENGERS : BOOLEAN, ZONE_CODE . : INTTGER; => whenLII'lIED CORRECTIVE_LtNSES : B00LEAN ; DAYLIcHI_0NLy : B00LEAN; AUT0_IRANSilISSI0N : B00LEAN : when N0RfiAL I VIp =' nul; end case: end recond;

r i tsl l )R IV INC00l t i (r,,ttpotrenteri pura umu llrcn'aetiptt'iul whert SPICIAl, -. lirrrltulu c()mponcntes when LIlllItD Wra uma lk'anu para dc li<'ctt1'u componentes ouos cctdigos = > -when N6RllAL I Vtp end case; dcfine as subestruturas alternativas. Quando o valor do discriminantefor SPll(lAl,, n irrlrrrnaopara um veculo do tipo especial includa;quando seu valor for LlMl'l'lil), inclui-sea informaoparauma permisso limitada. Note que uma variantepodc scr espocificadacomo nulo, implicandoque no M qualquerinformaoadicional.Em particuhr, quando o discriminantedo DRIVING_CODE tiver o valor NORMAL ou VIP, a vtrlanto screxplicitamente declaradacomo estandovazia. Uma vez que tenha sido atribudo a uma varivel de registro um valor de roglrlro com um dado valor de discriminante (e assimtenha a subestrutura alternativaespecillcatlu pelo discriminante), o discriminantedesse valor de registrono pode sermudado, Os componentes de uma parte varianteso referidosda mesmamaneiraquc outror componentes.Por exemplo, assimcomo IIY_PE Rt.I I T . L I CENSLNUI'I sc refere ao componente nmero da licena de MY_PERMIT, E HI CL E-TYP I . VE I'IY_PTRI't refere-se ao nmero do tipo de veculo de MY_PERMIT. Nesseltimo caso, clau, MY_PERMIT deve ter o digo de motorista SPECIAL. 7.2 TIPOS COM ESTRUTI.]RA DINMICA precisamos Em muitas aplicaes criar objetos durante a execuodo pnlgrurtra e cxprimir dinamicamente sua relaocom outros objetos. Esses casos surgemtipicurrtorrto quando queremos tratar dinamicamente variadas colees de objetos associadol. ;ll exemploos ns de uma rede,os componentes de um banco de dados,os itens dc utttn ltrlE interconexa,ou os membros de uma rvore genealgica. potlcrn sordal Essas aplicaes critascom tipos de acesso, que oferecemacesso a objetosdinamicamente criatftrs. Considere,por exemplo, as seguintesdeclaraes: type P E R S 0 N; - - incom p et e declanat ion is access PERSO N; type P [R S 0N- REF

r: l tlcclarao de varivel

l'lYPERtllT: => SpECIAL) FULL_LICENSE(DRiVING_C0DE : Atlui l)llvlNG coDE usado comodiscriminante e a estrutura do caso 74

is type PERSON record : s R r N G (.l . l 0 ) ; NAI,IE INTEGTR; SS_NUI,1 IN: P E R S O N _ R T F ; NTXT-OF_K end necord; REt B0RN: PtRS0N l'ltl,lBER. LAST ;

1'

lrrlcrrrosvcr ln objcto do tipo I)U!{SON REF como uma referncia(indicador, se qufscr) u urn objeto do tipo pUlSON,qu, poisuu vez .emtrs componentes: l. Um cordode l0 caracteres. 2. Um va.lor inteiro. 3. Uma refcrncia a uma outra pessoa. dcclarao um pouco inconveniente typ e P E RS O N; c chamada uma decraraoincompr-eta-de tipo..Isso necessrio parurefletir a regra de Atla* de que cada tipo tem que sei declatuootes que possaser referido. Paraos tipos de acesso, uma refernciaa.nenhum objeto indicado por nuil.para inicializar, por exempro, uma famria r"* *r-bror, rslsitN p0, ser inicializado como uma referncia a nenhum objeto com a atriUuiaoi L AST_B 0RN : = nu ; A criao de objetos de um tipo de acesso feita com a opera o new.considere as ins_ trues;

(h cornporretrler tkr nrctlrno rlttcol stkrtlettolntlos tttrttlo dor rrh;ltorrkrllpo ncelso ('ornhlcre, ohiclor poroxenrplo, asinstrucs: dc tprlnlo-rrclno, => "EVE l'1tl,lB[R , = ne!/PERSON Rtt (NAlt => 000-00-0002, SS-NUI{ => LAST-,80RN) NEXT-OF-I(IN : LAST-B0RN.NtXT-0F-KIN := l,ltlilEtR; LAST-BORN := lt'lt'IBER; A irrstruo
LA S T-B OR N. NEXTO F- KiN : = l, lEl, lBt R rcsultaem estabelecer com Ado como unut o terceiro componentedo objeto associado rtrl'crncia a Eva. A situaoresultante pode ser ilustradaassim:
\il..i\l BER IS]' BORN

l'ltltlBtR := newPERS0N_REF(NAtE = > " ADAII rt = > 000_00_000 SS_NUl,l I, N TX _OF_K I N = > null); LAST_80RN := t'lEt'tBER; A primeira instruo objetocom os trscomponentes dados peros agregados tkr registro, e atribui".1u-:T_l9yo a MEMBER u*u t.r.rn.ia a esse gbjeto,A segunda instruo atri. bui a LAST-BORNu r,rrT-ureferncia. ot. qur o terceiro objetoassociado a MEMBER rrulo.Fssa situao podeserassim ilustrada:

NAME s.s N LIt\t


( XXXX )2 X) ( X

MEMBER

NI.,XT OF KIN
LA S T I]ORN

NA M F , S S N L] M

..AD AM' '

Agora que temos duas pessoas em nossafamlia podemos ver o desenvolvimentotlc roltt. dinmicasdurante a execuodo programa.Os terceiros componentesde Ado c livu es que. rcferem-se um ao outro e LAST BORN foi mantido como uma referncia pessou rasceu por ltimo. 7.3 TIFOS DERIVADOS rle opcrtos distintasde valorescom propriedades No raro ter-sevriasclasses como inteiros tanto dlaresamcrlcutltlt milares.Podemos,por exemplo, querer descrever quanto francos suos, e fazer uso das propriedadcs aritmticasdos intciros purn litzot Conur crtltt de valor difercnJes. No obstante,dlarese francossfioclasses nossos clculos. uttB !{onurdlarcscont francosou pu$tir quaisquerdos tipos difcrcntes,no qucrcrrro$

000000000 I
KIN null

NE X I '

OF

t6

17

(llltltllletll (l'hrc$ lt ulll (luc cstav ospcrulrdo l)roocdttrcttto urnaqualtil rrrlra1c,s. (lrplrr-se essn idiaconta caractcrstica dos tiposclerivatlos. Considcre, por cxcmplo, as declaraes de tipos: typ e D 0LLA R*A t r 1Tn e w IN T E G E R : is typ e FRA NC_A t ' lT is n e w IN T EGE R : typ e Y t A R_NUt ' t r s n e w IN E G E R ; Essas declaraes introduzem trs tipos distintos. Cadatipo tm as mesmaspiopriedades e valoresque o tipo INTEGER. podermoster, por exempl-o: SAL A RYB , 0NUS : D0L L A R _ A l t; SAI-A RY : = t 0- 000;

I ll r',trrge : INII (;1 POS UllN 001. 'A' nange lR CHARAI)I LETER: NEXT

80, '7' ,

AquiavarivelCOLUMN-P9!:-lftlpgINTEGER'masseusvaloresficamlimitad masseuvalor restrit, ts Ootipo CHARACTER, Neif-f.ffen tle I a 80.A varivel do alfabeto. letras tipos de enua qualquer de faixa podemseraplicadas Limitaes tllt]"sive por exemplo ter' e tiposreais'Podemos defiiidos pelousurio merao l'l0N. . FRI nange DAY ; |.J0RK-DAY: rangeSAT.. SUN; DAY REST-DAY: 0.0 ' . 300.0; nange FL0AT I.IEIGHT: range0.0 .. 7.0; FL0AT HEIGH: daslimitaes Alm de tornar mais clara a intenodo programaaor' 9 nplipal-uso no so anunciadas mitaes dal liolaes de atribuiOes. proveruma maior seguna (veja capto 10)' uma momento da execuo!unt.noo uma condieode exce_o pro' po inadvertncia' que' computao qualquei que. .rp.tiiitue" o, timitas;;t*i" no ponto deolao' srdeteada u". ero de limitao a.outrostiposbsicos e podeseraplicado ;;;i; leneralizoo o uso de rimitaes conti' de registro t: ul,t]?o par.registros: antes, Comoj foi menciotiado na linguagem. varivel uma paralimitar usaruma limitaode disriminante pode-se ver discriminantes, tiver de licena uma permisso por exemplo' Se, especincaqa ;;;;6" '"r*'r*iti assim: declarada ser pode informao essa especial' aigo de dirego "=> SPECIAL) ; : FULL-LICENSE(DRIVING-CODE l{Y-PtRl'tIT ondesse incompleto de registro na forma de um agregado Aqui a limitaofoi expressa dosdiscriminantes. doosvalores til, realmente paraos tipos seja limitaes conquanto. ,"p;;;e especificar Consi' especiais' propriedades sobreo compartilhamntoe isolaro conhecimento deve-se devariveis asdeclaraes dere,por exemplo, nange'A' : CHARACTER LTADING-CHAR range 'A' : CHARACTER 'lIDDLi-INItIAL 'Z'i '7' '

B 0 N US := t_ 0 0 0 : S AL A RY +Y := SALAR B ONUS :
No obstante, os trs tipos so distintos, e quaisquertipos distintos no podem ser misturados.Em particular,dado II,lPORT-COST : FRANC-AII1T ; THIS_ y E A R: y t A R_N U i l : no podemoster: SALAR' : = SALARy + THI'-'EAR; -- somailegalde drares com ano SALARY : = I'tp0RT-c0sT; -- atribuiio i;il;ir-"" a dlares Er geral, um tipo chamado B pode ser derivado de um tipo A existente por meio , de uma declarao da forma: typ e B is new A ; uma tal declaraosignica qe o tipo B tem varores,propriedadese operaes, todos similares aos de A. Se no, os ois tips sero conceitualmnte distintos e no podem ser misturados. Finalmente, o leitor tarvez tenha observado que, estritamente falando, drares e francos no deveriam realmente ser definidos como inteiros, uma vez que no correto multiplicar dois valores em francos ou em dlares.Para a.nt .rtm lpos em suasformas puras, pode ser usado o recurso a tipos privados (veja Captulo 5). 7.4 LTMTTAESSOBRE TrFOS H, d,uo,muitos casosem que as variveistm um mesmo tipo mas em que os valores q-uea.varivel pode assumir jo mantidos dentro de certos timites. podemos, por exemplo' saber que o valor de um inteiro variveldeve ficar arnr-rterminada faixa, ou que uma varivel de caracteres pode representar certos caracteres.para tratar com esse tipo.de situao, Ada@tem o conceitodltmttao d;;:----'Talvez o uso mais comum de.limitaessejapara restringir a faixa de valores de uma varivel. Considereas seguintesdeclaras : 78

quepoderiamapareceemdoislugaresdoprogramabemafastadosu,mdooutro informao entetantoessa acimatm o mesmotipo e as*"r11 mitaes, variveis vezes. duas repetida Assimcomooconhecimentodostipospodeserisoladoereceberrrmnom parafatoraredarnomes de subtip podeserusada de tipos,uma declaraeo claraes declaraes: seguintes as Considere tipo. deum limites range 'A' is CHARACTER subtypeLETTER : LETTER; LEADING_CHAR : LETTER; 'lIDDLt-INITIAL '7'',

79

0 subtipo LHTTEI servecomo uma abreviatura do tipo CHARACTER e uma limitao dc que o caracteredeveser uma letra alfabtica. imprtantenotar aqui que um subtipo tto introduz um novo tip9. O tipo denotadopor trm subtipo obtid peia indicaoo tipo ou subtipo que segue palavra li. Assimpor exemplo:

subtypetiTTtR is CHARACIER range subtypeHtX_LiITtR is LtITtR nanse


NEXT_CHAHE R: X _Lt T T ER ; o tipo de LETTER CHARACTER e o tipo de HEX_LETTER tambm CHARACTER. Da o tipo de NEXT_CHAR CHARACfER. Podemosagora mostrar a definio do tipo predefinido STRING e us-lopara ilustrar uma forma de limitao,a limitao de ndices: su b typ e P 0S I T I V Er s IN T EGE R ra n g e 1 .. IN E G tR ' LA S T; typ e ST RI NG is ar r ay (POS IIVt ra n g e < > ) o f CH A R A C IE R ; O subtipo POSITIVE caractezaos inteiros positivos e, como dito anteriormente, os cordesso,umjuntos de caracteres com limiteJ que sointeiros e positivos.Paraos objetos do tipo STRING os limites de fato podem serspecificados numa declaraopor uma limitaode ndice.Por exemplo ' 80 ): CARD: ST . RI NG (.1 . especifica que CARD um conjunto do tipo cordo. Alm disso, a limitao de ndice (l.. 80)especifica que olimite inferior I e o superiorg0. A capacidade de declarar e dar nome a subtipos complementa a capacidadede declarare dar nome a tipos. Considere, por exemplo,asseguintes declaraes e subtipos:

Recapitulando cxtettslrt c<ttttctttrios. algutts 'lcntlo termilado lgss1viugcrn pclostipos,'arcntos pttde to' tttuito tarnbnt mas dvidadi metermedo, srrr de tiposde Adaqo dos recursos tltr a capacidadc coto bem primitivos, tipos sa. Os recursosdi tipo incluem numerosos tlirtanlicu' F'struturas registro' de tipos e de conjunts tipos definir tipos de enumerao, e novostip<lsptldem scr dcl'i' podem srdefinidasutando tipos de acesso' mente vaiveis tl' Alm disso,um programadlf nde. definir numeroso$ nidos a partir ds j existentes. cottlimites poucos e h definidos, anteriormente pos, cad qual construindosobre tipos ieituais. Aigunsexemplosde definiode tipos sodadosna Tabela7.1. rtl paramoclelur conceituais unida.des Em grd, os tipos nos permiiem desetrvolver dc garantiu a tipos est de do uso ob3etosdo"mundo , .o.n irecisao e clareza'Por trs pelo programadorno serovioladasduratttctt dos tipo declarados qu", u, propriedades violao s limitaes aos valoresdc uttt tl' qualquer disso, A][m or.uo d-oprog."*u. po, serrelatada.

Tabela 7.1 Exemplosde TiPos - - e n u n e n a tl 0 n typ e s r s ( l l 0 N , U E, l '/tD , TH U ,FR {, SA, SU N;) type DAY D' 0 L L AR ) ; H, AL t- D 0 L L AR D Il t, QU AR TER N IC KEL , i s ( PEN N Y, type C0IN t y p e 0 P - C 0 D ti s ( AD D ,SU B,l U L , L D A, SA, SZ) ; -- real types is T d i g i ts l 0 ; t y p e C 0 E F F IC IEN t y p e V O L T AGE i s d e ta 0 . I r a n g e 0 .0 - - d e r i v e d t yPe s s n e w IN TEGER ; '!T t y p e D 0 L L A R - Al i 1 s n e b /IN TEGER ; t y p e Y E A R - N U ' -- su0types r a n g e fON FR I; subiype 1,,/tEK-DAY i s D AY r a n g e 'A' . . 'Z' ; r s C H AR AC TER s u b t y p e L E T TER 72; r ange | IN TEGTR i s s u b t y p e C H A R - POSITI0 N -- nec0r0types is type DATE record : t{0NTH; l0NTH-NAlt'lt range I D A Y - N U 'l : IN TTGER range 0 Y E AR - N U H: IN TEGER e n d r e co r d ; s t y p e I N S R U C TI0iN r e co r r l 0 l 't RAIl 0 N 0 P c0 D t; (co;rtinuo)

10 0;

subtype I,tEK*DAY subtype l.EEK_END

is DAY rangel10N .. FRi; is DAY nange SAT.. SUN;

subtype SPRING is llONTH rangettAR.. JUN; subtype ARI'IY_0FFICER is AR|IY_RANK rangeLIiUIENAN .. GENERAL, subtypeFt00R-NUl is INTEGERrangeI .. 33;

s u b t v pe SPEC IAL-LIcE NS E NS E (DRIV I Nc is LICE =_ >c s0 p DE t c I A L ): su b t y pe VIP_ L IC ENS t is LICE NS T(DRIV INc =_ >C0 0); E VIp
Votttosaqui a expressividade de usarsubtipospara descrever o conhecimentodos tipos. A diferena entre tipos e subtipos pode ser reunida assim.usa-setipo para tepura, . ttlrjclosde espcies diferentes por classes distintas.Essaseparao muito etrita, u* uez t;uc Ilo se podem misturar objetos de tipos diferentes.Usam-se subtipos para descrever objctos tle um mesmo tipo, mas com limitaesindividuaissobreseus vatores. Objetosde tlil'c.rcntes subtiposde um mesmotipo podm ser misturadosnuma expresso e sados e Ittributlosa outrasvariveis do mesmotipo, contanto que se obedeam aslirnitaes. tt0

2000;

'1!'ftF"

'tl|F*

Tabela 7.1(continuao) . RtG I S T t : R I N E G Era R n g eI .. l 2 ; AD DRT S : SI NT E G E R ; e n drec or d;

t ype EU FFE R( S I I Z NT E : E G EiR s) re co rd PO S I T I O I N: NT E G E R ; ( 1 . S IZ E); VAL UE : S T RI NG e n drec or d;


- - array t ype .s t y p e V E CT 0 R is a r nay ( I 100) o F L OA ty p e COIF -I'ATRIX is a r nay ( l , . N , N ) o C OE FFIC ITN T; t y p e I NS RUCI0N_ SACK is a r r ay ( l . . S IAC K-S IZo t) IN S R U C I0N ; - - a ccess rype s ty p e P E R S 0N; ty p e P E R S ON-REF is a cie ss P ERSO N; ty p e P E R S 0 N is record NA IIE : SRING ( I . 10) ; S S - NUll : INTEGTR; NE X-0F_KIN: PERS 0N_REF; en0 rec0r0 ;

="'*ADAE 'ADA

de dados naslingus' e sada paratratara entada dominantes havertrs esratgias Parece gensde progamao: na idiade quo-uml de formatobaseiam-se do fonnato. As especificaes L Especiftcado de formato associada insto de entradaou sadatem uma d.escrio Su lq1![cl ^9 elp FORTRAN usado enfoque Esse e o usodo espaamento. dosdados layout dosvalores e PL/l. tom de figura,um item de dadodeclarado deftgura. Comespecificaes 2. Especfficaes dadoterianum dispositlvo quedesceve a formagueesse urnailusulde figuraassociada emCobol ePLll. aparece Esse enfoque de entrada e sada. do ltcnr especitlizador.Aqui o layout dosdadosparadiferentesespcies 3. Subprogramas ter,.portxemPlo,UP Podemos especializados. em subprogramas especificado de dados da para sadade cordcc para sadade inteiros e um outo subprograma subprograma 68. e Algol 67, Pascal em Smula apaece enfoque Esse cracteres. nooligadaa formsto OU no h nenhuma terceiroenfoquede entradae sada, Nesse traadopolo inteiramente e o layout dos dados de figuia. O espaamento especificao em Ada". adotado Esse o enfoque quetiver sidoinvocado. particular subprograma 8.1 IMPRrflR LJMALISTA DE PREOS paraimprimir um rolstrlo um programa a segui, consideremos discusso Em nossa do dador, simples dandoduascolunas O Exemplo8.1 ilustra uma lista de preos simples. indica o proo a segunda coluna vendida e quantidade item do A piimeiracolunaindica a problcmr Nosso preo.unitrio fixo. um assumindo-se conespondente, quantidade da comoestmostrada. geraessa lista de preosexatarnente
LISTA DE PREOS

: 1234 C 0D E ITE II APPLI CAT0R : tASY ITE I{ P R IC T: U N IT $ 4, 36

(contlnur)

tt

OUANTIDADE

PRE O

Aqui um inteiro impresso num campo de dois dgitos. No caso de s se precisarde um dgito, o dgito justificado pela direita. 8.2 USO DE SI,'BPROGRAMASESPECIALIZADOS O uso de procedimentos especializados para entrada e sada tem vriasvantagens . importantes. Mais importante, podemosdispensaros formatos explcitos ou as especificaes de figuras e incluir entrada/sadadentro de uma caractersticaj definida d Ada@, os subprogramas. Assim um programador no necessita aprendercarctersticas de outras linguagens.Alm disso, os detalhes de entrada e sada podem ser sumarizadosem termos j coecida, a chamadade um subprograma. de uma abstrao Uma outra vantagem dessaabordagem que o usrio geralmente querer definir subprogramasespeciaisde entrada e sada,particularmente adaptveis a urn..-a determinada aplicao. Tais subprogramas se ajustam perfeitamente com aquelesque so predefinidos na linguagem. Considere,por exemplo, as chamadas de subprogramas: (6) ; SET-C0L -- avance para a coluna 6 PUI ( "QUANTITY" ) ; -- imprimao cordodado

I 2 3 5 6 7 8 9 10 ll T2 t3 14 15 l6 I7 l8 l9 20

$ 4 .3 6 $ 8 .7 2 $ r3 .0 8 $ 1 7 .4 4 $ 2 18 0 $ 2 6 .1 6 $ 3 05 2 $ 3 48 .8 $ 3 9 .2 4 $ 4 36 0 $ 4 79 6 $ 5 2 .3 2 $ 5 6 .6 8 .04 $61 $ 6 5 .4 0 $ 6 99 6 $ /4 .3 2 $ 7 86 8 $ 8 30 .4 $ 8 7 .4 0

Essas duaschamadas sereferem a subprogramas de entrada/sada que sopredefinidos em Ada@. Considere, por outrolado: SPACE_0VER(7);-- mova 7 colunas para a direita PR I N-TI TLE-I NF0; -- imprimir informao ttulo
Essasduas chamadasse referem a subprogramasde entrada/sadaque so definidos por um usurio.
w i t h I _ 0 _ P AC KAGt; p r o c e d u r eP R IC E_ L IST is r s e I _ 0 _ PAC KAGt: p r o c e d u rePR IN _ TITL E_ IN F0 ls begrn (4 N E W-L IN E) ; S E I _ C0 L ( 3 5 LI ST") ; NEt l_LI Nt ; ; ) PU T ( "PR IC E S E I _ COI( 3 5 ; ) PU T( "- - - - - ----" ) ;

Exemplo g.l Um relatrio tpico

,l:'ffi#:: ilr","i,J1:lnjjf f,;.oi.",,to ;,d,"_ parmetro para in_


Considerea seguinteseqncia de chamadas de procedimentos: PUT (" IT t ' l c Q DE: 12 3 4 " ) : NEl ./ L INT: Ar;ui o procedimento pur recebe um argumentg. que um cordo de caracleres csse' c.rdo num dispositivode sada. e mostra o-*at.ento_seguinte, NE*_LINE, d como \iu(tl u terminadorde linha e avana puruu piO*a linha. o controre exato ae layout par itens de dado e itaoo por meio de parmetros

*r^*rlrra no Exemplo 8.2.A idiagerar rcstecaso queseuseum procedimento dedicado paracadalayotoperacionar tuatmente conceidiferenre. Se.quiiennos, ;;;-;;-pr";-,-l;;ir" J,i'ru,au, invoca-se um

uma soruo Ada@ a esse probrem"

de p'opii.-'J' c";i d;';;#;il'. ll 'J'ffi fllfl j::"'^ cmpo


PUI (DOI" LARS, 2) ;

seguinte chama.

N E t' l Nt ( 4) ; LI ("I TEl,C0DE l PUT : 1234") ; N TIlL i IN E; ("I lt ll PUT : I ASY APPLI CA O R,N ')t|{ ; tl l i t; pu ("uNI pRI Ct r94, 36, ') ; ilil,l INt:
0n0;

(contlnur)

,d

pn0( r'(jull p RINI ()0t HI ADt RS rs beg rn Nfl,tLINt(2 ); SiT C0 t(6); p UT ( ' , Q UAN I Ty ") ; SEr _C0L( 26) ; p U r ( " p R I C E , , ) ; NIIll.LINI; (6 ) ; pUT ( "- ___- ___, Str C0 L ( 26) ; p U T ( , , _ _ _ _ _ ,;, ) N E I , _ L I N T ; ) , St C0L end; proced urep RINI._p RI CES rs UNI_ pRICt,co ns t ant I NTt G t R: = 436; PRICE.DOL LAR S. c EN S: I N EG ER; Degtn fo r GROUp in l. 4 oop NEt/-tINE (l ) ; o r QUANIIT Y r n ( G R0UP*-5 4) ( G R0Up* 5)o o p { UNI T_PRI CE; PRCt = Q UA t TI Y = pRI CE D0 tLARS / 00; CTNTS = pRI CEr em I 00;

PUT ( I EI '1' I NTI G ER) OTOC E dUTE ; prrcedur ePUT ( I Tt l'1: FL0AT) ; procedure PU I ( I TElt l: SI RI NG;) espectivamentepara imprimir a representao em cordo de um inieiro, de um nmero de ponto flutuante, ou de um cordo. Os corpos de cada procedimento iro diferir porque eles iro dependerdo formato para imprimir as trs espcies de valores.Como mencionado anteriormente, o uso de dois ou mais subprogramascom o mesmo nome mas diferentes tipos de parfunetroschana-so sobrecargo. podem ser chamadosda maneira convencional, po Os programas sobrecarregados exemplo: -- chamadapara impiimir um inteiro PUT (I + I ) , -- chamada (Y) ) ; para imprimir um nmero de ponto flutuante PUT (SQRT P U T (" QU A NTI TY") : - - cham adapar aim pr im ir um cor do A idia central aqui que essas trs chamadas so realmente chamadas de trs subprogra. mas diferentes, cada um com o nome PUT. A escolhade qual procedimento PUT enr par. ticular se quer invocar pela chamadaficar determinada pelo tipo de argumento. A sub. rotina escolhida de modo que o tipo de seu parmetro bata com o tipo de seu srgu. mento. Parmetros de Substituio Automtica Considereagoraas seguintes chamadasde procedimentos:

PUT(DOLL ARS. 2) , PUI ( ' . , ) ; . l0) t hen i (CENIS PUT( 0 ' ) ; pUT ( CENTS, 1) ; Nt |. lLr Nr ; e lse PUT(CNI S, 2) , NEl, l. I I NT; e nd r, e nd o op , e n d oo p; end; begtn - - l,ain p rog ra1 1 P RNI.IILT_INFO; P RINT COL_ HEADTR S; P R I NI PRICES; e n0;

str coL(9); pur(QUANrrry, pu(,$,); 2), sEr-c0L(26);

PUT(DOLLARS, 2) ; --,imprima DOLLARS comum campo de 2 caracteres delargurr padro comum canpo delargura PUT(DOLLARS) ; -- imprima'D0LLARS queimpriml o Temosaqui duaschamadas tem-se do procedimento PUT,e em cadacaso valor de um inteiro.No primeirocaso especificou-se um campode doisdgitos.No seguncont do casono se d nenhumoutro argumento, devendo o inteiro entoserimpresso uma largurade campopadro.A largurade campodo procedimento dita serum padautomtica,no sentidode queseeleno for fornecidona chamadr, metro de substituio Em Ada-, a largura padro um valor padror,no corpodo procedimento. de um intol. de suarepresentao decimal. ro o comprimento DE ENTRADA/SADA 8.3 PACOTES PREDEFINIDOS por vriosprco. paraentrada soexpessos e sada de Ada@ completos Os recursos (veja referncia). So: 14 do de predefinidos manual tes Captulo r O$pacotes genricos SEQUENTIAL-IOe DIRECT-IO r O pacote TEXT-IO I O pacoteLOW-LEVEL-IO delrimitivosdo ene DIRECT-IO definem um conjunto SEQUENTIAL-IO Os pacotes primrioparanr a arquivos. O pacoteTEXT-IO, de interesse tradae sadaaplicvcl

Exemplo 8.2 Programa para imprimi um relatrio simples

O assuntode subprogramasspecializdos traz baila o uso de duas caractersticas previamentemencionadasde Ada@ que so amplamente usadaspaa entrada e sada:so os parmetrosde sobrecarga e de substituio automtica. Sobrecargade Subprogramas Em muitas situaesde entrada/sadaqueremos definir a mesma opeao conceitual com argumentosde tipos diferentes. Urn-casotpico uma opera paia imprimir diferentestipos de valores. Considere os cabealhos de procedimento 8

87

ilqui, del'iteos prinitivosde entradae sadaem forma legvelaoshumanos. O pacote LOW_LEVEL_IO define operaes que atuam sobredispositivos fsicos. Parausar esses pacotesvoc precisa sabercomo "partianlarizarum genrico",significando que voc precisafornecer parmetrospara completar sua definio. Em geral, uma unidade de programagenrca um molde para uma classe de unidadesde programas. Como tais, as unidadesgenricas no podem ser usadas direamente.Em vez disso, exemplos(ou cpias)soobtidos pela particulaizaodo genrico. Considere, por exemplo, o pacote genricoSEQUENTIAL_IO. Essepacotedefine uma coleode subprogramas paratrabalharcom arquivosde um mesmotipo. Parausaro pacoteparaum dado tipo, o usuriodevefornecero tipo, como no caso: p a cka geCHA R_I 0 is n e w ST QU EN T IAT _(C 1 0H A R A C TE R ); Esta uma declarao do pacotechamadoCHAR_I_O. Essepacote derivadodo pacote predefinido INPUT_OUTPUT, usando CHARACTER como tipo dos elementos de arquivo. O pacote predefinido TEXT-IO um pacote cuja parte visvel contm subprogramas para controle do layout (como SET_COL e NEW_LINE) e subprograrnas paraentada e sada de caracteres e de cordes (como PUT e GET). A parte visvel do pacote TEXT_IO contm vrios pacotesgenricospara entrada-sada de outros tipos (como PUT e GET para os tipos numricos).Em particuiarcontm os pacotes genricos: IN TEGIR IO FL OAT.I O FIXEDIO E NU1 4 E RA T I O N_I O Para fazer realmenteuso desses pacoteso usuriodeve fornecer uma particularizao do genrico,dando um tipo especficode inteiro, de ponto flutuante, de ponto fixo ou de enumerao. Podemos ter, por exemplo pa cka g eI NT - I - 0 is n e w IN T T GE R -I0 (IN T EGE R); pa cka g eC0I N_I _0 is n e w EN U f,IE R A T I0 N _ I0 (C ; 0 IN ) Depois dessa particularizao ("instantiation") e de clusulasase apropriadas, pode-se aplicar.PUT e GET a valoresdo tipo INTEGER ou COIN. provvel que uma implementao de Ada@ venha a ter seu prprio pacote de entrada/sada, e isso o que assumimos nesta introduo Ada@.Considere o esquema de nossoprogramasimplesde uma lista de preos: w i th I-0- P A CK A G t ; pro ce rl u r eP RI CT _LiS Ii s u se I _0_P A CK A G E : end: Aqui se assumia que I_O_PACKAGE tem definiode subprogramas para entrada/sada tti

o l l j cto s tkr l tl xr IN 'l '[Gl :l {, c ttb j cl o s tl o ti p o l r l ,OA l ' Il si ttttl or tr t l c c a r u c t c r c s ,c o r c l t )cs, issttscria cquivalcnte a a vcrso predefinida clc Aditto),

wrth IEXT-10; procedure s PRICT-LiST use ItXT-I0; IO( INTEGER) package is newINTIGER INI I-0 ; package is newFLOAT_IO(FLOAT): FL0AT-I-0 I-0; use INT-I-0, FL0AT
end; evitamosnestaintroduoa Ada@ ' o que, por motivos de simplicidade, Nota Ohvilttttcrtlc preliminarde entradae sadade Ada@. Issocompletanossadiscusso lrt' j ritzovcl iniciao tem uma voc assim certeza muito maispoeriaser dito, mas col rebrrtclrt, de manual 14 do o Captulo veja-se o restante, Para funciona. bre como tuo

nq

caractcrcs: dedecodi'icar datarefa Considere o seguinte esquema ts task DEC0DE (C: i n CHARACTER) ; entry SEND-C0DE out CHARACTER); entny RECEIVE-CHAR(C: end; rs task bodyDEC0Dt -- declaraes locais
oegn -- instruespara decodificar caracteres end: Estamos todos familiarizados com eventos que podem ocore simultaneamente, talvez correlacionados.A operao de vrios trens em momento numa rede de trilhos, o tratamento de mltiplas linhas de clients num banco e a operaosimultnea de mltiplos tlispositivos num sistema de computaoso exemplos tpicos. Os recursospara pocessatnento em paralelo oferecemuma estrutura conceitual para tratar esses problmas. Nossadiscussoaqui far uso freqente de um mesmo exemplo. Queremosesceve um progrrmapara decodificar mensagens. No nos vamospreocupar com o que as mensagenssignicam. Foram geradasem algumaremota estaode campo, decodificadas,e em seguida impressasnuma impressoralinear. Queremosem-particular definir trs unidades de programachamadas GENERATE_CODES, DECODE, e PRINT_MESSAGES. . GENERATE-CODES: Essaunidade de programa l dados codificados de virias fontes, e passa-osadiante, cdigo por cdigo. r DECODE: Essa unidade de programa recebe digos, decodiica-os, por algum mtodo que no nos interessaagorasaber,e transmite os caracteres decodificados. r PRINT-MESSAGES: Essaunidade de programa recebecaracterese; quando ob. tm uma linha plena de texto, mostra a linha numa impressora. I)resume-se que os cdigossejamrepresentados por caracteres. O ponto importante de nossoprograna que as trs unidadesde progiama so conccitualmente independentese podem progredir com sutsvelocidadesprprias. Exceto em precisade ser decodifilx)ntos especficosde sincronizao(por exemplo: uma mensagem cada antes de ser impressa),no nos interessacomo a execuodasinstruesindividuais tkr programa entrelaada no tempo. 9. I APARNCIA TEXTUAL DE UMA TAREFA tma tarefo uma unidade de programa que pode ser executada simultaneamente ctlttt tlutras unidades de programa. Quanto forma, uma tarefa rnuito semelhantea um lxtctlte. De fato, tanto a tarefa quanto o pacote oferecem uma encapsulao de um servio. A tliferena principal entre os dois estem que o corpo de uma tarefa s executado tlcpois que a tarefa seja ativada por uma outra unidade de programa. Uma tarefa pode tatnbm conter entradas.Externamente as entradasse precemcom procedimentos,mas tluarrdo as tarefas so chamadaselas especificama sincronizaoe a comunicao entre rrrna clramada e a tarefaque foi chamada. 90 Essatarefa tem duas entradas,SEND_CODES e RECEME-CHAR. Como no casode pacotes com dois procedimentos viveis, uma outra tarefa pode enar uma chamadau de entrada.O comporuma dessas duas entradaspor meio de uma instruo de chamada tamento da tarefa, bem como o efeito de uma chamadade entrada,vem especificadono corpo da tarefa. Vamos deixar os detalhesdo corpo para um pouco mais adiante Uma tarefa pode ter sua parte visvel vazia, isto , no oferecer qualquer servio u cott outras unidades.Uma tarefa assimpode, claro, ser executadasimultaneamente outras tarefas. Pode tambm utilizar os servios de outras tarefas. Considere a tarel GENERATE_CODES: task GE NERATE- CO DES; ' DES task body G ENERATE- COis declaraes locais -begn -- instrues para gerar codigos de caracteres end; e PRTNT MESSAGES:

9
.,li'

,*o.EssAMENro EM 'ARALEL.

task PRIN-I'ESSAGES ; is task bodyPRINT-'ItSSAGES -- declaraes bcais begin -- instrues para imprimir &racteres end;

serexecutada$,concorrentenlo partesvel,maspodem tarefas no tm nenhuma Essas podem tambm chs' ver,elas Comovmos DECODE. te uma com a outrae com a tarefa DtiCOl)E. da tarefu marasentradas

I
llnrnNotr Sobre TiposdeTarefas (br', bi mencionado, astarefas.so decraradas demaneira semerhante dospaco rcs'isr, c'm uma.ecra'ao de suapartevisver . ** u*;;;. ate* disso, um declaratr de rarefa podeespeifi.*u,n'ip, d"ii"^;;;rdJ desse ripo podem ser dcclarados da maneira os objetos . urn tipo de tarefapodemno seratribudos |s.ua-I. comparados por iguadade, embora possam sercomponentese 'u conjuntos ou registros, bcmcomoargumentos de um subprog.*uPodemos por exemplo descreve um tipo de tarefapRINTERbomo task type pRINTER; task bodypRINTER is -- declaraes locais begin -- instrues para imprimir cacteres end: e declarar nossa tarefaPRINT-MESSAGES comoum objeto de tarefadesse tipo, como na declarao de objeto: pRINItR; PRINT_t'tESSAGES: No queconcerne ao manual de referncia de Ada@, descreve-se o comportamento dastarefassupondo que astarefas sejam a..r.ruur urlndo um tipo de tarefa. as tarefas euando sodeclaradas comono nosso xemplode decodificaao, isi J, ,.irpor, presume_se um imptcito e, em deco'nttu,u,n" a"ariuini-i*piai'de um objetode tare['s: No nosso exemplo,de decodificao, bem comoem nossa discusso geraldastarefas,nonecessitamos e tarefas O, tipoJ.*pii"itor. procedure t'ttSSA(I t)l| ()l)lN(; 00t]ll;, task GTNERAT[ ts task DtC0DE (C: in CHARACTER); entry SEND-CODI out CHARACTTR) ; RECEIVT-CHAR(C: entry en0; task PRINT-'IESSAGES ; -- corqosParaastarefas begrn ACTIVATED''); BTTN HAVT DECODING I'lESSAGE FOR PUT(''TASKS en0:
Os das trs tarefasresultaem ativaodos corpos de cadatarefa nontcada. A elaborao copos podem ser executadosem paralelo entre eles e com o corpo do proccdinrcttttl iniciante. Quanto terminao,uma tarefa normalmentetermina ao atingir o fim do c<lrpo da tarefachegaa seu fim, ela cspern da tarefa. Quandoa unidadeque contm a declarao tenham terminado (a menos, claro, que isstllcttlttt at que toda as tarefasdependentes pelo trrrti' ocoriido antes).Em nossoexemplo acima,o procedimentoprincipal esperar GENERATE-CODES, DECODEe PRINT-MESSA(;lis. no dastrs tarefasdependentes acima abordamosa noo de vriastarefasexecutandoem paralclo. Na discusso um ponto de vista conceitual.As tarefasseremou no fsicatttcttlc Isso essencialmente Ntlttr que tiver sido determinada. em paraleloir dependerda implementao executadas sts Nttttt paralclo. em real.execuo pode ocorrer uma sistemade multiplos processadores, rlittkr ativa tttttlt estar pode realmente tarefa somente uma processador, tema de um s instante.

jlff,ti#:nff:r:

9.2 ORGANTZAD DE TAREFASMLTTPLAS kmbramos de nossas discusses depacotes que,ao entrarnumaunidade deprograma que contenha um pa:ot:: o corpodo iacote 6 nouuetjJ.r"f0" imediatamente a o.pacot' Depois i*o, o'pu*te puramen te porsiw,nosentido 3i::::l*izar de que executada'

9.3 COMT]NTCAOENTRE TAREFAS devehaver algumaforma tlc ctr Em qualquer sistemacom tarefascorrelacionadas colt que os trens sobrea redede trilhos possatrt no queremos municao.Evidentemente cortlli' dir, podemosquerer garantir que dois funcionriosde bancono faamtransacs dc uttt tantesna mesmaconta, ou podemosprecisarde coordenaras aesdos dispositivos de computao. sistema de entrlrtlit. entre tarefas por meio de chamadas A forma bsicade comunicao o corpo da tarefaGENERATE-CODES Considere

"

mnos que u- dos seus ,uprogru*^ visveis'se-

Por outro lado, ao entrarem uma unidade deprograma quecontenha umadecrarao de tarefa,o corpo da tarefa ativado*tL o, ,.r..ir.ut.j. instruo que irirn.ir" sesiga parte declarativa. Depoisdissoa t."r" ,rt*a orr.*;r;"iio " o" qu" podecon_

li:,"'ff:;;ij"'"'ro

com . unia"" a. p'og'u-u qu.;;;i*o' Jqurquer ou.

Assim,Daraoreanizarrta:fasmltiplas,precisamos declarar objetostarefas numa unidade de progamai considere o seguintiesquema, , o do nosso progrrma paradecodificarmensagens. 92

is C0DES task bodyGENERATE CHARACTER; CODT: NEXT begin oop 93

ln$trues parareceber dodos e gcrurum valorpara 1EX_CSDE DECODE. Sr{D_CODE (NEXT_CODE) ; -- entry cal I end loop; end; o da tarefa PRINT_MESSAGES: task bodypRIt|T_tTtESSAGES is LItE_SIZE : constantINTEGER ;= 72; NTXT_OHAR : CHARACER; LIilLpOSII0t{ : I{TEGER; LII'IE : SRIf{G (I LINE_SIZE); begin LINE_P0SITI0N := t; I oop : = NEXT_CHA. if LINLP0SITION < LINLSIZEthen LIt|Lp0SITI0N := LINLPOSITI0N + l; ese PRIN(LINE); LINLP0SITI0{ := l; end i f; end oop; end;

bask body D tC00l lr r CHR( H, I ll C OD E C . HAR; begi n Ioop do ( C: in CHARAC iR) accep t St ND CO DE C 0 0E : = C: end; instruespara decodificar o valor de C}DE e produzir o valor decodificar em CHAR ( C: out CHARACTER) do accep t RECEI VE- CHAR = C : CHAR: en0: end oop; eno:

REcEivE_cHAR (NEX_CHAR) ?!ggDE. ; -- entry cal LINt(LI'tE_POSII0N)

cdigo po,r ntcitl Essatarefa tambm entra em lao contnuo, obtendo repetidamenteum decodificu0o de o algoritmo aplicando p. SENO-CODE, de uma chamadade entrada para RECEIVE-CHAR' umaihamada teceter ao decodificado valor e transmitindoo s chu' correspondentes aqui se centra nas instruesde aceitao Nosso interesse de corptl de um parcial aparncia a tem madas de entrada. Uma instruao de aceita da enlrutltt da-especificao parte formal repete.a procedimento.A instruode ceitao instruott Essas duranteo rendez-vous' a seremexecutadas que seguidapelasinstrues velr' accss esto parmetros soa regiodo texto em que os por do ,id o OefltaOas ctttl' " " que chanlu tarefa a de dependendo de um rndez-vous, Iduaspssibilidades tir uma instruo de chamadacomo ( NEXT- CO DE) ; D TC ODS EIN . D- CO DE pcltt tlttcltt sejaalcanarlit de aceitao antesou depois que uma instruocorrespondente st o rendez'wnrs outra. pela Quando espera primiiro l chegar O'BCOS. chamada, Quem clrit' tarefahamada;quottt da chamdad entradaso paisados realiia,os argumentos tltat que a tarefa chamadacomplete as instrucs u rru teriporariamentesuspenso a vtllta de passados ento so sada de parmetros qr.,.irqu., cludas entrc'do e end; r ulrlll independentementc proceder a voltam tarefs as ambai Finalmente qu. .nu.ou. da outra. pol um rendez-vous. realizadas vemos assimas trs noesbsicas de entrada,e a tat sincronizao: Atarefa que chama deve enviar uma chamada de aceitao' uma instruocorrespondente precisaconsegir refa chamada e transnli' e assimreceber t Troca de Informoes:A entradapode ter parmetros, tir valores. a mesmaentrada,s uma ptl' t ExclusoMtua: Se duasou maistarefaschamarem dc crclavcz. de seraceita numa direo.A tarefa que chamaprecisa-sabcr tctil ll()tlcilpenas Note que o rendez-vrtus chamU' po outro lado.aceita tarefachamada, t'ntiada. A l o no*, da tarefaquc cgntnt

l:i:,'.i:',t,ii.'#jffi

Aqui tambm temos asauur.rr*roOr. DTCODE. SEND_CODE (NEXI_CODT)

cdigo eimprimindo rextos (Nota: i:l?"':;,ff,-oo


ent.uaa,

; DECoDr. RrcErvE_cHnn rruiii_nnl ;

;.:x:1,xit,:i;j;m,""iiforma
Nos procedimento

de uma chamada de procedi-

cs(dadas poruma instru-ao o_r u""iiffii"*r..rruaas pela tarefa l'' lmdisso, qle contm asaes s rao rxecuia^ q"."g" , tur. .rr".'estiver a entrapreparada
rrcfa DECO,* -_" 4 completamosnosso exemplo com o corpo da

d,,cxs.,,i.aJ;ffi ;"".r:J,ff J]#'",j'^;:;";';3:,*:,1ilff i::l

*;;;#":1#1:poo._,,n"i ";.,:ffi ,1r:flx*,f ff :,#i##j*ffi Para ilustrar esseomportarnento, c

95

das tlc (ll'lllqtlct-t"1.1,,-1 .'1t.rsltssirtt cnr.gcralum padro de conrurricatles de muitos('orno consccliiclrciu, l)itril-ltn. catlr crrtradipories51i,senaochamaJa por uma fila de tart''s. (t:rd. unradcssas cr*rrr'd.s processad dc acordq ;;;;rm de chegada. l)evc-scobservarquc uma tarefa s pode "rn, aceitaruma entradade cadavez. Embora rti*r ilustrad. cm nossoexemplo,pode haver vriasinstrulo", " parauma mestttit ctltracla'vemos aqu uma claa distino ".rr"o entre entradase procedimentos. Todas as cltamadas de um procdimentoexecutam' mesmo corpo, enquanto as chamadas de crrtraclas no precisamfaz_lo. Varn.s agorarever todo o programacompleto para o problemade decodficao. o prograrna esrdado no Exemplo 9.r. o procedmento princp"isacE_DEcoDlNc cottoaa a'odeclarando as trs tarefas.As trstarefs opru- Jante independentellcltc, tnas so, claro, sincronizadas por meio das chamdas s entradasda DECODE. (rr'o foi dado, as trs tarefas operampru ,arprr. Assimo programanuncatermina. 9.4 ESCOLHERENTRE CHAMADAS DE ENTRADA ALTERNATTVAS Em nossatarefa acima de decodificao, a resposta a uma chamada de entradadeve scr sempreseguida por uma resposta a uma chamad da outra ."tr." e,n ;"^-.pii.* esesseno precisanecessariamente ser o caso.E se tivermor ua, ou mais entrad,as, e qulsermos responder primeira chamada, no importa qua o.o.* Mais geralirmeiroz llente' e se estivermos preparados para aceitarqualquerdentrevriai chamadas alternativasde entrada? vamos voltar, por exemplo, ao nossoproblema de decodificao. observeque uma vez que a tarefa DECODE tenha recebido um c^digo d, .;;;;;;:; q", esperar rermi_ rar uma chamadaparatransmiriro valor decodifio *i;;;;;"'rrocessar qualquer outro cdigo. Gostaramos realmenteque a geraode cdigose a impresso de mensagcns posseguissem muito maisindependenteriente. vamos supor que o processo de decodificao se realizerelativamente rpido. Em particuar,se nossoprocesso de impresso lento, gostaramos aindaassimde aceitarum j,rro de chamadas de entradapuruouo, cdigosd-e entrada.,qrt.inuu-ente, gostara_ r'.s de aceitar mltipras de entradaiara imprimir ,-igoil;r..ebidos enquan,amdas to esperamos por um outro cdigode entrada(tuw", retardado). parasuavizar essas variat)cs podemos introduzir uma rade memride caracteresnu't*iincooB. Mais imnossos propsitos,enquan to a reada memriano estivernem cheianem l]:l::*-:: li* vazra, queremos aceitaruma chamada de qualquerentrada.
pr ocedure I'IESSAGE_ DECO S DI NG t ask GNERATt C0 DES; t ask D tC0Dtis entry SIND_ C0DE( C: in CHARACTER) ; ent r y RECEIVT_CH AR( C:CHARAC ER) out ; end; task P RINT ilESSAGtS; l. ask bod y GENERAIE C0D ES is N T XT CODE: CHARAC TER; heg n oop

duts -- lnstrucs 1xm reccber -- e gerur um vakr Pra N[xt ooDt c0Dt c0Dt1Nx 0Ec0Dt. sEll0 );
e n d I o o p; eno; is t t a s k b o d y DEC OD C O D EC . HAR C : H AR AC TER ; begtn Ioop (C do) a c c e pt SEN D - C 0 D E : i n C H AR AC TER := C ; C OD E end;

paradecodificar o valorde C1ot -- nstrues em CttAR -- e produziro valordecodificado


( C : o u t C H AR AC TER do) a c c e pt R EC tl Vt- C H AR C := C H AR : en0; enCloop; end, s t a s k b o d y PR IN T- IIESSAGES :- - 7 2 L I N E - - S IZE . c0 n sta n t IN TEGER N E X T _ OH AR : C H AR AC TTR ; : Ntl tl TtGtR L I N E - P 0SITI0 ; : STR IN G( 1 ..L IN E- SIZE) ; IINE begin := ; L I N E - P 0SITI0 N ooP ( AR N EX_ C H AR D E C OD R E. EC TIVE_ C H ; ) L i N E ( L IN E- P0 SII0 N:= ) N tXT- C H AR ; < L IN t SIZE th e n ! L I IIE- P0 SITI0 N +1; : = L IN t P0 SITI0 N L IN E- P0 SII0 N else P RIN ( L IN E) ; := 1 ; L IN E- P0 SIII0 N end i ; e n d o o p; end; . begtn BITN AC TIVATTD ") HG AVE t'l TSSAGE D EC OD IN FOR P U T( ''T A S K S end;

Exemplo 9,1 Uma soluopara o problema de decodificao

(continua)

O mecanismo bsic<lparu cscolhacrrtrc chanradasde cntrada a irutrulo "rsl00t" Considerc o seguintecsqucnu;

e1

:){,1 t,(. L

,.tr .t( l {.r ( .;r ,l r t'1i :r r l r .l n:,nr l tr l o r r ,l r r r . ft.tl r t

(' rrt rr ()l I I l , t t t t l rrt rt t t t t n t l (.

lNltl rl t t t ' . t r! rl r

i l i l l t (, 1 i l (l o o (' \ l l i l \ r} l } ; l l , l o l )l o \ l l l l rrl . l l ; l l l t ' l t t l o r' v ; t l o t t ' s l:ttt'l;t rh r l N l N l )l X r' rl o (l l l (' (l l ; t l l ; l

, l : r' t ( )[ l N I

i (( ; r pt S t ND C0D t (C : rn C H AR AC T Td R o) end: 0r a cc epr RE CE I V T_ C H(C AR : o u t C H AR AC IER ) do e n d; e n d se ec t ; ljnra tal instruoaceitauma chamada sejada entradasEND_coDE ou lm particular,quandose chegaa estainstru",;.""t;;;*-d;;r;;;;.r";; RECEIVE CHAR. l. Nenhuma entrada foi chamada: neste caso, a tarefa suspensa at que uma das sejachamada, e ento processada a instruoe aceitaa conespon::llXl^ 2' Uma (e apenas uma) entradafoi chamada: nestecasoa instruocorrespondente de aceitao imediatamente processada. 3' Ambas entradasforam chamadas: neste casouma das entradase aceita.A escolha determinadaarbitrariament'e- quarquerdas duas poa" ,"i u escolhida. ('.r'o. indicado acima,, s queremosaceitaruma chamadade SEND coDE sehouver es_ ltito bastantesobrandona ueade memria. srrnunir,n.i"*,'ir"*os aceitaruma chamadade RECEIVE-CHAR se houver caracteres na readememria.Esses requisitos silo tratados com condies qveguardam as arternativas de u-u inrtruao ..serect,,. Considereo seguinteesquerna: se e ct w h e nCO UNT < S T 0R A G L S IZ = E> a cc ept S t ND_C 0 D(C E : i n C H A R A C T Ed R o) e n 0; 0n wh e nCO UNT > 0= > a c c ept RE CE I V T _ C H(C AR : o u t C H A R A C T Ed R) o e nd: end se e c t ; As tlrticasentradasque podem ser aceitas acimasoaquelas cujascondies de guardafortrrr uvaliadas como verdadeiras. Finalmente notamoi, como"antes,qu, u-u instruo rt.ila,grtle serseguida por instrues a seremexecutadas depoisdo irdrr-rour. 'l'trtkrs os pontos acimaestono Exemplo 9.2, umaso revistada tare-a DECODE l;ttlltartlcritlrmcnte. Note aqui que os caracteres estoarmazenados no buffer, de maneira 'rrcrlur. o bul'fcr rcr' tl.is nclices, um lN INDEX indica;do ; ;;;; para . prxinr<r )t{

N r tl ; t t t t rt : , tl ttt;t t t l c

,tltt;tlt/.;t;lo 1,,.,,r 1x'tttttlt':

l l l ( \ \ (' f t l l l t

l o ; ' rr r; t t r'

l x ) \:,l v ( '1.

l) l: l l'. 1Al{lX) S ' , 5 l ' S P l 1(' l Fl( 'A( 'AO t lt ( ( )( 'lt t t lr {r t r lt 'lt 't t t Pr(t'slx'( lur cl'llx) r ut rit t lct vt t lo t lc A t::rP :rc it lur lcr clt t r t llrrrr r r ur
rrrrri l l rs l rl l l i c a tc s . l l tl c tnos < l ttc rc r i ttl c ttt)rl x ' l l tr' x (' (l l i t() l )()t tl ttt l ttl r' tv :tl l rl r' (l uc I0r 0s l )c ti u (l tl c (l t t' t' tl tt t' v c l l l o i l t()l tl (' \' :1. r' ,' ,i ' rr l x rtl c l ttos i .v('nl () tl l () sc rc l rl i z ar tl urantc unt i rrtc rv al o tl c l c tttpo rc tl ttc ti tl o, (otttl tt l tl l i ttl ttl t:t1l o rl tl r' r, rrl r. nrbos cl r s os l l oc l c l tt s c r tratados p()r tl l t i tts l rtt l i o tl t' tt' l l tttl rr. ('orrsi tl t:rc por c x c tttpl tl a i rts tru i o dc rel tartl o' t.l l ('('nt t,.rrr;rr A l l crrurl i v atttc tttc

rl r'l ,ry 0 0 ,

" dr rlay 0 0 sr : ronds :

oe r l tt;tl ,t l ,ttr 'l ,t . \ t . r p r c s s t i os c gu i r r l ca o r cta r d o r 0 p r cso tta o tt tttcr o ( l e su i u l ( l ( ) stl ttr l tttl tl e p o r r to 'i xo l ) ( l l A'l l ON . l , , r : , u s l x t r i i l.its . sacxp r css o d o ti p o p r e cl cl 'i n i d o ( 'r r r r r o r r r r r ai r r str u o u ( '( '( l r t, u n r u i r r sl r tti od cl u .v Po tl c tl co r tct co ttto l tl l cttt;tl tv,t r r r r r r r ri r r s t n r i o sc/r ,r 'l .c p o d c tcr u l a g u a r d a d a n ta r tcl r au stta l .IJr ttl rl ttl ttr sl tl l ;l l r l r 't,' Lrrrlo ti rrslrta p a r a p r o vcr u n a i r tte tr u p o p a r a u r a i ttstr u i i o scl cct. Se l t( 'ttl l l l ttto l l l t( l csp cci l 'i ca tl octtl , l l r t:t l l \l ,t 'l r ' l tt t t t t r l r '. t 1 , t ) u st i v cr o cr l r r i d o tl cn tr tl d u i n tcr va l o i l c tctttl - l o f nr(,()(.s rlrrc sc seguircnt conslruio dclay scr cxecutada. Sc ocortc tulnrttntr" l'r,l,l |l , tttl o o tt'l i tttl ,r t'ti tl ttt'l ,t,l ,',' r , r r ) u l l t l r l l c r r r ati vaa r tte sd c cxp i r a r tl i tttcl va l o d c tct- tt1 l tlo . r r n : t r r r l i os c l c ct cxe cu ta d an o r ttta l r tr ctttc. ( 'o r r t o c x c r tr p l o va n r o s r cvi si ta r u r a r ,':z n ta i s tttl sstlp r o g r ;tl i t tl e tl cctr tl tl tt.ti l o r , 'l l l r r l r r ro p r o ccd i r n cn to PR IN 'f cl ta r n a d op cl a ta r ca PIl N 'l M l :SSA( i l r S. I'sl ,'r ttl r p t,r t,,rrtrt tl t'l l ttl t;l i ttttttt,t 1 , r . r r r rp r o t l c r l c fa to ch a r n a r u r n a cr r tr a d a t.l N l l ) l l N 'l 'p a r l t a i t1 ttt'sr ;:to st'tt;l o l tr ttt r n l ) r ( , \ s ( ) r tt l c c l cl ci a . Ob vi l ttn cn tc tt;otl ttcr cn tr l sn ta l tl ct :t cl ttl ci i ttttci o ttl tr ttl o l i cl tr scttt ( l tr l ',i ll xr t l l l r t l ' l l " t .r tttl cr \ { r n : r ( l l P l r r ai r np r i r tr i r ,e sl r ct:r a l r n cr r sc tc a i r ttp r csso n l ttt,,. p ,,,1 ,'t, , 1 , r l t . l r 'r r p o c o r r si d cr vcl I'o t i vt't st'ttt tl tl 1 ,',,t. . r r i u l n l l a tl o , sc l t i tttp l csstttrcsl ( l u ( . l tl tvl ttl :t ( . s l ) c t i t r l 'i t;tr c co tttp l cl l ttttcttl t' p sr a o u c a cl ttl ci a t '. r ur tt scg u r r to r r ,h lrrrrlv ) t( l 0 t) t t s
ro;r,;1,,rr1, IN l tGtR , {r ^ ( tSI1 i 1.0|NI IN ItGfR r,rrtgr' 0 N l N t ) tx, {) l l IN I)tX l N It(i R r,tngr' r (il c H A R A (]TIR , R l r, ll A 500, S I0R A (;t S l l l S 0R A ({ :l /l

. , t ) l i ( ;t R t
! ' f'l r Il i l N I

,rf ,y (l

l l{ ll S I(R A (;[ S l /[ I o (,11 i A

) ,

l N t N l ) lx i l t r I N I )I X
lrrrrlr ,,I' I r ,( l .

1, l,

w l rl rr ( 0 l l N I

. ' { )l t ^ ; l

Ll,'l
{r rrillllilt{l

rrq

, r ( : ( ; ipl S il i DC 0 D t(C : rn C H AR AC T dER o ) CO DE := C: end: -- instrues para decodiicar o valor de COOI -- e produzir o valor decodiftcado em CHAR S T 0RA G E -AR EA (IN _ INC DH EA X) := R; CO UNT + 1; : = CO UNT IN-INDEX : = ( I N_I NDt Xm odS T 0 R A G E *S I Z +l E)
0r whe nC0 UNT> 0= > a ccep t RECE VE_CHAR ( C: out CHARACT E dR o) C := EUFFER( 0UT_I NDEX) ; e nd ; C0UN - l; : = C0UNT 0 UT-IND EX : = ( 0UI - I NDEX r nodS O RAG E _ S I Z +E l ) end see ct; end oop , e nd; l,)xemplo9.2 Colocarum buffer na tarefa de decodificao Considere agora-a tarefa PRINTER_DRIVER

0 n d l f,

0r

PUI (t litl ) ' IN(" I I{ (0 n CHA whe delaY l0 0; -- poraa corrente := FALSE; GOING CHAIN

end seect; end oop; end; rln intptcttlorn dacadeia a operao e controla LINE-PRINT a entada contm listataref indicada. actma rnancira r/ a instruo Em particular, then i not CHAIN-G0ING deay 1.0;

ii, ,no
Por outrtt lrtlrt, oonrl' para ativar a impressora. o retardo deliberadonecessrio cspccica rlcrc a instruoselect: sel ect do LI NE*lt 'I AG E) accep t LI NE- PRI NT( L: en0: 0n

task PRINT_DRIVER is .(L: in LINE_Il'tAGE); entry LINE_PRINI end; c scucorpo: task bodyPRINIER_DRiVER is LINt : LINE_I|,|AGE; CHAIN_G0ING: B00LtAN; begrn CHAIN_GOING := FALSE; loop select (L: in LINE_IllAGE) acceptLINE_PRINT do LINt := L; end; if not CHAIN_G0ING then -- dpartidana corrente delay 1.0; CHAIN_GOING := TRUE;

=> w hen CHAI N- G 0I NG de aY 10. 0; end sel e ct ; tlelttytl8od nll para o LINE-PRINT, a itrstrukr pendentes Enquantohouverchamadas o tcluttkrrptl scgurrtkrs, l0 de para LINE_PRINT dentro vad.Se no ocorrerchamada rhlrulr scgttttrhrr l0 pclo ntcttos se cxpiraretn parada ativado.Assim a cadeiasomente impressa. sido tenha linha cluea ltima UMA TAREFA 9.6 INTERROMPER t l . clllf l quc st l t lispit r ur lrllut dc lt ar dwar c cxist cnrint cr r upt or cs E m mui tos si st cm as q'OP puru.tr sislotttu da rlooilrll podemos, bot{ltl unt instalar querr por excmplo, eventos. 16lltllllll ritzo qullertt(|| ou se por irlgttrnrr nruisc(rtligos, Sc no sc for protluz,ir ficao. turels. todus us c cll0crrutolt o hot60 S'I'OP culcanios noss, progrtna,

t00

ilB|.tfrECA,JAC|NTO UCHOA,

t0t
,'4

:dl,.,.ii,il;:"uo"o*

os irttcrrupttlrcs tlc ltardlvare sotrata<Jos muitosimplesmente mterpretando-os corr*rctru.ratras ur r"':r1::ternas. uma esfecificaao drot*;;;;o (veja captuloil ) o ou.egistro

'n,,,

de emria'r,i ,-i,-r,#

Considere a tarcfa STOP_DECODING: task STOp_DEC0DiNG is entry ST0p_BUIT0N: for SOp_ BUTT0N use g#7060#. end; task bodyS0p_DEC0DING is acceptSIOp_BUTON; GTNERATI-CODES. STOP: enc.
uma interrupo de hardware, a instruo

. ctl vl l ttl or tr ttcl i r l ) l ''( '( ) l l l t l l l tl fr l l n fl l c l ) e l x r l r r ltte ( | l tr r l r .r r l r nr l tl i l l r .ttttl ttr ttl o c ( 'o l ) l .,s \( 'ti l l e l tl l l l l l l ( l tt n o ttl tt r l ttttr ( i l i N l r l {A l 'l r , .r t l Itr .l l t r h , l t r r r t l c l l 1 r r r sr r r l r r 1r0 i r tctl l l l l l i l t ( l l l i l l l ( l tl l o t cttvl l l r l tttt sc r r u tr tci ti t se i , , , . j t t u . . 1 u , , l . ,r r r r r ''l r l r ttr r cr r l e r r r o tl tl te l r tl r rtl r 'u r i r t 'l c t tt' l c I 'i r r ttl e l ttl tl ti tttl r si tt. (l l tl cco tl tl i cl tfo csl tl i tr l o tl r t l l xctttPl o t'i ,,,,t1 ,l r l ,, l ,r .r b l cttta .tl c Nrss, tttt'ttC l tl tl tt c i l u str u i t tl ti ti o r i l t d a s p to l l r i ct[i ttl cs p U ssci ol tl l s ta r C l r s, to sso i l.g l s s o t 'o t t t l t l c l'r ra ,r r u r l i r sr r c s l ec u p tu l o .
r' f' l tS S A (l tl f { 01)l N (;l

( l , , r ',ki l 0 t' t) t( 1 0 {) l N ts trrl. r 'v Sl 0 ' tul 0 N l rr l Sl 0 ' [tJII0 Nr r r r ' 8 //( ) ( r t) ',
r'il11 ,

l ,,r:'k l l N l l t { l 0t)tS r' ; l rri l y l (' ,

vemosaquiumaentrada chamada srop_BurroN, acceptS0p_gUTTON:

semparmetros. sv'r v4rs'rr! seregistra Quando

l rtrl , l ,,rsk t)t (10)t I \ r( l r rl ,r' y S tN t) (00t r,rrt,ry R t{ [ l V t (]fA R (tl


Il(l;

rrr

(l l A R A (l l tR ),

fl t, otrt, 0H A R A (,t

receber a interrupo comoumachamada de entrada. Depois deaceitar o sinalde intera prximachamada de entrada pur cnNeiATE_coDES e a ta_ irrlr;J:jrexecutada considere agora a seguinte verso do corpodatarefa paragerar cdigos: task bodycENERAIE_CODIS is NEXT_CODi: CHARACER: begrn oop select acceptST0p: exi t; ese -- instrues parareceber dados __ e gerarum valorpara flEXT_CgDE Dtc0DE. SEND_C0Dt (NtXT_CODE) : end seI ecti end oop; DrcODr. stND_C0DE (END_OF_TRANSilISSI0N) ; cnd;
aqui um lao simplesde select.Enquanto no houver chamadas de entradapara s f'oP, a parte else da instruo selectser executa_cra e gerar,* ;t;; cdigo. contudo, tluarrd. f'r executada a chamada de entradade STop, "it;,.b;iJeterminaao. 'l'cttlos

t S; t l , , r s kf'R INI f'1SSA( G t a s k b o d y SI0 P D EC 0 D INts heg t n. a cce p l SI0 P BU I0 N ; SOP; C OD ES, GEN ER AT
t:ttd;

ts C 0 D ES t , l s k b o d y GtN tR ATE NtX C 0 D i : C H AR AC IER ,


hP gl o tl P s (I e(:L at:t:ept S T0P ; c x tL; trI s t'

inslru'es Para receherdados t XT C(]D e gerar um valor Pdra l"/[ ), l) t000t si ND000t ( Ntx I 000t
t' ttl l s r' l l t 1., l rttl IrrrtP ; (l N l ) 0l 0l ({ )l )l s tN l ) { )01)l r,rrrl , l .i xonrpkl 9..}c rc s c ortInrtttl tl x r|6rl r|rrp||(l pt()gr|l ttl ntl c rl c c rrl tl .i c u fl tr IR A N S t' tl s s l 0N ),

r02

10,

t sl bodyoE CoDE is SORAGE SIZE : rilrrcER := 500; :91:!9nr C)U{T range 0 .. sroRclsrzE; .rl9El I{-I{DEI, OU_I{DEX :. range I .. soRAcLsrzc;' Illl9ll CODE, CHAR CHARACTER; SORAGLAREA: ar r a y (l .. SI0 R AGE _ SIZ E ) o f C H AR A C E R ; b e gn i c0 uilT : = 0; If{-li)X := l; OUI__I{DEt: = I; I oop s e ec t when C()U{ < SoRACE SIZE=> u.r:l! St{D_c0OE (C: in CflRACTER) do CO DE := C;
end; .

0lcol,IllL0tfll tlll(tt,|l|llill

tff il-cilt)i r. tlI-CllAt;

r tlll-Sltt thrn r ttll-fOll10l + l; Ll{Lf0tl10l,. tll-P0SI10{ clcc PRt{T(Ll{E); :. I i ,Ll{E-POSITI0l andi; it {EXT-CHAR thcn ' E{D-0F-TRAI{SIIISSI0{ .r !LAfl)i LII{E(tIl{LP0SITI0{,.LIt{E-SIZE) ;. (LIlLP0SITI0{.,1I{E-Sl2t
P R It {T( LI i{I ) extt; end i i end l oop; PUT('TASI(S HAVE ERIII{ATED. '') ; n0 ;,

,
, SllllJ

ty1true1 Oaradecodiftcaro valorde c00t e produzir vatordecodifrcad;-;m*.o

CHAfi;

, r t t b. l ur vne I I begi n -- l l ai n pr ogr at n


,l

c0uil

S0RAGLARFAT r'1_INDSX) := C}1ARl


= CO UNI + 1; = ( I N_I t Dt Xm od SIORAGE_SIZ ;. +E 1

I{ IIDEX

(" TA S I ( S, FO R PUT I I ESSAG [ ) EG E 0DIHAVE I {G BEEI ACTI { VATED, ") ; ,"1 (


|fl

whenC0U { T> 0 = > ac c eptRE C E IVL C H AR (C : o u t C H AR AC T ER ) do : = B U F F T R (0 U T -I{ D EX ) .C ; end.;

end; Empb 9.3 (continuagto)

;irtl
;' r i rfll
r lilt

_ l; :=cou{r !9|tl our_r{oEr


e n ds elec e rr,t ;

,i ; r r r l Jb

i=ii_,ii nod BUFFER_SI ZE + )l ;

, r[f
r.l

' rl I

,roliljoinrr
end;

= 0 and cOu{ = r{D_0F_RAnsilrssr0r{; 0HAR


.'r I

task body pRI{ ilESSAGES is

: C}|ARACIER; tIt{E_pOSIII0{: IflItGER; LII{E : S I R IT { G(1 . E _ SIZ E ); L I{


. begin

: consanr CHARACTTR llllr( := , ,.. LI{LSIZE : consant fnriCn-' := '-' rZr, ['IE)(I_CHAR

k-pb

LIILpOSII0{ r= r looo 9.3 (oontinua&)

,l

'iHfrTF, I

wr t , l r I ( i l ' {,[( r,l p t 'r t t r't l t t t 'r 'l NVl l {l l ^ l l l l l l ', u s r 'I 0 l'^ ( l l ( ^ ( ;l ,

r ',

lO

coNDrEs DE ExcEo
i

SIN GU LAR

t ' x t t ' 1 )l , l rt t l ,

t . i A X T R IX S I/t IN I( tR . l s a r r a y ( l N ItGtR r a n g e <>' IN IIGIR r a tr g e t y p e l {A TR IX ts p r o c e d un e : i n o u t l 'IATR IX) IN VTR ( l '1 FL OA, D E T ER IIN AN T: E P S IL 0 N : co n sta n t FL 0 AT:= I 0 t- 1 0 ; begrn -- calcule o determinante da matriz . EPSIL th EN ON T) r ( a b S D ETTR I',IIN AN n ar se SIN GU L AR ; eno I , -- complete o cdlculo do inverso end; ( SIZE: p r o c e d u r eTR TAT- o N E- I'IATR IX IN tGER )i s ( 1 . SIZE, I SIZE) ; I t 'l :i I A TR IX begin 0 8 T AIN( l ,l ) ; I N V TR I( fi ) ; P R I N I ( l i ) ; e x c e p t t on => PU T( "'IATR IX IS SIN GU L AR );" w h e nSIN GU L AR end;
fi eg I n

"ttt\\\\\

podemocorrererros.H muitasfontesde erroe muitosno resultam i-::11 "plicao de programas incorretos. os dadosde entradapodem ualiw queestejam fora do alcance' uma unidadede hardware "orrt". poor pirar, umafita pooete, um erro deparidade, ou uma linha de transmisso pode esporadicamente estarom defeito. Muitasvezes, uma mensagem enviada ao usurio e o programa pra. A simples terminao cleum pra-u n.,n sempre desejvel e em alguns casos pode ser desastrosa. um piloto na hora e pouu, pode estarurundoum sistema de navegao controladopor computador.Dizer a ele que um erro de estouro de capacidade ("overflow") o qu9 causou o desligamento di todo o sistemaertamente -foi aultima opo. Esses sistemas tm.que poderfr afto plausvel p*;;'ti";ir funcionando. Nestaseo vamosdiscutirosrecursos paadarr- rrrur rituaoes. os recursos se centramem torno do conceir.ode uma uma exceao e-uJrurnro que causa a suspenso "*c"o. Trazer- da execuo normalde um progma. u;;o;u situao de excerevantar o chamado aexceo. Responer exceo chamdo ffatar aexceo. Paramotivarnossa discusovamosexploraro pr;;r;-*empto r0.1. Esse programa calculao inversode 20 matrizes. Nsso inteies uqui s" nrru no, crsos em que a matriz singular (isto , o valordo determinante muito'pequo,e assim notem i nverso). r0.r TNTRODUZTR EXCEES intr-oduzida por umadeclarao de exceo, _ Y"y exceo qued o nomeda exce(isto a iegio do textoj no qual u f*"riao podeserlevantada. . e defineseuescoDo Porexemplo em pnocedune INVTRT_t'tAIRICtS is SINGULAR: except i on; en0, introduzida chamada SINGULAR.Essa exceo podeserlevantada duranteo 1-:I-1eo procediment'INVERT_MATRICES. como o nomesINGUian ,ugri, a situao de ex_ ccoque se tem em mente o eventode que algumamatiz oe eiiraaa resultesersinqular. t0

f o n I r n . 2 0 o o p ; P U T( "ITtR ATI0 N") ; PU I ( I) ; G E I ( tATR IX_ SIZE) : AR IX- SIZE) , T R E AT ON E_ Il ATR(IX end oop;
pnd,

l0.l Usode excees Exemplo

8(tl' cxcctles Essas que causmexcees. A prpria linguagemdefne situaes totl' dO 0o$ Todos esses durantc a exccuodos programas' sultadode errosencontrados so asexcees: Essas protlcl'iDitlas. na so tratadoscono cxcccs predol' o Qtttttttlo resultadotle uma operaonumrlcn NUMERIC tlRROl ou dE ple' implenentado rildrrnto ctli dcrttrodo alcance cho rkr llllo tttttnrictl.

r07

:tttFs I

CONSTRAINT-ERROR Quando a limitaode alcance,limitao de ndice ou limitao de discriminante violada, ou quando se faz uma tentatva para derreferenciar um valor de acesso nulo. PROGRAM-ERROR Quando todas as alternativasde uma instruo select que no tenha parte else estiierem fechadas,quando uma unidade de programa esteja invocada mas seu corpo no tenha sido elaborado,e em vria3situaes dependentes da implementao. Quando a memria dinmica alocada a uma tarefa for excedida, quando se acabar o espaodisponvel para objetos, ou quando a memria for insuficiente para elaborar um subprogramaou uma parte declarativa. Quando se levanta uma exceo durante comunicaco entre tarefas.

ou I 0n excep => tRR0R NUI'lIRI0 when X = X l'lAX; y := y t,lAX; Z := Z-t'lAX; => whenSENS0R-tRR0R 1 := X_AVE; Y := Y-AVE; Z := Z-AVE; end, nr lnr' a umaalternstlvg tem uma formasemelhante Vemosque um tratadorde exceo truocase: uhen nomeda exceo => instrues simPles o Procedimento Considere ts (X,Y,Z: out C00RDINATE) GtT-NEXT-P0INT pnocedune locais -- declaraes begn relativos e obteros valores -- cdigoparaler sensores de um Ponto' -- X, Y, e Z coorderwdas e SENS0R-ERR0R NUi'IERIC-ERR0R -- As excees a execudo' durante -- podemserlevantadas t on excePt => NUI'IERIC-ERR0R when X := LltAX; Y := Y-l'lAX; Z := Z-!IAX; => SENSOR-ERR0R when X := X-AVE; Y := Y-AVE; Z := Z*AVE: end;

STORAGE_ERROR

TASKING-ERROR

t0.2 LEVANTAR E TRATAR EXCEES Quando ocorre uma situao de exceo durante a execuo de um programa, ela precisaser trazida ateno.Isso se faz levantandoa exceo.No nossoprocedimento I{VERT_MATRICES, a execuoda instruo ra i se SI NG ULA R; da execuonormal e traz a exceo chamada SINGULAR ateno. causaa suspenso O efeito suspendera execuoda unidade de programaem que se levanta a exceo. pode ir de A resposta A resposta a uma exceovai variar, claro, com a aplicao. no fazer nada, em cujo caso o pogrma fica comumente termiriado, at tomar provicom a antesd.eprosseguir para tratar a situaoque causoua exceo, dnciaselaboradas execuo do programa. um ou mais tratadoresde ex' uma respostaa uma exceoapensando Consegue-se se programa. levanta de de uma exceonuma unidade ceoao fim uma unidade Quando executado.A o tratador de exceocorrespondente e a execuonorrnal suspensa, da unidade. execuo do tratador completaassima execuo sempreterUma unidade de programa que d uma respostaa uma ou mais excees parte assim mina com uma de exceo exce p tr o n -- seqncia de tratadoru de exceo end; Podemos ter, por exemplo exce p ti on > P U T (' t.| AT R IX IS SIN G U L AR " ); wh e n S I NG ULA= R en d ;

o loRtlt umaexcoAo emlevantar pode resultar exe_cuo cuja aquium procedimento Temos liRRgR NUMtsRlC q"ilq9 a exceo .levantada situaieo. *oao *p*u, '. s0tlutrlbu' " mxintos valorel "fgu. por,r*rttou aritmtica), dc rapucidatlc (presumivelmente vrlttter SENSOR-ERROR. a excco X,i iZ;quando i lcvuntada dor uorparmetros o tltl' xocut0 do depttis ca$os, dtls um cntlu Em parnrotros. aos saoatribudos mdios procodlmonto' dtl da chamada tlopols logo rotomtd' programa do .rr,, o*u.uUo

r08

r0t

ro.3 PROPAGAO DE UMA EXCEO Em geral, pode-selevantar uma exceo numa unidade de programae pode-seusr um tratador de exceo para completara execuo de uma unidae.iequentemente, en_ tretanto, uma unidade de programnao conseluita r* pJ";;;ii" exceo. Mesmo quando exisiam tratadores ae eiceao, eles tarvenaouro,n todas as exceesque possamser levantadasdurante a execuo.Arm disso, o prprio tratador de exceopode levantar uma outra exceo. Em cad,*;;;;, ;r]oobro.o, ou a unida_ de de programas, abandonaao,e Oiz-sJ quJ"'r*.rao estui propagada. Considere, por exemplo,o procedimento p ro cedur e I NV E R ( H : i n o u t tT tAT R IX) is DE T t RI lI NA NT F:L 0 A T EP S I L0N : c on s ta n t F L 0 AT:= l .0 E _ 1 0 ; b e g rn -- calculeo determinante da matriz i ( abs Dt T E Rt ' IN AN< T )tp SIL 0 N rn e n r ais e S I NG UL A R ; end i ; -- complet o cdlculo do inverso en0; e a seqncia de chamadas dadaem TREAT ONE MATRX:

Otllllirllr, lNVll(l rllr, PRINIrtr, exccpL I rrrr whenSIN(UIAH PUT("t'ATRIX IS SINGUtAR,) ,


en0,

( r ') ; 0 B AIN TN VER ( t) T ; -- point of cat to INVTRI PR I N ( r tl ) ;


os clculos de INV_E_R-T podemresultar num determinante muito,pequeno, c.so em queselevanta a exceo,SINGLAR. co-o rvrrEnr,";;;;r";;; tratador, a execu_ , ;;,;;

Agora, se uma chamadaa INVERT resultar na propagao da excc{loSlNCUl,l{, e cxceo tratada no procedimento TREAT_ONE_MATRIX. () tratador hnprlltto una mensagemem resposta exceo. Isso completa a cxecuo tlo pnrcctlirttettlo |REAT_ONE_MATRIX, e a execuodo programacontinua clo ponto cnr quc rt ptr. prio TREAT_ONE_MATRX foi chamado. Se qualqueroutra exceo for propagada do INVERT, um CONSTI^lN' liR l{()l{, observe, por exemplo,que a exceo se propagade novo, destavez ato ponto de chamrdr tlo TREAT_ONE_MATRIX. Vemos assim, agora,a regra de propaga[o tlc oxecr uma exceo levantada se propagapelaseqncia invocantes de unidades at unta unldldc que forneaum tratador paraa exceo. No casosimplesem que o programano ofereaum tratador de excolu o um gtto de execuoresultarem levantara exceo,o programaacabapor ser ubrndrltndtt,Nor. o ambientepredefinidoparaun[ tladnrpllor. malmente,antesde abandonar o programa, exceo, comumenteimprimindo um diagnrtlco,E r oo. o ofereceralgumaresposta nhecidamensagem de erro de tempo de execuo. Vamos agorarever nossoprogrmapara inverter matrizes,dado no tixomplo l0,l inverte a matriz e imprinreesso uorvltt, Paracadamatriz o pogramal seusvalores, muito pequenolevantar a exceo SIN(;ULAR, am O clculo de um determinante e a exceo propagutlu uo ptotledl. cujo caso o procedimentoINVERT abandonado rurpgttt, mento da chamada TREAT_ONE_MATRIX. Esseprocedimento,por $uavc?,, O tratadorento simplesncntc irrt;lrittte A tlgtt' masexisteaqui um tratadorde exceo. sagem: tl A TR IXi S SiNG ULAR

:f,:*,ry_r+il:bandonada"

srNcian p;s;;.,.

arnsrruo que

As excees de lfeua.sel predefinidas podemservistas comoexcees propagadas pelas caractersticas embritias aa'rinluageJ.u"nao secarcula, por exempro,

x*y
seo resultado exceder implementado, a_exceo NUMERIC_ERROR propagada at o ponto?i1i^"_:ll:r em que.amultipca qrrunou; exceao escrita. propagala' a unidade quechama pod, .ruro,ioin.'..i tratadorparaa exceo. _um considere por exempro o p.or.."oto'neer_oNr_MATRX: procedune TRTAT_0NE_ttATRIX (SIZE: INTEGER) is l'l: I'AIRIX (l . SIZE, I . . s rZE ); begin l0

Esta ao completaa execuo de TREAT_ONE_MATRIX, c cntio o corrlrolevnllr rt seu ponto de chamada, onde a prxima matriz processada. assirrr u lrrullugnfur Vcrrros de uma exceo aode diagnstico, permitindoquc o l)r()grtnur colllttu e uma simples em casode um erro. Notamos,finalmente, que levantarqualquer outra excc<l dcrrlrorlc lNVlil{'l', gxrt exemplo CONSTRAINT_ERROR, faz a exceo popagardc volta u cltlu urrr rluo clrl presumivelnrcntc rnou. Nestecasoo programa o arrrbicrrlc rle srtlnllltlll abandonado; automtica da aplicao que temosem mosdaralgunra mcnsagun rlc tlilgrrirrllt'u. tornar nossoprograma possvel mais robustoorncccndoulrr trirlrulorrlc rttlrrll tui oautomticapar at odoout r oer r oposs vel( vejapr ogr anr annpilgir ll2) , r u lovntttrdr, A paluvrurcscrvuda "others" substituiqualqueroutra cxcollo tluc noJrt lnclui totla fortttnrlc cxcco,mcnosSINCULR. Inr conscq0ncialscrd plrvolpnrcrr' (.:on sara prxlttttt tttnlrlz,rrc$rro um NUMHRIC tiRROR,ou CONS'l'ltAlN'l tlRRlfn,

ul

"tFr'

procedure REA_0NE_ilATRIX is fi: ATRIX; begin (il); READ TNVTRT (); PRINT (il); exc epti on when => pu (,,ilATRIX SItIGULAR IS SINGULAR',) ; when thers => PUT(,,UNEXPEcTED ERROR,,); end: IO.4 EXCEES QUr SURGEM DURANTECOMUNICAES UVTENTAREFAS o uso de tarefas mltiprastraz baira o casodasunidades gramas' de comurucao De interesse depro_ aqi rato e situaod" ,*;;d;;uma tarefapode d;;, relevanre paraoutra tuirr". ut*L.i"iqg.tituoru-rntrriJr*grrur* ser daateno entetrazi_ pela exceo
Considere,po, ei.mplo, o,,.!uinirr* r uma tarefa chama uma entrada em outra tarefa, mas estaj esravaterminada r uma tarefa chama uma entrada em outra tarefa;essa tarefa ainda est ativada, mas termina a execuoantes de aceitar a ctramaoaa;;;.;;'" r uma tarefa chama uma entrada em outra tarefa; a segundatarefa aceita a chama. da da entrada, mas durante o r;;;r;_;o;, ,urg. uma exceosem rratamento.

tl

uT rLr z ARA T M PLEM EN T A AO


I ir' , . ,l

l.l.

-;

tr.d;fiil;il;iii"_u*^o*

Um programa no existe sozinho. Ele deve ser traduzido numa forma convcnlcttlc cxecuonuma mquina especfica.Na maioria dos casos, uma linguagenr dc ulto ttvel permite a formulaodo programaern termos que no dependemda nrquittu.O ntulot benefcioque se tira dessa independncia de mquina a portabilidade.Cotttudo, ltd rl. tuaesem que importante ter-sealgum controle sobre a implementao o tl10.16 Yttl. tagemde suascaractersticas. II.I REPRESENTARDADOS

il":ii'#1:;riff*

comunicaes ficavaminterrompidat. N;;;'riuao assim tarefapodeexpricitamente '*orma, quarquer terminar "*trrniuabort, com umainstruo assim: ""t;;;i; abort DISK_HANDLtR; uma terminao incondicionar assim deve serusada comgrande cuidado.

n'.'i,,-*!ili:jxx".:r"1" j"',?'"'fl:ff :rx-dereitoequeas

aexceo predefinida levantada natarefa TA.SKTNG-ERRoR

ur proptlo' No Captulo 2 discutimosa idia bsicade tipos, pelosquaisse dcl'lnerrr dadeslgicasdos dados.Algumasaplicaes de sistemas requerema capacitlutlo de tlercrs. ver o layout fsico dos dados,sejaparalidar com algunsdispositivos especidrtlo ltlrdwr. re, sejapara conseguir um melhor rendimento.Voltamo-nosento para a idia dur rldtuu, Ias de representao. se baseianr errrtluur kldln Os recursos de Ada@de especificaes de representao fundamentais: cnr duus clupnr. lrtl l. hirtcpio da Separado: Os dadospodem ser especificados meiro, descrevem-se as propriedades lgicas usandouma denilodc ll1xr, lte gundo, quaisquerpropriedades sto tlcscritnslxlr tltlr especiais de representao parc o tipo. clusulade representao 2. Um Tipo, uma Representao: Um certo tipo de dado s potlc ter urlnrrprorcl taoexplcita. llen No casocomum em que o programador no se preocupa com arcprcricntir0ocngroe pelo compilador. do dado, a representao determinada declarao de rcprcscntlto ulsor:lnrln Considere a seguinte de tipo e sua clusula is ( ADD, SUB, lr UL,LDA, SI A, STZ) rype 0P _c0 DE ; for 0P C 0DEuse ( ADD=>1, I 't U[ =>3,LDA='8, S A- . 24, Sl/ - . ll) , SUB=>2, presurrrir qualloiu rellreralrtnErt deumaclusula de representao, nosepo<Je Na ausncia Ol' ('Olll1 do tipo tle crtuutcrit0o adotadapelo cornpilaclor. Aqui, contudo,os valores soexplicitarncnte tlclnidos inteirosde represcnta[o. com valores porle-se pad dc rcprcscntao cspocll'lcu urttfl' Maisgcrulrncrrlc. usaruma clusula (lnsidcrc,prlr cxcrrtpkl, tle hits tlc tlatl<ls. gurallo asscguirrlcs dcclutufior: tlctulltnrlrt

t2

llt

t'lORD: constantINTEGER:= 4; -- storageunit is byte, 4 bytes pen word ty.peSTATE is (4, t't, l./, p); type I'l0DEis (FIX, DEC, EXp,SIGNIF); type PROGRAII_SATUS_W0RD is
n e c0n0

Hd vrlruuulrar ftnnerdoonpoclficaos de repreronta[o ontAda@, Podomor, ;lor cxcntplo, eapoclllcur o oipuororervado paraobjetos, ou o enderco ns memrln do unts varivel. Cadaforntullurlru u rncsma idiageral, o prggramador podeoxercor ulgum con. trolcsobre ascaractersticus da mquina na qualo progama executado. r 1.2 MT.JDAR A REPRESENTAO DE DADOS Um problema clssico de lidar com dados quepodemos queremudara eporcn. tao. guardados, Dados por exemplo, num certo dispositivo podemprecisar do sorom transferidos paraum dispositivo diferente, ou podemos querer mudardados armazontdor sob forma compacta em outra forma diferente paraconseguir um pocessamento mrlr cficiente. O problema de mudara representao direto:podeserexpresso comouma con. verso explcita detipos,entreum primeiro tipo e um segundo, derivado do prlmolro mar comespecificaes de representao diferentes. Considere por exemplo type DESCRIPT0R is rec0r0 -- componentes de um descriptor end record: type PACKED-DESCRIPT0R is newDESCRIpOR; fon PACKED_DESCRIPI0R use recond - componefites de um packed descriptor end reco rd ; Aqui DESCRIPTOR e PACKED-DESCRIPTOR sodoistiposdiferentcs corncurnclorr. ticasidnticas, aforasuarepresentao. A mudana potlcncrroullimdE de representao comconverses explcitas de tipo. Asim, nasdeclaraes:

PROECTION_KEY: INTEGER nange 0 .. 3; IACHINE_SIAI : array (STATE) of 800!_EAN: iNTERRUP-CAUSE: INTERRUPTION_CODE; ILC : II|EGER nange 0 .. 3; CC INEGER range0 .. 3; PROGRAI'I-IIASK : array ('0DE) of B00LEAN; INST_ADDRESS : ADDRESS; end recond;

sYsTEr{_tASK : anray (0 .. 7) o B00LEAN;

Aos.objetos do tipo PROGRAM-SrATUSwoRD podeserdada umarepresentao especfica, assim: f or PR0GRA|t'l_STATUS_i.lORD use nec0rd SYSTEII_I'IASK at 0*t/0RD nange 0.. 7; PROTECTI0N_KEY at 0*W0RD range10 .. ll; -- bits 8, 9 unused l'lACHINE_SIAIt a! 0*tJORD range 12.. 15; INTERRUPT_CAUSI at O*l.lORD range16..31; ILC at 1*w0RD range 0 . . l; :- second wond CC 1, . at I*[./0RD range ? PR0GRA'|_I'|ASK at l *WORD nange 4.. 7; INST_ADDRESS at I*H0RD range 8 . 3l; end record;
Em cadaum dos casosacima a forma de especicara representao dos dados: or nome do tipo use representao Paraos registros,cadarepresentao de componente tem a forma:

D; DESCRIPTOR; P: PACKTD_DESCRIPTOR: podemos escrever: -- empacote P := PACKED*DESCRIPT0R(D); D P -- desempacote D := DTSCRIPTSR(P); Aqui asconverscs dc tipo soespecificadas por expresses da forma: tlpo derlvuh (whtrl

PRocRAM-srATUs-w-oRD, primeiros oitobits(bitso " p"r"*a o)o ocupaas 9r pelocomponente " sYSTE,I_MASK; piorBcrloN KEy bits lo e I I pelo component
elc. [4

nome do componente at endereo range pimeiro bit . , ltimo bt; o endereo.do componente o- endereorelativo ('as unidades de memria) em relao ao inicio do registro, o primeiro or, o ltimo definem as posioes de bits do " N9 componente dentro da unidade de memria. cas_9 acima, para ada objeto ao tip

I lt*

""@'

. q |F

l'ltttatll ctlttvers{Io rcaliza untatrocadc representao tlo vaklr;lnrulr;uclequc tivcr sido datloao tipo derivado.

A c r t l l r l n r l e r ) u u l tt l l ;l r , n u r r l g r l r r a l r r l tr l r r r l c tl ccl l r n r r l r r , l l r l I l g t r t r r i l r u r o l i l 1 r h r r L ,r r l r l l r u l ( ) s. r o h r t,o s l l l r o \, l l ttt r l cl cssc r cl cr e l r tr r l r r r ttl r r cs lxrr cxcrrtpkr:

r 1.3 DANDO TNSTRUES AOTRADr..rroR


A criao de um programa envolve alguma comunicao com o compilador da lin_ guagem'Podemos,por exemplo, declarar qrle s alguma, p;'i; d. Jma unidade de pro_ grama devam ser lisradas,.ol po{9ryos gurrr. esplcifcai d" ; ;;di;" gerado para um subprogramadeveser inserido m hnha. Esses tipoi de problmasJ,il ser tratados com pragmas. um prpma uma instruo ao compirador. como podem existir muitos compiladores para Ada-, os pragmaspermissveis geialmentevariaro de implementaopara impleInentao'Alguns ptugr: por exempo,o pragma que_especifica que um subprograma deve ser expandido em linh, so preefinios para-toda mplemeitaao. os seguintes exemplosilustram o uso de pragmasque seo preOetinidos na lirgr;;;

DAYFIRST OAYSUCC

-- o primeiroelemento do tipo DY parao tipo DAY -- a funo sucessora

COtFF ICIENT parl decimais especirxrs ' DIGITS -- o nmero dealgarismos de pontoflutuantc -- o tipo COEFFICIENT queo tipoCOEFFICIENT mximo C0tFFICIENI,LARGt -- o valor pode expressar __ INTEGER'SIZE
-o tamanho em bits corn que um inteiro foi implernentado

pragma LISf (0FF);

__ suspenda listagem
limitaes de faixa

pnasma (RANGE_CHECK) SURPRESS surpress a checagem ; das pnagtna l'lEl'l0RY_SIZE (60_000); pnaglra (SET_t'tASK) INTINE ; __ a memria necessria estabelecida
como 60.000 unidades de memria em cada chamada,expandir o corpo -- do subprograma SET_|IASX em linha

gerais clucotttpilu sereferea informaes conhecidas Uma segunda classe de usos ptxla. do tipo PROGRAM-STATUS-WOII), dor. Se,por exemplo, PSW umavarivel moster: pR0GRAil_STATUS_1,{0RD'SIZE para debitsespecificatr.c -- o nmero repesentar objetos de tipo --- PROGRAM*STATUS_WORD pSI.I,ADDRESS namemria davarivel PSW -- endereo

uma implementaotpica pode tambm ter pragmaspredefinidos, por exemplo:

bit do componente de FI RST-BI T -- o primeiro PStl . PR0GRAi'1-I'IASK PS\ry. PROGRAM_MASK -- registro


Uma terceira classede uso para obter informaes que se tornam conhecidasduralttc u ter, por exemplo: execu[o do programa. Podemos -- verdade DEC0DE'TERltINATED se a tarefaDECODEfoi terminada pendentes paraa -- nmerode chamadas SEND_CSDE,CgUNT -- entradaSEND CODE Alm dos atributos definidos na linguagem, uma implementao pode introduzlr outros atributos de implementao. Acima de tudo, os recursos de atributos fornecemuttt mtodo de obter informaes que dependemdo programae da implementao.

pnagnta TRACE (X, y); pragtna PR0FILt,(ST0RAGE) ;

-- gerar cdigo para monitorar mudanas X eY -- dasvariveis --fornea um perfil da memria para o progrma

Em cadacaso'o ponto ,?.mesmo. um_pragma permiteao programador exercer algum controlesobreascaractersticas do compildo"r queprocessa o programa.

u.4 rNQUrRrES SOBRE O AMBTENTE No Captulo2' ao descrever dados, discutimos o usode atributos predefinidos de um tipo' Maisgeralmente, um atributoserve comoum mecanismo para obter informages quesodo conhecimento do compilador. Osatributostm a forma ent idnde'atribut o -designad or t16

tt7

lzsuMRro

nllt t ct t lr , t tt t pr elr t tlexllt s t t as lir t lr lsscJlt r it s r r r it ct cluc Ottlr pr t 'p111r t krpcr scri asul ' l cl ottl o, , ( lt le$c llvllt lcc ct lt br llt t ct tc lit llt as ir r ser idas quc scjat n cl ucse ccrrl rol tut1[ ur t 11t ltlr r r lr ls, (Jtttit descrllrr ctttscqtlciu. sortuntcradas As pginu produzidas p,,roun1u ntlvupglrru. programa' prprio no dada rnaiscompletado progtttttta mais dominante do programasejao uso de pactltcs'A cllrtt' Taliez a caraotcrstica assim: tura geraldo programapode seresquematizada
FOR M AT o
M:ti tt l ' togt;tttt

Numalinguagem to rica comoAda@, esperar-se-ia poderescrever programas quefossem poisesse elegantes e claros. o caso. Parailustraro usodeAda@ pararesolver problemas consideremos um pro-Exemplomaiores, gramaparaformatartexto. Isso mostrado no f Z.f . nssl programa l linhas do texto, arrumao texto parapreencher corretamente caa rior,u. pt' o texto resultante. Coma entrada, porixemplo: l,lhile the crimina investigator typical ly does not considerhinrsela disciple of empirical science, his work, like the chemist,s, consists in a logical and systematrc quest for Truth. o programa imprime: While the crinrinal investigatontypically doesnot considerhimself a discipe of enpinical science, his work, like the chenist's consists of a logica and systenatrc quest for Truth. Alm disso,ao rearrumar o texto, o programa permiteao usurioincluir no texto comandos paracontrolara apancia final. um omando, por exemplo, assim 'ertos :INDEtl 10 lriacom queaslinhasseguintes do texto fossem indentadas de lO espaos. Em seguida se tc quisesse voltar margem esquerda, o comando : INDENT O 1t8

GLOBAL DEFINITIONS

U'TIL ITY ROU TIN ES


Oa

C OM M AN D R OU TIN ES

TEXT F, S RO I . ] TI N
a

Itr trk.tg l r

,/l , / l ao

./l

,/1
I- O PAC KAC E a GL OBAL D EFIN ITION S o GL OBATD EFIN II'ION S

GLOBAL DEFINITIONS

l 'a r ka g l r

pucotor, vemos a seguiro formato de um programaprincipal simplesque utiliza quatrtl r GLOBAL_DEFINITIONS: Essepacote uma simplescoleodas constuntola tipos usadosno Progrma. de uro 3otll, r UTILITY_ROUTINES: Essepacote contm vrios subproSramas sada. principalmente de entrada e um subprogrlntnvlrvol, I CoMMAND_ROUTINES: Essepacote contm apenas linhas de comando. paa procssar visveis,ulrt plllll |tto' I TEXT_ROUTINES: Essepacotedefine dois subprogramas rerls' lpsru para nhas um linhs de pargrafos.e cessar faz uso do pacotepredefinidoI-o=-PACK^(ili, lxtr rttn o pacoteUTILITY_ROUTINES dtts prte'lor 0 vei, assumidopara esta introduo. O programaprincipal,asespecificacs pclu llttltnr indicatlo isso os corpos dos pacotespodem se. compuos sepradamente; entre as unidadesde compilao. tracejadas Conquuttloeirc |tn' O pacote COMMAND_ROUTINES mereceuma nota especial. ltt' subprogrtttttur vrios de visvel,faz uso interno utn s,rbptograma cote conenhaapenas ttotttn' rvtttc' dc fornra em hierarquia tm uma subprogamas calmentedefinidos. Esses lhante que encontradaem clutraslinguagensde programao' ttRl do pacote Ada@ fica em forte contraste com a r1c littguttgottt A rganizaao ttttl i ttlcttlrt traz. quais as piincipuir unitladesorgalizacionaisso subgrog;amas'.lsstl l'ct t t t t t t ot t ll r t ovr t ur a par t c, , m Ada@ tl. r uso dc n@. 1linguagem i no i n,,i rrtari tc lot ttttl a lingutgcttt (lonro projeto, de qualquer ferramenta lxxlc prOgrurrrus. e proiet dc tle progratttus' a rcspeito de pensar maneira robrc cssa efeitoic longtiulcurrce

l t9

-qt;F

r+ Prog ramTrtle . t0 RAI

t';ottal dl

rAlA0nlr)ll n r ll r El .r t
** Prog ran Inte nt: This pro gra mre ads a t ex t f i e and or m at s it a c c o r d i n g t o c0 nven tron sg ive n below. he t ex t ile c ont ain s i i n e s o f t e x t an d comma nd lin es . Eac h c om m and ine begins with a c o l o n a nd mu st be o llowed by a lega c or nr nahd nar ne.

Al l ,l tn l tl g ttttttttg tt ,t Pi l r '.1 9 r ',1 0 1l llll f o l l r r r tr tg l ttte :, o l u xl , u p l ,r t t,h r r tr r t, t o tl l l l l l l d l ttI w ttt'ti s r tt,h ttttt I tn r ( lt\ J sttq tl fl l l ( :l r tn l ,t'r ,r l ;r ,r Ih e tr o r d s i l r 0 p r tttte d r tl h b o u r r tl a l tr r s. r :r r do I tn e s tn se n te d so th a t, e a ch I l n e ( o xce p t Ih e l a st) w rI I b e r I l e d w r l h 0 n e sp a ce b e tw e e ne a ch w o r d . Th e i r st l tn e o e a ch p a r a g r a p hr s r n d e n te d 5 sp a ce s. h e r i g h t m a r g i n i s r a g g e d e d g e d , I th e p a r a g r a p hi s o l l o w e d b y a b l a n k l i n e o r o n e e xcl u d i n g th e ve r b a ti m co n tn a n d ) , 0 r r n o r eco m m a n d(s th e n th e n e xt i n e o te xt w l b e co n sl d e r e d th e b e g i n n i n g o a n e r .l Pa r a g r a Ph .

tr I npu t an d 0 utp ut Fi es : S0 URCE_TEXT: A 1e c ont aining t ex t line; and c o m m a nd ines. 0 UTPU_ TtXT: he f or m at t ed t ex t .

** Gen era La yo ut C onv ent ions : Pag eSize: Stan dand 8 1/ 2 bV 1l page, 85 c har ac t e r s p e r lr ne , 6 ine s pe r page. l, !a rgin s: L eft : 1 5 ch ar ac t er s in f r om e t edge o p a g e Rig ht: 1 0 ch ar ac t ens in f r on r ight edge o p a g e To p : 6 in es downf nom t op of page Botto m: 6 line s f r or n bot t om of page ' P r in ting Area : St andar d l0 pit c h s pac ing, 60 c h a r a c t e r s p e r I in e, 54 I in es pe r page P ageNu mbe rs: 3 ines down r om bot t om m ar gi. n,c e n t e r e d betwe enth e e t and c ight r nar g n, and enc los ed b y , h y p h e n s , F or e xa mple

VE RBA I It

In d i ca te s th e b e g i n n i n g o f a se r i e s o l i n e s th a t a fe to b e o u tp u t e xa ctl y a s th e y a r e g i ve n , e xce p t 0 r o o ssi b e i n d e n ta ti o n , AII l i n e s ( e xcl u d i n g c0 tn n ta n d l i n e a n d th e n e xt l i n e s) b e tw e e nth e ve r b a ti r n co n tn a n d p a r a g r a p hc0 |n ||a n d i n e ( o r th e e n d o i n p u t) a r e tr e a te d a s te xt to b e p r i n te d ve r b a ti n t. C a u se sa l t fo l o w i n g te xt l r n e s to b e l n d e n te d n s0 a ce s r o n r th e e t m a r g i n ( n fn o n r0 th r o u g h 6 0 ) . C a u se s,th efo o w i n g n Ii n e s 0 f i n p u t te xt ( n > 0 ) to b e ce n te r e d b e tw e e nth e l e ft a n d r i g h t tn a r g i n s, I n i s o l n i tte d , th e n o n l y th e fi n st o l l o w i n g i n e o i n p u t w i l l b e ce n te r e d . to b e p r i n te d . I n ts C a u se sn b l a n k i n e s ( n '0 ) o m i tte d , th e n o n y 0 n e b l a n k Ii n e i s p r i n te d {o te th a t a b l a n k Itn e o te xt i n th e i n p u t i s tr e a te d i n e . 1 " co m n a n d e xa ctl y a s a r ':SPAC E C a u se sth e n e xt l i n e to b e p r i n te d a t th e to p 0 a n e w 'p a g e .Th i s i s a l so d 0 n e a u to r n a ti ca l l y w h e n e ve r a p a g e i s i l l e d .

INDENTN

n CTNTER

N : SPACE

-1 4 -

: PAGE

Exemplo l2.l

Um hograma Ada@para formatar textos

Exemplo l2.l

C.ontinuao

r20

l 2l

UF
__ " Sa m ple I nput : "

. "EilEI

[rfof eondt t ons wit h a colon t s not ollowed by r L A n rnput I r ne beginning l egrl rna t e connand. Theline is out putver bat inwit h ive ast er isks R esp onse: i n the I ef t nar gin t o call at t ent ion t o t he pr : oblen.

:CEl { T E 2R THIS IS A T I T I E

-_

: PARAGRAPH Ih e tex t of a par agra pih s a d j u s te d o n a ine t o f it on a I i n e wit h at t nos t 6 0 c h a ra c te rs , : INDE N l0 0 n e o r m or elines c an b e i n d e n te d ro mth e l e t margi n w i th an indentc om m a n d . :INDt li0 0 n e ca n als 0 s pec l yth a t Ii n e a n et0 b e p ri n te d ve rb a t it n, ' as in t he f o l l o w i n gs h o rt ta b l e : :VERB A I t ' l

given f or an indentcot nt nand is not nuner icor 2. Theargunent given f or a cener or space too l arge ( r 60) ; t he ar gur ent comnan is d not num er ic or t oo lar ge ( > 99) . !espo nse: As above. wit h a cent erconiland is a 3.0ne of t he lines t o be cent er ed comnand I ine. R esp onse: he I ine is out putcent er ed, but f ive ast er isks are placedin t he le t nr gint o call at t ent ion t o t he prob e|n.

--

ITTI, I 2 3

AI.IOUNT 18 11

-" C or r es ponding 0ut p u t: H IS IS A T IT L E

4. A l i ne t o be out putext ends beyond t he r ight m ar gin.I his can be a ver bat inline t hat is t oo long or a wor din a paragraph line t hat is t oo long ( f or exam ple, if t he indent happens anda wor dnill not it in t he t o be 40 char act er s, rernai ning 20 spaces) . A lowt he ine t o be out putup t 0, but not R esponse: t he edgeo t he page. ?lace f ive ast er isksin t hs beyon d, l eft n ar gint o call at t ent ion t o t he pr oblen.
on

h e te xt o a pa r agr aphis adjus t ed on a line to f i t a Iine with a t mo st 60 c har ac t er s .

O neor n o re l i n e s c a n b e i n d e n te d ro mthe lef t m ar gi n w i th a n i n d e n tc o m m a n d . 0 ne c an als o s pe c i fyth a t i n e s a re to b e p ri n t ed


:: verbatiln as in the ol lowing s hor t t able:

IEi,I 118
L

AIIOUITT
b

3
Exemplo l2.l Continuao

ll

l2.l ftrnllnurlo Excmplo

r22

ltt

_*a

T E X C0t li{ AND- R O U I N E S , T - R O U T I 'l E S ; DEFINITI0NS U , I LI TY- R0UTI NES, w rl h G L0BAL p r ocedureF0RtlAT is .use GL0EAL ,DEFINITIO NS. TEX C0I i} I AND- R O U T I N S , - R 0 U T I l {E S ; UTI LI TY- RO UTI t { ES, -- T his is the ma in pro gnaln.I t s f unc t ion is -- t o dete rmine the kind of pr oc es s ing f or t he nex t -- gnoup o rn pu t in es. IEX-tODE : li'l0DE; : INDENT_RANG E; I ND ENTATION b e gin -- l{ain Prog ram EX lt0DE := PARGRAPH-'|ODE; := 0; IN O E NTATION loop XT) w hi e l0 RE-DATA(SOU RCt - t = AR t hen C0t lt lAND- CHAR i NEXT-INPUT-CH (TEX I - I I O DE, I NDEN ATI O DO_COII|ANDS ;N) e se is ca se TEXT-i{ODE => D0-PARAGRAPH (IN D E NrA l l C ri ); whenPARGRAPH-I"|ODE =' 00-VERBATIII (IiDE'tTAI0{) whenVtRBATII{-tl0DE ; end case; end i f; end I oop ; F IN I S H_PAGE; e n d:

package G t 0 B A l0tl l tl l l l 0 t{S ts - - h i s p a c k a g ed e tn e s co n sta n ts a n d typ e s u se d a n d th e o th e r p a cka g e s - - i n t h e m ai n p r o g r a r n

PAGLSIZ.

or pase :;:il:,t:1'.;,1,, ,,0 edge to botrom LINES-P.R-PAG' ,nars,n :::,.tlt,;,1;,.0 margin ro borro,,, LEFT-'TARGIN ' ::';,:i:,.ti'',,,;,t1;,, rer edge to ret rnar3rn o pase RIGHT-nARGI'{ ' ::':il,.titl,;;rt1;,, ret margin to risht nars,n .AX-LINE-LE.{Gt*' !he :;:',ilrt;*t'ro,,.' n I i ne, r ro,n ;,tn.rurtr'., pe
I ef t nar gint o t he r ight edgeof page : = ': ', CHARACTER : const ant C Ol l l A N D - CHAR : = ' ', CHARACTER : consf ant B LA N K S RI NG : = ( 1 15 => BLA {K) ; : const N 0R I4A L-I I ARG I N ant 6. . 15 '> BLAt t l( ) ; S RI NG : = ( 1. . 5 => ''', E R R 0LIIA G I I:{ const ant VERBATIII-Ii0DE); is (PARAGRAPH-iI0DE, type I{()DE I{DtNT' VERBATII{' is (PARAGRAPH, type COl{tlAl{D-l{Al{E I LLEG AL) ; PAG E, SPACT, CI NTTR, r ange0 I NTEG TR is IN DENT- RA {G E subtype r ange0 A R G- RANG is E I N EG ER subtype r ange0 is I NTEG ER C 0L Uf lN- NUli subtype RI G HT- I I ARG I N; 99; I {ALLI NE- LENG TH;

is type LIN E -INF0 record 0 . . }I ALI I NLLE {G TH; r ange I l{I EG ER LE I{G H: .1AX-LI{E-tEI{GTH) ; : STRI{G(1 I'lAGt en0: is type C0'll{AND-INF0 ' recono {AtlE : C0l{llAND-tiA}tE; ARG_RANGE; ARGUI{ENT: : LI NLI {F0; LIN t end; en0; Excmplo 12.1 Continuao ll,l Excmplo Contlnuqlo

t24

ttt
'-Jl

DE -0 , -PA C X AGE : t r rt h GL 0 B A l. - F I NI T I 0I {IS packa gUT e I LI T Y - RO U Iis t{ E S I-O u seGL 0 B A L- DE F I lI TIO i-P S,AC KA G E ; -- Th i s pac k age de inesth e i n p u t a n do _ u tp u t,fi l e sthe , ook -- a h e ad f or re a d i n gi n p u t l i n e s , a n da n u m ber c har ac t er of s r i n p u t a n do u tp u to f the tert fo -- u n ct ionsandpnoc e d u re : I I N- F I L E ; SOU RCE - T E X 0 UIPU I- T E X T : 0U - F IL E ; N tXT-INP Uf - CHA : CH R R AC ER ; ( F: i n IN -F IL t) re tu rn B 0 0 L EA { ; u n cti o nlr 0RE - DA T A u n cti o nt lO RE - O N_LI Ni(F : -F IL E ) re tu rn B 0 0 L EA l{ ; n IN ( C H AR : C H AR AC T u n cti o nDI G I - V A LUE re tu)rn IIT EGE R ; in TR ( CH p ro ce d u rG e E I - CHA R AR o:u t C H AR AC T ER ); p ro ce d urG e E T - LI NE ( LI N E :o u t L IN L IN F 0 ); p ro ce d u rCL0S e LO UT - L ; I{ E p ro ce d u rP e RI NT - } |A R(GIl l l A{ R GIl i {n : SR Il { G) ; p ro ce d urP e RI NT - T E(X LIIN E :n L IN E -IN F 0 ); p ro ce d u rD0e I NDE NT ( NU i { -S PA C iE n S: IN T EGE ; R) p ro ce d u rS e T A RT - i{ E W-L ; IN E p n o ce dur eI NI S H- P A G E ; F
e n0:

A l0t l: t n I {D {l RA {( 0 0 vI RBA lf l ( l {0ilf ;t ) 9t0rdurr ( lt {Dt {: I NDEI {T proe RAI {G E) ; I l{I ATI 0in rdurr 0 0 i'ARAG RAPI end;

I - 0PACKAG E; w i th GL0B A L-DEFI {I I 0 {S, package is bodyU I LI TY- R0U I NES use GL08AL-DEFIUTI0l{S, L0-PACKAGE ; P A GL{U l l : I l{TEG ER; : I NTEG ER r angeI . . PAG LSI ZE; LI{LN U I{ := SCI I . {Uf ; N U LLC H Aconst R: ant CHARAC ER

tq in F: I N- t I LE) r et ur n B00Lt AN uncti oni | 0R E- DATA( i t her e ar e nonech a r a cte r s -- Thi s fun ct iondet er m ines -- on the i nput iI e. begi n i f not E l {D- O F- FI Lt ( t F) hen return TRUE; el se rel urn FALSE; end i i en0;

wrth GL0BAL-DEF I l{ITI01S ; packa gC e O ilA ND- R0UT is IN ES u seGL O B A L,IDE NI T FI 0 { ;S -- Th i s p ac k age o r h a n d l i n g def inesth e p ro c e d u re c o rnmand i nes. p ro ce d u rD0e C0f { l{ A ( TE XI-ti 0 D : E out 0DE; N DS I N D E N A IO lu i : t ItD EN I-R A NGE ); o
e n0:

( F:I N- FI LE) r et ur n B00L EAI{ is functi onl l 0R E- 01{- LI Ntin -- Thi s fun ct iondet er m inds if t heneanem one char act er s -- on the l i n e beinglead, n begi t hen F) i not E N D- 0F- LI NE( return TRUE; el se return FALSE; end i ; end;
$.

w tt h G L0B AL _DEFINII0l{S ; p a ckage T E X-R0UTINES is use GL0BAL_ DEFINITIO NS; - - T his p acka gede fine s t he pr oc edur es or handling v e r b a t i m a n d - - paragna ph in es. Exomplo l2.l Continuaiio

r et ur n I {TEG ER ls functi onD IGI - VLUE( CHAR: in CHARACTER) -- Thi s unct iondet er m ines t he num er ic value -- o a cha r act er . begi n return C H ARACTER' PO S( CHAR) cHARAC ER', P0S( ; '0') end i

Excmplo l2.l

C.ontinuao

t26

ttl

qlrF

*"!{l|rF

p ro cedureGET-CHAR (CHAR: out CHARAC ER) is -- T his p roced ureo bta ins t he nex t input c har ac t er -- and nain tain s a on e c har ac t er look ahea. 0 e g ln : = NTXT-INPU-CH R; C HA R i ilORE-DATA(S0URCLTEIT) then i f l 0RE S0U RCLTEXT) t hen -0 N-LINE( GET(r{XT_I{PUT_CtlAR) ; else N EXT_ INPU_CH := AR NULL_CHAR: end if: ' end if; end:

pror rdurr,(l l05t 0Ul I I NL t s chaf dct er s -' htr l )r{rt('( lur e Sklps0ver dnv excess
- - o n 't I t n tl . begln SKIP-LINI; (R N EX- IN PU T- C HIAR ) GET-CHA end;

( |AR GINr : n STR IN G) is p r o c e d u f eP R I N T- I4 AR GIN - - T h i s p r o ce d u r ep r tn ts th e m a r g i n a r e a o f a n o u fp u t i l ne begin P U ( A R G IN ) ; end;

p ro cedureGET-LIN (L INE: o ut LI I { LI NF0) is - - T his pro ce du reob tain s t he nex t input line, and - - renlo ves a ny trailin g b ank s . TRAILING-8LA{KS : B00LEAli : b e g n LIN E .LENGTH := 0 ; < lA LLt Nt - LE { G TH) while (L Il{E.LEI{GTH and l{ O RE- 01{ - L I l {E ( S O U R C L T lo Eo xp T) + 1: LIN t . LENGH := LINt.L ENG H (L I{E. G E T _ CHAR Ir{AGt ( LI r { E. LET{ G TH) ); end loop; I{E: CLOSI_OUT_LI T RA I LING-BL ANKS := TRUE; while T RAIL II{G-BL A{K S LI I { E. LE { G TH a nd / = 0 loop if LINE.IiIAGt(LIlIE. L E { G H) t hen / = BLAI I K T RAILII{G-BLANS := FALSE; else := LI{ E. lENG H LINt. LEIICTH - l; end if: e nd I oop; end;

( L IN E: tn L IN E* IN F0 )ts pnocedure P R I tIT- TEXT - - T h s p r 0 ce d u r ep Itn ts th e te xt o a n o u tp u t Ii n e begin L IN E.L EN GTH P U T( L I {E I IIAGE( I. ; )) end

N U ft- SPAC ES: is i n IN D EN T- R AN GE) p r o c e d u r eD 0 - IN D EN(T - - T h i s p r oce d u r eh a n d l e s th e g i ve n i n d e n ta tl o n . begin + {U I{- SPAC+ l); ES S E *C 0 L( L E FT- I{AR GIN end;

Exomplo l2.l Continuao

l2.l Contlnuao Excmplo

r28

TT
.,s l

S i t oro ce d u n eI A RT - NE |- LIts eau s e s a n a d v a n c to e a n e wo u tp u t Ii ne. -- Th i s pr oc edurc 0e g l n = LINES-PER-PAGE then if LII{E-lUll FII{I SH-PAGE ; e l se N EI{ _LI NE ; l l; L IN LNUI:I= LI I { Lil U }+ e n d i f; end ;

U I LI TY- R0UTI NES; D w rth GL0B A LLFI NI TI 0NS, is NES package C Ot {t lANDRO UTI body U I LI TY- R0U I {ES; useGL08A L - - DEFI {I TI 0NS, procedure C ENTTR- LI NE; : NF0) ( C0t t l{AND: out CO l'lllAND- I procedure P ARSLLI NT : r n LI Nt - l| |F0; LI NE GET- ARG UI('t ENT 0r0cedure : r n C0LUt{N-NUl'l ; tND-0F-COl'tI'IAND : tn out Col'll{AND-NAllE: NAi'lE ; ARGUI'IEN : out ARG-RANGE) ( LI NE r n LI NE- I NF0; pnocedune GE - C0l'llt lAND : out COllltAND-NAtlt ; NAIIE out C0L'Jl'lN-NUt'l) ; END--0F-COl'li{AND

pro ce d u n eI NI S H- P Ais F GE eom p l e teth -- Th i s pr oc edur c s e te x t 0 f a n 0 u tp u t p a ge n u mb e r. -- a n dpr int s t he P ag e IN EGE:= R 28; : c ons ta n t PAGL NUI { - C0I := IN T EGE R 5 7: : c ons ta n t PAGL { Ul{ - LI llt . : PA G L S IZ E; l {U l {-BLA I { LLI {IE . S be g rn := PAGLNUI'I-LIllE : IINLNUII; NUI-BLANLLINES r{E}/-L INE ( tiUt-BLAI{LLIl{tS) ; ( PAGE-NUII-COL) SET-COL ; (" -" ); ( P A G E -N U PU ): T ("- " ) ; P UT PU T + t; - E P AGL N U I' -L IN E) = ( P A G E -SIZ NU}i -BLA NK - lI;il55 INES) ITTI,J_L INE (NUil-ELANLI; L IN L {UI:{= l; + l; := PAGLNUII PAGL{UI{ end ,

( TEX - ll0Dt : out l{0DE; D 0-CO I I I {ANDS orocedure is E) I NDENTATIout 0N:I NDET{T- RAi{G lines' o com m and a sequence handles e -- Thi s pno cedur : C0itltAN0-INF0 ; NEXT-C0ltllAND : ARLRANGE; LI{LCOUNT n begi l00p = C0}II|AND-CHAR and tt0RE-DATA(SoURCE-TtXI) {hile {X-INPU-CHAR ( ; INE NEXT-COI{I{AND) PARSI_L is NAttE case{EXT-COlll{A{D => TtX-ll0DE := PARGRAPH-tl0DE; PARAGRAPH when : = VERBATI t t - t 0DE; VERBATI=> I 'l EXT- lt 0DE w hen w henI NO ENT=>I NDENTATI 0t {: =NEXT- C0I {i{AI {DARG UI {EI {T; loop UI I E lI I= t o l{EX - c0lll{At {D. ARG cENTER => f or LI I {E- CoUl{T: w hen I{I ; ER-L CEI{T end I oop; loop ARGUIIEI{ => := I to NEXT-C0ltllAl{0 f or I INLC0Uf{T whenSPACT START_NEl.J-tINE; end ooP; => FIi{ISH_PAGI: w h e nPAGE pRIr{T-ilARGI Il{) ; => l{ ( ERR0R-l{ARG IL L EGAL when pRI r r T- Tt xT t I NE) ( l{EXT- CO llllAND. ; START_I{E}I-LII{E;
end case; end Ioop; end:

beg i n -- init ia iz at ion fo r U IL IT Y-R O U II{ ES ( S O URCL T T XT ); SE_ IN P UT (O UT P UT -T;E X) SET_ O U P U : = l; L II{L N Ull := I ; PAGLNUII := I'IULL-CHAR NEXT-II{PUT-CHAR ; (NEXT_II{PUT_CHAR) GT-CHAR ; end ;

Exomplo l2.l Continuao

Excmpb I 2.1 Continuao

130
-

Iil.
,.{

procedure (C0llllAl{D: PARSE-LIl{E out COtltlA{D_It{F0) is e ses -- Th i s pr oc edurpar a c o mma n id n e a n dc h e c k s the -- I e g a I i t y of any gi , e n a rg u m e n t. L IN E : LI NLI N F O : NAI{E : COlltlAND_NAtlE: ARGUIIEI{T : ARG_RA{Gt; END-0F-C0tillAND : C0LUtlN_{Ull ; be g n ( LI ' lE ) , GET_ tI NI (LrNE,NAilt, END_0F_C0ttltAt{D); GET_C0llllAND = PARAGRAPH = VERBAIII = pAGE) t (NAl'lE or NAIIE or 'tAltE and LINE. LElGTH EllD_0F_C0I{llAliD /= then N Ai E : = I LLE G A LT e n di ; = INDEN = CEITER = SpACE if tlAilt or NAi{E or iAtiE then (LINE,tND_0F_C0ililAr{0, GE_ERGUtlt{T NAilE, ARGUilE{T) ; = INDENT > RIGH_iIARGI{ if NAI{E andARGUilEtiT then N A l, ,:lE = I LLE G A I; e srf NA l, lE / = I LLE G AL th e n COill{AND. ARGUTENT : = ARGUI{EI{T ; endi; en d i f: C0 l l l AN D. LI IIE := LI NE ; C0l'lllAND. lAllE:= NAIIE: end :

procedure is C tN t R- LI NE e and an input line t hat ls t o be cent er ed, -- Thi s procedur handles -- pri nts n er r or |nessage if t he ine is t oo long or is a c0|l|nand, : LI NE_I NFO : LIN E : I NTEG ER; LE A D IN G - BLANKS NEX-CHAR : CHARACTER; : B00LEAN IS-C0|tltlAND-LINE : begrn then if IIORLDATA(SOURCLTEXT) = C0}II|A{D-CHAR then if I{EXT-II{PU-CHAR := RUE; IS-C0t{llAND-LI{E el se := FALSE: IS-C0t]lAl{D-LI{E .i f : en' d = BLA {K loop TEXT) and}I O RE- O N- LI llE( SO URCEw hi l e N EX - I 1{PUT- CHAR (I{EX_CHAR) GET-CHAR ; end l oop ; LI {E) ; GE T_LI ( {E >TH 0 t hen i f LI{ E. LE {G < RIGHT-}IARGIl{ then i f tIl{E.LE{GTH - LII{E.LEl{GH) ;= (RIGHT-llARGIl{ LEADII{G-BLAI{K$ / 2; el se : = 0; LEADI{G-BLAI{XS end i f ; > RIGH-iiARGIl{) then LEI{GTH i IS-C0tltlAl{D-LIl{E or (LI{E. ' PRIfiT_tlARGIN ( ERROR_|IARGIl{) ; el se (r{ORtrAt_ARGIl{) PRI{T_ilARGI{ ; end i f ; ( LEADII{G-ELANKS) DO-II{DII{T ; ( LI ] {E) ; P R II{T_TEXT end i ; START-NEI.I-LINE; end i f; end;

ExrmploI 2.I Continualo

Exrnplo t2.l Continualo

,32

(L t : i n L Il { E-It{ F 0 ; EIl l {{T D ro ce d u rG e E T - A RG Ult : in C0LUtlltL{Ull ; END-0F-C0lll{AND : in out C0ltltA{D-{Al{E; r{At{E is ARGUIlE{T : out ARG-RANGE) th e v a l u e o l a n a rg u rentgi venw i th a e e rn i n e s -- Th i s pr oc edur det a s an i l l egal conmand. a rg u n e nits re p o rte d A n ill e g a l line. co n nand -C()LUllil : C0LUilN-ilUil; CHA N EX- CHA R: R; beg i n = LII{t.LEI{GTH then i END-0F-C0I|I{A{D = = then ]{Al{E SPACE or CENTER l{Al{E if := l; A RG UiI E i{ T e l se : = I LLE G AL ; NA I I E e n d if : 'e l se + l; := END-0F-C0llllAl{D C0LUtlN =tlBL ( op l ' l )A Nllo w h i e LI NE . I I iA G t(C 0 L u + l; := COLUlt'l COLUtll{ e n d looP ; IIIAGE(COLUltl{) := LI{E. ; NEXT-CHAR not R in ' 0 ' ..' 9 ' th e n i N E X T - CHA : = I LLE G A L NA I I E else := DIGIT-VALUE(|{EX-CHAR) ARGUIIEI{T ; LE{GTH then i C()tUtli /= LI{E. + l; := C0LUtlt{ COLUll{ := LI{E.IllAGE(C0LUtltl) {EXT-CHAR ;

: tn tIl{LIl{t0; (LI]{E proccdupe 0ET.-C0l'lllAl{D {AilE 0ut C0LUlll{-{Ull) ll Ell0-0t-Col'ltlA{D: anddet er nins line a connand e -- Thi s o r ocedur analyses cot nt nand. -- the ki n d o
:= l0; constantI{IEGER l{ALC0l{llA{D-LEI{GTH: tlALC0tltlAilD-LEI{GTH); .. : STRIT{G(l C0lltlA{D-STRI{G : B00LEAi{; EREALF0U{D : = FALSE; BREALFOUND := 0; El{D-0t-C0}l}lA{D I =t o l0 looP or C 0LUI , |l{: t hen >N or EREALFO UND LENG TH) LI E. i (C 0 LU| := BLA{K; COtlltA{D-STRI{G(C0tU}tN) = BLA{K then elsif LI{E.IllAGE(C()LUltl{) := BLA{K ; COl{tlAND-STRIt{G(C0LUll{) BREALFOU{D el se ; := LINEII{AGE(COLUllN) C0t'll{AltD-STRIilG(C0tU|'lN) + I; := El{D-0F-C0il{A{D E{D-0F-C0l'lAilD

',

nAR oi n l 0' . ' ' 9' then o r' H{ ) EX T -C H i ( C0LUll{ / = L I{ E.L E { G T := ILLEGAL; NA I I E e s e + DIGIT-VALUE(I{EXT-CHAR) := ARGUIIEI{T'10 ARGUTEilT ; end if ; e nd if ; e n d if ; e n d i f; en d ;

= ":PARAGRAPH" t hen C0l,|l{Al{D-STRI{G PARAG RAPH; := N A IIE = ":VERBTIl{ " t hen elsif C0tlllAt{D-STRI{G l{AllE: = VERBATIII; = " : I{DE{ t hen elsif C0llllAl{D-STf,I{G := I{DEI{T i{llt = " : CENTER " t hen elSi C0lllAI{D-STRING := CEi{TER; ItAltE = ":SPACE " t hen elsi C0llltAt{D-$TRIilG = : SPACE; {AtlE = ":PAGE t hen elsi C0llf{All0-STRI{G := PAGE; {A}lE el se := ILLEGALI t{AilE if

Exrmglo12.l Continua@ Errmpb l2.l Contlnueglo

l9l
,lr.*

( I{DEI{TTI0{: tr procedure in I{08{T-RAllGt) O0-PARAGRAPH tttt h CL O8AL-DEF I {ITI0{S, LI TY-R0UTI{ES UTI ; package bodyIEXT-R0UI{ES is use GLOBALDEFII{ITIO{S, UTILITY-ROUTII{ES procedure (ll0RD: GET-|rJ0RD out LI{LIilF()); procedure (}l()RD PRII{I_i{ORD : in LI{LI{F0; I{DEl{ATI0l{ : in IDEI{T_RAiGE ; C0LUI{{ : out C0LU}ll{-1{Ull) ; e i n3 linos, tak oneor ; or e par agr aph -- Thi s pr ocedurhandles |,ordt, betr,sn anddet et ingext r a space o nel,par agr aphs -- account : constantI{TEGER PARAGRAPH-I{Dt{T : LII{LIi{F0: X0RD : CoLUilti-llUtl colUil{.{Er{-:I1{DE{T ; : B00LEA{; {E}I-PARAGRAPH

I l{DE {TATI 01{; C 0LU tl l { ' = := TRIIE; NEI/-PARAGRAPH p ro ce durD0_V e (IN D E { T AT I0 : D E IIT _ R N E RB AT IfI i nNIN i sGE ) -- This pr oc edur h ea n d l e s o n e0 r rn o re v e rb a ti m l i nes. tI{E : LI{LI{F0; NE}J-LEI{GTH : INTEGER; begin while NEX-I{PU-CHAR and }i0RLDAA(S0URCLTEXT) /= C0I,|IA{D-CHAR loop (E LI { E ) ;. GE T - LI { >TH i LI t { E . LE I { G 0 th e n + II{OEI{TAI0{; IlEl{_LE{GTH := LII{8. LEilGTH > RIGH-iARGII{ i l{El'l_LE{GTH then ( ERROR-IIARGI{) PRII{T-IIARGIN ; els e pRI{T-[ARGIt{ (N0RilAL-ilARGIN) ; end if ; ( NI DO _I NDE I N O E N T A IO ; il) > IALLINLt-ENGTH if NEI.i_LENGTH then (N E tJ -L E NGH LI NE . LE N G HL IN E .L E{ c-T H := - l A X -LIN E -LE ttGTH ): end i f ; (L P RI ' I T _T E XIN T E ); end if ; START-I{EI'I_L I I{E ; e n d loop; end; I oop and l,l0RE.-DATA(S0URCLTEXT) while NEXT-INPUT-CHAR /= C0i'|i{A{D-CHAR (liORD) GET-l'l0RD : =0 t hen_- -blank line f ound TH i f l {()RD. LE {G last line then -- close if COLUtlt{ /= II{DE{TATI0{ .{EI{-LIilE; := II{DE{TATIOil; COLUI{{ endif ; := TRUE; {EI{-PARGRAPH I {E START-{EI{-L : el se H looP w hi t e I {( ) RD. LEI {G / = I0 then i {EI{-PARAGRAPH + PARAGRAPH-II{DEI{T; := C0LUI{{ C0LUll{ {DEI{T I 0l{ + PARAGRAPH-I {ttt_I DE{: = I {DEIITAT ; (}'0RD, C0LU}iil) {E}'-I{DEI{, PRIi{_U0RD ; := FLSE; {EbI-PARAGRAPH e lse (l{0R0,Il{DEl{TAI0{, PRIilT_l{oRD e nd if ; (rORD) GET_r,r0RD ; endloop; end i f ; CTOSE_OUT,LII{E ; then COLUI{{ /= I{DE{TATI0l{ START-1{EILLIilE:

Errmpb l2.l Continuago

Exrnpb I 2.1 Continuaio

l3

-qFF-

pro ce d u rG e E T - I { O(RD l{ 0R Do : u t L Ii l L II{ F 0 )i s -- Th i s pr oc edune r ead si n th e n e x t w o rdo a p a ra g raph. 8LA{LCllAR: CHAR; D eg rn . = BLAIK) while (IIEXT_INPUT_CHAR and tlORLOl{_LIt{E(S0URCE TE)(T) oop (BLA{LCHAR) GEI-CHAR ; e n dl o op; ll()RD. LE{GTH := 0; whie NEX-I{PU-CHAR and tloRE-01{-LI{E(S0URCLTEXT) /- 8LAllK l00p < IIALLI{E_LEI{GTH i l{0R0.LE{GTH then + I; l,0RD. := I{()RD. LE{cH LEI{GTH (I.J0RD. GET_CHAR IilAcE(ll0RD. LEI{GTH) ); e n di f ; e n d l o op; en d ;

l 0RD procedure : in LI I {E- I l{t 0; P R INT- lt O(RD : in II{DE{T-R{GE; II{DENTTI0N rs COLUIIH : in out C()LUll{-{U}l) e r nt s t he next vor d in a par agr aph, -- hi s procedur pr as p0ssible. -- attempting t o f ill a line as r nuch : BOOLEA{ II{E FIRST-}IORD-O{-L ; E'|D-0F-I.J0RD : II{TEGER; begi n = Il{DEl{IdTI0{ then if COLUlll{ := TRUE FIRS-TIORD*O{-LI{E ; + liORD. LEI{GIH; := C0LUllt{ END-0F-[{0RD el s := ' FIR S T- W0RD- 0NLIFALSE; {E E{D-OF_TIORD end i ; > RIGHT-}IARGII{) then and (E{D-OF-}J0RD if not FIRST-W0RD-0{-LI{E -- ton' t , it on cur r ent line' START-NEI{-I-INE; : = I{DEI{TAI0t{; C()LUtl{ : = TRUE FIRST-|'I0RD-0N-LINE ; + l{0RD. LE{GTH; : II{DE{IATIO{ Ei{D-0F-I{0RD end i f: > IIALLI{E-LE{GTH then if tl{D-0t-l{0RD -- i s fi rst wor don line andst ill won't f it - IIALLIilLLE{GTH); := }IORD.LEI{GTH I{ORD.LE{GTH - (EilD-OF-t{0RD ( ERROR-IIARGI N); PRI{T_}IARGIN ( Ir{DEl{TATI0{) D0_It{DENT ; (}J0R0); PRIt{T_EXT START_I{EI{-LItiE: el se then i FIRSI-W0RD-01{-LI{E (r{ORilAL_ilARGI{) PRr{T_|RGI{ ; ( Ir{DE{TATI0l{) D0_I{DEr{T ; el se (BLA{1() PRI{-TEX ; end i f; (r.r0RD) PRIr{T_TEXT ; : = E{D-0F-}JORD: C0LUllN end i ; end;

#
l'

l2.l Continuro

Exrmpb l2.l Continulo

rfl

..*d

r9t

lf
! 'il

ltr

IiUDICE A LFA B TICO

Delta,33 vedadeo,33 41 , 59 Dcr;ieualdade, l ) r g : t o s-, J 73 Discriminante, ?4 de registro, do,73 mitaes patesdo, 73 valordo, 74 Durao,99 Elaborao,63 Encerramentoda tarcfa, 92 de Entrada,102 [,ndereo de objeto, I 14 Entrada,90 l0l de interruptor, do texto, 87 Entrada/Sada Sadaem nvel baixo, 88 Entradai Ero de Limitao,108 Escolha,42 63 -65 Escopo, 102 de Endereo, Especificao de pacote,24 ,53 de procedimento,.25 112 Exceo de erro de selea-o, de erro numrico,109 em Ativaode Tarefa,112 112 levantadaem Tarefasde Comunicaes, IO8 STORAGE.ERROR, IO8 TASKING-ERROR, de'luefa,92 Expresso,39-41 Booleana,4l Faixa de ndice, 36 1 alcance ,8 ,1 9 , 3 1 Falsa,32 Fatia,3 Fila de entrada,96 Funo,47,48 Global,65 ndice,35 88 Genrica, Instanciao Instruo,14 Abort,112 Instruo Accept,95-lL2 de lao,44 de Retorno,43 tF,42 select, 98 101 Inteiro Baseado, lntemrptor, 101 JLao Bsico,44 F o r , 1 8 ,3 0 , 4 4 Wh i l o , 4 5

l0 kvant:ru uma r:xuctlo, Limitao, 78 de faixa, 3 d e n d i cc,3 33 de preciso, Limite,35 superior,35 Linha corente, 84 Literal numrico,34 I-ocal,64 M o d o ,3 8 Mdulo,37 de representao, I I5 Mudana Negao,40 lgica,40 109 Nomeda Exceo, l5 de PontoFlutuante, Nmero Objetocomposto,34 75 de acesso, ?3 de registro, da tarefa,43 Operador,40 ABS,4 0 aritmtico, 32,41 de diso,41 de Exponenciao,41 de igualdade, 4l, 58 de multiplicao,41 d ordenao,41 <leparticipao, 4l E,3 2 ,4 0 - 4 2 IN ,4 I l g i co ,3 2 ,4 0 M OD ,4 I N OT, 3 2 ,4 0 oR, 32 relacional, 33,41 R EM ,4 I so m a , 3 3 ,4 1 unrio,40 63 Ordemde elaborao, 36,44 Outros, tl7 de Entradae Sacla, Pacote I l3 de Enumerao, d e E/S,1 6 ,8 8 de E/S Fixo, 88 de E/S de Inteiros,89 de I-0-Float,89 ' E/S de texto, 89 genrico, 88 l6 Palawa-chavc, reservada, l5 4l Parmctro, cornnomc,4[ 49 tlc ussocilllo,

g rcg ac lo, 16, 20 - 2 1 , 3 5 , 7 3 p osr c ional,36 , 7 3 tl c regis t ro, 73 Alocucl or,76 Alt (:rn i l t lv aaberta ,9 9 (l e re t ardo, 99 , l 0 l tl e sc le o,92 Alt crn at iv o(a), 96 - l 0 I An inl ra m ent o, 60 , 6 4 - 6 5 A r g unrc nt o, 49 Ar qui vos . 8T A S ('II (An rc ric am N a t i o n a l S t a n d a t Co d e br Inl b rm at ion I n t e r c h a n g e ) ,3 2 Associ ac ; o de Pa r m e t r o s c o m N o me ,4 8 vcrd adc irade p a r m e t r o s ,4 8 A t iva fo c lc t arefa , 9 2 t r ibui i1o, 30, 4I , 5 9 A t r i buto, 30, 116 dc co nt agc m, 1 1 7 dc D c lt a, 1l7 ttc t) git os , I l7 rl c rcprc s ent a o , 1 1 7 tl c u rn Bnt rada , 1 1 7 rl c u ma T arc f a , 1 1 7 tl c 'l -ipos ,30, I l 7 ti o P rim eiro B i t , 1 1 7 :i tJ((" 30 l It ll i ()tc c adc P ro g r a m a s ,6 ( unrctcrclit c ral, 3 2 ( l e t r a s ) ( harnatlac onc lic i o n a ld e e n t a d a , 9 8 tl c cn t rat la, 93 tl t' proc c rlilnen t o ,5 I ,8 rl e str hprogram a4 ( ' l : irrsu l u t lc ('ont e x t o , 6 6 rl c reprc s ont a o 1 , l3- I l5 rrrl crat rv a, 44 USt,.,l, 55 wi l i l, 14, ( r lurra t' orrc nt c , lJ 4

Cornentirio, 16 Compilao separada, 65- 70 Componcnte de registro, 72 Conrunicaes, 93 Concatenao,38 ConjuntoAgregado, l'1,20-21,35 at r ibui o, 17, 2 0 - 2 1 ,3 S com limitaes ou limitado,36 c om ponent c ,3 6 dinim ic o, 3T ndice, 34 parmetro Formal.36 semlimitaes, 37 t ipo, 35 Convenes de Chamada, 49 Converso de Tipo,115 de Tipo Derivado,I I 5 Corpo,5 1 da funo,51 da tarefa,9l do pac ot e, 26, 5 6 do procedimento, 51 do s ubpr ogr am5 a1 , ,65 Criao de Objeto,76 Decarao, 15, 50, 7 1, 9 1 de Atribuio,41 de Ca,lo,42 de constante, l7 de entrada, 90,102 de Ex c e o, 10 7 de Funo,5 I de nulo, 42 de objeto,15 de pacote, 54 de Retardo,99 de subprograma,25,50 de subtipo,80 de tarefa,90 de tipo, 28 de Tipo Incompleto, 75 Dcfiniotlc f ipo de Aocsso, 75

t40

lll

tlt;F

poslclonal,49 verdadeiro,48 verdadoiro de substituio automtica, 87 Parto de Inicializao,-S? ELSE de SELECT, 102 privada, 58 yrriante, 74 s ve l2 , 5 ,53 swl depacote, 25,53 Ponto e vrgula, 15 Pragma, I 16 por linguagem, deinido l16 Procedncia, 39 hociso,33 relativa, 4I himeiroAtributo, 29,37 Procodimento,4T Rocodimento GET,ls P U T, 9 5 ,9 7 Programa,60 om n h a ,1 16 principal, 66 hogramas Exemplos: contar Troco, 16,21 conveso detemperatura, l5 dccodicao de.Mensagens, 92, 100,lO3 formatado de Textos. 87 inveso de Matrizes, i06 sta deheos,86 oito Rainhas,63i 69 tiro ao Alvo, 23 Popagato deexcelo, 110-ll2 Rocompilao,69 Rogistro, 7l vartante, 74 Rogras dovisibidade, 4.65 Rolao,41 Rondez vous, encontro, 95 Rcprosontao de Tipo deregistro, l14 Rocto,4l Sclcc Arbitrd.ria, 98 Srlc, 38 docarrc.,.lrcs, 32,38 Slnal mais,40 mono8,40 Shcronizag8o,95

ouT,48

dclro,44 formal,48 EE 3cnrico, I N ,4 l I N OUT,4 8

Sobrocarga dc rubprojnmu, 52,85, g6 Som a, 33, 4l Subnhar,33 Subprograma,4T, 65 NEIV-LINE, 85 Subtipo positivo, 80 Subprograma da Funo, 47 SET-COL,85 Subtrao,41 Tarefa,90 dependonte,92 TerminaoAnormal, 112 Testede participao,40 de participaoNOT IN,41 Tipo,28, 40; 41 booleano, 32,42 composto,34,7l da tarofa, 9l de acesso, 75 de Base,80 de Ponto Fixo,33 de Ponto Flutuante,33 de Registro,Tl de resultado,43 derivado,66, l16 de Caractere, 34 de Enumerao , Lg, 29 escaliil,28 fixo universal,4L lutuante, 33 inteto,77,34 numrico,32 privado,58 privadolimitado,53 rcal,32 srie,80 Tratar uma Exceo,106 ltimo atributo,30,37 Unidadede biblioteca, 65 de programa,60 de Programa Genrico, 88 Valor Booleano,32 composto,3T de registro, 74 do Parmetrode substituioautomtica,4g nulo de acesso,75 veade,32 Variante, 74 Varivel,4l Verdadeiro,32

BIBLTOICA.JACINTO UCHA.:
,rit8.&*-

I I MA

A l-N
IN'I'I it
tls r qlrrdr ,tl l : ,;,,e
I I li,t,,r: , t .' :.,rt ! ,,:!,rF., . ri

ll r l l( ',,\l

UMA INTRODUAO

I la

let rlc liva

,l = .i r .l a

,,,,t,,r t= a1; rr j 1 =

,.

l l l l l v t s f ll H l l g l n . i l t
la rl l r l t F if le l g : l t t tttetlr rlt t t ' | lrt i t f llf t rr att r l atq g r F l l r l r l trt lllr.tflAlil rfe rlf l

l r l {rfi l rra l g rt*l E h fr rl t]l e {i l rl ,i l l g

e,r il l rre|ll,,r = e r fe

.lr i ,!,,,r ,

r ilfl e,=,. l,= ,=

,= l:, j

l.r er .r ta4:r ,r .:r r ,,r r ati f,,i !etF ,,r I 1r i:i:, I ,. i r e,

,q ,,,.r = ,

t 1

fa, it lil,.r j r lr : ,lia +

r ,,,t .r j !,.

l l r q rl r r r Jl l l tl glr r r l rrrr

r ll - = ltsr i.l,. elg i.r ,i: ,,e

tar r .l ,. la I , | t= , ;:

t,

;,sE r e ; ,fe

lr ur

t,,ilr ,:

,1, I
r-i t1\

rl
ri l

a
N .(h anr. 004.438i\D4

o t)

Ot
Lr

PDI

.i.43841)A { /3a

A u t or :[- cd g a r d . Il cn r y ' [- t uI o: Atll Unrit Introcl

rl

ililtililtililililill ililil1 ililrilIilililtililtilil|


l t,l ,l ..1()
A c . ()7 ()()

l\

ll(

AtrA
l I

c lttilloa toglstll(l uo u. ;r' ('(rYtlllrlent ADA Joint lognm

Offlto'

;
I

Das könnte Ihnen auch gefallen