Você está na página 1de 16

Captulo 3

A VARIVEL DE TIPO INTEIRO Programa de exemplo------> ONEINT.ADA Examine o programa nomeado ONEINT.ADA. Algumas linguagens de programao no requerem a predefinio de uma varivel antes de ela ser utilizada, ou ela pode ser utilizada sem antes Ter sido declarada e o sistema possui algum mecanismo pelo qual cria a varivel e se prepara para o seu uso. A linguagem Ada exige que se declare especificamente todas as variveis antes de estas poderem ser utilizadas. Temos que dar varivel um nome que um qualquer identificador vlido, e informar o compilador da forma como planejamos usar a varivel atribuindo-lhe um tipo.

O QUE UM TIPO? O tipo define um conjunto de valores que a varivel pode assumir bem como define o conjunto de operaes que podem ser executadas com essa varivel. A linguagem Ada muito estruturada e tem regras muito rgidas que limitam a forma como uma varivel pode ser usada. UMA REGRA DE ADA QUE NUNCA SE DEVE QUEBRAR A linguagem Ada requer que qualquer coisa que se pretende utilizar tenha previamente sido declarada. Esta regra inclui variveis mas tambm constantes, procedimentos, funes, e todas as outras entidades.

AS DECLARAES with E use . As declaraes with e use, presentes nas linhas 2 e 3 deste programa, contm os procedimentos Ada.Integer_Text_IO e Ada.Text_IO, que mais tarde analisaremos de forma mais detalhada. No entanto podemos desde j dizer que:

O termo Ada.Text_IO refere-se a um package de Ada que nos proporciona a possibilidade colocao de texto no monitor inclusive e vrias outras entidades que nos permitem a formatao do texto a colocar no monitor. Fornece-nos ainda a possibilidade de introduzir texto a partir do teclado. O termo Ada.Integer_Text_IO refere-se a outro package Ada que nos d a possibilidade de colocar no monitor variveis do tipo INTEIRO de um modo formatado, dando-nos controlo sobre o nmero de colunas usado, e sobre a base de numerao a utilizar (binria, decimal, hexadecimal) bem como outras opes. A declarao with, porque menciona estes dois packages de biblioteca, proporciona-nos a possibilidade de envio de texto e valores numricos para o monitor, porque faz uma cpia das duas livrarias tornando-as disponveis para uso do nosso programa. A declarao de use, porque menciona ambos os packages, torna muito fcil a utilizao destes packages dentro de nosso programa. Sem a declarao de use, teramos de escrever todo o cdigo associado ao tratamento de imput / output o que nos levaria a um cdigo muito mais feio (no entanto, alguns programadores acham prefervel esta situao).

COMO DECLARAR UMA VARIVEL? Retomemos o programa exemplo ONEINT.ADA e examinemos o programa na sua linha 7. A temos declarada uma varivel que ns chamaremos Index, ser do tipo INTEGER, definindo uma gama permissvel de valores que lhe podem ser atribudos. A maioria dos computadores de 16 bits permitem uma varivel do tipo INTEGER com um alcance de -32.768 a 32.767. O alcance correspondente para computadores de 32 bits de -2.147.483.648 a 2.147.483.647 mas a definio de Ada permite flexibilidade em ambos estes alcances. O tipo INTEGER usado para declarar uma varivel escalar que uma varivel que pode conter um nico valor. O palavra INTEGER no uma palavra reservada mas sim uma palavra predefinida que ns podemos redefinir se assim o pretendermos. possvel redefinir esta palavra, e muitas outras semelhantes e predefinidas, o que nos possibilita fazer algo com um significado completamente diferente dos significados predefinidos delas.

No ltimo captulo, estudamos que a parte declarativa do programa situa-se entre as palavras reservadas is e begin, e realmente, no presente programa exemplo declaramos a varivel Index naquela rea do programa. O resultado no fim da linha 7 que ns temos uma varivel nomeada Index que do tipo INTEGER. Porm, ela ainda no contm qualquer valor til.

COMO USAR A VARIVEL NUM PROGRAMA? No ltimo captulo referimos tambm que as declaraes executveis situam-se entre as palavras reservadas begin e end. No programa exemplo, temos algumas declaraes executveis dentro daquele limite, nas linhas 11 a 18. Na linha 11 atribumos o valor de 23 varivel Index, o que vlido porque 23 est dentro do alcance de valores permissveis que podem ser atribudos a uma varivel do tipo de INTEGER.

O OPERADOR DE ATRIBUIO A combinao := pode ser lida como " adquire o valor de ". A linha 11 pode ento ser lida como, " Index adquire o valor de 23 ". O sinal igual sozinho reservado para outro uso. De fato, se ns escrevermos Index = 23, temos uma instruo matematicamente correcta, mas s se o valor de Index nunca for alterado. Ora sendo Index uma varivel, o seu valor ser mudado ao longo da execuo do programa, e logo a igualdade no se verificar. A linha 12 ordena ao sistema que coloque uma linha de texto no monitor e que deixe o cursor no trmino dessa linha. Na linha 13, ns usamos o procedimento predefinido Put para informar o sistema que deve exibir no monitor o valor de Index que 23. Este procedimento Put parte do package de Ada.Integer_Text_IO que declaramos antes. O Put da linha 12 da Ada.Text_IO. Mais tarde se explicar que Put de qual package e por que. A linha 14 desloca o cursor para o comeo da prxima linha do monitor. O procedimento New_Line pertence ao package Ada.Text_IO.

PRIMEIRA OPERAO ARITMTICA

A linha 15 contm uma declarao de aritmtica e far o que parece fazer exactamente, " Index adquire o valor de Index somado com 12". O valor de Index armazenado (23) passar agora a ser 23 + 12, ou seja 35. O nmero 8 no Put presente na linha 17 informa o sistema que deve exibir o valor de Index justificado num campo de largura 8 colunas. Quanto este nmero omitido, por defeito o sistema considera como sendo 11.

USANDO MUITOS INTEIROS Programa de exemplo------> MOREINTS.ADA Examine o programa chamado MOREINTS.ADA e voc ver um exemplo em que se usam muitas variveis do tipo INTEGER. As linhas 7 e 8 ilustram a possibilidade de definir uma ou mais variveis numa nica linha. As quatro variveis so do tipo INTEGER e podem assumir valores dentro do alcance das variveis do tipo INTEGER, como j definimos (de acordo com o compilador em uso). Nenhuma destas variveis tem qualquer valor associado de inicio (desde que foram criadas), ou seja no tm um valor inicial. A parte executvel do programa pode atribuir um valor a cada uma delas. A varivel nomeada Cat tambm uma varivel do tipo INTEGER mas logo depois de ser criada, lhe atribudo um valor inicial de 12. Igualmente Dog criada e inicializada com o valor de -5. Na linha 11, definem-se trs variveis e a cada uma atribudo o inicial de 1000. De acordo com a definio de Ada, a linha 11 comporta-se como trs linhas diferentes numa nica declarao. Na linha 18 encontramos uma diviso de inteiros, cujo resultado ser a truncagem da parte decimal, no se efectuando qualquer arredondamento. Nas linhas 19 a 22 ordena-se a exibio dos quatro valores no monitor, com um estilo de programao que utiliza vrias declaraes por linha, o que simplesmente uma questo de estilo. Nas linhas 24 e 25, temos exemplos de clculos matemticos mais complexos, mas que so facilmente compreendidos. A ordem de precedncia dos operadores matemticos ser discutida com mais detalhe um pouco mais adiante, no entanto podemos j afirmar que ela semelhante s outras linguagens e segue o bom senso. Nas linhas 26 e 27 ilustra-se o uso dos operadores mod e rem, os quais retornam o resto obtido a seguir a uma operao de diviso inteira .Estes operadores s diferem no sinal quando so envolvidos nmeros negativos, assim:

Mod - O resultado adquire o sinal do segundo operador. Rem - O resultado adquire o sinal do primeiro operador. DUAS NOVAS OPERAES Na linha 33, temos o clculo do valor absoluto da varivel Dog. A palavra reservada abs no uma funo, mas sim uma operao definida com a palavra reservada abs. O facto de se tratar de um operador, e no de uma funo, muito significativo, como constataremos quando estudarmos o sobrecarregar dos operadores. O operador abs devolve o valor absoluto da varivel que lhe dada como um parmetro. A operao na linha 34 uma ilustrao de exponenciao de nmeros inteiros. Considerando que Cat tem o valor de 12, esta linha diz que Index_2 adquire o valor de 12 elevado ao cubo. As nicas regras para usar exponenciao com valores inteiros so que, o expoente deve ser um valor de tipo inteiro, e no pode ser negativo. Note-se que o valor zero para o expoente legal. Na linha 35 temos uma combinao de algumas das operaes prvias, e na linha 36 temos uma ilustrao como obter o simtrico de um determinado valor.

COMO DECLAR UMA CONSTANTE? Programa de exemplo------> INITEX.ADA Examine o programa INITEX.ADA como exemplo de um programa com algumas variveis de tipo INTEGER e alguns INTEGERS declarados como constantes, bem como o seu uso. Nas linhas 10 a 13 temos algumas coisas novas para analisar. DOZEN e GROSS so constantes do tipo INTEGER por causa da palavra reservada constant na sua declarao. A nica diferena entre uma constante e uma varivel que uma constante no pode ser mudada durante execuo do programa. Note-se que GROSS definida em funo de DOZEN, o que permitido, desde que a constante DOZEN esteja j disponvel quando GROSS inicializada. Igualmente, a constante TWO definida em termos de BIG_NO nas duas linhas que se seguem. bvio que uma constante tem que ter um valor de inicializao atribudo no momento da sua declarao.

MAIS DUAS DEFINIES Nas linhas 12 e 13 os valores numricos contm sublinhados que o compilador de Ada simplesmente ignorar. Podemos pr sublinhados destes em qualquer parte do nmero se isso for de interesse (para fazer os literais numricos mais legveis) , mas no se pode pr mais que um sublinhado entre cada dgito. A palavra INTEGER foi omitida nas linhas 12 e 13, o que torna o tipo destas constantes ligeiramente diferente do das duas outras, no entanto temos de aprender um pouco mais antes que possamos entender ou apreciar o interesse de se fazer isto.

DECLARANDO CONSTANTES LITERAIS As linhas 27 a 29 do exemplos da declarao de valores literais que usam a notao exponencial. O expoente indicado pela letra "e" ou "E" , e o nmero que se segue deve ser positivo para um INTEIRO literal. Nas linhas 30 a 33 do-se exemplos do uso de uma base diferente de 10. A base do nmero determinada pelo nmero que precede o primeiro cardinal. O valor a considerar na referida base colocado entre cardinais e pode ser seguido por um expoente (opcional). O expoente determinado na base definida. Se nenhuma base definida, , por defeito assumida a base 10 como nas linhas 27 a 29 deste programa exemplo.

TIPOS E SUBTIPOS Programa de exemplo------> SUBTYPES.ADA J mencionamos que o alcance de uma varivel do tipo INTEGER pode ser diferente em computadores diferentes ou com compiladores diferentes no mesmo computador. A linguagem Ada fornece-nos a possibilidade de definir o nosso prprio tipo de tal modo que ser idntico em todos os computadores e com todos os compiladores de Ada. Na linha 7 define-se um novo tipo de INTEGER que cobrir o alcance de -10.000 a 20.000 o que indicado pelo uso da palavra reservada range que limita o alcance disponvel de valores que podem ser atribudos a uma varivel deste tipo. Note cuidadosamente que ns chamamos a este um tipo de inteiro, e no um tipo INTEGER. Considerando que um tipo de inteiro, tem todas as propriedades

definidas anteriormente neste captulo mas uma varivel deste tipo s pode ter atribudos valores entre -10,000 e 20,000. O alcance actual determinado especificando os limites superior e inferior separados por dois pontos (finais). A varivel My_Int definida com o novo tipo na linha 8. A declarao de package na linha 10 completamente nova para ns, e portanto alguns comentrios so necessrios. A definio completa da terminologia Ada da linha 10 ser compreendida mais tarde, quando tivermos maiores conhecimentos sobre Ada. Na linha 10 temos uma declarao do package genrico nomeado Ada.Text_IO.Integer_IO do tipo MY_INT_TYPE o qual permite a colocao de valores do tipo MY_INT_TYPE no monitor ou em arquivos, ou adquirir um valor do teclado ou de arquivos. Dizendo a mesma coisa de um modo mais simples, temos que, se pretendemos fazer um input ou um output de um valor de qualquer tipo de classe diferente da predefinida INTEGER, temos de incluir uma linha como a mostrada na linha 10 com o tipo desejado entre parnteses. A linha 11 includa para tornar o novo package fcil usar. Na linha 13, definimos um novo subtipo que de tipo INTEGER, tal como o caso anterior, com a diferena de que este tem um alcance mais limitado. Na linha 14 declara-se uma varivel nomeada Thing do novo subtipo. Qualquer tentativa para atribuir varivel Thing um valor que est fora do seu alcance definido, resultar em erro. Em qualquer instante um qualquer valor pode ser atribudo a uma varivel. Mas, o tipo de valor atribudo deve ser do tipo declarado para a varivel, caso contrrio ocorrer um erro. Isto sempre verdade em Ada e um dos seus conceitos mais importantes. A varivel Count definida como uma varivel de tipo INTEGER bem como Stuff que um INTEGER de alcance limitado. Relembre que Thing declarada para ser um subtype de INTEGER, assim tambm do tipo INTEGER, embora com alcance limitado Por causa do modo como so definidas o contedo destas trs variveis, pode ser atribudo livremente entre elas, desde que os valores atribudos se encontrem dentro dos alcances respectivos de cada varivel. Isto assim, porque todas estas variveis so do tipo principal INTEGER. Se ns tentssemos atribuir o valor de Thing a My_Int, o computador daria um erro de compilao porque estas variveis so de tipos diferentes, mas uma converso explcita de tipo pode ser usada para fazer a tarefa como se ilustra na linha 30.

Colocando a varivel a converter num novo tipo entre parnteses e precedendo os parnteses com o nome de tipo desejado, o sistema converter o tipo. A adio de Thing com 17 efectuada e a expresso inteira dentro dos parnteses assumida como sendo do tipo, desejado e que o da varivel do lado esquerdo da declarao. Note aquela converso de tipo explcita s pode ser feita dentro da mesma classe de tipo, ou seja neste caso a classe de INTEGER. Na linha 31, o tipo da varivel Thing mudado para o novo tipo antes do valor 17 lhe ser somado o que nos conduz a uma questo: Qual o tipo da constante 17?

COMO PODE A CONSTANTE 17 SER SOMADOA OUTRO TIPO? A constante 17 de um tipo muito especial definido em Ada como sendo o tipo "universal_integer" que pode ser combinado com quaisquer dos tipos de inteiro sem converso especfica. Este termo ser usado de muitas formas em lies futuras. O tipo universal_integer compatvel com todos os tipos de inteiro e tem um alcance sem limites. O alcance efectivamente de menos infinito a mais infinito. O tipo universal_integer usado para valores todo literais, mas no est disponvel para ns usarmos na declarao de uma varivel.

UM ERRO DE SUBRANGE As linhas 30 e 31 so essencialmente o mesmo, porque eles resultam na mesma resposta. As linhas 33 e 34 que podem parecer fornecer o mesmo resultado, na realidade tal no se verifica. Na linha 33, o valor,18, de Thing convertido para o tipo da varivel My_Int, (MY_INT_TYPE) e depois subtrado de 10. Ambos os valores,18 e 8 esto dentro do alcance especificado de MY_INT_TYPE e portanto no ocorre nenhum erro. Porm, na linha 34 o resultado da subtrao entre Thing e 10 tem ainda (no se deu ainda a converso) o tipo de Thing e portanto, este resultado intermdio tem de estar dentro do alcance 12 a 144. Ora, o resultado de 8 est fora desse alcance exigido, e portanto um erro de Run-Time assinalado de um modo especial chamado uma excepo. Discutiremos a excepo brevemente

RESULTADOS INTERMDIOS DE CLCULOS

Note-se que, dependendo do compilador utilizado, a linha 34 pode no dar um erro, mas antes indicar o resultado no tipo principal do qual faz parte o subtipo, e informar que o resultado intermdio est fora do alcance permissvel. Isto depende do compilador utilizado. O QUE UMA EXCEO? Muito para dizer sobre excepes, mas iremos fazendo isso medida que progredimos no estudo da linguagem Ada. Mas, uma referncia sumria precisa neste momento. Quando um programa de Ada est "a correr", e um erro, potencialmente desastroso descoberto, seria bom para o programador, poder dispor de algo que lhe permita informar o sistema de como deve proceder perante o erro em vez de simplesmente ocorrer a terminao completa do programa. A linguagem Ada d ao programador essa capacidade pelo uso de manipuladores de excepo que se escrevem e incluem no programa. No caso anterior, quando o programa descobriu o valor de 8 como estando fora do alcance permissvel daquele tipo de varivel, o programa sinalizaria o erro que aconteceu, e se nada fosse feito, o sistema de Ada terminaria o programa. Em terminologia de Ada o assinalar de um erro chamado de "criar uma exceo", e no caso de um valor fora dos limites, a excepo Constraint_Error que ser criada. Podemos depois apanhar este erro e dirigir esta situao de um modo pretendido. H vrias excepes diferentes que o sistema pode criarr e ainda podemos definir as nossas prprias excepes que num programa podem ser desejveis. Mais tarde abordaremos novamente este tema de importncia capital.

OUTRO OLHAR AO TIPO universal_integer Atentemos nas linhas 18 e 19 onde definimos START e STOP como constantes sem indicao de tipo. Estas constantes so ento do tipo "universal_integer " e podem ser usadas nas definies de alcance das duas linhas que se seguem, embora as duas linhas sejam de tipos diferentes. Se ns tivssemos includo a palavra INTEGER nas definies das linhas 18 e 19, ento START e STOP no poderiam ser usadas para definir os limites de Example2 porque de um tipo diferente. O programa exemplo nomeado INITEX.ADA teve exemplos de constantes do tipo INTEGER (DOZEN e GROSS) e do tipo universal_integer (BIG_NO e TWO). O tipo universal_integer de facto um tipo escondido e que um tipo compatvel com todos os tipos de inteiro.

COMO DEFINIR TIPOS E SUBTIPOS Para declarar tipos ou subtipos, apresentam-se aqui duas formas simples que podem ser seguidas. Type <type_name> is <type_definition>;

Subtype <subtype_name> is <subtype_definition>; Note que cada declarao comea com uma palavra reservada e inclui uma outra palavra reservada situada entre o nome e a definio. Dever ficar presente que Ada permite fazer novos tipos, subtipos, e declaraes de variveis, por qualquer ordem desde que tudo seja definido antes de ser usado. Muito mais diremos sobre tipos e subtipos no captulo 7.

O QUE SO ATRIBUTOS? Programa de exemplo------> INTATTRS.ADA A linguagem Ada possui uma lista bastante grande de atributos disponveis para que ajudam na programao. No programa exemplo, define-se um tipo novo na linha 7 com um alcance limitado para ilustrar que atributos esto tambm disponveis para tipos que o programador definiu. Nas linhas 10 e 11so introduzidos mais dois tipos de inteiros predefinidos, os tipos NATURAL e POSITIVE. O tipo POSITIVE inclui todos os inteiros maior ou iguais a 1, e o tipo NATURAL inclui todos os inteiros maiores ou iguais a 0. Ambos os tipos esto disponveis no compilador de Ada, e ambos so subtipos de INTEGER, assim podem ser misturadas todas as variveis destes trs tipos livremente sem erros de tipo.

Os atributos so utilizados para permitir o acesso a vrios limites dentro do programa. Por exemplo, pode ser necessrio saber o limite superior de uma varivel de algum tipo porque um subtipo estranho. Podemos utilizar um atributo para encontrar este limite, especificamente o atributo LAST como se ilustra na linha 28 do programa exemplo. Combinando o nome do tipo e o atributo em questo com um " ' " (apstrofe), devolvido o limite superior do alcance do referido tipo. O atributo usado para achar o limite inferior o FIRST. O atributo SIZE fornece o tamanho de armazenamento do tipo em bits de memria. Outros atributos esto disponveis para os tipos de inteiro, como se pode constatar num qualquer manual de Ada. Atente nas converses de tipo nas linhas 63, 67, 69, e 72. Os valores poderiam ser directamente colocados no monitor com o tipo BUG_RANGE atravs do uso do truque (uma cpia de Ada.Text_IO.Integer_IO) feito no programa exemplo nomeado SUBTYPES.ADA, mas escolhemos usar converso de tipo em vez de criar uma nova cpia do package de I/O. Uma vez que os subtipos NATURAL e POSITIVE so subtipos de INTEGER, eles usam a cpia do package I/O predeclarada para o tipo INTEGER e que parte integrante de Ada.

Ada - Captulo 4 COMPARAES LGICAS E PRECEDNCIAS O QUE UMA VARIVEL BOOLEANA? Programa de exemplo------> COMPARE.ADA Nas linhas 10 12 so declaradas e inicializadas trs variveis do tipo INTEGER para uso, bem como so declaradas nas linhas 14 e 15 duas variveis de tipo BOOLEAN sendo a primeira inicializada a TRUE. Uma varivel do tipo BOOLEAN tem um alcance muito limitado de valores que lhe podem ser atribudos, isto TRUE ou FALSE, e no h nenhuma operao matemtica disponvel para uso com variveis de tipo BOOLEAN. Muito que mais ser dito depois sobre o tipo de varivel BOOLEAN durante o estudo da linguagem Ada, mas para j precisamos de uma compreenso bsica das variveis booleanas para podermos estudar o controle do programa no prximo captulo. As linhas 19 e 23 ilustram como se pode atribuir um valor TRUE ou FALSE a uma varivel do tipo BOOLEAN. Porque neste programa desejamos exibir o valor de variveis do tipo BOOLEAN temos de criar uma cpia do pacote genrico Enumeration_IO para o tipo BOOLEAN. Uma vez mais, estudaremos os detalhes deste package mais tarde, no entanto deixa-se j a ideia de que este pacote torna possvel o output de valores Booleanos, como o que sucede nas 21 e 25. BOOLEAN - DECLARAES E ATRIBUIO DE VALORES As linhas 28 a 30 so ilustram a atribuio de um valor booleano calculado a uma varivel do tipo BOOLEAN. Na linha 28, o valor da varivel INTEGER One 1ao qual somado um novo valor 1 sendo depois o total comparado ao valor contido na varivel Two. A expresso reduz-se a 1 + 1 = 2, e como 1 + 1 igual a 2, o valor lgico TRUE atribudo varivel do tipo BOOLEAN Is_It.

Os vrios passos na avaliao so ilustrados abaixo: Is_It := (One + 1) = Two; Is_It := (1 + 1) = 2; Is_It := 2 = 2; Is_It := TRUE; O sinal de igual nico um operador Booleano (para igualdade), e se as duas expresses que so avaliadas possuem o mesmo valor, ento resultar um valor TRUE . Se elas no tm o mesmo valor, o resultado de BOOLEAN ser FALSE.

H OUTROS OPERADORES BOOLEANOS? H seis operadores BOOLEAN, e todos sero ilustrados no prximo programa exemplo. Na linha 29 do presente programa ilustra-se o uso do operador de desigualdade. Esta declarao diz que, se One no igual a Two ento atribua-se o valor de TRUE para varivel BOOLEAN Is_It, caso contrrio atribua-se um valor de FALSE para a mesma varivel BOOLEAN. Note-se que ser sempre atribudo um valor varivel. Finalmente, mostra-se o uso do operador "maior ou igual que" na linha 30.

TPICOS ADICIONAIS SOBRE OPERAES BOOLEAN Programa de exemplo------> COMPARES.ADA Examine o programa nomeado COMPARES.ADA e repare que todos os seis operadores de BOOLEAN so usados. Definiram-se duas variveis de tipo INTEGER e trs de tipo BOOLEAN na parte declarativa do programa. Na parte executvel, linhas 14 e 15, temos alguns exemplos de comparaes. Claro que na linha 15, Index no pode ser inferior a si prprio, e logo a varivel booleana Lies ir armazenar o valor FALSE. As linhas 18 a 23 ilustram o uso de todos os operadores BOOLEAN que esto disponveis em Ada e certamente no ter qualquer dificuldade em entender esta lista.

Nas linhas 26 a 29 ilustram-se operaes de BOOLEAN que usam as palavras reservadas and, or, not, e xor. A declarao na linha 26 diz que: se Index = 12 e se Count = 12 e se Truth tem actualmente o valor True e se TRUE (que sempre VERDADE) ento atribui-se o valor True varivel Question de outra forma atribui-se FALSE. O que se pretende mostrar que podemos combinar tantas expresses BOOLEAN quantas as necessrias para se fazer um trabalho particular. O OPERADOR or A linha 27 diz que: se Index no igual a 12 ou se FALSE (que sempre FALSE) ou se Count maior que 3 ou se Truth tem actualmente o valor de TRUE ento atribui-se o valor TRUE varivel Question caso contrrio atribui-se FALSO. O OPERADOR not A expresso da linha 28 ilustra o uso dos dois operadores anteriores combinado de um modo ligeiramente mais complexo, usando parnteses para se agrupar as expresses correctamente. Aparece aqui um novo operador, o not, o qual simplesmente diz para se inverter o significado do operador BOOLEAN que ele precede. O OPERADOR xor Na linha 29 ilustra-se o uso do operador "ou exclusivo" o qual diz que o resultado ser TRUE se um e s um do operandos for TRUE, e FALSE se ambos os operandos so TRUE, ou ambos so FALSE. Uma boa ilustrao desta operao a de considerar uma lmpada num corredor com um interruptor em ambas as extremidades. Se um dos interruptores esta na posio "para cima" e outro na posio "para baixo", a lmpada acende-se, mas se ambos esto "para cima" ou ambos esto "para baixo", a lmpada fica apagada. AVALIAO COMPLETA DE EXPRESSES BOOLEAN

O modo como as expresses so escritas nas linhas 26 a 29 condiciona a forma como sero avaliadas as expresses quando a declarao executada. Por exemplo, no caso de linha 26, se o valor de Index no 12, ento o resultado final ser FALSE e j no importa o que o resto das expresses vale, sendo um desperdcio de tempo avalia-las. No entanto, Ada continuar cegamente, pela linha inteira, avaliando todas as expresses, desperdiando tempo uma vez que deveria saber o resultado final baseado s na primeira comparao. H porm, um modo para dizer ao compilador que pare assim que saiba a resposta decisiva, por meio do uso dos designados "operadores de curto - circuitos". O QUE SO "OPERADORES DE CURTO - CIRCUITOS"? Estudando a linha 32, podemos ver que se Index for igual a Count, iremos dividir a constante 9 por zero na segunda parte da expresso. Adicionando a palavra reservada then ao operador and ns fazemos com que o sistema saiba que no deve executar a segunda parte da linha 32, ou seja o sistema j sabe o resultado final, e portanto as operaes restantes so curto-circuitadas e no so avaliadas. Neste exemplo, se Index igual a Count, o primeiro termo FALSE e no h necessidade de continuar a avaliao da declarao uma vez que, tratando-se de um and, qualquer que seja o valor do segundo termo o resultado ser sempre FALSE. A diviso por zero , neste caso, evitada porque a diviso no sequer tentada. De igual forma, na linha 33 ilustra-se os curto - circuitos para o operador or que so obtidos adicionando a palavra reservada else. Neste caso, se Index igual a Count, o resultado ser TRUE qualquer que seja o valor do segundo termo, e portanto, o segundo termo no avaliado evitando-se a diviso por de zero. Na linha 34 temos uma situao idntica da linha 33 mas ilustrando-se o uso de parnteses para tornar a lgica um pouco mais legvel. ORDEM DE PRECEDNCIA A ordem de precedncia de operadores determinada pela lista que se segue: ** * + + / & not abs -- Nvel de precedncia mais elevado

mod rem -- Operadores de multiplicao -- Operadores de soma em decimal --operadores soma Binrios

= <= In and

/= >

< >=

--operadores Relacionais --operadores Relacionais --(mesma precedncia)

not in or xor

--operadores lgicos

and then

or else --(mesma precedncia)