




                                CAPTULO 1       
            
                     FUNDAMENTOS DA PROGRAMAO EM PASCAL 
            
            1.1. ESTRUTURA DE UM PROGRAMA EM PASCAL       
            
                 Um programa  em Pascal   um  conjunto  de  palavras  e
            smbolos   especiais    (comandos,    variveis,    funes,
            algarismos, parnteses,  ...) escritos  segundo as regras de
            uma sintaxe pr-fixada e possui a seguinte estrutura:
            
                 - Cabealho;
                 - Especificao das unidades usadas pelo programa;
                 - Declaraes de tipos, constantes, variveis, rtulos,
            funes e procedimentos;
                 - Seo principal.
            
                 O cabealho   usado para dar nome ao programa e possui
            a forma
            
                           PROGRAM Nome_do_programa;
            
                 O cabealho   identificado pela palavra chave PROGRAM,
            seguida de um nome que identificar o programa, e encerra-se
            com um  ponto-e-vrgula. Ele serve apenas para orientao do
            usurio.
            
            Exemplo: PROGRAM Teste;
                 Uma  linha  como  essa, atribui o nome  "Teste"  a  um
            programa.
            
                 A especificao  das unidades  usadas   feita  com  um
            comando USES,  seguido dos nomes das unidades a serem usadas
            separadas por  vrgula, com  um ponto-e-vrgula  no final da
            linha:
            
                           USES unidade1, unidade2, ... ;
            
            Em  Pascal,   diversos  comandos   podem  ser  agrupados  em
            conjuntos denominados  unidades  (units).  Temos  assim  uma
            unidade para  vdeo, outra  para manipulao  de arquivos em
            disco, outra com os comandos grficos, etc.
            
            Exemplo: USES Crt, Graph;
                 Esta  declarao  permite  que sejam usados no programa
            comandos, funes, constantes, ... das unidades CRT e GRAPH.
            
                 As  declaraes   de  tipos,   constantes,   variveis,
            rtulos, funes  e  procedimentos  em  Pascal  so  feitas,
            respectivamente, com  as palavras  chave TYPE,  CONST,  VAR,
            LABEL, FUNCTION  e PROCEDURE,  seguidas  de  linhas  com  as
            declaraes necessrias.
            

                                        - 1 -





                 A seo  principal do  programa inicia-se com a palavra
            chave BEGIN, seguida de linhas de comandos, e encerra-se com
            a palavra chave END seguida de um ponto:
            
                                BEGIN
                                  comando1;
                                  comando2;
                                  ... ...
                                END.
            
                 A seo  principal   a nica  parte obrigatria  de um
            programa em  Pascal. Todas  as outras partes que vimos acima
            (cabealho, declaraes,  ...) so opcionais. No entanto, em
            todo programa,  tudo que  vier a  ser usado  dever ter sido
            declarado antecipadamente de forma adequada.
                 A  execuo  de  todo  programa  inicia-se  pela  seo
            principal.
            
                 No sero diferenciadas letras minsculas de maisculas
            e sero  ignorados os  espaos em  branco.  O  final  de  um
            comando ou declarao  sinalizado por um ponto-e-vrgula.
                 As  quatro   expresses  a  seguir  sero  consideradas
            idnticas:
            
              (1) X := A + B + C;            (2) x:=a+b +     C;
            
              (3) x := a +                   (4) X :=
                       b +                            a + B
                       c;                                     + c;
            
            1.2. IDENTIFICADORES    
            
                 Um identificador  um conjunto de caracteres usado para
            dar nome  a um  programa, unidade,  rtulo, varivel,  tipo,
            constante, funo ou procedimento.
                 Todo identificador deve iniciar-se com uma letra e pode
            ser  seguido  por  qualquer  quantidade  de  outras  letras,
            algarismos ou  o sinal  de sublinhado  ( _  ). Somente os 63
            primeiros caracteres sero considerados significativos.
            
            Exemplo:            

                 Identificadores permitidos:  X, a1,  Nota, NomeDoAluno,
            Valor_Maximo_de_F, MIN2P3.
            
                 Identificadores invlidos: 1a, _Nota_Um, A+B, A(2).
            
                 O comprimento  do nome  de  um  identificador  no  tem
            efeito negativo  sobre o desempenho de um programa. Assim, o
            usurio est  livre para  criar nomes longos para variveis,
            funes, etc.  sem o  risco de  tornar o  programa lento. De
            preferncia, os  nomes  dos  identificadores  devem  sugerir
            alguma relao com o que estiver sendo identificado.
            

                                        - 2 -





                 Alguns identificadores  especiais s  podem ser  usados
            pela linguagem  com  um  significado  j  pr-fixado.  Esses
            identificadores so chamados palavras reservadas ou palavras
            chave e so os seguintes:
            
                  ABSOLUTE          GOTO                RECORD
                  AND               IF                  REPEAT
                  ARRAY             IMPLEMENTATION      SET
                  BEGIN             IN                  SHL
                  CASE              INLINE              SHR
                  CONST             INTERFACE           STRING
                  DIV               INTERRUPT           THEN
                  DO                LABEL               TO
                  DOWNTO            MOD                 TYPE
                  ELSE              NIL                 UNIT
                  END               NOT                 UNTIL
                  EXTERNAL          OF                  USES
                  FILE              OR                  VAR
                  FOR               PACKED              WHILE
                  FORWARD           PROCEDURE           WITH
                  FUNCTION          PROGRAM             XOR
            
                 Existem, ainda,  alguns identificadores  que, apesar de
            terem um  significado pr-definido  para o  Pascal, no  so
            palavras reservadas,  como por exemplo: REAL, INTEGER, READ,
            WRITE, PI,  SIN, COS.  O  significado  ou  a  funo  desses
            identificadores  podem  ser  redefinidos  e  alterados  pelo
            usurio.
            
            1.3. DECLARAO DE TIPOS     
            
                 A declarao  de tipos   feita  com um comando TYPE da
            seguinte forma:
            
                      TYPE
                        Identificador_de_tipo_1 = Tipo1;
                        Identificador_de_tipo_2 = Tipo2;
                        ...                       ...
            
            onde  Identificador_de_tipo_1,  ...  so  identificadores  e
            Tipo1, Tipo2, ... so nomes de tipos pr-definidos.
                 Os tipos  pr-definidos do Pascal pertencem a uma das 8
            classes seguintes:
            
                      - Ordinal             - Real
                      - String              - Array
                      - Record (registro)   - Set (conjunto)
                      - File (arquivo)      - Pointer (ponteiro)
            
                 Os tipos  ordinal, real,  string e pointer so chamados
            de  tipos   SIMPLES.  Os   outros  tipos   so  chamados  de
            ESTRUTURADOS e  so construdos  atravs de  agrupamentos de
            tipos simples.

                                        - 3 -





                 A partir  da verso 5.5, foi adicionado ao Turbo Pascal
            mais um tipo pr-definido chamado OBJECT. No consideraremos
            o tipo OBJECT neste texto.
            
                 O diagrama  a seguir,  classifica todos  os tipos  pr-
            definidos do Pascal.
            
                            +---------------------+
                            | TIPOS PR-DEFINIDOS |
                            +---------------------+
                                       |
                          +-------------------------+
                          |                         |
                    +-----------+            +--------------+
                    |  SIMPLES  |            | ESTRUTURADOS |
                    +-----------+            +--------------+
                          |                         |
                          |             +-----------------------+
                          |             |     |     |     |     |
                          |           array record file  set object
                          |
               +-----------------------+
               |        |       |      |
             string  ordinal pointer real
                        |              |
                +---------------+      +------------+
                |     |   |     |                   |
              boolean | char inteiro   +-------------------------+
                      |         |      |    |    |      |        |
                  enumerado     |    real comp single double extended
                                |
                 +---------------------------+
                 |      |       |      |     |
               byte shortint integer word longint
            
                 Dessa classificao,  importante saber o que  do tipo
            ordinal ou no.
            
            1.3.1.    O tipo  ordinal subdivide-se em inteiro, booleano,
            caracter (char) e o tipo enumerado definido pelo usurio.
            
            1.3.1.1.  O  tipo   inteiro  subdivide-se  em  5:  shortint,
            integer, longint,  byte e  word. Cada  um desses  subtipos 
            formado por  um  determinado  subconjunto  de  inteiros,  de
            acordo com a seguinte tabela:
            
                    Tipo                Domnio            Tamanho
                 --------------------------------------------------
                  shortint           [-128, 127]           1 byte
                  byte                [0, 255]             1 byte
                  integer          [-32768, 32767]         2 bytes
                  word               [0, 65535]            2 bytes
                  longint    [-2147483648, 2147483647]     4 bytes
                 --------------------------------------------------

                                        - 4 -





            
                 Deve-se  escolher  o  tipo  que  melhor  se  adapte  s
            necessidades do  programa, observando  o domnio e o tamanho
            de cada tipo. Observe que, por exemplo, o tipo longint ocupa
            4 vezes  mais espao  que o  tipo byte. Alm disso, os tipos
            menores so  manipulados mais rapidamente que os maiores, ou
            seja, a escolha do tipo influi na velocidade do programa.
            
            1.3.1.2.  O tipo  boolean   formado pelas  constantes  TRUE
            (verdadeiro) e  FALSE (falso)  e   usado  para  se  avaliar
            expresses lgicas.  um dos tipos mais usados do Pascal.
            
            1.3.1.3.  O tipo caracter (char)  formado pelo conjunto dos
            256  caracteres   ASCII  (letras,   algarismos  e   smbolos
            especiais como  +, =, %, $, #, <, etc.). As constantes deste
            tipo so escritas entre apstrofos: 'A', 'B', '3', '?', '&',
            etc.
            
            1.3.1.4.  O tipo  enumerado definido  pelo usurio  consiste
            numa  seqncia  finita  de  identificadores  separados  por
            vrgulas e  escritos entre parnteses. Cada identificador se
            torna, ento,  uma constante  do tipo enumerado. Ao primeiro
            identificador ser  atribudo um  ordinal 0, ao segundo ser
            atribudo 1 e assim por diante.
            
            Exemplo:            
                      TYPE
                        dia = (DOM, SEG, TER, QUA, QUI, SEX, SAB);
                        cor = (vermelho, azul, amarelo);
            
                 Neste caso,  tudo que for do tipo DIA poder assumir os
            valores DOM, SEG, ..., SAB e tudo que for do tipo COR poder
            assumir um  valor VERMELHO,  AZUL ou  AMARELO. No  tipo DIA,
            dizemos que o DOM tem ordinal 0, SEG tem ordinal 1, ..., SAB
            tem ordinal 6.
                 Os tipos enumerados servem apenas para controle interno
            do programa e no podem ser utilizados em entradas ou sadas
            de dados  como os  outros tipos. Eles servem para aumentar a
            clareza do  programa podendo  ser  usados  como  ndices  de
            matrizes ou  seqncias. Suponhamos,  como exemplo,  que uma
            determinada seqncia  T de 7 termos esteja sendo usada para
            armazenar a  quantidade de horas de trabalho ao longo de uma
            semana. Achamos que  mais claro, para o usurio, se referir
             quantidade  de horas  trabalhadas no sbado como "T ndice
            SAB" do que como "T ndice 6".
            
                 O importante tipo booleano pode ser considerado como um
            tipo enumerado da seguinte forma:
            
                           BOOLEAN = (false, true)
            
                 Associado a  um tipo enumerado temos trs funes: ORD,
            SUCC e PRED.

                                        - 5 -





            
                  ORD(x) ---> fornece um valor inteiro que corresponde 
            posio de  x na  faixa de  definio do  tipo.    primeira
            posio   atribudo um  valor 0,   segunda  posio um 1 e
            assim por diante.
                 SUCC(x) --->  sucessor imediato de x dentro da faixa de
            definio do tipo.
                 PRED(x) --->  predecessor imediato de x dentro da faixa
            de definio do tipo.
            
            Exemplo: Considerando o  tipo  DIA  definido  anteriormente,
            temos ORD(DOM) = 0, ORD(TER) = 2, SUCC(QUA) = QUI, PRED(SAB)
            =  SEX.   Expresses   como  SUCC(SAB)  ou  PRED(DOM)  sero
            rejeitadas na hora da compilao.
            
                 Uma vez definido um tipo ordinal, pode-se a partir dele
            definir-se subtipos da seguinte forma:
            
                      Nome_do_subtipo = constante1..constante2;
            
            onde  constante1   e  constante2  so,  respectivamente,  os
            limites  inferior  e  superior  do  subtipo.  Este  tipo  de
            declarao s   vlida  se  fizer  parte  de  um  bloco  de
            declaraes TYPE.
            
            Exemplo: TYPE
                       Algarismo = '0'..'9';     ---> subtipo de CHAR
                       Indice = 1..2000000000;   ---> subtipo de LONGINT
                       DiaDeTrabalho = SEG..SEX; ---> subtipo de DIAS
            
                 Neste caso,  tudo que  for do  tipo "Algarismo"  poder
            assumir os  valores '0',  '1', '2', '3', '4', '5', '6', '7',
            '8' ou  '9'. O  tipo  "indice"  representa  os  inteiros  do
            intervalo  de  1  a  2  bilhes  e  o  tipo  "DiaDeTrabalho"
            compreende SEG,  TER, QUA,  QUI ou SEX. O tipo DIAS deve ter
            sido definido antes pelo usurio.
            
            1.3.2.    O tipo  real  subdivide-se  em  5:  real,  single,
            double, extended  e comp  cujos domnios  e  tamanhos  esto
            definidos na seguinte tabela:
            
                Tipo              Domnio         Dgitos     Tamanho
              --------------------------------------------------------
               real          [2.9E-39, 1.7E38]     11-12      6 bytes
               single        [1.5E-45, 3.4E38]      7-8       4 bytes
               double       [5.0E-324, 1.7E308]    15-16      8 bytes
               extended    [3.4E-4932, 1.1E4932]   19-20     10 bytes
               comp             [0, 9.2E18]        19-20      8 bytes
              --------------------------------------------------------
            
                 Em Pascal,  as potncias  de 10 so indicadas com um E.
            Por exemplo,  2E07   o mesmo  que 2  vezes 10  elevado a 7;
            3.28E-11  o mesmo que 3,28 multiplicado por 10  -11.

                                        - 6 -





                 Os domnios anteriores referem-se aos valores absolutos
            das constantes.  Com isso,  temos que  o tipo real da tabela
            acima  corresponde  aos  nmeros  que  esto  na  unio  dos
            intervalos [2.9E-39, 1.7E38] e [-1.7E38, -2.9E-39].
                 Est sendo  indicada tambm  a  quantidade  de  dgitos
            significativos de cada tipo.
                 O tipo  COMP, na  verdade,   um inteiro de 8 bytes que
            no  do tipo ordinal.
            
            1.3.3.    O tipo  string   uma seqncia  de caracteres  de
            comprimento variando  de  0  a  255.  Escrevendo  string[N],
            estamos definindo  N como tamanho mximo da seqncia (neste
            caso N deve ser menor ou igual a 255).
                 As  constantes   do  tipo   string  devem  estar  entre
            apstrofos.
            
            Exemplo: TYPE
                       Nome = string[40];
            
                 Neste exemplo  est sendo declarado o tipo "Nome" que 
            uma seqncia  de at  40 caracteres. Podem ser consideradas
            deste tipo  as constantes  'Turbo Pascal 5.0', '1991/1992' e
            'UFPB - CCEN - Dep. de Matematic.
            
                 Falaremos dos tipos restantes em captulos posteriores.
            
            1.4. DECLARAO DE VARIVEIS
            
                 Todas as  variveis usadas  por um  programa em  Pascal
            devem obrigatoriamente ser declaradas com antecedncia em um
            bloco de declaraes VAR da seguinte forma:
            
                      VAR
                        Identificador, ..., Identificador: Tipo1;
                        Identificador, ..., Identificador: Tipo2;
                        ...                        ...
            
                 O  bloco  de  declaraes  de  variveis,  normalmente,
            aparece depois de um bloco TYPE.
            
            Exemplo: VAR
                        x, y, z: real;
                        i, j, k: integer;
                        Inicio, Fim: boolean;
                        Tamanho: longint;
                        Nome_do_arquivo: string[15];
            
                 Neste bloco  VAR esto sendo declaradas as variveis x,
            y, z  como sendo  do tipo real, uma varivel Tamanho do tipo
            longint, alm  de outras variveis (i, j, ...). Os tipos das
            variveis no  podem  ser  mudados  durante  a  execuo  do
            programa e  os valores  que elas  podem  assumir  devem  ser
            compatveis  com  o  seu  tipo  declarado.  Por  exemplo,  a

                                        - 7 -





            varivel Tamanho acima pode assumir o valor 2309011, mas no
            pode assumir um valor fracionrio como 0.71.
            
            1.5. DECLARAO DE CONSTANTES 
            
                 As  constantes   de  um   programa  Pascal   devem  ser
            declaradas em um bloco CONST na forma:
            
                      CONST
                        Identificador = Expresso;
                        Identificador = Expresso;
                        ...            ...
                        Identificador: tipo = Valor;
                        Identificador: tipo = Valor;
                        ...            ...
            
                 Na expresso  usada  para  definir  uma  constante  so
            permitidas operaes  aritmticas e  algumas poucas  funes
            como ABS,  CHR, ODD,  ORD, PRED, SUC ROUND, LENGTH e TRUNC
            (todas essas funes sero definidas ao longo do texto).
            
            Exemplo: CONST
                       Pi = 3.1415926;
                       NumeroMaximoDeLinhas = 1024 + 253 + 5;
                       Mensagem: string[20] = 'Hello world!';
                       X: integer = 7;
            
                 As constantes que so declaradas sem a especificao de
            tipo no podem ser alteradas durante a execuo do programa.
            Aquelas cujas  declaraes contiverem  o tipo base, chamadas
            "constantes tipadas",  desempenham um  papel parecido  com o
            das variveis  e podem  ser alteradas  durante a execuo do
            programa. A  diferena entre  uma varivel  e uma  constante
            tipada   que a varivel no pode ter nenhum "valor inicial"
            na sua declarao.
            
            1.6. DECLARAO DE RTULOS 
            
                 Rtulos (labels)  so identificadores  que servem  para
            marcar uma  determinada posio  no programa.  A forma de se
            declarar um rtulo :
            
                      LABEL
                        Identificador, ..., Identificador;
            
            Exemplo: LABEL
                       Meio, Fim;
            
                 Neste bloco  LABEL esto  sendo declarados dois rtulos
            "Meio" e  "Fim" que  serviro para  identificar determinadas
            partes do programa.
                 Uma declarao  de rtulo  deve ser feita sempre que se
            quiser usar um comando GOTO e raramente  necessria.
            

                                        - 8 -





            1.7. COMANDO DE ATRIBUIO 
            
                 A atribuio  de um  valor ou  de uma  expresso  a  um
            identificador  feita atravs do operador de atribuio := .
            A sintaxe de uma operao de atribuio :
            
                      Identificador := expresso;
            
                 Neste tipo  de operao,  a expresso e o identificador
            devem  ser   do  mesmo   tipo,  exceto  no  caso  em  que  o
            identificador for do tipo real e a expresso do tipo inteiro
            (pois,  neste  caso,  o  valor  inteiro  da  expresso  ser
            automaticamente transformado em real).
            
            Exemplo: Considere a seguinte declaraco de variveis:            

                           VAR
                             a, b, c: integer;
                             x, y: real;
                             teste: boolean;
                             data: string[10];
            
            Neste caso, so vlidas as atribuies
            
                             a := -17;
                             x := y + 3.14;
                             teste := false;
                             data := '5/12/1991'
            
            mas no so vlidas as atribuies
            
                             teste := a + b + 1;
                             c := 6.02E23;
            
                 Em caso de vrias atribuies a um mesmo identificador,
            ser considerada apenas a ltima atribuio efetuada.
            
            1.8. COMENTRIOS 
            
                 Comentrios so  usados para  aumentar a  clareza de um
            programa. Todos  os comentrios  so desprezados  na hora da
            compilao, logo,  eles no  tm influncia  no desempenho e
            nem no tamanho do programa objeto.
                 Um comentrio  colocado entre chaves ou entre (* e *).
            
                      { Este  um exemplo de comentrio... }
            
                      (* e este tambm  um comentrio! *)
            
                 Para  o   Pascal,  as   declaraes  VAR  abaixo  sero
            consideradas equivalentes.  Para o  usurio, o segundo bloco
            de declaraes VAR oferece mais clareza.
            
            

                                        - 9 -





                      VAR mat, nota, cod: string;
            
            
                      VAR
                        mat,       { matrcula       }
                        nota,      { nota final      }
                        cod:       { codigo do curso }
                             string;
            
            1.9. EXPRESSES ARITMTICAS
            
                 As operaes aritmticas pr-definidas do Pascal so:
            
                 +  Adio                       -  Subtrao
                 /  Diviso                      *  Multiplicao
               DIV  Quociente da diviso       MOD  Resto da diviso
                    inteira                         inteira
            
            Exemplo:  9/2 = 4.5         -3*7 = -21 
                      9 DIV 2 = 4        9 MOD 2 = 1
                      10 DIV 2 = 5      10 MOD 2 = 0
            
                 Estas operaes  podem  ser  utilizadas  com  operandos
            reais ou  inteiros, exceto  DIV e  MOD que  exigem operandos
            inteiros.
                 A  prioridade   entre  as   operaes     a  mesma  da
            Matemtica:
                 (1) Primeiramente,  so efetuadas  as multiplicaes  e
            divises (/, DIV e MOD);
                 (2) por ltimo, so efetuadas as adies e subtraes.
                 Temos ento  dois nveis  de prioridades.  Dentro de um
            mesmo nvel,  so efetuadas  as operaes da esquerda para a
            direita.
            
            Exemplo: Na expresso  5  -  2/3*7  +  1   as  operaoes so 
            efetuadas  na   seguinte  ordem:   diviso,   multiplicao,
            subtrao e adio.
            
                 Se  uma   expresso  contiver  parnteses,  ento  ser
            executado primeiramente o que estiver entre parnteses.
            
            Exemplo:        Express        Valor
                           ------------------------
                            5 + 2*4           13
                            (5 + 2)*4         28
                            7 DIV 2*3          9
                            7 DIV (2*3)        1
                           ------------------------
            
            Observaes:
                 (1)   No   existe   operador   pr-definido   para   a
            potenciao.
                 (2) O sinal de multiplicao nunca poder ser omitido.

                                        - 10 -





                 (3) A diviso / sempre fornece um resultado real, mesmo
            que os operandos sejam inteiros.
                 (4) Se todos os operandos forem inteiros e as operaes
            envolvidas forem +, -, *, MOD ou DIV, ento o resultado ser
            inteiro.
            
            1.10. FUNES MATEMTICAS PR-DEFINIDAS
            
                 Entre as muitas funes pr-definidas do Pascal, as que
            esto relacionadas com valores numricos so:
            
               Funo         Descrio            Tipo do resultado
              ------------------------ ------------------------------
                LN          Logaritmo natural             real
                EXP         Exponencial de base e         real
                ABS         Valor absoluto           real ou inteiro
                SQR         Quadrado                 real ou inteiro
                SQRT        Raiz quadrada                 real
                SIN         Seno                          real
                COS         Cosseno                       real
                ARCTAN      Arco-tangente                 real
                ROUND       Arredondamento              inteiro
                TRUNC       Parte inteira               inteiro
                INT         Parte inteira                 real
                FRAC        Parte fracionria             real
                ODD         Testa se  mpar            booleano
              -------------------------------------------------------
            
                 Em todas  elas deve-se  acrescentar um  argumento entre
            parnteses   frente do  nome da  funo, como  em COS(x) ou
            SQRT(y).
                 O Pascal  no tem  pr-definidas funes como tangente,
            secante, arco-seno,  ... .  Em breve  ser mostrado  como  o
            usurio poder  definir essas  funes, bem  como outras com
            domnio e contradomnio mais complexos.
            
            Exemplo: O modulo do seno do quadrado de x e codificado como
            ABS(SIN(SQR(x))). Neste tipo de expresso,  obrigatrio que
            a quantidade de parnteses abertos seja a mesma de fechados.
            
            Exemplo: O quociente entre  x2 + 3x  e  x2 + 5   se  escreve
            como (SQR(x)  + 3*x)/(SQR(x) + 5) ou como (x*x + 3*x)/(x*x +
            5). Nestes casos, o uso dos parnteses  fundamental.
            
            Exemplo: A derivada do arco-seno  de x,  ou seja,  1 sobre a
            raiz quadrada  da diferena  entre 1  e o  quadrado de x, se
            escreve como 1/SQRT(1 - SQR(x)).
            
            Exemplo: O cubo de x pode ser codificado como x*x*x, ou como
            EXP(3*LN(x)). Em  geral, x  elevado a  y pode ser codificado
            como EXP(y*LN(x)).
            
            Exemplo: A funo booleana ODD testa se um inteiro n e impar
            ou no.  ODD(n) fornece um valor TRUE se n for mpar e FALSE

                                        - 11 -





            em caso  contrrio. Desse  modo, ODD(5)  = TRUE  e ODD(4)  =
            FALSE.
            
            Exemplo:            

               TRUNC(1.35) = 1 (inteiro)    TRUNC(1.97) = 1 (inteiro)
               INT(1.35) = 1 (real)         INT(1.97) = 1 (real)
               ROUND(1.35) = 1              ROUND(1.97) = 2
               FRAC(1.35) = 0.35            FRAC(1.97) = 0.97
            
                 As funes  INT e TRUNC so numericamente equivalentes.
            A  diferena  entre  elas  est  apenas  no  tipo  do  valor
            retornado.
                 Nenhuma dessas funes coincide com a funo matemtica
            [x], o maior inteiro que no supera x.
            
            1.11. EXPRESSES LGICAS  
            
                 Expresso  lgica   (ou  expresso   booleana)     uma
            expresso cujos  operadores so  operadores lgicos  e cujos
            operandos so relaes ou variveis do tipo booleano.
                 Os operadores lgicos so AND (e), OR (ou), NOT (no) e
            XOR (ou exclusivo).
                 Se X e Y so  variveis ou constantes booleanas, ento:
            
                 (1) X  AND Y   TRUE  somente quando  X e Y forem ambas
            TRUE.
                 (2) X  OR Y   FALSE  somente quando  X e Y forem ambas
            FALSE.
                 (3) NOT  X  TRUE quando X for FALSE e  FALSE quando X
            for TRUE.
                 (4) X  XOR Y   FALSE  somente quando X e Y forem ambas
            TRUE ou ambas FALSE.
            
                 Uma relao     uma comparao realizada entre valores
            do mesmo  tipo, cujo resultado  TRUE ou FALSE. A comparao
             indicada por um dos operadores relacionais a seguir:
            
                   =   igual                <>  diferente
                   <   menor                >   maior
                   <=  menor ou igual       >=  maior ou igual
            
                 No caso de variveis do tipo CHAR ou STRING, ser usada
            a  ordem   alfabtica  para   comparar  duas  constantes  ou
            variveis.
            
            Exemplo: Sejam a, b, c, d variaveis booleanas  cujos valores 
            so:
                                a := 1 < 2;
                                b := 3 >= 5;
                                c := a OR b;
                                d := a AND b;
            

                                        - 12 -





                 Como 1  < 2   uma  relao verdadeira, temos que a tem
            valor TRUE; 3 >= 5  falso, logo, b tem valor FALSE.
                 Sendo a  TRUE e b FALSE temos que c  TRUE, pois a OR b
            s seria FALSE se a e b fossem ambas FALSE.
                 O valor de d  FALSE, uma vez que b  FALSE.
            
            
            Exemplo: Consideremos as variaveis  x, y, z,  nome1, nome2 e
            teste declaradas abaixo:
            
                      VAR
                        x, y, z: byte;
                        nome1, nome2: string[30];
                        teste: boolean;
            
            Considere tambm as seguintes atribuies:
            
                      x := 3;
                      y := 10;
                      z := 4;
                      nome1 := 'Guizinha';
                      nome2 := 'Olezinho';
                      teste := false;
            
            Temos ento:
            
                          Expresso                     Valor
                   --------------------------------------------
                    x <= y                              TRUE
                    (x = z) OR (x + z >= y)             FALSE
                    nome1 < nome2                       TRUE
                    (nome1 <> nome2) AND (NOT teste)    TRUE
                    (nome1 = nome2) AND (x = y)         FALSE
                    (NOT (x > z)) OR teste OR (y <> z)  TRUE
                    Odd(x) AND (NOT Odd(y))             TRUE
                    Odd(x) XOR Odd(y + 1)               FALSE
                    (x mod 3 = 0) AND (y div 3 <> 1)    FALSE
                    Sqr(Sin(x)) + Sqr(Cos(x)) = 1       TRUE
                   --------------------------------------------
            
            
                 A  prioridade  das  operaes  aritmticas,  lgicas  e
            relacionais est definida na seguinte tabela:
            
                       Prioridade          Operadores
                      -------------------------------------
                           1 (alta)    NOT
                           2           *. /, DIV, MOD, AND
                           3           +, -, OR, XOR
                           4 (baixa)   =, <=, >=, <, >, <>
                      -------------------------------------
            
            
            

                                        - 13 -





            1.12. EXERCCIOS
            
            1) Escreva  as seguintes  expresses de acordo com a sintaxe
            do Pascal:
                                                     3    2
               a) sen(2x) = 2.sen(x).cos(x)      b) x + 5x - 2x + 4
            
                           1                         arctg(x) + |x|
               c) -------------------            d) e
                   Ln(x + Ln(x)) + 1
            
            2) Considere as constantes e as variveis definidas abaixo:
            
                      CONST
                        x: real = -3.2; y: real = 4.00;
                        m: integer = 7;
                        n: integer = 11;
                        p: integer = -5;
            
                      VAR
                        a: integer;
                        z: real;
            
            a)  Calcule   os  valores  de  a  ou  z  aps  as  seguintes
            atribuies:
            
               i) a := m MOD 2 + n DIV (m + p);
              ii) a := TRUNC(x)*ROUND(SQRT(2))
             iii) a := SQR(p + 1) MOD (m MOD ABS(p));
              iv) z := SQRT(2*m + p)/ROUND(EXP(1));
               v) z := INT(11/7) - FRAC(1/(1 + n + 2*p));
            
            b) Detecte o que est errado com as atribuies abaixo:
            
               i) a := 1 + 3*y;              ii) a := ((n - 1)/2) MOD 3;
             iii) z := SIN(1 - COS(ARCTAN(2));       iv) z + 5 := x - y;
            
            3) Sejam  a, b, c trs variveis que, em determinado momento
            da execuo  de um programa, valem respectivamente 1, 2 e 3.
            Avalie o valor das seguintes expresses lgicas:
            
            a) Odd(a) OR Odd(b) AND Odd(c);
            b) NOT (b <> (a + c) DIV 2) AND NOT (a = 0)
            c) (a = b + c) XOR (b = c + a)
            d) (c >= a) AND (NOT (a = 5*b - 3*c) OR (c <= a + b))
            
            4) X  e Y  so  duas  constantes  com  valores  -3  e  5,  e
            CLASSIFICA   uma  varivel  booleana  com  valor  FALSE  em
            determinado  momento.  Determine  o  valor  que  est  sendo
            atribudo  varivel booleana TESTE em cada um dos casos:
            
            a) TESTE := X > Y;       b) TESTE := NOT (Abs(X*Y) >= 5e20);
            c) TESTE := (X > 0) OR (Y > 10*Abs(X)) OR Classifica;
            d) TESTE := (X + Y > 1) AND (Sqrt(Y) < 1.2E-9);

                                        - 14 -
