                         Ŀ
                          Ŀ 
                            LINGUAGEM PASCAL  
                           
                         
Ŀ
Prefcio

    Este curso destina-se a todos aqueles que desejam aprender a  linguagem
    Pascal, atravs do seu mais famoso compilador para  a  linha  IBM/PC, o
    Turbo Pascal. O Turbo Pascal  muito mais que um compilador, pois ele 
    uma  associao   entre  um  compilador,  um  editor  de  textos  e  um
    linkeditor. Desta forma, o Turbo Pascal facilita sobre-maneira o ato de
    programar. Alm de  tudo  isto,  o  Turbo  permite muitas facilidades e
    atividades que, com certeza, no estavam  planejadas por Niklaus Wirth,
    o criador  da  linguagem  Pascal.  Levando-se  em  conta  todas   essas
    consideraes,  podemos  at  mesmo  dizer que o Turbo Pascal seria uma
    nova linguagem, mais poderosa que a Pascal.

    Gostaria  de  salientar  que a melhor forma de aprender uma linguagem 
    programando, assim como a  melhor  forma de aprender a dirigir  entrar
    num automvel e sair com  ele  por a,  ou  seja, o simples fato de ler
    este  pequeno  e  simples  curso  de  linguagem  Pascal, no basta para
    aprender a programar em Pascal.

    Por fim, estou a disposio de todos, que  se  aventurem  a  acompanhar
    este curso, para tirar dvidas, assim como para receber crticas.


Ŀ
I - Introduo


I.1 - A linguagem Pascal
      ------------------
    Considero que a programao deve ser entendida como uma arte ou tcnica
    de se construir algoritmos, sendo que estes so  mtodos  ou "receitas"
    para  se  resolver  problemas.  Existem  diversas  linguagens  para  se
    programar, umas mais adequadas a certos tipos  de  algoritmos, outras a
    outros tipos. No entanto, uma linguagem de programao no  deve ser um
    fim  em  si  mesma,  mas  um  meio,  uma ferramenta para se traduzir os
    algoritmos  em  programas  a  serem  executados por computadores. Desta
    forma,   importante  que  os  cursos  de  programao  no tenham como
    objetivo   primordial,  a  perfeio   do conhecimento de uma linguagem
    especfica.  A  linguagem deve to somente, refletir de maneira clara e
    facilmente compreensvel os aspectos principais dos algoritmos.

    Por tudo isso, devemos ter a preocupao de ensinarmos aos estudantes a
    formulao  sistemtica  e  metdica de algoritmos, atravs de tcnicas
    que so caractersticas da programao.

    Como j disse, existem  diversas  linguagens  de  programao,  podemos
    aprender e utilizar quantas desejarmos.  Dizer  qual  a  melhor  muito
    relativo. H os que defendem o Basic, o Cobol,  a C,  o Pascal e tantas
    outras. Bom, mas a pergunta crucial que  fao  aqui :  Qual a primeira
    linguagem a ser aprendida? Neste ponto, defendo a linguagem Pascal.

    De  acordo  com  observaes feitas por diversos professores, inclusive
    por mim, a maior parte das pessoas ficam ligadas para sempre  primeira
    linguagem que aprenderam, e quando aprendem uma nova linguagem, tm uma
    certa  tendncia  em  desenvolver os algoritmos segundo o vocabulrio e
    regras sintticas da primeira linguagem, s que escritas na nova.

    Por  este   motivo,  acho   que  a  escolha da primeira linguagem a ser
    ensinada deve ser feita de forma judiciosa.

    A primeira linguagem deve, desta forma, ser tal que fornea ao aprendiz
    a  possibilidade   de  desenvolver   algoritmos  lgicos, sistemticos,
    facilmente compreensveis segundo os mtodos  modernos  de  programao
    e deve at possibilit-lo a "dar asas  sua imaginao".


I.2 - Por que Turbo Pascal?
      ---------------------
    Um computador no pode entender nem to pouco  executar  instrues  em
    linguagens  de  alto  nvel. Ele s entende linguagem de mquina. Desta
    forma,  os  programas  em linguagens de alto nvel devem ser traduzidos
    antes  de  serem executados pelo computador. Quem faz essa traduo so
    os programas tradutores.

    Existem  basicamente 2 tipos de programa tradutor: o interpretador; e o
    compilador;.  Os dois aceitam como entrada um programa em linguagem  de
    alto nvel (fonte) e produzem como sada um programa  em  linguagem  de
    mquina (objeto). A diferena entre eles est na  forma  de  executar a
    tarefa  de traduo. O interpretador traduz para a linguagem de mquina
    e roda uma linha por vez, at que todo programa seja  executado.  J  o
    compilador  traduz  para a linguagem de mquina todo o programa fonte e
    s ento ele  executado.

    Existem linguagens de programao interpretadas e compiladas. O cobol 
    compilado,  o  basic pode ser tanto compilado como interpredado e assim
    por diante. A linguagem Pascal  tradiconalmente compilada.

    Por outro lado, o processo de compilao   de certa forma moroso, pois
    deve seguir as seguintes etapas:

    1-) Devemos utilizar um editor de  textos  para escrever e armazenar em
        disco o nosso programa fonte.

    2-) Utilizar  um  compilador   para  traduzir  o programa fonte para um
        programa em linguagem de mquina.

    3-) Finalmente,    devemos  juntar   ao  programa compilado as diversas
        rotinas   necessrias   que,  normalmente,  ficam  armazenadas numa
        biblioteca.

    Aps todo esse processo, suponha que voc chegue  concluso  de  que o
    programa tenha que sofrer modicaes, pois  bem,  voc ter que repetir
    os trs  passos  descritos,  e  assim sucessivamente at que o programa
    fique ao seu gosto.

    O compilador Turbo Pascal facilita  todo esse processo, pois ele possui
    numa forma integrada, um editor de textos compatvel  com  o  Wordstar,
    um  compilador e um linkeditor. O processo de compilao pode ser feito
    tanto  em  disco  como  em  memria,  o  que faz com que ele seja muito
    rpido.  Alm  disso,  o  Turbo  Pascal atende aos padres da linguagem
    Pascal definidos por Niklaus Wirth, "o pai da linguagem".

    Na  realidade,  o Turbo Pascal vai muito alm, pois ele possui inmeras
    procedures e funes a mais do que as existentes no padro da linguagem
    Pascal.


I.3 - Equipamento necessrio.
      ----------------------
    Todos os exemplos e programas  contidos neste curso, foram escritos num
    compatvel 486DX 50  com  dois  acionadores  de  discos de dupla face e
    alta densidade, um winchester de 340 megabytes,um monitor monocromtico
    e  640 Kbytes de memria RAM. No entanto, a configurao mnima poderia
    ser um IBM/PC-XT com um winchester de 40M.


Ŀ
II - Um programa em Pascal


II.1 - O primeiro programa
       -------------------
    Bom,  acho que aqueles que nunca tiveram a  oportunidade  de  fazer  um
    programa em Pascal, devem estar muito curiosos para saber como deve ser
    o  seu  aspecto.   Por  isso,  antes  de  prosseguir com os meandros da
    linguagem    Pascal,  eu  mostrarei  um pequeno  programa   devidamente
    comentado.

    {********************************************************
      PROGRAMA EXEMPLO.PAS -> Pequeno exemplo de um programa
                              em Pascal. Tem  a   finalidade
                              nica e exclusiva de   mostrar
                              os diversos componentes de  um
                              programa em Pascal.
    ********************************************************}

    { Tudo que estiver entre chaves so comentrios e no so
    levados em conta pelo compilador.}

    Program Primeiro_Exemplo; { este e o cabecalho do
                                programa }
    USES Crt;  { Aqui estou utilizando uma UNIT, chamada CRT,
                 existem vrias, e inclusive  vc  pode  criar
                 as suas. Nestas  units  temos  procedures  e
                 functions previamente compiladas. }

    Label
          fim;         { a partir deste instante posso
                          utilizar o label fim }

    Const
          Meu_Nome = 'Thelmo'; { nesta rea podemos definir todas
                                 as constantes que quisermos
                                 utilizar no programa }
    Type
          n = (BRASILEIRA,PORTUGUESA,INGLESA,FRANCESA,ALEMA,AMERICANA);

          { o Turbo Pascal possui diversos  tipos  de  variveis  pre-
            definidas,  mas  tambm  permite  definir  novos  tipos na
            subrea type }


    Var idade         : integer;
        altura        : real;
        nome          : string[30];
        sexo          : char;
        nacionalidade : n;

        { todas as variveis que forem utilizadas no corpo do programa
        devero ser declaradas na subrea Var }

    Procedure Linha;  { a procedure equivale ao conceito de sub-rotina.
                        Sua estrutura pode se tornar to complexa como
                        de um programa. Esta procedure,traa uma linha
                        na posio atual do cursor }
    Var i:integer;
    Begin
       For i:=1 to 80 do Write('-');
    end;

    Function Soma(x,y:integer):integer;

    { o Turbo Pascal  possui diversas funes pr-definidas, mas o
      programador tambm pode definir as suas proprias }

    Begin
       Soma:=x+y;
    end;

       { Podemos definir quantas procedures e functions quisermos }

       { Aqui comea o programa propriamente dito }

    Begin
       ClrScr; { apaga a tela }
       Linha;  { Executa a procedure linha }
       Writeln('Meu nome e -------> ',Meu_Nome);
       Linha;
       Write('Qual o seu nome ----> ');
       Readln(Nome);
       Linha;
       Write('Qual a sua idade ---> ');
       Readln(idade);
       Linha;
       Writeln('nossas idades somam --> ',Soma(34,idade));
       Linha;
       goto fim;
       { estas linhas sero puladas }
       nacionalidade:=BRASILEIRA;
       Write('Minha nacionalidade e brasileira');
    fim:
       Write('Prazer em conhece-lo');
    End.


II.2 - Estrutura de um programa em Pascal
       ----------------------------------
    Todo programa em Pascal  subdividido em 3 reas:

        - cabealho do programa
        - rea de declaraes
        - corpo do programa

    Na definio padro da linguagem  Pascal, o  Cabealho  do   programa 
    obrigatrio,  no  entanto,  no  Turbo  Pascal ele  opcional. A rea de
    declaraes  subdividida em seis sub-reas, a saber:

        - Label
        - Const
        - Type
        - Var
        - Procedures
        - Functions

    Darei   agora,  uma  breve   explicao de cada subrea, pois mais para
    frente  estudaremos  cada uma delas com profundidade. Na subrea Label,
    devemos  declarar  todos  os  labels  que  forem utilizados no corpo do
    programa. Os labels so utilizados em conjunto com  a  instruo  goto.
    Todas  as  constantes  que  formos utilizar no nosso programa, podem se
    assim desejarmos, ser definidas na subrea Const.

    O Turbo Pascal tem  basicamente  6  tipos  de variveis pr-definidas a
    saber: Integer, Real, Byte, Boolean, Char e String. No entanto, podemos
    definir novos tipos de variveis na subrea Type.

    Todas   as  variveis  utilizadas  no  programa devem ser declaradas na
    subrea  Var,  pois a alocao de espao de memria para as variveis 
    feita  durante  a  compilao. Na subrea Procedures,  podemos  definir
    quantas  sub-rotinas  quisermos.  Elas  so chamadas durante o programa
    pelos seus respectivos nomes.

    Finalmente,  na  subrea  Functions  podemos  definir novas funes que
    depois  poderemos  utilizar  no  programa  embora o Turbo Pascal possua
    inmeras funes pr-definidas. Estas subreas s so obrigatrias caso
    ns  estejamos  precisando. Exemplo: se no vamos utilizar variveis no
    nosso  programa (coisa rara)   ento  no precisamos utilizar a subrea
    Var.  De  acordo  com  a  definio  padro  da Linguagem Pascal, estas
    subreas  devem  aparecer  na  sequncia que foi dada anteriormente, ou
    seja, Label - Const - Type - Var - Procedures - Functions. Mas no Turbo
    Pascal isto  livre.

    Por fim, como dito no programa exemplo, existe a  possibilidade  de  se
    usar a declarao USES, que nos permite utilizar UNITS  que  nada  mais
    so do que bibliotecas de funes e procedures previamente declaradas.


Ŀ
III - Noes Bsicas preliminares.


III.1 - Elementos bsicos do Turbo Pascal
        ---------------------------------

III.1.1 - Caracteres utilizados

    Os   caracteres que podem ser utilizados no Turbo Pascal so  divididos
    em :

    Letras   : 'A' at 'Z', 'a' at 'z'

    Nmeros  : 0,1,2,3,4,5,6,7,8 e 9

    Especiais: + - * / = ^ < > ( ) [ ] { } . , : ; ' # $

    Observaes:

    1-) O  Turbo   Pascal  no  faz  distino   entre  letras maisculas e
        minsculas,  de  tal  forma  que  no desenvolvimento deste curso eu
        utilizarei os dois tipos da forma que achar mais conveniente.

    2-) Embora na maioria das linguagens o sinal de atribuio de valores a
        variveis   seja   o =,  em  Pascal,  o smbolo de atribuio  :=,
        exemplos:

            A =  100     em Basic
            A := 100     em Pascal

    3-) Dois pontos em seguida (..) indica um delimitador de faixa,exemplo:

             1..30 --> todos inteiros entre 1 e 30 inclusive.


III.1.2 - Palavras reservadas

    As palavras reservadas do Turbo Pascal so palavras que fazem parte  da
    sua  estrutura  e tm significados pr-determinados. Elas no podem ser
    redefinidas  e  no  podem  ser  utilizadas  como  identificadores   de
    variveis, procedures, functions etc. Algumas das  palavras  reservadas
    so:

        absolute(*)           and        array            begin
        case                  const      div              do
        downto                else       end              external(*)
        file                  for        forward          function
        goto                  if         in               inline(*)
        label                 mod        nil              not
        of                    or         packed           procedure
        program               record     repeat           set
        shl(*)                shr(*)     string(*)        then
        to                    type       until            var
        while                 with       xor(*)

    (*) --> no definidos no Pascal Standard


III.1.3 - Identificadores pr-definidos

    O Turbo Pascal possui inmeros identificadores pr-definidos,  que  no
    fazem  parte   da   definio   padro   da   linguagem  Pascal.  Esses
    identificadores consistem   em  Procedures  e  Functions, que podem ser
    utilizados normalmente na construo de programas. Exemplos:

    ClrScr      : limpa a tela de vdeo
    DelLine     : deleta a linha em que est o cursor e assim por diante.

    Constantemente, novas  procedures  e functions esto sendo criadas pela
    Borland  International  (criadora do Turbo Pascal),   aumentando  desta
    forma o nmero  de identificadores. So UNITS que tornam o Turbo Pascal
    mais poderoso do que ele j .

    Regras para formao de identificadores:

    O usurio tambm pode definir seus prprios identificadores, na verdade
    ns somos obrigados a isso. Nomes de variveis,de labels,de procedures,
    functions, constantes etc. so   identificadores que devem ser formados
    pelo programador. Mas para isso existem determinadas  regras  que devem
    ser seguidas:

    1-) O primeiro  caractere  do identificador dever ser obrigatoriamente
        uma letra ou um underscore (_).
    2-) Os demais caracteres podem ser letras, dgitos ou underscores.
    3-) Um identificador pode ter no mximo 127 caracteres.
    4-) Como j dissemos anteriormente, no pode ser palavra reservada.

    Exemplos de identificadores vlidos:

        Meu_Nome
        MEU_NOME    igual ao anterior
        __Linha
        EXemplo23

    Exemplos de identificadores no vlidos:

        2teste  comea com nmero
        Exemplo 23  tem um espao


III.1.4 - Comentrios

    Comentrios so textos que introduzimos no meio do programa fonte com a
    inteno de torn-lo  mais claro.   uma  boa  prtica  em  programao
    inserir comentrios no meio dos nossos programas. No Turbo Pascal, tudo
    que estiver entre  os  smbolos (* e *) ou { e }  ser considerado como
    comentrio.


III.1.5 - Nmeros

    No  Turbo Pascal, podemos trabalhar com nmeros inteiros e reais, sendo
    que  os  nmeros inteiros podem ser representados na forma hexadecimal,
    para  tanto,  basta  preced-los  do smbolo $. Os nmeros reais tambm
    podem ser representados na forma exponencial.

    Isso tudo varia de verso para verso do turbo Pascal, citarei aqui  as
    faixas de valores vlidas para a verso  7.0:

    Ŀ
      Tipo        faixa                    Formato         
    Ĵ
      Shortint  -128..127                Signed 8-bit      
      Integer   -32768..32767            Signed 16-bit     
      Longint   -2147483648..2147483647  Signed 32-bit     
      Byte      0..255                   Unsigned 8-bit    
      Word      0..65535                 Unsigned 16-bit   
    
    Ŀ
      Tipo          faixa            Digitos  Bytes       
    Ĵ
       real      2.9e-39..1.7e38      11-12    6          
       single    1.5e-45..3.4e38       7-8     4          
       double    5.0e-324..1.7e308    15-16    8          
       extended  3.4e-4932..1.1e4932  19-20   10          
       comp      -9.2e18..9.2e18      19-20    8          
    

III.1.6 - Strings

    Strings so conjunto de caracteres entre aspas simples, exemplos:

    'isto  uma string'
    '123456'                etc.


III.1.7 - Caracteres de controle

    Existem   alguns  caracteres  que  tm  significados especiais. So  os
    caracteres de controle. Exemplos:

    Control G       -> Bell ou beep
    Contorl L      -> Form Feed
        etc.

    Em Turbo Pascal,  tambm podemos utilizar estes caracteres. Para tanto,
    eles devem ser  escritos  pelo   seus  valores   ASCII correspondentes,
    precedidos do smbolo #, ou ento a  letra  correspondente precedida do
    smbolo ^, exemplo:

    Control G       --> #7 ou ^G


III.2 - Definio de variveis

    Como j dissemos,  todas as variveis que forem utilizadas no corpo  do
    programa, devem ser declaradas numa subrea especfica chamada Var.

    Para estudarmos essa subrea devemos primeiro ver os tipos de variveis
    pr-definidos em Turbo Pascal.


III.2.1 - Tipos de dados pr-definidos

    Os tipos de dados pr-definidos em Turbo Pascal  so  divididos em duas
    categorias:

    Escalares Simples:

        - Char
        - Boolean
        - todos os tipos de inteiros citados acima
        - todos os tipos de reais citados acima

    Escalares estruturados:

        - String
        - Array
        - Record
        - File
        - Set
        - Text

    Inicialmente,  iremos estudar os escalares simples e o tipo String pela
    sua  utilizao  prtica  inicial.  Os  demais tipos estruturados sero
    vistos mais para a frente.

    CHAR:
    O tipo char corresponde  a  todos  os  caracteres que podem ser gerados
    pelo teclado tais como dgitos, letras e smbolos tais como &, #,* etc.
    Os caracteres devem vir entre aspas simples.

    BOOLEAN:
    O tipo boolean s pode assumir os valores FALSE e TRUE.

    STRING:
    Este  tipo   chamado  de estruturado  ou composto pois  constitudo a
    partir de um tipo simples que  o char. O tipo string  composto por um
    conjunto de caracteres entre aspas simples.


    SHORTINT - INTEGER - LONGINT - BYTE - WORD:
    Ver tabela acima.

    REAL - SINGLE - DOUBLE - EXTENDED - COMP:
    Ver tabela acima.


III.2.2 - A declarao Var

    Esta   a  subrea  onde devemos declarar todas as variveis que iremos
    utilizar em nosso programa. Exemplo:

    Program Exemplo;        (* cabealho do programa *)

    Var
        idade,nmero_de_filhos : byte;
        altura                 : real;
        sexo                   : char;
        nome                   : string[30];
        sim_ou_nao             : boolean;
        quantidade             : integer;

    (* aqui comea o programa *)

    Begin
            idade:=34;
            nmero_de_filhos:=2;
            sexo:='M';
            nome:='Jos';
            sim_ou_nao:=TRUE;
            quantidade:=3245;
     End.

    Observaes importantes:

    1-) A palavra reservada Var aparece uma nica vez num programa

    2-) A sintaxe geral para declarao de variveis :

    varivel_1,varivel_2,...,varivel_n : tipo;

    3-) Os espaos e comentrios separam os elementos  da  linguagem.  Voce
        pode colocar quantos espaos quiser. Observe:

        Varidade:integer;     o compilador no reconhece a palavra Var

        Var idade:integer;    agora sim, ou se preferir

        Var                        idade
                    :   integer;              d na mesma.

    4-) As  instrues  so separadas entre si por ponto e vrgula ';'.  Se
        voc  quiser, pode colocar mais de uma instruo numa nica  linha.
        Lembre-se que o limite de caracteres numa linha  de 127

    5-) O tipo string deve ser procedido da quantidade mxima de caracteres
        que  a varivel pode assumir. Lembre-se que a alocao de espao de
        memria para as  variveis  feita durante a compilao, portanto o
        compilador  precisa  saber  desse  dado.  Por outro lado, o fato de
        termos,  por  exemplo, atribudo o valor mximo de 30 no significa
        que tenhamos que  utilizar os 30 caracteres e sim no mximo 30.

    6-) Como  ltima  observao, acho muito mais claro e elegante declarar
        variveis  e  ao   mesmo  tempo  informar com linhas comentrios os
        devidos motivos. Exemplo:

    Var
        idade,      (* idade de determinada pessoa *)
        i,j         (* utilizadas em loops         *)
              : integer;

        nome1,      (* nome genrico de pessoas    *)
        nome2       (* nome genrico de pessoas    *)
              : string[50];


Ŀ
 Aguarde a aula No. 2 


        []s  lCa 
