You are on page 1of 28

Apostila de linguagem de programao PASCAL

1 FUNDAMENTOS DE PROGRAMAO
1.1 O QUE SO ALGORITMOS ? O uso de algoritmos quase to antigo quanto a matemtica. Com o passar do tempo, entretanto, ele foi bastante esquecido pela matemtica. Com o advento das mquinas de calcular e mais tarde os computadores, o uso de algoritmos ressurgiu com grande vigor, como uma forma de indicar o caminho para a soluo dos mais variados problemas. Algoritmo no a soluo do problema, pois, se assim fosse, cada problema teria um nico algoritmo. Algoritmo o caminho para a soluo de um problema, e em geral, os caminhos que levam a uma soluo so muitos. Ao longo dos anos surgiram muitas formas de representar os algoritmos, alguns utilizando linguagens semelhantes s linguagens de programao e outras utilizando formas grficas. O aprendizado de algoritmos no se consegue a no ser atravs de muitos exerccios. Algoritmos no se aprendem: - Copiando algoritmos - Estudando algoritmos Algoritmos s se aprendem: - Construindo algoritmos - testando algoritmos

especificao da sequncia ordenada de passos que deve ser seguida para a realizao de uma tarefa, garantindo a sua repetibilidade, d-se o nome de algoritmo. Embora esta definio de algoritmo seja correta, podemos definir algoritmo, de maneira informal e completa como: Algoritmos um conjunto de regras, bem definidas, para a soluo de um problema em um tempo finito e com um nmero finto de passos. Algoritmo pode ser definido tambm como um conjunto de valores como entrada e produz algum valor ou conjunto de valores como sada. Um algoritmo deve sempre possuir pelo menos um resultado, normalmente chamado de sada, e satisfazer a propriedade da efetividade, isto , todas as operaes. especificadas no algoritmo devem ser suficientemente bsicas para que possam ser executadas de maneira exata e num tempo finito. Na prtica no importante ter-se apenas um algoritmo, mas sim, um bom algoritmo. O mais importante de um algoritmo a sua correo, isto , se ele resolve realmente o problema proposto e o faz exatamente. Para se ter um algoritmo, necessrio: i. Que se tenha um nmero finito de passos; ii. Que cada passo esteja precisamente definido, sem possveis ambiguidades; iii. Que existam zero ou mais entradas tomadas de conjuntos bem definidos; iv. Que existam uma ou mais sadas;

Prof Valria Ap. Perez Faria

Pgina 1

Apostila de linguagem de programao PASCAL


v. Que exista uma condio de _m sempre atingida para quaisquer entradas e num tempo finito. Para que um computador possa desempenhar uma tarefa necessrio que esta seja detalhada passo a passo, numa forma compreensvel pela mquina, utilizando aquilo que se chama de programa. Neste sentido, um programa de computador nada mais que um algoritmo escrito numa forma compreensvel pelo computador. 1.1.1 POR QUE PRECISAMOS DE ALGORITMOS ? Vejamos o que algumas pessoas importantes, para a Cincia da Computao, disseram a respeito de algoritmo: _A noo de algoritmo bsica para toda a programao de computadores_. [KNUTH - Professor da Universidade de Stanford, autor da coleo _The art of computer programming_] O conceito central da programao e da cincia da computao o conceito de algoritmo. [WIRTH - Professor da Universidade de Zurique, autor de diversos livros na rea e responsvel pela criao de linguagens de programao como ALGOL, PASCAL e MODULA-2]. A importncia do algoritmo est no fato de termos que especificar uma sequncia de passos lgicos para que o computador possa executar uma tarefa qualquer, pois o mesmo por si s no tem vontade prpria, faz apenas o que mandamos. Com uma ferramenta algortmica, podemos conceber uma soluo para um dado problema, independendo de uma linguagem especfica e at mesmo do prprio computador. 1.1.2 MTODO PARA CONSTRUIR UM ALGORITMO Utilizando os conceitos j desenvolvidos, esquematizaremos um mtodo para construir um algoritmo logicamente correto: i. Ler atentamente o enunciado: Deve-se reler o enunciado de um exerccio quantas vezes forem necessrias, at compreend-lo completamente. A maior parte da resoluo de um exerccio consiste na compreenso completa do enunciado. ii. Retirar a relao das entradas de dados do enunciado Atravs do enunciado, descobrimos quais so os dados que devem ser fornecidos ao programa, via teclado, a partir dos quais so desenvolvidos os clculos. Obs. Pode haver algum algoritmo que no necessite da entrada de dados (pouco comum). iii. Retirar do enunciado as informaes de sada Atravs do enunciado podemos descobrir quais so as informaes que devem ser mostradas para compor o resultado final, objetivo do algoritmo. 4. Determinar o que deve ser feito para transformar as entradas em sadas Nessa fase que teremos a construo do Algoritmo propriamente dito. Devemos determinar qual sequncia de passos ou aes capaz de transformar um conjunto de dados nas informaes de resultado. 1.2 TIPOS DE INFORMAO

Todo o trabalho realizado por um computador baseado na manipulao das informaes contidas em sua memria. Estas informaes podem ser classificadas em dois tipos:
Prof Valria Ap. Perez Faria Pgina 2

Apostila de linguagem de programao PASCAL


As instrues, que comandam o funcionamento da mquina e determinam a maneira como devem ser tratados os dados. Os dados propriamente ditos, que correspondem poro das informaes a serem processadas pelo computador. A classificao apresentada a seguir no se aplica a nenhuma linguagem de programao especfica; pelo contrrio, ela sintetiza os padres utilizados na maioria das linguagens. 1.2.1 TIPOS INTEIROS (NUMRICOS) So caracterizados como tipos inteiros, os dados numricos positivos ou negativos. Excluindo-se destes qualquer nmero fracionrio. Como exemplo deste tipo de dado, tem-se os valores: 35, 0, -56, 1024 entre outros. 1.2.2 TIPOS REAIS (NUMRICOS) So caracterizados como tipos reais, os dados numricos positivos e negativos e nmeros fracionrios. Como exemplo deste tipo de dado, tem-se os valores: 35, 0, -56, 1.2, -45.987 entre outros. 1.2.3 TIPOS CARACTERES So caracterizados como tipos caracteres, as sequncias contendo letras, nmeros e smbolos especiais. Uma sequncia de caracteres deve ser indicada entre aspas (__). Este tipo de dado tambm conhecido como string, alfanumrico, string, literal ou cadeia. Como exemplo deste tipo de dado, tem-se os valores: Programao, Rua Alfa, 52 Apto 1, Fone 574-9988, 04387-030, , 7 entre outros. 1.2.4 TIPOS LGICOS So caracterizados como tipos lgicos os dados com valor verdadeiro e falso, sendo que este tipo de dado poder representar apenas um dos dois valores. Ele chamado por alguns de tipo booleano, devido contribuio do filsofo e matemtico ingls George Boole na rea da lgica matemtica. 1.3 VARIVEIS

Na programao, uma varivel um objeto (uma posio, frequentemente localizada na memria) capaz de reter e representar um valor ou expresso. Enquanto as variveis s existem em tempo de execuo, elas so associadas a nomes, chamados identificadores, durante o tempo de desenvolvimento. 1.3.1 ARMAZENAMENTO DE DADOS NA MEMRIA Para armazenar os dados na memria, imagine que a memria de um computador um grande arquivo com vrias gavetas, onde cada gaveta pode armazenar apenas um nico valor (seja ele numrico, caractere ou lgico). Se um grande arquivo com vrias gavetas, necessrio identificar com um
Prof Valria Ap. Perez Faria Pgina 3

Apostila de linguagem de programao PASCAL


nome a gaveta que se pretende utilizar. Desta forma o valor armazenado pode ser utilizado a qualquer momento. 1.3.2 CONCEITO E UTILIDADE DE VARIVEIS Tm-se como definio de varivel tudo aquilo que sujeito a variaes, que incerto, instvel ou inconstante. E quando se fala de computadores, temos que ter em mente que o volume de informaes a serem tratadas grande e diversificado. Desta forma, os dados a serem processados sero bastante variveis. Como visto anteriormente, informaes correspondentes a diversos tipos dedados so armazenadas nas memrias dos computadores. Para acessar individualmente cada uma destas informaes, em princpio, seria necessrio saber o tipo de dado desta informao (ou seja, o nmero de bytes de memria por ela ocupados) e a posio inicial deste conjunto de bytes na memria. Percebe-se que esta sistemtica de acesso a informaes na memria bastante ilegvel e difcil de se trabalhar. Para contornar esta situao criou-se o conceito de varivel, que uma entidade destinada a guardar uma informao. Basicamente, uma varivel possui trs atributos: um nome, um tipo de dado associado mesma e a informao por ela guardada. Toda varivel possui um nome que tem a funo de diferenci-la das demais. Cada linguagem de programao estabelece suas prprias regras de formao de nomes de variveis. Adotaremos para os algoritmos, as seguintes regras: i. um nome de varivel deve necessariamente comear com uma letra; ii. um nome de varivel no deve conter nenhum smbolo especial, exceto a sublinha ( _ ) e nenhum espao em branco; iii. Um nome de varivel no poder ser uma palavra reservada a uma instruo de programa. Exemplos de nomes de variveis: Salario - correto 1ANO - errado (no comeou uma letra) ANO1 - correto SAL/HORA - errado (contm o caractere _/_) SAL_HORA - correto _DESCONTO - errado (no comeou com uma letra) Obviamente interessante adotar nomes de variveis relacionados s funes que sero exercidas pelas mesmas dentro de um programa. Outro atributo caracterstico de uma varivel o tipo de dado que ela pode armazenar. Este atributo define a natureza das informaes contidas na varivel. Por ltimo h o atributo informao, que nada mais do que a informao til contida na varivel. Uma vez definidos, os atributos nome e tipo de dado de uma varivel no podem ser alterados e assim permanecem durante toda a sua existncia, desde que o programa que a utiliza no seja modificado. Por outro lado, o atributo informao est constantemente sujeito a mudanas de acordo com o fluxo de execuo do programa. Em resumo, o conceito de varivel foi criado para facilitar a vida dos programadores, permitindo acessar informaes na
Prof Valria Ap. Perez Faria Pgina 4

Apostila de linguagem de programao PASCAL


memria dos computadores por meio de um nome, em vez do endereo de uma clula de memria. Exemplo: Suponha que fosse atribudo os seguintes valores s seguintes variveis: A = _mesa_, B = 0, C = 2, D = -5.4, E = _Joo_ e E = 5.656. 1.4 INSTRUES PRIMITIVAS

Como o prprio nome diz, instrues primitivas so os comandos bsicos que efetuam tarefas essenciais para a operao dos computadores, como entrada e sada de dados (comunicao com o usurio e com dispositivos perifricos), e movimentao dos mesmos na memria. Estes tipos de instruo esto presentes na absoluta maioria das linguagens de programao. Antes de passar descrio das instrues primitiva, necessria a definio de alguns termos que sero utilizados: Dispositivo de entrada o meio pelo qual as informaes (mais especificamente os dados) so transferidos pelo usurio ou pelos nveis secundrios de memria ao computador. Os exemplos mais comuns so o teclado, o mouse, leitora tica, leitora de cdigo de barras, as fitas e discos magnticos. Dispositivo de sada o meio pelo qual as informaes (geralmente os resultados da execuo de um programa) so transferidos pelo computador ao usurio ou aos nveis secundrios de memria. Os exemplos mais comuns so o monitor de vdeo, impressora, fitas e discos magnticos. Sintaxe a forma como os comandos devem ser escritos, a fim de que possam ser entendidos pelo tradutor de programas. A violao das regras sintticas considerada um erro sujeito pena do no reconhecimento por parte do tradutor; Semntica o significado, ou seja, o conjunto de aes que sero exercidas pelo computador durante a execuo do referido comando. Daqui em diante, todos os comandos novos sero apresentados por meio de sua sintaxe e sua semntica, isto , a forma como devem ser escritos e a(s) ao(es) que executam. INTRODUO A LINGUAGEM PASCAL

1.5

A linguagem Pascal se destina programao de computadores. Foi desenvolvida no final dos anos 60 na Sua e seu nome uma homenagem ao criador da primeira calculadora mecnica, o matemtico francs do sculo XVII Blaise Pascal. Um dos principais fatores que motivaram o surgimento da linguagem foi a obteno de uma linguagem simples, capaz de incentivar a edio de programas claros e facilmente legveis, favorecendo a utilizao das boas tcnicas de programao. Assim como as outras linguagens de programao, o Pascal possui vrias verses. Cada fabricante cria sua prpria verso com suas particularidades. As verses mais famosas so o Turbo Pascal, da Borland International, e o MSPascal, da Microsoft. Existem verses de Pascal para todos os tipos de
Prof Valria Ap. Perez Faria Pgina 5

Apostila de linguagem de programao PASCAL


computadores, desde MSX e CP-500 a computadores de grande porte como o IBM 4381. medida que o tempo passa, cada fabricante costuma atualizar e melhorar as verses de seus programas. O mesmo acontece com as linguagens de programao. Em 1983, a Borland criou o Turbo Pascal, verso 1. Essa verso inicial passou por sucessivas atualizaes at que em 1991 tnhamos o Turbo Pascal, verso 6. Neste texto, onde nos referirmos simplesmente linguagem Pascal, estamos nos referindo verso 5 do Turbo Pascal, lanada em 1988. 1.6.1 PROGRAMAS FONTE, OBJETO E EXECUTVEL Normalmente, quando pensamos em elaborar um programa, estamos pensando em fazer um texto com palavras do tipo "read", "write", "function", "end", etc. Neste texto, cada palavra escrita obedece a uma gramtica rigorosa ditada pela linguagem de programao. Queremos que o computador execute cada comando associado a cada palavra que escrevemos. Este texto a que estamos nos referindo chamado programa fonte. Internamente, todo computador s entende uma linguagem chamada linguagem de mquina, formada exclusivamente por nmeros binrios, cujos nicos algarismos so 0 e 1. Logo, o programa fonte deve passar por algum processo de traduo para que o computador possa entend-lo. Essa traduo chamada compilao. O programa fonte, aps a compilao, recebe o nome de programa objeto. Apesar do programa objeto estar na linguagem do computador, ele ainda no pode ser executado pois, sob um certo aspecto, est ainda incompleto. Faltam instrues nele que ensinem o computador a executar os comandos bsicos da linguagem. Por exemplo, voc pode usar uma funo trigonomtrica no seu programa fonte, e na hora dela ser executada, o computador saber como calcul-la. Quem que ensina ao computador a calcular valor de funo trigonomtrica? A resposta a essa pergunta simples: toda linguagem de programao possui um conjunto de instrues bsicas pronto para ser adicionado a qualquer programa objeto. Esse conjunto de instrues a biblioteca padro da linguagem. O ato de ligar (link) o programa objeto biblioteca padro chamado ligao (que algumas pessoas chamam de "linkagem", talvez pelo hbito de usar neologismos). O programa objeto aps a ligao com a biblioteca padro torna-se um programa executvel. +------------+ +------------+ | Programa | COMPILAO | Programa | | fonte | -----------> | objeto | +------------+ +------------+ |----------->| Programa | +-------------+ | executvel | | Biblioteca | +-------------+ | padro | +-------------+ 1.6.2 NOMES DOS ARQUIVOS EM DISCO Os nomes com os quais os programas de qualquer linguagem de programao so gravados no disco, obedecem s regras de formao de nomes do sistema
Prof Valria Ap. Perez Faria Pgina 6

Apostila de linguagem de programao PASCAL


operacional: todo arquivo do disco especificado por um nome obrigatrio com no mximo 8 caracteres e uma extenso opcional com no mximo 3 caracteres. O nome e a extenso so separados por um ponto. Os caracteres que podem aparecer no nome ou extenso so letras, algarismos e alguns caracteres especiais como: () - _ $ ! @ # No podem fazer parte do nome ou extenso os seguintes caracteres: + ? * \ / | < > [ ] : ; , . comum um programa fonte em Pascal ter extenso PAS. Se voc no mencionar a extenso de um arquivo, o Pascal incluir automaticamente a extenso PAS, sempre que for feito algum uso do mesmo. Neste caso, dizemos que PAS a extenso "default"( = omisso, falta) do Pascal. A extenso, geralmente, classifica o tipo do arquivo. Algumas extenses bastante comuns so: PAS ---> Programa fonte em Pascal BAS ---> Programa fonte em BASIC C ---> Programa fonte em C FOR ---> Programa fonte em FORTRAN PRO ---> Programa fonte em PROLOG ASM ---> Programa fonte em Assembly BAK ---> Arquivo cpia (back up) de outro BAT ---> Arquivo de lote (batch) EXE ---> Programa executvel COM ---> Programa executvel OBJ ---> Programa objeto SYS ---> Arquivo usado pelo sistema operacional DOC ---> Texto TXT ---> Texto TPU ---> Unidade do Turbo Pascal Por exemplo, para um programa que trate da resoluo de sistemas lineares, um nome natural poderia ser SISTEMA.PAS. No entanto, o usurio poderia cham-lo de @##!.)$$ se quisesse. Ambos so nomes vlidos para o Pascal, alis, para o DOS. Se no disco aparecer tambm um SISTEMA.BAK e um SISTEMA.EXE, ento muito provvel que o SISTEMA.BAK seja apenas uma cpia do SISTEMA.PAS e o SISTEMA.EXE seja sua verso executvel. Outras verses de Pascal, bem como outras linguagens de programao, costumam criar arquivos OBJ no disco, correspondentes aos programas objeto, mas no esse o caso do Turbo Pascal. Logo, o programa objeto correspondente a SISTEMA.PAS ser mantido apenas na memria e voc no ter em disco um SISTEMA.OBJ. 2. FUNDAMENTOS DA PROGRAMAO EM PASCAL

Prof Valria Ap. Perez Faria

Pgina 7

Apostila de linguagem de programao PASCAL


2.1 ESTRUTURAS 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. 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. 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+
Prof Valria Ap. Perez Faria Pgina 8

Apostila de linguagem de programao PASCAL


C; (3) x := a + (4) X := b+a+B c; 2.1.1 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. 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 prdefinido 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.

Prof Valria Ap. Perez Faria

Pgina 9

Apostila de linguagem de programao PASCAL


2.1.2 TIPOS DEFINIDOS DO PASCAL O diagrama a seguir, classifica os tipos pr- definidos do Pascal que sero mais utilizados no curso.
TIPO PR DEFINIDOS

SIMPLES

ESTRUTURADO

ARRAY

STRING

ORDINAL

REAL

REAL

BOOLEAN

CHAR

INTEIRO

INTEGER

Vale ressaltar que a linguagem no possui apenas os tipos abaixo, mas estes que aparecero em 99% dos problemas. Em resumo vamos trabalhar com o seguintes tipos: - Integer - Real - String - Char - Boolean (Lgico) - Array 2.1.2.1 TIPO INTEIRO O tipo inteiro formado pelo subconjunto de inteiros, de acordo com a seguinte tabela: Tipo Domnio Tamanho ------------------------------------------------------------integer [-32768, 32767] 2 bytes -------------------------------------------------------------

Prof Valria Ap. Perez Faria

Pgina 10

Apostila de linguagem de programao PASCAL


2.1.2.2 TIPO BOOLEAN 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. 2.1.2.3 TIPO CHAR 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. 2.1.2.4 TIPO REAL O tipo real possui o seguinte domnio e tamanho: Tipo Domnio Dgitos Tamanho --------------------------------------------------------------------------Real [2.9E-39, 1.7E38] 11-12 6 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. 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. 2.1.2.5 TIPO STRING O tipo string uma sequncia de caracteres de comprimento variando de 0 a 255. Escrevendo string[N], estamos definindo N como tamanho mximo da sequncia (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 sequncia de at 40 caracteres. Podem ser consideradas deste tipo as constantes 'Turbo Pascal 5.0', '1991/1992' e 'UFPB - CCEN - Dep. de Matemtica. Falaremos dos tipos restantes em captulos posteriores. 2.1.3 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;
Prof Valria Ap. Perez Faria Pgina 11

Apostila de linguagem de programao PASCAL


... ... Seguem alguns exemplos de declarao de variveis na linguagem Pascal: VAR x, y, z: real; i, j, k: integer; Inicio, Fim: boolean; Tamanho: integer 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 integer, 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 varivel i acima pode assumir o valor 2309, mas no pode assumir um valor fracionrio como 0.71. 2.1.4 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; ... ... Seguem alguns exemplos de declarao de constantes: 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.

2.1.5 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 declarao de variveis:
Prof Valria Ap. Perez Faria Pgina 12

Apostila de linguagem de programao PASCAL


VAR a, b, c: integer; x, y: real; teste: boolean; data: string; 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. 2.1.6 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. VAR mat, nota, cod: string; VAR mat, nota, cod: string; { matrcula } { nota final } { codigo do curso }

Prof Valria Ap. Perez Faria

Pgina 13

Apostila de linguagem de programao PASCAL


2.1.7 EXPRESSES ARITMTICAS As operaes aritmticas pr-definidas do Pascal so: + Adio / Diviso DIV Quociente da diviso inteira 9/2 = 4.5 9 DIV 2 = 4 10 DIV 2 = 5 - Subtrao * Multiplicao MOD Resto da diviso inteira -3*7 = -21 9 MOD 2 = 1 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: i. Primeiramente, so efetuadas as multiplicaes e divises (/, DIV e MOD); por ltimo, so efetuadas as adies e subtraes. Temos ento dois nveis de prioridades.

ii.

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: Expresso Valor --------------------------------5 + 2*4 13 (5 + 2)*4 28 7 DIV 2*3 9 7 DIV (2*3) 1 ---------------------------------Observaes: i. No existe operador pr-definido para a potenciao. ii. O sinal de multiplicao nunca poder ser omitido. iii. A diviso / sempre fornece um resultado real, mesmo que os operandos sejam inteiros. iv. Se todos os operandos forem inteiros e as operaes envolvidas forem +, -, *, MOD ou DIV, ento o resultado ser inteiro.

Prof Valria Ap. Perez Faria

Pgina 14

Apostila de linguagem de programao PASCAL


2.1.8 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 prdefinidas 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, obrigatria 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 em caso contrrio. Desse modo, ODD(5) = TRUE e ODD(4) = FALSE. Exemplo: TRUNC(1.35) = 1 (inteiro) INT(1.35) = 1 (real) ROUND(1.35) = 1 FRAC(1.35) = 0.35 TRUNC(1.97) = 1 (inteiro) INT(1.97) = 1 (real) ROUND(1.97) = 2 FRAC(1.97) = 0.97

As funes INT e TRUNC so numericamente equivalentes. A diferena entre elas est apenas no tipo do valor retornado.

Prof Valria Ap. Perez Faria

Pgina 15

Apostila de linguagem de programao PASCAL


2.1.9 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: i. ii. iii. X AND Y TRUE somente quando X e Y forem ambas TRUE. X OR Y FALSE somente quando X e Y forem ambas FALSE. NOT X TRUE quando X for FALSE e FALSE quando X for TRUE.

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 variveis booleanas cujos valores so: a := 1 < 2; b := 3 >= 5; c := a OR b; d := a AND b; 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 variveis x, y, z, nome1, nome2 e teste declaradas abaixo: VAR x, y, z: byte; nome1, nome2: string; teste: boolean; Considere tambm as seguintes atribuies: x := 3; y := 10; z := 4; nome1 := 'Guizinha'; nome2 := 'Olezinho'; teste := false;

Prof Valria Ap. Perez Faria

Pgina 16

Apostila de linguagem de programao PASCAL


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) =, <=, >=, <, >, <> -----------------------------------------------------------------------------------------------

Prof Valria Ap. Perez Faria

Pgina 17

Apostila de linguagem de programao PASCAL


3 - ENTRADA E SADA DE DADOS Os comandos de entrada ou sada fazem a comunicao entre o programa que est sendo executado e os perifricos de entrada (teclado, disco) ou os de sada (vdeo, disco, impressora). A entrada ou sada de dados para um disco ser tratada em captulo posterior. 3.1 COMANDOS DE ENTRADA Um comando de entrada, tambm chamado de comando de leitura, transfere dados do dispositivo de entrada (teclado) para uma ou mais variveis na memria, funcionando como um comando de atribuio. Os dados que entram devem ser compatveis com os tipos das variveis. Dois dos comandos de entradas do Pascal so READ e READLN, cujas sintaxes so: READ(Var1, Var2, ...); ---> Transfere dados para as variveis Var1, Var2, ...

READLN(Var1, Var2, ...); ---> Transfere dados para as variveis Var1, Var2, ... e, aps a leitura dos dados, posiciona o cursor no incio da prxima linha da tela. Cada comando de leitura deve ser encerrado pressionando-se a tecla ENTER. Caso haja mais de um dado a ser lido por um comando de leitura, deve-se separ-los por pelo menos um espao em branco. Exemplo: Suponhamos que A e B sejam duas variveis reais de um programa. Quando a execuo do programa chegar em um comando como Read(A, B); Ento o computador ficar esperando que sejam digitados dois nmeros reais para que sejam atribudos s variveis A e B. Por exemplo, digitando-se uma linha como 3.05 -5.17 Pressionando-se ENTER ao final da digitao dos nmeros, sero atribudos os valores 3.05 a A e -5.17 a B. como se o programa contivesse as atribuies: A := 3.05; B := -5.17; 3.2 COMANDOS DE SADA Um comando de sada transfere dados para um dispositivo de sada (vdeo, impressora). Os dados que podem ser transferidos so valores ou expresses envolvendo constantes ou variveis. Dois comandos de sada bastante usados so WRITE e WRITELN que tm sintaxes: WRITE(v1, v2, ...); ---> Mostra na tela os valores de v1, v2, ... WRITELN(v1, v2, ...); ---> Mostra na tela os valores de v1, v2, ... e posiciona o cursor no incio da prxima linha na tela.

Prof Valria Ap. Perez Faria

Pgina 18

Apostila de linguagem de programao PASCAL


Onde v1, v2, ... acima podem ser expresses envolvendo variveis ou constantes do tipo inteiro, real, string, booleano ou char. Exemplo: Suponhamos que X seja uma variavel inteira de um programa, com valor 15 no momento em que for executado o comando: WRITELN('O valor encontrado foi ', X); Neste caso, o computador mostrar na tela algo como: O valor encontrado foi 15. Depois posicionar o cursor no incio da linha seguinte a essa na tela. Observe que a mensagem "O valor encontrado foi " uma constante do tipo string. Portanto, neste exemplo, o comando de sada mostra os valores de uma constante e de uma varivel. Exemplo: Suponhamos que X, Y, Z, A, B e C sejam variveis com valores respectivamente iguais a ' Antonio ', ' Jose ', ' Maria ', 60, 75 e 90. Ento, o comando: WRITELN(x, a, y, b, z, c); Exibir na tela algo como: Antonio 60 Jose 75 Maria 90 A sequncia de comandos: WRITELN(x); WRITELN(b); WRITELN(z); WRITELN(c); Mostrar algo como:
25

WRITELN(a);

WRITELN(y);

Antonio 60 Jose 75 Maria 90 Enquanto que WRITELN(x, y, z); WRITELN(a, b, c); Exibir: Antonio Jose Maria 607590 Em cada um desses casos, o cursor ficar posicionado no incio de uma nova linha. Exemplo: Vamos elaborar agora nosso primeiro programa completo. Queremos digitar dois nmeros inteiros no teclado e desejamos que o computador mostre sua soma no vdeo. Sejam Num1 e Num2 os nomes das variveis que vo guardar na memria os valores dos nmeros digitados no teclado. A atribuio de valores a Num1 e Num2, neste caso, ser feita por um comando como READ(Num1, Num2);
Prof Valria Ap. Perez Faria Pgina 19

Apostila de linguagem de programao PASCAL


Ou como: READLN(Num1, Num2); No entanto, quando o computador executar esse tipo de comando, em momento nenhum ele lhe indicar se ele est esperando um, dois, trs ou mais nmeros. Tampouco indicar o tipo de dado que est sendo esperado, se um dado numrico ou no. Devido a isso, recomendado que antes de qualquer comando READ ou READLN, o programa contenha uma linha anterior com um WRITE ou WRITELN para mostrar alguma mensagem que oriente o usurio. Neste caso, colocaremos um comando WRITE para mostrar a mensagem Fornea dois nmeros inteiros : _. WRITE('Fornea dois nmeros inteiros : '); Uma vez introduzidos os valores de Num1 e Num2, para som-los e mostrar o resultado da soma na tela, basta colocar a expresso Num1 + Num2 em um comando de sada: WRITELN('Soma = ', Num1 + Num2); Observe que neste WRITELN temos uma constante do tipo string 'Soma = ' e uma expresso aritmtica Num1 + Num2. Nosso programa fica, ento, com o seguinte aspecto: PROGRAM SomaDeDoisInteiros; VAR Num1, Num2: integer; BEGIN WRITE('Forneca dois numeros inteiros : '); READLN(Num1, Num2); WRITELN('Soma = ', Num1 + Num2); END. Estamos atribuindo o nome _SomaDeDoisInteiros_ ao programa. Observe que os comandos do programa (WRITE..., READLN..., ...) devem ficar na seo principal do programa delimitados pelas palavras BEGIN e END. No pode ser omitido o ponto aps o END. O bloco VAR de declarao de variveis deve vir antes da seo principal. comum se deslocar para a direita as linhas de comandos compreendidas entre um BEGIN e um END. Esse tipo de deslocamento chamado ndentao. Uma vez digitado este programa, pressione simultaneamente as teclas CTRL e F9 para que ele seja executado. No caso deste programa, voc ver em uma parte da tela algo parecido com: Fornea dois nmeros inteiros : 11 27 Soma = 38 O caracter de sublinhado _ acima representa a posio do cursor na tela. Qualquer outra sada de dado posterior execuo do programa seria feita a partir dessa posio. Se a seo principal deste programa fosse:
Prof Valria Ap. Perez Faria Pgina 20

Apostila de linguagem de programao PASCAL


BEGIN WRITELN('Fornea dois nmeros inteiros : '); READLN(Num1, Num2); WRITE('Soma = ', Num1 + Num2); END. Ento teramos uma tela como: Fornea dois nmeros inteiros : 11 27 Soma = 38_ Observe a diferena na posio final do cursor. Observao: sem parmetros, ou seja, s o nome do comando seguido imediatamente de um ponto e vrgula. Um WRITELN sem parmetros causa a impresso de uma linha em branco. Por exemplo: WRITELN; WRITELN; WRITELN; Isso causa a impresso de trs linhas em branco. Um READLN sem parmetros faz o computador ficar esperando que se pressione a tecla ENTER para poder continuar. Temos assim, uma maneira de causar uma pausa na execuo de um programa. Durante a execuo do fragmento de programa a seguir, o computador coloca uma mensagem na tela (_Para continuar..._), e pra temporariamente a execuo at ser pressionado ENTER. WRITE('Para continuar, pressione [ENTER]'); READLN; ... ... 3.3 FORMATAO A impresso dos valores a serem impressos por um WRITE ou WRITELN pode ser formatada atravs da especificao da largura do campo de impresso ou do nmero de casas decimais. Para valores do tipo inteiro, booleano, string ou char, basta colocar o tamanho do campo de impresso direita do valor a ser impresso. Neste caso, o valor e o tamanho do campo devem estar separados por dois pontos (:). WRITE(V:n) ou WRITELN(V:n) ---> Imprime o valor de V em um campo de n espaos Se o valor de n for maior do que a quantidade necessria para a impresso do valor de V, ento a largura do campo ser completada com espaos em branco adicionados esquerda. Exemplo: Consideremos x1, x2, s1, s2 variveis com valores definidos pelas atribuies x1 := 8; s1 := 'A'; x2 := 19; s2 := '*';

Prof Valria Ap. Perez Faria

Pgina 21

Apostila de linguagem de programao PASCAL


Para cada comando WRITE abaixo, temos as seguintes sadas mostradas na tela:

Comando Sada ---------------------------------------------------------WRITE(x1) 8 WRITE(x1:2) ^8 WRITE(x1:10) ^^^^^^^^^8 WRITE(x1, s1, x2, s2) 8A19* WRITE(x1, ' ', s1, ' ', x2, ' ', s2) 8^19^* WRITE(x1, s1:2, x2:5, s2:3) 8^^^19^^* WRITE(x1:6, x2:2) ^^^^^819 WRITE(x1, ' ':5, x2) 8^^^^^19 ---------------------------------------------------------O smbolo ^ na tabela acima assinala os espaos em branco. Em um comando WRITE ou WRITELN, a impresso de n espaos em branco pode ser feita acrescentando-se lista de valores a serem impressos uma expresso da forma ' ':n, como no ltimo exemplo da tabela acima. O tamanho do campo de impresso pode ser uma expresso aritmtica. Por exemplo, WRITE(dado:5) o mesmo que WRITE(dado:(11 - 9 + 3)). Para se formatar a impresso de um valor real, devem ser fornecidos dois inteiros que correspondem ao tamanho do campo de impresso e quantidade de casas decimais a serem impressas. WRITE(x:M:N) ou WRITELN(x:M:N) ---> Imprime o valor de x em um campo de largura M,com N casas decimais. Se o valor de M for maior do que a quantidade necessria para a impresso do valor de x, ento a largura do campo ser completada com espaos em branco adicionados esquerda. O ponto decimal ou o sinal negativo ocupam um espao do campo de impresso. O tamanho do campo de impresso e a quantidade de casas decimais podem ser fornecidos em forma de expresso aritmtica. Valores reais sem formatao so impressos em forma de potncias de 10. Exemplo: Consideremos Pi e X constantes reais com valores respectivamente iguais a 3.1415926535 e -1991. A tabela a seguir mostra as diversas sadas geradas pelo respectivo comando WRITE. Denotamos os espaos em branco por_. Comando Sada --------------------------------------------------------------------------------WRITE(X:9:3) -1991.000 WRITE(X:15:2) ^^^^^^^-1991.00 WRITE(X:10:2) ^^-1991.00 WRITE(X) -1.9910000000E+03 WRITE(Pi) 3.1415926535E+00 WRITE(Pi:4:2) 3.14 WRITE(Pi:7:2) ^^^3.14 WRITE(Pi:10:3) ^^^^^3.141
Prof Valria Ap. Perez Faria Pgina 22

Apostila de linguagem de programao PASCAL


WRITE(Pi:10:6) ^^3.141592 WRITE(Pi:10:8) 3.14159265 WRITE(Pi:5:0) ^^^^3 ----------------------------------------------------------------------------------Exemplo: Vamos construir agora um programa que solicita ao usurio a medida de um ngulo em graus (um nmero inteiro) e mostra na tela o seno, o cosseno e a tangente do ngulo fornecido. As funes trigonomtricas pr-definidas SIN(x) e COS(x) operam com um ngulo x em radianos. Logo, o programa deve ser esperto o suficiente para transformar o ngulo em graus, fornecido pelo usurio, para um valor equivalente em radianos. Isto feito atravs de uma multiplicao por Pi/180. O Pascal tem o valor de Pi pr-definido com 19 casas decimais. Vamos usar trs variveis reais "seno", "cosseno" e "tangente" para guardar os valores desejados. Vamos exigir que a impresso dos valores seja em um campo com 8 espaos e 4 casas decimais. PROGRAM Sen_Cos_Tg; { Calculo do seno, cosseno e tangente de um angulo } VAR AnguloEmGraus: INTEGER; seno, cosseno, tangente, AnguloEmRadianos: REAL; BEGIN { inicio da seo principal } WRITE('Fornea a medida de um angulo (em graus) : '); READLN(AnguloEmGraus); WRITELN; { gera uma linha em branco } AnguloEmRadianos := AnguloEmGraus*Pi/180; { transforma graus em radianos } seno := SIN(AnguloEmRadianos); { Calculo dos valores } cosseno := COS(AnguloEmRadianos); { desejados. Lembre- }{ se que o Pascal no } tangente := seno/cosseno; { tem funo tangente } { pr-definida } { Sada dos resultados } WRITELN('Seno de ', AnguloEmGraus, ' = ', seno:8:4); WRITELN('Cosseno de ', AnguloEmGraus, ' = ', cosseno:8:4); WRITELN('Tangente de ',AnguloEmGraus,' = ', tangente:8:4); END. { fim da seo principal } Executando-se esse programa (aps a digitao correta deve-se pressionar CTRL-F9 e ALT-F5), vemos na tela algo parecido com: Fornea a medida de um angulo (em graus) : 50 <----------+ Seno de 50 = 0.7660 | Cosseno de 50 = 0.6428 | Tangente de 50 = 1.1918 | | Linha em branco gerada pelo WRITELN; -----------------+

Prof Valria Ap. Perez Faria

Pgina 23

Apostila de linguagem de programao PASCAL


3.4 O COMANDO CLRSCR A partir da verso 4, o Pascal passou a agrupar os comandos em unidades. Todos os comandos que usamos at agora (READ, WRITE, SIN, COS, ...) fazem parte da unidade padro chamada SYSTEM. A unidade SYSTEM no precisa ser mencionada no programa; podemos usar seus comandos vontade. Sempre que algum comando de uma outra unidade for usado, o nome da unidade precisa ter sido declarado em um comando USES, que deve ficar logo abaixo do cabealho do programa. A sintaxe do USES USES Nome_da_unidade_1, Nome_da_unidade_2, ...; Um comando que faz parte da unidade CRT e que bastante usado, o comando CLRSCR (Clear Screen) cuja finalidade, como o prprio nome sugere, limpar a tela. Muitos dos livros sobre Pascal disponveis em Portugus, referem-se s verses anteriores 4. Nesses livros, no feita referncia unidade CRT. Exemplo: Queremos fornecer trs nmeros reais a, b e c ao computador e queremos que ele nos fornea, com trs casas decimais, o valor da rea do tringulo cujos lados medem a, b e c. Vamos querer tambm que o computador se d ao trabalho de limpar a tela antes de pedir os valores de a, b, c. Vamos usar a frmula da Geometria Plana que diz que, neste caso, a rea desejada igual raiz quadrada de p(p - a)(p - b)(p - c) onde p a metade da soma a + b + c. PROGRAM AreaDoTriangulo; { Dados os nmeros reais a, b, fornecida o valor da rea do tringulo cujos lados tm essas medidas. } USES CRT; { Permite o uso de comandos da unidade CRT, como o CLRSCR. Deve ser colocado nesta posio, logo abaixo do cabealho } VAR a, b, c, p, area: REAL; BEGIN CLRSCR; { Limpa a tela } { Leitura dos valores de a, b e c } WRITE('Valor de a: '); READLN(a); WRITE('Valor de b: '); READLN(b); WRITE('Valor de c: '); READLN(c); { Calculo da rea } p := (a + b + c)/2; area := SQRT(p*(p - a)*(p - b)*(p - c)); { Impresso dos resultados na tela } WRITELN; WRITELN('A rea do triangulo cujos lados medem'); WRITELN(a:7:3, ',', b:7:3, ' e ',c:7:3,' ' ', area:7:3); END. A impresso de um apstrofo obtida colocando-se dois apstrofos consecutivos como parte da constante string. Assim, WRITELN(' e _ ') tem como sada na tela um "", que no chega a ser um "e" acentuado, mas ajuda
Prof Valria Ap. Perez Faria Pgina 24

Apostila de linguagem de programao PASCAL


a leitura. No lugar dos trs READLN acima, poderamos ter colocado apenas um READLN(a, b, c). Este programinha no inteligente o suficiente para rejeitar na entrada valores negativos ou valores invlidos como a = 3, b = 5, c = 11. Aps sua execuo com os valores a = 5, b = 7 e c = 8,4, temos as seguintes mensagens na tela: Valor de a: 5 Valor de b: 7 Valor de c: 8.4 A area do triangulo cujos lados medem 5.000, 7.000 e 8.400 17.479 4 - ESTRUTURAS DE DECISO Para resolver problemas complexos, um programa deve ser capaz de tomar decises e escolher uma entre vrias possibilidades. Nestes casos, so necessrias avaliaes bem sucedidas de condies lgicas. O Pascal dispe de duas estruturas que podem determinar uma direo especfica para um programa: o comando IF-THEN-ELSE e o comando CASE. 4.1 COMANDOS COMPOSTOS Chamaremos de comando composto a toda sequncia finita de instrues separadas entre si por um ponto-e-vrgula e delimitadas pelas palavras chave BEGIN e END. Exemplo: A sequncia de comandos a seguir um comando composto: BEGIN ClrScr; Write('Valor de x? '); Readln(x) END Todo ponto-e-vrgula escrito antes de um END opcional. por isso que omitimos o ponto-e-vrgula do Readln(x) acima. Tambm comum se acrescentar alguns espaes em branco nas linhas de comandos entre o BEGIN e o END (esse acrscimo de espaos em branco costuma ser chamado _endentao_ ou _identificao_). Onde a sintaxe do Pascal permitir uma instruo simples, tambm permitir um comando composto. 4.2 A ESTRUTURA DE DECISO IF A estrutura de deciso IF seleciona para execuo um entre dois comandos, ou decide se um determinado comando ser executado ou no. A estrutura consiste das clusulas obrigatrias IF (se) e THEN (ento) seguidas, opcionalmente, de uma clusula ELSE (seno). Sua sintaxe : IF condio THEN BEGIN comando1; END ELSE
Prof Valria Ap. Perez Faria Pgina 25

Apostila de linguagem de programao PASCAL


BEGIN comando2; END; ou IF condio THEN BEGIN comando1; END; onde _condio_ uma expresso booleana. Se a condio for verdadeira, isto , for avaliada em TRUE, ento ser executado o comando1; se a condio for falsa (FALSE), ser executado o comando2. Na sua segunda forma (sem o ELSE), o IF no executar nenhuma ao se a condio for falsa. Exemplo: Consideremos a seguinte estrutura de deciso: IF (x > 0) THEN BEGIN WRITE(Sqrt(x)); END ELSE BEGIN x := 1; END; Neste caso, se x for um valor numrico positivo, ento ser mostrado o valor da sua raiz quadrada. Em caso contrrio, ser atribudo a x o valor constante 1. A condio neste caso a expresso lgica x > 0, o comando1 o WRITE(Sqrt(x)) e o comando2 a atribuio x := 1. A condio lgica deste exemplo no precisaria estar entre parnteses. OBSERVAO IMPORTANTE: No deve haver ponto-e-vrgula antes do ELSE. Se houvesse, o ponto-e-vrgula seria considerado o final do IF e, neste caso, o ELSE seria considerado o comando seguinte ao IF e seria rejeitado. Exemplo: Suponhamos que x seja uma varivel real de um programa e consideremos o seguinte IF: IF (x > -1) AND (x < 1) THEN BEGIN Writeln('X tem modulo menor do que 1'); END ELSE BEGIN Writeln('X tem modulo >= 1'); END; Se x em determinado momento valer 2, ento a expresso booleana (x > -1) AND (x < 1) ser falsa e, assim, ser mostrada na tela a mensagem _X tem modulo >= 1_. Os parnteses dessa expresso booleana so essenciais. Sem eles, teramos x > -1 AND x < 1 Veja que o AND tem prioridade sobre os operadores de comparao > e < , ficaramos com uma expresso sem sentido equivalente a x > (-1 AND x) < 1.

Prof Valria Ap. Perez Faria

Pgina 26

Apostila de linguagem de programao PASCAL


Exemplo: Consideremos o seguinte fragmento de um programa, no qual esto definidas a varivel booleana CONTINUAR, a varivel do tipo char RESPOSTA, e as variveis inteiras A e B. ... Write('Continua? (s/n) '); Readln(resposta); Continuar := (resposta = 'S') OR (resposta = 's'); (* CONTINUAR ser TRUE somente quando RESPOSTA for um S, maisculo ou minsculo *) IF Continuar THEN BEGIN (* Inicio do comando composto 1 *) Write('Forneca o valor de A : '); Readln(A); Write('Forneca o valor de B : '); Readln(B); END (* Fim do comando composto 1. Nao pode ter ponto-e-vrgula aqui *) ELSE BEGIN (* Inicio do comando composto 2 *) Writeln; Writeln('Pressione ENTER para encerrar'); Readln; END; (* Fim do comando composto 2 e fim do IF *) ... No IF acima, se CONTINUAR for verdadeira, ento sero solicitados valores para A e B. Em caso contrrio, o programa esperar ser pressionado a tecla ENTER para encerrar. Nas constantes do tipo char ou string, feita distino entre letras minsculas e maisculas. Logo, 'S' considerado diferente de 's'. Exemplo: Queremos, neste exemplo, elaborar um programa que solicite do usurio um nmero real qualquer x e que seja mostrado na tela a sua raiz quadrada. Se, por exemplo, x for igual a 4, queremos ver na tela uma mensagem como: A raiz quadrada de 4.000 2.000 Se x for negativo, por exemplo -9, queremos ver algo como A raiz quadrada de -9.000 3.000 i A funo pr-de_nida SQRT(x) calcula a raiz quadrada de x, se x for maior do que ou igual a 0. Portanto, se x for negativo, deveremos calcular a raiz de -x e acrescentar um "i" direita do resultado. Temos assim uma situao em que o programa deve decidir se calcula SQRT(x) ou se calcula SQRT(-x), um caso tpico de uma estrutura de deciso IF: PROGRAM RaizQuadrada; VAR x: real; BEGIN Write('Valor de x? '); Readln(x); IF (x >= 0) THEN
Prof Valria Ap. Perez Faria Pgina 27

Apostila de linguagem de programao PASCAL


BEGIN Writeln('A raiz quadrada de ', x:7:3, ' e'' ',SQRT(x):7:3); END ELSE BEGIN Writeln('A raiz quadrada de ', x:7:3, ' e'' ',SQRT(-x):7:3, ' ); END; END.

Prof Valria Ap. Perez Faria

Pgina 28

You might also like