Você está na página 1de 117

Lgica de Programao

com Pascal
Teoria e Prtica
Este livro visa ensinar a programao com Pascal
atravs de exemplos prticos.
Edeyson Andrade Gomes
IFBA 2011
2 Edio Reviso 08.12.2011

SUMRIO

............................................................................................................................................... 8

INTRODUO PROGRAMAO .............................................................................................. 8


1.1 A Linguagem Pascal ....................................................................................................... 12
1.2 Estrutura de um Programa Pascal .................................................................................. 24
1.2.1 Cabealho............................................................................................................... 24
1.2.2 rea de Declaraes ............................................................................................... 25
1.2.3 Corpo do Programa ................................................................................................ 27
1.3 Exerccios ...................................................................................................................... 12
2

................................................................................................... Erro! Indicador no definido.

VARIVEIS E CONSTANTES ...................................................................................................... 31


Palavras Reservadas ........................................................................................................ 31
Comentrios.................................................................................................................... 32
2.1 Variveis ....................................................................................................................... 32
2.2 Constantes .................................................................................................................... 32
2.3 Tipos de Dados .............................................................................................................. 32
Inteiros............................................................................................................................ 33
Reais ............................................................................................................................... 34
Caracteres ....................................................................................................................... 35
Tipos Lgicos ................................................................................................................... 38
3 ............................................................................................................................................. 40
EXPRESSES ............................................................................................................................ 40
3.1 Prioridades das Operaes ............................................................................................ 40
3.2 Tipos de Expresses ...................................................................................................... 40
3.3 Tipos de Operadores ..................................................................................................... 41
Operador de Atribuio ................................................................................................... 41
Operadores Aritmticos .................................................................................................. 41
Operador de Concatenao ............................................................................................. 44
Operadores Relacionais ................................................................................................... 45

Operadores Lgicos ......................................................................................................... 47


4

............................................................................................................................................. 51

ESTRUTURAS DE DECISO ....................................................................................................... 51


4.1 IF .. THEN....................................................................................................................... 51
4.2 IF .. THEN .. ELSE ............................................................................................................ 53
Exemplos de Cdigo........................................................................................................ 60
4.3 CASE.............................................................................................................................. 61
4.4 EXERCCIOS ................................................................................................................... 64
5 ............................................................................................................................................. 66
ESTRUTURAS DE REPETIO ................................................................................................... 66
5.1 FOR ............................................................................................................................... 68
5.2 WHILE .. DO ................................................................................................................... 75
5.3 REPEAT .. UNTIL............................................................................................................. 82
6. Arrays ................................................................................................................................. 86
Apndice A Fluxogramas ...................................................................................................... 92
Seqncia ........................................................................................................................... 92
Seleo com 1 Via ............................................................................................................... 92
Seleo com 2 Vias .............................................................................................................. 93
Seleo com N Vias ............................................................................................................. 93
Repetio com Teste Antecipado ........................................................................................ 94
Repetio com Teste Postergado ........................................................................................ 95
Exemplos ............................................................................................................................ 95

LISTAGENS

Listagem 1.1 - Cabealho de programa Pascal. ........................................................................ 25


Listagem 1.2 Utilizao de Unit............................................................................................. 26
Listagem 1.3 Declarao de Variveis. .................................................................................. 27
Listagem 1.4 Programa que l 2 nmeros e calcula a soma. .................................................. 28
Listagem 1.5 - Programa que l 3 variveis e calcula a mdia. ................................................. 30
Listagem 2.1 Exemplo de uso de Inteiros .............................................................................. 33
Listagem 2.2 Uso de Reais em Pascal .................................................................................... 34
Listagem 2.3 Exemplo com Strings........................................................................................ 36
Listagem 2.4 Exemplo com Char ........................................................................................... 37
Listagem 2.5 Exemplo com Boolean ..................................................................................... 38
Listagem 2.6 Exemplo com Variveis e Constantes ............................................................... 39
Listagem 3.1 Operador de Atribuio ................................................................................... 41
Listagem 3.2 Uso de DIV e MOD ........................................................................................... 42
Listagem 3.3 Uso de DIV e MOD com Unidade, Dezena e Centena ........................................ 43
Listagem 3.4 - Concatenao de Strings .................................................................................. 44
Listagem 3.5 Operadores Relacionais com Integer ................................................................ 45
Listagem 3.6 Operadores Relacionais com String .................................................................. 46
Listagem 3.7 Operadores Relacionais com Reais ................................................................... 47
Listagem 3.8 Operadores Lgicos ......................................................................................... 49
Listagem 4.9 Fluxograma de sequncia ................................................................................ 51
Listagem 4.1 Seleo com uma Via IF .. THEN .................................................................... 52
Listagem 4.2 Fluxograma da seleo com uma Via................................................................ 53
Listagem 4.2 Seleo com 2 Vias IF .. THEN .. ELSE ............................................................ 54
Listagem 4.3 - Fluxograma da seleo com duas Vias .............................................................. 54
Listagem 4.3 - Seleo com duas Vias ...................................................................................... 55

Edeyson Andrade Gomes

www.edeyson.com.br

Listagem 4.4 - Fluxograma da seleo com duas Vias .............................................................. 56


Listagem 4.5 Fluxograma do Algoritmo Calcula Desconto 1 .................................................. 58
Listagem 4.4 - Calcula Desconto 1 ........................................................................................... 58
Listagem 4.5 - Fluxograma do Algoritmo Calcula Desconto 2 ................................................... 59
Listagem 4.6 Fluxograma do algoritmo URA 01 CASE ............................................................ 62
Listagem 4.5 Algoritmo URA 01 Case .................................................................................... 63
Listagem 4.6 Exerccio Teste Condicional .............................................................................. 64
Listagem 4.7 - ......................................................................................................................... 65
Listagem 8.1 Fluxograma RepeteTesteNotas ........................................................................ 67
Listagem 5.1 Uso de For para repetir teste de notas ............................................................. 69
Listagem 5.2 For Simples ...................................................................................................... 70
Listagem 6.2 Fluxograma do ForSimples ............................................................................... 70
Listagem 5.3 uso do FOR ...................................................................................................... 72
Listagem 6.3 Passo a passo do FOR. ...................................................................................... 73
Listagem 5.4 Exemplo de FOR............................................................................................... 73
Listagem 5.5 Listagem de nmeros de 1 a 10 ........................................................................ 76
Listagem 5.6 Listagem de nmeros de 1 a 10 ........................................................................ 76
Listagem 5.7 Listagem de nmeros de 1 a 10 ........................................................................ 78
Listagem 5.8 Listagem de nmeros de 1 a 10 ........................................................................ 79
Listagem 5.9 While ............................................................................................................... 80
Listagem 5.10 Listagem de nmeros de 1 a 10 ...................................................................... 83
Listagem 5.11 Listagem de nmeros de 1 a 10 ...................................................................... 84
Listagem 6 Fluxograma de Sequencia ................................................................................... 92
Listagem 7 Seleo com 1 Via ............................................................................................... 93
Listagem 8 Seleo com 2 Vias ............................................................................................. 93
Listagem 9 Seleo com N Vias ............................................................................................. 94
Listagem 10 Repetio com Teste Antecipado ...................................................................... 94

Listagem 11 Repetio com Teste Postergado ...................................................................... 95


Listagem 12 Equao do 1 Grau .......................................................................................... 96
Listagem 13 Tringulos quanto aos lados ............................................................................. 97

Edeyson Andrade Gomes

www.edeyson.com.br

TABELAS

Tabela 2.1 Tipos Inteiros ...................................................................................................... 33


Tabela 2.2 - Tipos Reais ........................................................................................................... 34
Tabela 3.1 Precedncia de Operadores ................................................................................ 40
Tabela 3.2 Operadores Relacionais ....................................................................................... 45

FIGURAS

Figura 1.1 - Fluxograma de Razes de Equao do 2 Grau ....................................................... 11


Figura 1.2 - Fluxograma: Ordenar 3 nmeros distintos ............................................................ 14
Figura 1.3 Fluxograma: Nmeros naturais entre 1 e N .......................................................... 17
Figura 1.4 Fluxograma: Divisores naturais de N .................................................................... 19
Figura 1.5 Fluxograma: Determinar se N primo .................................................................. 21
Figura 1.6 Fluxograma: Mltiplos de 3 entre 1 e N................................................................. 22
Figura 1.7 Fluxograma: mltiplos de 3 e 5 entre 1 e N .......................................................... 23
Figura 5.AA While com Contador .......................................................................................... 77
Figura 5.BB Pares entre 1 e 10 com WHILE ........................................................................... 78
Figura 5.CC.............................................................................................................................. 79
Figura 5.DD While ................................................................................................................ 80
Figura 5.EE Repeat Until de 1 a 10 ........................................................................................ 83
Figura 5.FF .............................................................................................................................. 85
Figura 6.XYZ ............................................................................................................................ 86
Figura 7................................................................................................................................... 87

Programao com Pascal

INTRODUO PROGRAMAO

Um dos maiores desafios para um professor de programao fazer com que seus
alunos consigam descrever detalhadamente uma soluo para um problema. Faz-los
entender um problema no o mais difcil, todavia, faz-los organizar uma linha de
raciocnio para uma soluo que seja coerente, efetiva e eficaz no trivial.
As principais dificuldades apresentadas esto na abstrao da soluo, como verbalizar
o entendimento desta e como garantir que ela seja completa. Comumente encontramos
solues de alunos que omitem passos que so considerados bvios.
Este livro tem como objetivo ajudar o aluno a desenvolver a habilidade de descrever
solues computacionais coerentes, sem ambigidades e completas. Para isto, foca-se o
desenvolvimento do raciocnio lgico baseando-se num universo de problemas da
matemtica e fsica do ensino mdio.
Alunos do ensino mdio so confrontados com problemas como a extrao de razes de
uma equao do segundo grau. Para a soluo, aprendem um conjunto ordenado de
passos. So estes que compem um algoritmo.
Um algoritmo descreve detalhadamente uma seqncia finita e ordenada de passos
necessrios soluo de um determinado problema ou uma classe de problemas. uma
forma de descrever possveis solues a problemas do mundo real, objetivando sua
implementao no mundo computacional.
Por exemplo, toda equao do segundo grau pode ser resolvida (ter suas razes
extradas) por uma soluo que se espera possuir a 5 caractersticas importantes de um
algoritmo:
1. Finitude: Todo algoritmo deve sempre terminar aps um nmero finito
de passos.
2. Definio: Cada passo de um algoritmo deve ser definido de forma clara.
a. As aes devem ser definidas rigorosamente e sem ambigidades
para que no sejam cometidos erros durante a resoluo do
problema.
3. Entradas: Um algoritmo deve ter zero ou mais entradas.
a. Por exemplo, uma equao do segundo grau precisa informar os
valores de a, b e c, pois sua forma ax2 + bx + c.
4. Sadas: Um algoritmo deve ter uma ou mais sadas.
a. Por exemplo, uma equao de segundo grau tem duas razes.
5. Efetividade: Um algoritmo deve ser efetivo.
a. Todas as operaes devem ser suficientemente bsicas de modo
que possam ser executadas com preciso em um tempo finito por
um humano usando papel e lpis.
Edeyson Andrade Gomes

www.edeyson.com.br

Introduo Programao

b. Cada passo da soluo deve ser simples, embora sua composio


leve a soluo de algo complexo.
A construo de um algoritmo deve seguir os 6 passos seguintes:
1. Compreender o problema, descrevendo-o de forma clara e precisa.
a. Um problema s pode ser resolvido se for bem entendido, o que
requer uma descrio compreensvel e clara.
2. Identificar os dados de entrada e sada.
a. Todo problema tem 0 ou mais dados de entrada.
i. Por exemplo, uma equao do segundo grau tem 3 dados
de entrada (a, b e c).
b. Todo problema tem 0 ou mais dados de sada.
i. Por exemplo, uma equao do segundo grau onde delta
menor que zero no possui razes, logo, no tem dados de
sada.
3. Determinar o que preciso para transformar dados de entrada em
dados de sada:
a. Definio de uma seqncia de passos que permitam a soluo de
maneira automtica e repetitiva.
i. usar a estratgia top-down1, sempre buscando passos
simples que sejam compostos na soluo;
ii. observar regras e limitaes;
1. Como excees ao problema.
iii. identificar todas as aes a realizar;
1. Passos simples para a soluo.
iv. eliminar possveis ambigidades.
4. Construir o algoritmo.
5. Testar o algoritmo.
6. Executar o algoritmo.
Um algoritmo bem definido e estruturado garante sua compreenso por terceiros em
qualquer linguagem de programao.
Um grave problema que se destaca na elaborao de algoritmos que se ele no for
descrito de forma padronizada e estruturada, possivelmente no seja compreendido por
outras pessoas, apenas por seus criadores.

A estratgia top-down consiste em dividir um problema em partes menores e extremamente simples


(subproblemas) de modo que seja mais fcil a sua resoluo.

10

Programao com Pascal

Para evitar esse possvel problema, algoritmos costumam ser representados de trs
formas, como seguem:
1. Linguagem Natural: Os algoritmos so descritos detalhadamente em
linguagem natural. Por exemplo, em portugus estruturado.
2. Fluxograma: Os algoritmos so representados graficamente.
a. Usam-se formas geomtricas padronizadas para descrever aes e
decises na resoluo do problema.
3. Pseudo-linguagem: Os algoritmos so descritos atravs de uma
linguagem intermediria entre a linguagem natural e uma linguagem de
programao.
Um exemplo de uso de Linguagem Natural est na especificao de como criar um
XBurger. Uma possvel soluo est a seguir:
1. Incio do Algoritmo XBurger.
a. Pegar um po;
b. Abrir o po ao meio;
c. Passar manteiga no po;
d. Colocar queijo no po;
e. Colocar presunto no po;
f. Colocar ovo frito no po;
g. Fechar o po.
2. Fim do Algoritmo XBurger.
Algumas perguntas que podem surgir ao leitor so:
1. Onde estavam a manteiga, o queijo e o presunto?
2. Quem fritou o ovo? Isso faz parte do algoritmo?
a. Podemos definir um algoritmo fritar ovo e reus-lo?
A especificao de um algoritmo deve ser to detalhada quanto possvel para evitar
dvidas ou ambigidades. Tais perguntas deveriam ser respondidas numa especificao
mais clara e detalhada do Algoritmo XBurger. Por exemplo, pode-se definir que o
algoritmo tem como entrada um po, um ovo frito (no faz parte do algoritmo fritar o
ovo), manteiga, queijo e presunto. Como dado de sada tem-se o sanduche.
Outro exemplo em Linguagem Natural como extrair as razes de uma equao do
segundo grau na forma ax2 + bx + c.

Sabe-se que:
a. = b2 - 4ac
b. x1 = (-b + ) / 2a
c. x2 = (-b - ) / 2a
d. a deve ser diferente de 0
e. deve ser maior que zero para ter razes reais
Edeyson Andrade Gomes

www.edeyson.com.br

Introduo Programao

A definio do algoritmo, em linguagem natural, para extrair as razes de uma equao


do segundo grau pode ser a seguinte:
1. Incio do Algoritmo Razes
a. Obter os coeficientes a, b e c.
b. Se a igual a zero, informar que esta uma equao de 1 grau e
terminar o algoritmo.
c. Caso contrrio, faa
i. Calcular delta = b2 - 4ac
ii. Se delta for negativo, informar que a equao no tem razes
reais e terminar o algoritmo.
iii. Caso contrrio, faa
1. Calcular x1= (-b + )/(2a)
2. Calcular x2= (-b )/(2a)
3. Fornecer como resultado x1 e x2
4. Terminar o algoritmo.
2. Fim do Algoritmo Razes
Como se pode notar, a definio do Algoritmo Razes especifica detalhadamente como
calcular as razes de uma equao do segundo grau. Caso o leitor ainda tenha dvida
sobre o mesmo, outro recurso de representao pode ser usado, como o caso do
fluxograma da Figura 1.1 (detalhes de uso de fluxogramas esto no Apndice A).

Figura 1.1 - Fluxograma de Razes de Equao do 2 Grau

11

12

Programao com Pascal

Outra forma de representao seria via linguagem prxima de uma linguagem de


programao de alto nvel, ou Pseudocdigo. Neste caso, aproxima-se bastante da
programao.
A programao consiste na codificao precisa de um algoritmo segundo uma
linguagem de programao especfica. Um programa uma formalizao de um
algoritmo em uma determinada linguagem de programao, segundo suas regras de
sintaxe e semntica, de forma a permitir que o computador possa entender sua seqncia
de aes.
A proposta deste livro ensinar algoritmos e programao atravs de mltiplos meios
de representao e usando a linguagem de programao Pascal.

1.1 Exemplos
Os exemplos a seguir e apresentam problemas e suas respectivas possveis solues
usando linguagem natural e seu fluxograma.
1.1.1 Ler 3 valores distintos e determinar qual o maior, o menor e o mediano.
Antes de resolver o problema, vamos ilustr-lo com algumas situaes:
a. Nmeros [3, 5, 8]
Ao ler 3, maior = 3.
Ao ler 5, maior = 5 e mediano = 3
Note que o mediano assumiu o valor antigo do maior (mediano =
maior) e maior ficou igual a n (maior = n).
Ao ler 8, maior = 8, mediano = 5, menor = 3
Note que o menor assumiu o valor antigo do mediano (menor =
mediano), mediano assumiu o valor antigo do maior (mediano =
maior) e maior ficou igual a n (maior = n).
b. Nmeros [8, 5, 3]
Ao ler 8, maior = 8.
Ao ler 5, maior = 8 e mediano = 5
Ao ler 3, maior = 8, mediano = 5, menor = 3
c. Nmeros [3, 8, 5]
Ao ler 3, maior = 3.
Ao ler 8, maior = 8 e mediano = 3
Note que o mediano assumiu o valor antigo do maior (mediano =
maior) e maior ficou igual a n (maior = n).
Ao ler 5, maior = 8, mediano = 5, menor = 3
Note que o menor assumiu o valor antigo do mediano (menor =
mediano), mediano assumiu o valor de n (mediano = n).
Quais os passos do Algoritmo que se deseja? Vejamos:

Edeyson Andrade Gomes

www.edeyson.com.br

Introduo Programao

1. Como foi lido um primeiro valor, podemos presumir que ele o maior, pois
s existe ele.
a. Pense em trs alunos chegando numa sala: ao chegar o primeiro
aluno, quem o mais velho da sala? Por isso maior igual a n no
incio.
2. Outro valor lido para n. Notem que o segundo valor.
3. Se o segundo valor lido maior que o maior valor conhecido (n > maior),
ento ele deve ser o maior conhecido (maior = n). Neste caso, o mediano
assume o valor do antigo maior conhecido.
a. Em caso contrrio (o segundo valor lido menor que o maior
conhecido), como o segundo valor, ele passa a ser o mediano. Note
que ainda no sabemos quem o menor.
4. Outro valor lido para n. Notem que o terceiro valor.
5. Se o terceiro valor lido o maior conhecido, ento o menor assume o valor
do mediano, o mediano assume o valor do maior anterior e o maior assume o
valor de n. Em caso contrrio, se o terceiro valor lido maior que o mediano,
o menor assume o valor do mediano anterior e n passa a ser o mediano.
Seno, ele o menor conhecido (menor = n).
6. Imprime os valores.

Vejamos o Algoritmo em Linguagem Natural:


a. Incio do Algoritmo
1. Ler valor para n
2. Atribuir n a maior.
3. Ler valor para n.
4. Se n > maior, atribuir maior a mediano e n a maior. Seno,
atribuir n a mediano.
5. Ler valor para n.
6. Se n > maior, atribuir mediano a menor, maior a mediano e n a
maior.
7. Seno, se n > mediano, atribuir mediano a menor e n a
mediano. Seno, atribuir n a menor.
8. Imprimir os valores de menor, mediano e maior.
b. Fim do Algoritmo
Teste do Algoritmo Valores 1, 7, 15
Passo 1: n = 1
Passo 2: maior = 1
Passo 3: n = 7
Passo 4: mediano = 1
maior = 7
Passo 5: n = 15
Passo 6: menor = 1
mediano = 7
maior = 15

13

14

Programao com Pascal

Teste do Algoritmo Valores 6, 2, 4


Passo 1: n = 6
Passo 2: maior = 6
Passo 3: n = 2
Passo 4: maior = 6
mediano = 2
Passo 5: n = 4
Passo 6: maior = 6
menor = 2
mediano = 4
A seguir a Figura 1.2 ilustra o Fluxograma do algoritmo proposto.
Incio

maior = n

n > maior

mediano = maior
maior = n

mediano = n

n > maior

menor = mediano
mediano = maior
maior = n

n > mediano

menor = mediano
mediano = n

menor = n

menor,
mediano,
maior

Fim

Figura 1.2 - Fluxograma: Ordenar 3 nmeros distintos

Edeyson Andrade Gomes

www.edeyson.com.br

Introduo Programao

1.1.2 Imprimir o nmero 5 dez vezes.


A soluo deste simples problema cai no que chamamos de repetio. Devemos repetir
a impresso do nmero 5 dez vezes. Uma soluo trivial seria:
Incio do Algoritmo
1. Imprimir o nmero 5
2. Imprimir o nmero 5
3. Imprimir o nmero 5
4. Imprimir o nmero 5
5. Imprimir o nmero 5
6. Imprimir o nmero 5
7. Imprimir o nmero 5
8. Imprimir o nmero 5
9. Imprimir o nmero 5
10. Imprimir o nmero 5
Fim do Algoritmo
O algoritmo proposto acima est correto. Porm, como seria a soluo caso se deseje
imprimir o nmero 5 um milho de vezes? Ter um milho de linhas?
A soluo proposta usar a linguagem natural para informar a repetio de algo, como
segue:
Incio do Algoritmo
1. Fazer 10 vezes
a. Imprimir o nmero 5
Fim do Algoritmo
Note que um lao Faa algo N vezes (algo pode ser um comando ou um bloco de
comandos) criado assim num Fluxograma:
1. Cria-se uma varivel de controle iniciada com 1.
2. Testa-se se a varivel de controle menor ou igual a N.
3. Executa-se o comando ou bloco de comandos.
4. Incrementa-se a varivel de controle.
5. Volta-se ao passo 2 (esta volta que constri o lao).
Vejamos isso no Fluxograma ilustrado na Figura 1.3.

15

16

Programao com Pascal

Incio
Conta a
varivel de
controle
Este teste controla
quantas vezes o
lao ser executado

Conta = 1

Conta <= 10

Fim

Conta = Conta
+1

O incremento em 1
garante
que Conta mude de
valor

Figura 1.3 - Fluxograma: Imprimir o nmero 5 dez vezes

1.1.3 Imprimir todos os nmeros naturais entre 1 e N.


A soluo deste problema necessita de um lao de repetio. Devemos repetir a
impresso de um nmero contido no intervalo [1, N]. Uma soluo possvel :
Incio do Algoritmo
a. Ler N
b. Faa a varivel valor variar entre todos os valores no intervalo [1 e N]
i. Imprima valor
Fim do Algoritmo
Note que necessitaremos novamente de um lao Faa algo N vezes (algo aqui ser a
impresso de um nmero natural. O problema bem parecido com o anterior, pois inicia
em 1 e varia at N. Logo, vamos mesma soluo:
1. Cria-se uma varivel de controle iniciada com 1.
2. Testa-se se a varivel de controle menor ou igual a N, pois se desejam os
nmeros entre 1 e N, inclusive.
3. Imprime-se o valor da varivel de controle, pois ela ser o prprio nmero no
intervalo.
4. Incrementa-se a varivel de controle em 1, pois tem-se uma sequncia de
nmeros naturais.
5. Volta-se ao passo 2 (esta volta que constri o lao).

Edeyson Andrade Gomes

www.edeyson.com.br

Introduo Programao

Uma reviso do algoritmo em linguagem natural a seguinte:


Incio do Algoritmo
Leia um valor inteiro para N
Faa valor igual a 1
Enquanto valor <= N Faa
Imprima valor
valor = valor + 1
Fim do Algoritmo

Teste do Algoritmo:
Ler N suponha que N seja 5
Faa a varivel valor variar entre todos os valores no intervalo [1 e 5] logo,
valor assumir os seguintes valores {1, 2, 3, 4, 5}
Sero impressos os valores 1, 2, 3, 4, 5
Vejamos isso no Fluxograma ilustrado na Figura 1.4.
Incio

valor = 1

valor <= n

Fim

valor = valor + 1

valor

Figura 1.4 Fluxograma: Nmeros naturais entre 1 e N

Notem que neste fluxograma h um Lao de repetio de N vezes. O controle do lao


feito no teste (condio valor <= n), ou seja, valor inicia com 1 e varia at n. O teste
garante que valor no ser maior que n. Se valor for menor ou igual a n, imprime-se o
valor e soma-se um a ele para que este assuma o prximo nmero no intervalo [1, N].

17

18

Programao com Pascal

1.1.4 Determinar todos os divisores naturais de um nmero natural N.


Dado um valor N, imprimir todos os seus divisores.
Por exemplo, supondo N = 12, como saber seus divisores? Uma soluo testar
todos os nmeros entre 1 e 12. O teste para saber se algum destes nmeros
divide 12, ou seja, se o resto da diviso de 12 por cada um deles zero.
Incio do Algoritmo
a. Ler N
b. Faa a varivel Divisor variar entre todos os valores no intervalo [1 e N]
i. Para cada valor de Divisor faa:
1. Atribua varivel Resto o resto da diviso de N por
Divisor.
2. Se Resto = 0, ento imprima o valor de Divisor
Fim do Algoritmo
Veja que a letra b do algoritmo faz com que todos os nmeros entre 1 e N sejam
testados. Outra forma de escrever o algoritmo, mais prximo da programao, :
Incio do Algoritmo
a. Leia um valor inteiro para N
b. Faa Divisor igual a 1
c. Enquanto Divisor <= N Faa
Resto = N MOD Divisor
SE (Resto = 0) ENTO
Imprima Divisor
Divisor = Divisor + 1
Fim do Algoritmo

Teste do Algoritmo:
Ler N suponha que N seja 8
Faa a varivel Divisor variar entre todos os valores no intervalo [1 e 8]
logo, Divisor assumir os seguintes valores {1, 2, 3, 4, 5, 6, 7, 8}
Para cada valor de Divisor faa:
1. Atribua varivel Resto o resto da diviso de N por Divisor (8/1).
Logo, Resto = 0. Imprime 1.
2. Atribua varivel Resto o resto da diviso de N por Divisor (8/2).
Logo, Resto = 0. Imprime 2.
3. Atribua varivel Resto o resto da diviso de N por Divisor (8/3).
Logo, Resto = 2. No Imprime.
Edeyson Andrade Gomes

www.edeyson.com.br

Introduo Programao

4. Atribua varivel Resto o resto da diviso de N por Divisor (8/4).


Logo, Resto = 0. Imprime 4.
5. Atribua varivel Resto o resto da diviso de N por Divisor (8/5).
Logo, Resto = 3. No Imprime.
6. Atribua varivel Resto o resto da diviso de N por Divisor (8/6).
Logo, Resto = 2. No Imprime.
7. Atribua varivel Resto o resto da diviso de N por Divisor (8/7).
Logo, Resto = 1. No Imprime.
8. Atribua varivel Resto o resto da diviso de N por Divisor (8/8).
Logo, Resto = 0. Imprime 8.

Resultado: sero impressos {1, 2, 4, 8}


Vejamos isso no Fluxograma ilustrado na Figura 1.5.
Incio

Divisor = 1

Divisor <= N

Fim

V
Resto = resto da diviso
de N por Divisor

Resto = 0

Divisor

F
Divisor =
Divisor + 1

Figura 1.5 Fluxograma: Divisores naturais de N

Note que o passo b do algoritmo (Faa a varivel Divisor variar entre todos os valores
no intervalo [1 e N]) destacado no fluxograma.

19

20

Programao com Pascal

1.1.5 Determinar se um nmero natural N primo


A principal diferena deste algoritmo para o anterior (1.1.4) que no sero impressos
os divisores de um nmero, e sim, contados (precisamos de uma varivel para isso).
Vale lembrar que um nmero primo tem apenas dois divisores.
Incio do Algoritmo
a. Definir a varivel contaDivisores com valor inicial 0
b. Ler N
c. Faa a varivel Divisor variar entre todos os valores no intervalo [1 e
N]
i. Para cada valor de Divisor faa:
1. Atribua varivel Resto o resto da diviso de N por
Divisor.
2. Se Resto = 0, ento some 1 a contaDivisores
d. Se contaDivisores > 2, ento o nmero no primo.
e. Seno, ele primo.
Fim do Algoritmo
Note que a letra d do Algoritmo s ser executada aps o lao da letra c ser
concludo (testar todos os divisores no intervalo [1, N].
Vejamos isso no Fluxograma ilustrado na Figura 1.6.

Edeyson Andrade Gomes

www.edeyson.com.br

Introduo Programao

Incio

contaDivisores = 0

Divisor = 1

Divisor <= N

contaDivisores > 2

N no
primo

V
Resto = resto da diviso
de N por Divisor

Resto = 0

N primo

contaDivisores =
contaDivisores + 1

Fim

F
Divisor =
Divisor + 1

Figura 1.6 Fluxograma: Determinar se N primo

1.1.6 Imprimir todos os mltiplos de 3 compreendidos entre 1 e N (naturais).


Incio do Algoritmo
a. Ler N
b. Faa a varivel Mltiplo variar entre todos os valores no intervalo [1 e
N]
i. Atribua varivel Resto o resto da diviso de Mltiplo por 3.
ii. Se Resto = 0, ento imprima o valor de Mltiplo.
Fim do Algoritmo

Teste do Algoritmo:
Ler N suponha que N seja 10
Faa a varivel Mltiplo variar entre todos os valores no intervalo [1 e 10]
Sero impressos os valores 3, 6, 9
Vejamos isso no Fluxograma ilustrado na Figura 1.7.

21

22

Programao com Pascal

Incio

Mltiplo = 1

Mltiplo <= N

Fim

V
Resto = resto da diviso
de Mltiplo por 3

Resto = 0

Mltiplo

F
Mltiplo =
Mltiplo + 1

Figura 1.7 Fluxograma: Mltiplos de 3 entre 1 e N

1.3.7 Imprimir todos os mltiplos de 3 e 5 (simultaneamente) compreendidos entre 1 e


N (naturais).
Incio do Algoritmo
c. Ler N
d. Faa a varivel Mltiplo variar entre todos os valores no intervalo [1 e
N]
iii. Atribua varivel Resto3 o resto da diviso de Mltiplo por 3.
iv. Atribua varivel Resto5 o resto da diviso de Mltiplo por 5.
v. Se Resto3 = 0 e Resto5 = 0, ento imprima o valor de Mltiplo.
Fim do Algoritmo

Teste do Algoritmo:
Ler N suponha que N seja 30
Faa a varivel Mltiplo variar entre todos os valores no intervalo [1 e 30]
Sero impressos os valores 15, 30
Vejamos isso no Fluxograma ilustrado na Figura 1.8.

Edeyson Andrade Gomes

www.edeyson.com.br

Introduo Programao

Incio

Mltiplo = 1

Mltiplo <= N

Fim

V
Resto3 = resto da diviso de
Mltiplo por 3
Resto5 = resto da diviso de
Mltiplo por 5

Resto3 = 0
e
Resto5 = 0

Mltiplo

Mltiplo =
Mltiplo + 1

Figura 1.8 Fluxograma: mltiplos de 3 e 5 entre 1 e N

1.3.8 Dado um registro com o seguinte leiaute:


Nome

Nota1

Nota2

Nota3

Escreva um algoritmo que leia um arquivo com N registros no leiaute acima e imprima
um relatrio com alunos aprovados e outro com alunos reprovados.
Um aluno est aprovado apenas de tiver mdia (aritmtica) das notas maior ou igual a
7,0. Considere em sua soluo que s existe uma impressora na execuo do algoritmo.
Incio do Algoritmo
1. Criar uma coleo de alunos aprovados e outra de reprovados
2. Enquanto houver registros no arquivo faa:
a. Ler registro
b. Fazer media = (nota1 + nota2 + nota3) / 3
c. Se mdia maior ou igual a 7.0, inclua o aluno na coleo de
aprovados, seno coloque-o na coleo dos reprovados
3. Enquanto houver registros na coleo Aprovados faa:
a. Imprima registro
4. Enquanto houver registros na coleo Reprovados faa:
a. Imprima registro
Fim do Algoritmo

23

24

Programao com Pascal

A LINGUAGEM PASCAL

A linguagem Pascal foi desenvolvida no incio da dcada de 1970 por Nicklaus Wirth,
na Universidade Tcnica de Zurique, Sua. O primeiro compilador para a linguagem
foi disponibilizado em 1970.
O objetivo do Pascal ser uma linguagem de programao de alto nvel voltada ao
ensino da programao estruturada. Por ser simples, ideal para a introduo
programao.
2.2 Estrutura de um Programa Pascal
Todo programa em Pascal dividido em trs reas distintas: cabealho, rea de
declaraes e corpo.
cabealho
rea de declaraes

corpo
2.2.1 Cabealho
O cabealho uma rea utilizada para que se possa identificar um programa atravs de
um nome (instruo program).
{Sintaxe:}
program nomeDoPrograma;

Exemplo:
program adicionaNumeros;
rea de declaraes

corpo

Edeyson Andrade Gomes

www.edeyson.com.br

A LINGUAGEM PASCAL

Observaes:
1. O nome de um programa um identificador e deve ser nico neste.

O programa da Listagem 1.1, chamado de adicionaNumeros, iniciaria assim:


1. program adicionaNumeros;
2. {Programa que l 2 nmeros e imprime sua soma.}

Listagem 1.1 - Cabealho de programa Pascal.

Note que no trecho de programa da Listagem 1.1 anterior, a linha 2 apresenta um


comentrio, pois est entre { }. A linha 1 usa a instruo program para dar nome ao
programa. No caso, adicionaNumeros.

Observaes:
1. Nossos programas sempre aparecero em caixas como a da Listagem 1.1.
2. O uso de { } serve para definir comentrios: descries ou informaes, em texto livre,
que auxiliem no entendimento do cdigo.

2.2.2 rea de Declaraes


A rea de Declaraes de um programa utilizada para criar identificadores que no
sejam predefinidos.
Todo objeto que quisermos usar num programa precisa ser identificado por um nome
nico. Um cuidado que se deve ter que Pascal predefine nomes como integer, real,
boolean, etc.
A rea de declaraes pode ser subdividida em sete subreas: uses, label, const, type,
var, procedure e function. Cada uma delas ser explicada em seu devido momento.
Utilizao de Units
As units so conjuntos de funes que j esto prontas para serem usadas pelo
programador. Por exemplo, se quisermos limpar a tela ou ler o teclado j existem
funes prontas para isso nas units, evitando o trabalho de reescrev-las. So elas:
1. CRT: possui a maior parte das rotinas e variveis de gerao de som, controle de
vdeo e teclado;
2. DOS: possui as rotinas que envolvem a utilizao do sistema operacional;
3. GRAPH: possui rotinas destinadas a manipulaes grficas;

25

26

Programao com Pascal

4. OVERLAY: possibilita gerenciar as atividades de um programa economizando


memria;
5. PRINTER: permite declarar um arquivo tipo texto com o nome LST e associlo impressora;
6. SYSTEM: possui a maior parte das rotinas padro da linguagem Pascal e
usada de forma automtica.
Para se fazer uso de units necessrio o uso da instruo uses antes da declarao da
instruo var.
{Sintaxe:}
uses nomeDaUnidade;

Nosso programa continuaria como apresenta a Listagem 1.2.


1. program adicionaNumeros;
2. {Programa que l 2 nmeros e imprime sua soma.}
4. {Usa a biblioteca CRT onde est a funo ReadKey: L Tecla}
5. uses crt;

Listagem 1.2 Utilizao de Unit.

Note que no programa da Listagem 1.2 as linhas 2 e 4 apresentam comentrios, pois


esto entre { }.
A linha 1 usa a instruo program para dar nome ao programa (adicionaNumeros). A
linha 5 usa a instruo uses para habilitar as funes da biblioteca CRT.
Observaes:
1. Comentrios so textos livres, escritos dentro do cdigo-fonte para explicar e
detalhar algo. No so compilados e no contam como linha de cdigo LOC (Line
of Code).

Declarao de Variveis
Nos problemas comuns da matemtica e fsica nos deparamos com variveis. Por
exemplo, uma equao do segundo grau2 possui a forma: ax2 + bx + c. Logo, so
exemplos de equao do segundo grau: x2 + 2x + 1 e 2x2 + 3x + 4.
Cabe-nos observar que as equaes do 2 grau variam, entre si, sempre num aspecto: os
valores de a, b e c. Para a matemtica, a, b e c so constantes (coeficientes), pois a
equao 2x2 + 3x + 4 j tem tais valores definidos.
2

Toda equao da forma ax + bx + c = 0, em que a, b e c so nmeros reais com a 0, chamada de


equao do 2 grau. Quando b = 0 ou c = 0 tem-se uma equao do 2 grau incompleta.

Edeyson Andrade Gomes

www.edeyson.com.br

A LINGUAGEM PASCAL

Para a programao, se quisermos montar uma equao do segundo grau a partir da


frmula ax2 + bx + c, precisamos saber a parte que varia entre elas, ou seja, as variveis
para o algoritmo: a, b e c. Pode-se afirmar que a, b e c sero as variveis de entrada do
algoritmo e as razes, sua sada.
Da mesma forma, na fsica temos a frmula da velocidade na forma: v = vo + at2. Para
sabermos a velocidade final de um corpo, precisamos conhecer os valores das variveis:
velocidade inicial, acelerao e tempo.
Sempre que tivermos um problema a resolver, o que mudar entre um problema e outro
similar so variveis para o algoritmo.
Para a soluo de problemas como os citados so necessrias variveis declaradas num
programa, o que feito via a instruo var. Cada varivel tem um nome nico no
programa (identificador) e um tipo (inteiro, real, lgico, etc).
{Sintaxe:}
var nomeDaVarivel
: tipo de dado;
nomeDeOutraVarivel : tipo de dado;

Observaes:
1. Aps o nome de cada varivel deve ser utilizado o smbolo dois-pontos ( : ) seguido pelo
tipo de dado que a varivel ir receber, seguido de ponto-e-vrgula.
2. Caso as variveis sejam de mesmo tipo, estas podero ser relacionadas separadas por
vrgula. Por exemplo: var a, b, c : integer; Isso define as variveis a, b e c como sendo do
tipo integer (inteira).

Nosso primeiro programa continuaria como apresenta a Listagem 1.3.


1 program adicionaNumeros;
2 {Programa que l 2 nmeros e imprime sua soma.}
4 {Usa a biblioteca CRT onde est a funo ReadKey}
5 uses crt;
7 {Declara a, b e soma como variveis inteiras}
8 var
9
a, b : integer;
10
soma : integer;

Listagem 1.3 Declarao de Variveis.

Note que na Listagem 1.3 a linha 8 apresenta a instruo var iniciando uma rea de
declarao de variveis. A linha 9 define duas variveis inteiras chamadas a e b e a
linha 10 define uma varivel do tipo inteira (integer) chamada soma.
2.2.3 Corpo do Programa

27

28

Programao com Pascal

Um programa em Pascal est escrito numa rea denominada corpo do programa que tem
incio com a instruo begin e finalizada pela instruo end, seguida do smbolo
ponto ( . ). O uso destas instrues caracteriza o que chamado de bloco de comandos,
como indicado abaixo:
{Sintaxe:}
begin
instrues do programa;
end.

Observaes:
1. O corpo do programa pode conter vrios blocos.

Nosso programa continuaria como apresenta a Listagem 1.4.


1 program adicionaNumeros;
2 {Programa que l 2 nmeros e imprime sua soma.}
4 {Usa a biblioteca CRT onde est a funo ReadKey}
5 uses crt;
7 {Declara a, b e soma como variveis inteiras}
8 var
9
a, b : integer;
10
soma : integer;
12 begin
13
{limpa a tela}
14
clrscr;
16
17
19
20

{escreve no prompt de comandos}


writeln('Insira o valor de a: ');
{esperando que o usurio digite algo e atribui varivel a}
readln(a);

22
23

writeln('Insira o valor de b: ');


readln(b);

25
26
27

{soma a com b e atribui o resultado a soma}


soma := a + b;
writeln('A soma de ', a, ' com ', b, ' eh ', soma);

29
{para o programa at que alguma tecla seja pressionada}
30
readkey;
31 end.

Listagem 1.4 Programa que l 2 nmeros e calcula a soma.

Descrio do primeiro exemplo


O objetivo do programa da Listagem 1.4 efetuar a leitura de dois valores numricos
(variveis a e b), fazer a operao de adio entre elas, atribuir o resultado varivel
soma e apresentar o resultado obtido. Destaca-se o seguinte:
Edeyson Andrade Gomes

www.edeyson.com.br

A LINGUAGEM PASCAL

1.
2.
3.
4.

O corpo do programa est delimitado pelas linhas 12 (begin) e 31 (end.).


A linha 14 apresenta uma instruo (clrscr) usada para limpar a tela.
As linhas 17, 22 e 27 usam uma instruo (writeln) para imprimir na tela.
As linhas 20 e 23 usam uma instruo (readln) para ler um valor do teclado e
associar a uma varivel.
5. A instruo da linha 30 (readkey) para o programa at que algo seja teclado.
Outra forma de representar o algoritmo adicionaNumeros usando a Linguagem
Natural, como segue:
1. Incio do Algoritmo adicionaNumeros
a. Solicitar ao usurio para inserir o valor de a;
b. Ler um valor para a varivel a;
c. Solicitar ao usurio para inserir o valor de b;
d. Ler um valor para a varivel b;
e. Efetuar a soma das variveis a e b, colocando o resultado na varivel
soma;
f. Apresentar o valor da varivel soma aps a operao de soma dos dois
valores fornecidos.
g. Aguardar at que algo seja pressionado.
2. Fim do Algoritmo adicionaNumeros.

Observaes:
1. Os comandos read e readln so responsveis por entrada de dados, como leitura pelo
teclado.
a. ReadLn(var) l um valor do teclado e atribui varivel var.
b. O programa fica parado at que a tecla ENTER seja pressionada. Tudo o que
for digitado antes de ENTER ser colocado na varivel (var).
2. Os comandos write e writeln so responsveis por sada de dados, como impresso na
tela.
a. WriteLn(var) imprime o valor da varivel (var) na tela.
3. O uso de LN (acrnimo para New Line Nova Linha) indica que uma nova linha deve ser
usada aps o comando.

Vamos a outro exemplo comentado que serve para calcular a mdia aritmtica de 3
valores. Ele deve ler trs variveis numricas (a, b e c) e calcular a mdia aritmtica
destas, apresentando o resultado obtido.
Algoritmo usado em Linguagem Natural:
1. Incio do Algoritmo Mdia de 3 Nmeros
a. Solicitar ao usurio para digitar o valor da varivel a;
b. Ler um valor para a varivel a;

29

30

Programao com Pascal

c. Solicitar ao usurio para digitar o valor da varivel b;


d. Ler um valor para a varivel b;
e. Solicitar ao usurio para digitar o valor da varivel c;
f. Ler um valor para a varivel c;
g. Calcular a mdia como a soma de a, b e c dividida por 3.
h. Imprimir os trs valores lidos e a mdia.
2. Terminar o Algoritmo Mdia de 3 Nmeros.
A implementao do Algoritmo Mdia de 3 Nmeros apresentada na Listagem 1.5.
1 {O programa deve ler 3 variaveis inteiras, calcular a media
aritmetica e atribuir a uma variavel media.
2 Qual deve ser o tipo da variavel media? Por que?
3 }
4 program media3N;
6 uses crt;
8 var
9
a, b, c : integer;
10
media : real;
12 begin
13
writeln('Digite o valor da Variavel 1: ');
14
readln(a);
16
17

writeln('Digite o valor da Variavel 2: ');


readln(b);

19
20

writeln('Digite o valor da Variavel 3: ');


readln(c);

22
23
24

media := (a + b + c) / 3;
write('A media entre ', a, ', ', b, ' e ', c, ' eh: ');
writeln(media:3:2);

26
readkey;
27 end.

Listagem 1.5 - Programa que l 3 variveis e calcula a mdia.

No programa da Listagem 1.5 destaca-se o seguinte:


1. O cabealho do programa est entre as linhas 1 e 4.
2. As declaraes do programa esto entre as linhas 8 e 10.
3. O corpo do programa est delimitado pelas linhas 12 e 27.
4. As linhas 13, 16, 19, 23 e 24 usam instrues writeln e write para
imprimir na tela.
5. As linhas 14, 17 e 20 usam uma instruo para ler os valores de a, b e c,
respectivamente.
6. Na linha 22 calcula-se a mdia aritmtica de a, b e c, atribuindo-a varivel
media.
7. A linha 24 imprime a mdia formatada com 3 dgitos decimais e 2 decimais.

Edeyson Andrade Gomes

www.edeyson.com.br

A LINGUAGEM PASCAL

Observaes:
1. A varivel media precisa ser real, pois a diviso de inteiros nem sempre um inteiro. Por
exemplo, 7/3.
2. O uso de media:3:2 na impresso significa que o resultado ser formatado com 3 dgitos
antes da vrgula e 2 dgitos depois.

Variveis e Constantes
Em Pascal, variveis, constantes, tipos definidos pelo usurio, procedimentos e funes
precisam de um nome que fornea uma identificao nica e isso feito atravs de
identificadores.
Nomes (identificadores) em Pascal devem seguir as seguintes regras de construo:
1. Iniciar sempre por uma letra (a - z, A - Z) ou um underline (_);
2. O restante do identificador deve conter apenas letras, underlines ou dgitos (09). No pode conter outros caracteres; e
3. Pode ter qualquer tamanho, desde que os primeiros 63 caracteres sejam
significativos.
No existe distino entre letras maisculas e minsculas no nome de um
identificador. Por exemplo, os nomes ALPHA, alpha e Alpha so equivalentes para o
Pascal.
Observaes:
1. CamelCase a denominao em ingls para a prtica de escrever palavras compostas,
ou frases, onde cada palavra iniciada com Maisculas e unidas sem espaos.
a. um padro largamente utilizado em diversas linguagens de programao,
como Java, Ruby e Python.
b. Exemplos: NomeDoCliente, TipoDePea, MediaPonderada, MediaDe3Numeros.

Palavras Reservadas
Pascal reconhece certo grupo de palavras como sendo reservadas. Elas tm significado
especial e no podem ser usadas como identificadores em um programa para objetos
criados pelo programador.
So elas: absolute, and, array, asm, begin, case, const, constructor, destructor, div, do,
downto, else, end, file, for, function, goto, if, implementation, in, inherited, inline,
interface, label, mod, nil, not, object, of, on, operator, or, packed, procedure,
program, record, reintroduce, repeat, self, set, shl, shr, string, then, to, type, unit,
until, uses, var, while, with, xor.

31

32

Programao com Pascal

Comentrios
Comentrios so textos escritos dentro do cdigo-fonte para explicar ou descrever
alguns aspectos relativos ao mesmo ou para esclarecer detalhes de programao que
podem no ficar claros.
Seu principal objetivo adicionar informao textual ao cdigo, facilitando seu
entendimento por leitores.
A sintaxe requerida aos comentrios permite o uso de chaves como em: {
comentrio } ou de parntesis e asteriscos, como em: (* comentrio *).

2.1 Variveis
Uma varivel uma regio da memria, identificada atravs de um nome, cujo valor
pode mudar durante a execuo do programa. Como Pascal uma linguagem fortemente
tipada, cada varivel precisa obrigatoriamente de um tipo de dados predeterminado.

{Sintaxe:}
var
varivel : tipo de dado;
varivel1, varivel2 : tipo de dado2;

Nesta especificao de sintaxe, varivel tem seu tipo definido por tipo de dado. Note
que varivel1 e varivel2 so definidas juntas, separadas por vrgulas e atribuindo-se um
nico tipo de dados. Isso pode ser feito para qualquer nmero de variveis que
compartilhem um mesmo tipo de dados.
2.2 Constantes
Uma constante uma regio rotulada da memria atravs de um nome cujo valor no
pode mudar durante a execuo do programa. Um exemplo de constante o PI na
matemtica.
{Sintaxe:}
const
nomeDaConstante = expresso;

2.3 Tipos de Dados


Um tipo de dado especifica as caractersticas, ou seja, quais os possveis valores e
operaes que um dado possui. Por exemplo, um valor inteiro pode ser somado a outro,

Edeyson Andrade Gomes

www.edeyson.com.br

A LINGUAGEM PASCAL

subtrado, multiplicado, etc. Variveis, como apresentado em sua sintaxe, requerem um


tipo de dado em sua definio.
A linguagem Pascal fornece ao programador um conjunto de tipos de dados
predefinidos e que sero descritos a seguir.
Inteiros
Inteiros so valores numricos positivos ou negativos, excluindo-se qualquer nmero
fracionrio. Em Pascal, este tipo de dado pode ser referenciado por um dos seguintes
identificadores: Byte, Shortint, Smallint, Word, Integer, Cardinal, Longint,
Longword, Int64 e QWord.
Tabela 2.1 Tipos Inteiros
Tipo

Valores

Byte
Shortint
Smallint
Word
Integer
Cardinal
Longint
Longword
Int64

0..255
-128 .. 127
-32768 .. 32767
0 .. 65535
Smallint ou Longint
Longword
-2147483648 .. 2147483647
0 .. 4294967295
-9223372036854775808 ..
9223372036854775807
0 .. 1844674473709551615

QWord

Tamanho
em Bytes
1
1
2
2
2 ou 4
4
4
4
8
8

A definio de variveis inteiras feita com a seguinte sintaxe:


{Sintaxe:}
varivel : integer;

A Listagem 6 apresenta um exemplo de uso de Inteiros.


1 program InteirosEmPascal;
2 {Este programa vai demonstrar o uso de Inteiros em Pascal.}
4 uses crt;
6 var
7
forca : integer;
8
massa, aceleracao : integer;
9 begin
10
massa := 100;
11
aceleracao := 2;
12
forca := massa * aceleracao;
13
writeln ('A forca eh: ', forca);
14
readkey;
15 end.

Listagem 2.1 Exemplo de uso de Inteiros

No programa da Listagem 6 destaca-se o seguinte:


1. Na linha 7 declara-se a varivel forca do tipo integer.

33

34

Programao com Pascal

2. A linha 8 apresenta a declarao de duas variveis inteiras: massa e


acelerao. Embora as trs variveis pudessem ter sido declaradas numa
nica linha, optou-se por duas declaraes separadas para exemplificao.
3. Na linha 10 atribui-se o valor 100 varivel massa, enquanto na linha 11
atribui-se 2 varivel acelerao.
4. Na linha 12 atribui-se varivel forca o produto entre massa e acelerao.
5. A linha 13 imprime o valor resultante da forca.
A execuo do programa imprimir:
A forca eh: 200

Reais
O tipo de dado real permite trabalhar com nmeros fracionrios, tanto positivos como
negativos, sendo sua capacidade de armazenamento maior que dos nmeros inteiros.
Vejamos os tipos: Real, Single, Double, Extend, Comp e Currency.
Tabela 2.2 - Tipos Reais
Tipo

Valores

Real
Single
Double
Extended
Comp
Currency

Depende da Plataforma
1.5E-45 .. 3.4E38
5.0E-324 .. 1.7E308
1.9E-4932 .. 1.1E4932
-2E64+1 .. 2E63-1

Dgitos
Signific.
7-8
15-16
19-20
19-20

Tamanho
em Bytes
4 ou 8
4
8
10
8

A definio de variveis reais feita com a seguinte sintaxe:


{Sintaxe:}
varivel : real;

A Listagem 7 apresenta um exemplo de uso de Reais.


1 program ReaisEmPascal;
2 {Este programa vai demonstrar o uso do tipo Real em Pascal.}
4 uses crt;
6 var
7
forca : real;
8
massa, aceleracao : real;
9 begin
10
forca := 235;
11
aceleracao := 2;
12
massa := forca / aceleracao;
13
writeln ('A massa eh: ', massa:3:2);
14
readkey;
Listagem 2.2 Uso de Reais em Pascal
15 end.

Edeyson Andrade Gomes

www.edeyson.com.br

A LINGUAGEM PASCAL

No programa da Listagem 7 destaca-se o seguinte:


1. Na linha 7 declara-se a varivel forca do tipo real.
2. A linha 8 apresenta a declarao de duas variveis reais: massa e acelerao.
Embora as trs variveis pudessem ter sido declaradas numa nica linha,
optou-se por duas declaraes separadas para exemplificao.
3. Na linha 10 atribui-se o valor 235 varivel forca, enquanto na linha 11
atribui-se 2 varivel acelerao.
4. Na linha 12 atribui-se varivel massa a razo entre forca e acelerao.
5. A linha 13 imprime o valor resultante da massa.
A execuo do programa imprimir:
A massa eh: 117.50

Observaes:
1. Write e WriteLn permitem que sejam definidos formatos aos nmeros.
a. Estes formatos so teis na impresso de nmeros reais para evitar a forma
com exponenciao.
b. O formato : numero:tamanho:preciso
i. numero o nmero que se quer imprimir.
ii. tamanho informa a largura da sada.
iii. preciso informa com quantos dgitos o numero ser impresso.

Caracteres
String
Tipos de Dados Caracteres em Pascal so seqncias contendo letras, nmeros e
smbolos especiais e devem ser representadas entre apstrofos (). Este tipo de dado
referenciado pelo identificador string, podendo armazenar de 1 at 255 caracteres.
Para definir uma varivel cujo contedo pode ter at 255 caracteres, usa-se a seguinte
sintaxe:
{Sintaxe:}
varivel : string;

Como a sintaxe anterior no determina um tamanho, a varivel definida sempre ocupar


255 bytes na memria, pois o Pascal na tem como saber quantos bytes realmente sero
necessrios.
Para o caso de variveis String que o programador conhea o tamanho mximo, pode-se
usar a seguinte sintaxe para determin-lo

35

36

Programao com Pascal

{Sintaxe:}
varivel : string[tamanho];

O uso de colchetes determina que a varivel ter um contedo de at tamanho


caracteres. A Listagem 8 apresenta um exemplo de uso de Strings.
1 program StringsEmPascal;
2 {Este programa vai demonstrar o uso de String em Pascal.}
4 uses crt;
6 var
7
endereco : string;
8
nome : string[30];
9
CPF : string[11];

{endereo uma cadeia com 0 a 255 caracteres.}


{O uso de [] delimita o nmero de caracteres.
Neste caso CPF tem 11 caracteres.}

11 begin
12
endereco := 'Rua dos Alferes, 1234, Ap. 1001, Barra, Salvador, Bahia CEP: 40.130.280';
13
nome:= 'Jose da Silva Santos';
14
CPF := '12345678901';
15
writeln('Endereco: ', endereco, ' Cliente: ', nome, ' CPF: ', cpf);
Listagem 2.3 Exemplo com Strings
16
readkey;
17 end.

No programa da Listagem 8 destaca-se o seguinte:


1. Na linha 7 declara-se a varivel endereco que ter at 255 caracteres ( o
limite mximo de uma string),
2. A linha 8 apresenta a declarao da varivel nome que ter, no mximo, 30
caracteres.
3. A linha 8 apresenta a declarao da varivel CPF que ter, no mximo, 11
caracteres.
4. Na linha 12 atribui-se um valor 235 varivel endereo. Note que atribuio
de string requer o uso de apstrofos.
5. A linha 15 faz-se a impresso das trs variveis e seus valores.
A execuo do programa imprimir:
Endereco: Rua dos Alferes, 1234, Ap. 1001, Barra, Salvador, Bahia - CEP: 40.130.280 Cliente: Jose da
Silva Santos CPF: 12345678901

Observaes:
1. Write e WriteLn permitem imprimir mltiplos valores separando-os por vrgulas.
a. A impresso de constantes string feita colocando-as entre apstrofos.
b. O comando writeln('Endereco: ', endereco); imprimir Endereco: seguido pelo
valor da varivel endereco.

Edeyson Andrade Gomes

www.edeyson.com.br

A LINGUAGEM PASCAL

Char
Pascal suporta o tipo Char, que ocupa exatamente 1 byte e contm um caractere ASCII
(American Standard Code for Information Interchange).
Para definir uma varivel do tipo char usa-se a seguinte sintaxe:
{Sintaxe:}
varivel : char;

A Listagem 9 apresenta um exemplo de uso de char.


1 program CharEmPascal;
2 {Este programa vai demonstrar o tipo Char do Pascal}
3
4 uses crt;
5
6 var
7
letraAMinuscula, letraAMaiuscula : char;
8
letraBMinuscula, letraBMaiuscula : char;
9
sexo : char;
{char representa um nico caracter. Neste caso
sexo pode ser 'M' ou 'F'}
10
11 begin
12
{Atribuies de valores s varives}
13
sexo := 'M';
14
letraAMinuscula := 'a';
15
letraAMaiuscula := #65;
16
17
letraBMinuscula := #98;
18
letraBMaiuscula := 'B';
19
20
writeln('Sexo: ', sexo);
21
writeln('Letras Maiusculas: ', letraAMaiuscula, letraBMaiuscula);
22
writeln('Letras Minusculas: ', letraAMinuscula, letraBMinuscula);
23
readkey;
Listagem 2.4 Exemplo com Char
24 end.

Nas linhas 7, 8 e 9 definem-se variveis do tipo char.


Um caractere pode ser especificado colocando o caractere entre aspas simples
(apstrfos), como 'a' ou 'B', por exemplo, nas linhas 14 e 18. Tambm pode ser
especificado pelo seu valor de caracteres (normalmente um cdigo ASCII), precedendo
o valor ordinal com o smbolo (#). Por exemplo, na linha 15, especificando #65 o
mesmo que 'A'.
O resultado da execuo do programa :
Sexo: M
Letras Maiusculas: AB
Letras Minusculas: ab

37

38

Programao com Pascal

Tipos Lgicos
Pascal suporta o tipo Boolean, com dois possveis valores predefinidos: true e false.
Qualquer expresso que resulte em um valor booleano (verdadeiro ou falso) tambm
pode ser atribuda a um tipo booleano.
Para definir uma varivel do tipo boolean usa-se a seguinte sintaxe:
{Sintaxe:}
varivel : char;

A Listagem 10 apresenta um exemplo de uso de boolean.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

program BooleanEmPascal;
{Este programa vai demonstrar o tipo boolean do Pascal}
uses crt;
var
aprovado : boolean; {Variveis lgicas - podem ser TRUE ou FALSE}
maior, menor, igual : boolean;
begin
{Atribuies de valores s varives}
aprovado := true;
{Atribui TRUE a aprovado}
maior := 2 > 1;
{Atribui o resultado do teste: 2 > 1? a maior}
igual := 2 = 1;
{Atribui o resultado do teste: 2 > 1? a igual}
menor := 2 < 1;
{Atribui o resultado do teste: 2 > 1? a menor}
writeln('Aprovado: ', aprovado);
writeln('2 > 1? eh: ', maior);
writeln('2 = 1 eh: ', menor);
writeln('2 = 1 eh: ', igual);
readkey;
Listagem 2.5 Exemplo com Boolean
end.

O resultado da execuo do programa :


Aprovado: TRUE
2 > 1? eh: TRUE
2 = 1 eh: FALSE
2 < 1 eh: FALSE

A linha 11 atribui diretamente o valor TRUE varivel aprovado. As linhas 12 a 14


atribuem o valor lgico do teste s variveis maior, igual e menor.
Note que uma atribuio tem duas partes: uma antes do := e outra depois. No caso da
linha 12 estamos atribuindo varivel maior o resultado da expresso que avalia se dois
maior que um, o que verdade (TRUE). As linhas 13 e 14 seguem o mesmo princpio,
atribuindo a igual e a menor o resultado dos respectivos testes lgicos.
A Listagem 11 a seguir apresenta um exemplo com variveis e constantes.

Edeyson Andrade Gomes

www.edeyson.com.br

A LINGUAGEM PASCAL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

program VariaveisEConstantes;
{Este programa vai demonstrar variveis e constantes no Pascal}
uses crt;
var
area, raio : real;

{Declara area e raio como variveis REAIS}

const
pi = 3.1415926536;

{Declara pi como uma constante}

begin
{Atribuies de valores s varives}
raio := 10;
area := pi * raio * raio;
writeln('A area do circulo de raio 10 eh: ', area:3:4);
raio := 15;
area := pi * raio * raio;
writeln('A area do circulo de raio 15 eh: ', area:3:4);
{pi := 10;}
readkey;
end.

Listagem 2.6 Exemplo com Variveis e Constantes

O programa VariaveisEConstantes declara na linha 7 as variveis rea e raio do tipo


REAL. Como o nome j informa, variveis podem ter seu valor mudado durante a
execuo do programa. As linhas 14, 15, 18 e 19 exemplificam isso, mudando os
valores de raio e rea.
Para um novo valor do raio calculada a rea de um crculo usando-se a frmula:
rea = * raio2
Note que raio2 foi calculado como raio * raio
A constante matemtica representada no programa pela constante PI, cujo valor
atribudo na prpria declarao, como visto na linha 10.
O resultado da execuo do programa da Listagem 9 :
A area do circulo de raio 10 eh: 314.1593
A area do circulo de raio 15 eh: 706.8583

39

40

Programao com Pascal

EXPRESSES

Expresses so arranjos de operandos (variveis, constantes ou valores gerados por


funes) e operadores (operaes a serem efetuadas sobre os operandos) que ocorrem
nas atribuies ou em testes e produzem um valor de um determinado tipo.
Um operador pode ser binrio, ou seja, requer 2 operandos (como em X / Y e em A * B)
ou unrio, isto , exige apenas um argumento (como em -X).
Cada tipo de dados possui um conjunto de operadores relacionados.
3.1 Prioridades das Operaes
Se vrios operadores aparecerem em uma expresso, sua ordem de execuo ser dada
segundo os seguintes critrios:
1. Pelo emprego explcito de parnteses;
2. Pela ordem de precedncia existente entre os operadores; e
3. Se existirem operadores de mesma ordem de precedncia, a avaliao ser feita
da esquerda para a direita.
Como exemplo, qual ser o resultado da expresso: 3 + 2 * 5? A resposta 25 ou 13?
Como sabemos, na matemtica a multiplicao precede a soma. Logo, a expresso pode
ser lida assim: 3 + (2 * 5), o que resulta em 13. O uso de parntesis facilita a leitura de
expresses com mltiplos operadores, explicitando sua precedncia.
Vejamos a ordem de precedncia dos operadores (da maior para a menor):
Tabela 3.1 Precedncia de Operadores
OPERADOR

PRECEDNCIA

CATEGORIA

Not, @

Primeira

Unria

*, /, div, mod, and, shl, shr,


as
+, -, or, xor

Segunda

Multiplicao

Terceira

Adio

<, <>, >, <=, >=, in, is

ltima

Relacional

3.2 Tipos de Expresses


As expresses podem ser divididas em trs grupos:
Numrica - quando os operandos e o resultado so numricos (inteiros ou reais).
Literal - quando os operandos e o resultado so literais do tipo string (no pode
ser char). S existe um operador para expresses literais: Concatenao ( + ).

Edeyson Andrade Gomes

www.edeyson.com.br

EXPRESSES

Booleana - quando seu resultado do tipo boolean (TRUE ou FALSE).


3.3 Tipos de Operadores
Existem vrios operadores para a realizao de expresses em Pascal, como detalhado a
seguir.
Operador de Atribuio
O operador de atribuio utilizado para atribuir o valor de uma expresso a uma
varivel.
{Sintaxe:}
nomeDaVarivel := expresso;

Exemplos de atribuies:
1 program VariaveisPascal;
2
3 var
4
a, b, c : integer; {Declara a, b e c como variveis inteiras}
5
media : real;
{Declara media do tipo real}
6
aprovado : boolean; {Variveis lgicas - podem ser TRUE ou FALSE}
7
endereco : string; {endereo uma cadeia com 0 a 255 caracteres.}
8
CPF : string[11];
{O uso de [] delimita o nmero de caracteres.}
9
sexo : char;
{char representa um nico caracter.}
10
11 begin
12
{Atribuies de valores s varives}
13
endereco := 'Rua dos Alferes, 1234, Ap. 1001, Barra, Salvador,
Bahia - CEP: 40.130.280';
14
nome:= 'Jose da Silva Santos';
15
CPF := '12345678901';
16
writeln('Endereco: ', endereco, ' Cliente: ', nome, ' CPF: ', cpf);
17
sexo := 'M';
18
a := 7;
19
b := a + 2;
20
c := 8;
21
media := (a + b + c) / 3;
22
readkey;
23 end.

Listagem 3.1 Operador de Atribuio

Das linhas 13 a 21, exceto a linha 16, temos atribuies de valores a variveis de
diversos tipos. Note que o que est aps o := uma expresso.
Operadores Aritmticos
Os operadores aritmticos so utilizados para efetuar operaes aritmticas com
nmeros inteiros e reais. So eles: Subtrao (-), Adio (+) e Multiplicao (*).

41

42

Programao com Pascal

O operador de Diviso Real (/) s se aplica a nmeros reais e os operadores de Diviso


Inteira (DIV) e Resto da Diviso Inteira (MOD) s se aplicam a nmeros inteiros.
A (/) chamada de Diviso Real, pois sempre resultar num nmero real. No se pode
garantir que a diviso de dois inteiros resultar num nmero inteiro, como o caso da
diviso de 10 por 3. Logo, para obter a parte inteira da diviso entre inteiros existe o
operador DIV. O operador MOD fornece o resto inteiro da diviso.
Exemplos:
1. 16 / 3 5,3333 (nmero real)
2. 7 / 2 3,5
(nmero real)
3. 16 DIV 3 5 (note que todos os fatores so inteiros)
4. 16 MOD 3 1
A listagem 11 apresenta um cdigo que ilustra o uso de DIV e MOD apresentando o
dividendo, divisor, quociente, resto numa diviso inteira e a Listagem 12 demonstra
como extrair todos os dgitos de um nmero com 3 dgitos.
1 program UsoDivMod;
2 {Este programa demonstra o uso de DIV e MOD como operadores de
inteiros.}
3
4 uses crt;
5
6 var
7
dividendo, divisor, quociente, resto : integer;
8
quocienteReal : real;
9
10 begin
11
dividendo := 10;
12
divisor := 3;
13
quociente := dividendo div divisor;
14
quocienteReal := dividendo / divisor;
15
16
resto := dividendo mod divisor;
17
18
writeln('Dividendo: ', dividendo:3, '
Divisor: ', divisor:3);
19
writeln('Quociente: ', quociente:3, '
Resto : ', resto:3);
20
writeln('Quociente Real: ', quocienteReal:3:4);
21
22
readkey; {Para o programa at que algo seja teclado}
23 end.

Listagem 3.2 Uso de DIV e MOD

Na Listagem 11 as linhas 7 e 8 definem as variveis dividendo, divisor, quociente e


resto como inteiros e quocienteReal como real. Tais variveis representaro os
elementos numa diviso.
As linhas 11 e 12 iniciam o dividendo com 10 e o divisor com 3. A diviso entre 10 e 3
uma dzima peridica 3.333, que ser o valor de quocienteReal calculado na linha 14.
Pensando-se numa diviso com todos os fatores inteiros, quociente (linha 13) assumir
o valor 3 e resto (linha 16) assumir o valor 1. Vale lembrar que 10 dividido por 3
igual a 3 com resto 1 (10 = 3 * 3 + 1).
Edeyson Andrade Gomes

www.edeyson.com.br

EXPRESSES

O resultado da execuo do programa da Listagem 11 :


Dividendo: 10 Divisor: 3
Quociente: 3 Resto : 1
Quociente Real: 3.3333

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

program UsoDivMod2;
{Este programa vai demonstrar o uso de DIV e MOD.}
uses crt; {Usa a biblioteca CRT onde est readkey}
var
numero, centena, dezena, unidade, resto : integer;
{Operaes sobre Inteiros: +, -, *, DIV e MOD}
begin {inicia o programa}
{Atribuies de valores s varives}
numero := 367;
{XYZ = X * 100 + YZ}
centena := numero div 100; {centena = X}
resto := numero mod 100;
{resto = YZ} {YZ = Y * 10 + Z}
dezena := resto div 10;
{dezena = Y}
unidade := resto mod 10;
{unidade = Z}
writeln('Centena: ', centena);
writeln('Dezena: ', dezena);
writeln('Unidade: ', unidade);
readkey; {Para o programa at que algo seja teclado}
end.

{termina o programa}

Listagem 3.3 Uso de DIV e MOD com Unidade, Dezena e Centena

O objetivo do programa da Listagem 12 apresentar os valores de unidade, dezena e


centena de um nmero. Na linha 12 atribui-se o valor 367 varivel numero. Note que
367 = 3 * 100 + 67.
A linha 13 atribui varivel centena o valor de numero div 100, ou seja, o quociente
inteiro da diviso entre 367 e 100, que resulta em 3.
A linha 14 atribui varivel resto o valor de numero mod 100, o que representa o resto
inteiro da diviso. Como nmero igual a 367, resto ser 67.
Seguindo o raciocnio do uso de DIV e MOD, a linha 15 atribui 6 a dezena e a linha 16
atribui 7 a unidade.
O resultado da execuo do programa da Listagem 12 :
Centena: 3
Dezena : 6
Unidade: 7

43

44

Programao com Pascal

Operador de Concatenao
O operador de concatenao efetua a juno de duas variveis ou constantes do tipo
string. Por exemplo, suponha as strings nome e sobrenome. Nome armazena Edeyson
e sobrenome, Gomes. Como obter uma string com o nome completo? Strings
suportam a operao de soma (+) que funciona com a concatenao (juno).
A Listagem 13 exibe um exemplo de concatenao de strings.
1
2
3
4
5
6
7
8
9
10
11
12
13
14

program ConcatenacaoDeStrings;
{Este programa vai demonstrar a Concatenao de Strings em Pascal.}
uses crt;
var
nome
: string[20];
sobrenome
: string[20];
nomeCompleto : string[40];

{Definio de variveis}

begin
nome := 'Edeyson';
{Atribui Edeyson para a var. nome}
sobrenome:= 'Gomes';
{Atribui Gomes para a var. sobrenome}
nomeCompleto := nome + ' ' + sobrenome;
{Concatena nome,
espao em branco e sobrenome}
15
writeln('Nome Completo: ', nomeCompleto); {Exibe o nome completo}
16
17
readkey;
18 end.

Listagem 3.4 - Concatenao de Strings

Na Listagem 13, as linhas 7, 8 e 9 declaram strings com tamanho definido. As variveis


nome e sobrenome s podem armazenar cadeias com, no mximo, 20 caracteres. J a
varivel nomeCompleto pode armazenar cadeias de at 40 caracteres.
Na linha 12 atribui-se a string Edeyson varivel nome. Na linha 13 atribui-se
Gomes para sobrenome.
Note que na linha 14 faz-se uma operao de soma entre strings. Isso significa que as
strings Edeyson, espao em branco e Gomes sero concatenadas e o resultado
atribudo varivel nomeCompleto.
O resultado da linha 15 ser: Nome Completo: Edeyson Gomes.

Edeyson Andrade Gomes

www.edeyson.com.br

EXPRESSES

Operadores Relacionais
Os operadores relacionais so utilizados para efetuar a comparao entre dados de
mesmo tipo, por exemplo, se um nmero inteiro maior que outro, se um nmero real
menor ou igual a outro, se duas strings so iguais, etc.
Tabela 3.2 Operadores Relacionais
OPERADOR
SMBOLO
Maior que
>
Menor que
<
Igual
=
Maior Igual
>=
Menor Igual
<=
Diferente
<>

Exemplo de operadores relacionais:

1 program OperadoresRelacionaisComInteger;
2 {Este programa vai demonstrar Operadores Relacionais do Pascal}
3 uses crt;
4 var
5
valorLogico : boolean; {Variveis lgicas - podem ser TRUE ou FALSE}
6
inteiro1, inteiro2 : integer;
7
8 begin
9
{Atribuies de valores s varives}
10
inteiro1 := 10;
11
inteiro2 := 20;
12
13
valorLogico := inteiro1 = inteiro2;
14
writeln('Teste se ', inteiro1, ' eh = a ', inteiro2, ' : ',
valorLogico);
15
16
valorLogico := inteiro1 < inteiro2;
17
writeln('Teste se ', inteiro1, ' eh < que ', inteiro2, ' : ',
valorLogico);
18
19
valorLogico := inteiro1 > inteiro2;
20
writeln('Teste se ', inteiro1, ' eh > que ', inteiro2, ' : ',
valorLogico);
21
22
readkey;
23 end.

Listagem 3.5 Operadores Relacionais com Integer

Na Listagem 14 a linha 5 define uma varivel valorLogico do tipo boolean, ou seja, ela
s armazena Verdade (TRUE) ou Falso (FALSE). A linha 6 define duas variveis
inteiras que so inicializadas nas linhas 10 e 11, respectivamente.
A linha 13, valorLogico := inteiro1 = inteiro2, precisa de destaque aos :=, que o
smbolo de atribuio do Pascal. Este atribui ao smbolo da esquerda do :=, no caso
valorLogico, o valor lgico ou absoluto do que est direita do smbolo.

45

46

Programao com Pascal

A linha 13 lida assim: o valor do inteiro1 igual ao valor do inteiro2? Se sim, atribua
TRUE para valorLogico; se no, atribua FALSE.
A linha 14 imprime o resultado do teste lgico. Note que as linhas 16/17 e 19/20 fazem
algo similar s linhas 13/14, apenas mudando o operador relacional.
O resultado da execuo do programa da Listagem 14 :
Teste se 10 eh = a 20 : FALSE
Teste se 10 eh < que 20 : TRUE
Teste se 10 eh > que 20 : FALSE

1 program OperadoresRelacionaisComString;
2 {Este programa vai demonstrar Operadores Relacionais do Pascal}
3 uses crt;
4 var
5
valorLogico : boolean; {Variveis lgicas - podem ser TRUE ou FALSE}
6
string1, string2 : string;
7
8 begin
9
{Atribuies de valores s varives}
10
string1 := 'abc';
11
string2 := 'def';
12
13
valorLogico := string1 = string2;
14
writeln('Teste se ', string1, ' eh = a ', string2, ' : ',
valorLogico);
15
16
valorLogico := string1 > string2;
17
writeln('Teste se ', string1, ' eh > que ', string2, ' : ',
valorLogico);
18
19
valorLogico := string1 < string2;
20
writeln('Teste se ', string1, ' eh < que ', string2, ' : ',
valorLogico);
21
22
readkey;
23 end.

Listagem 3.6 Operadores Relacionais com String

Na Listagem 15, similar a Listagem 14, a linha 5 define uma varivel valorLogico do
tipo boolean, ou seja, ela s armazena Verdade (TRUE) ou Falso (FALSE). A linha 6
define duas variveis do tipo string (cadeias de caracter) que so inicializadas nas
linhas 10 e 11, respectivamente.
A linha 13 lida assim: o valor da string1 igual ao valor do string2? Se sim, atribua
TRUE para valorLogico; se no, atribua FALSE.
A linha 14 imprime o resultado do teste lgico. Note que as linhas 16/17 e 19/20 fazem
algo similar s linhas 13/14, apenas mudando o operador relacional. Note que strings
podem ser comparadas com >, <, etc. O resultado da execuo do programa da
Listagem 15 :
Edeyson Andrade Gomes

www.edeyson.com.br

EXPRESSES

Teste se abc eh = a def : FALSE


Teste se abc eh > que def : FALSE
Teste se abc eh < que def : TRUE

1 program OperadoresRelacionaisComReal;
2 {Este programa vai demonstrar Operadores Relacionais do Pascal}
3 uses crt;
4 var
5
valorLogico : boolean; {Variveis lgicas - podem ser TRUE ou FALSE}
6
real1, real2 : real;
7
8 begin
9
{Atribuies de valores s varives}
10
real1 := 8/6;
11
real2 := 4/3;
12
13
valorLogico := real1 > real2;
14
writeln('Teste se ', real1:3:4, ' eh > que ', real2:3:4, ' : ',
valorLogico);
15
16
valorLogico := real1 = real2;
17
writeln('Teste se ', real1:3:4, ' eh = a ', real2:3:4, ' : ',
valorLogico);
18
19
valorLogico := real1 < real2;
20
writeln('Teste se ', real1:3:4, ' eh < que ', real2:3:4, ' : ',
valorLogico);
21
22
readkey;
23 end.

Listagem 3.7 Operadores Relacionais com Reais

A listagem 16 similar a 14 e 15. Ressaltam-se as linhas 10 e 11 que fazem a atribuio


de nmeros no inteiros s variveis real1 e real2. Fica como exerccio sua execuo e
a observao do resultado.

Operadores Lgicos
O Pascal dispe dos seguintes operadores lgicos: AND (E), OR (OU) e NOT (NO,
NEGAO). Para compreend-los, vamos fazer uma breve introduo Lgica.
A lgica a cincia que estuda a correo do pensamento, do raciocnio. Quando
elaboramos frases como: a) A Lua maior que a Terra; b) A gua do mar salgada e c)
2 (dois) o nico nmero primo que par, podemos determinar a elas um valor lgico
verdadeiro ou falso. Logo, a falso, b e c so verdade.
Tais frases so chamadas de proposies, pois afirmam fatos, exprimem juzos.

47

48

Programao com Pascal

A Lgica Matemtica apresenta regras fundamentais do pensamento baseadas em dois


princpios (Axiomas):
a. Princpio da No Contradio - uma proposio ou Verdadeira ou Falsa;
b. Princpio do Terceiro Excludo - toda proposio ou Verdadeira ou Falsa apenas esses valores so possveis.
Nas listagens 14, 15 e 16 foram elaboradas proposies, por exemplo, em
valorLogico := inteiro1 = inteiro2. A proposio : o inteiro1 tem o mesmo valor do
inteiro2. O valor lgico (verdadeiro ou falso) desta proposio armazenado na
varivel valorLogico e depende dos valores atribudos a inteiro1 e inteiro2. Como
exemplo, se inteiro1 armazena o valor 10 e inteiro2 armazena o valor 20, valorLogico
FALSO.
As proposies usadas nas Listagens 14, 15 e 16 so ditas Simples ou Atmicas, pois
no contm outra proposio como parte integrante.
Uma proposio dita Composta quando ela resulta da combinao (via conectivos E
ou OU, por exemplo) de outras proposies. Por exemplo, supondo-se que se queira
saber se um nmero x pertence ao Intervalo Fechado nos extremos a e b :
[a, b] = { x

R ; a x b }.

Em Pascal necessitamos de uma proposio composta como segue:


valorLogico := (x >= a) AND (x <= b);
Esta proposio lida da seguinte forma: Teste se x maior ou igual a a E se x menor
ou igual a b. Se ambos forem verdade, e apenas neste caso, valorLogico ser verdade.
Note o seguinte: supondo o intervalo [1, 5]. Sendo a = 1 e b = 5; se x = 6 o teste 6 >= 1
verdade, mas 6 <= 5 falso, logo x = 6 no pertence ao intervalo [1, 5]. Por isso o
valorLogico neste caso falso.
Uma proposio composta com conectivos AND s verdade se todas as suas
componentes so verdade.
Pela teoria bsica de conjuntos, define-se A B por:
A B={x / xAex

B}

Podemos afirmar que x pertence a A B se, e somente se, x pertence a A AND x


pertence a B, ou seja, pertence aos dois conjuntos simultaneamente. O conectivo AND
opera a interseo entre proposies (e conjuntos).
Vejamos um exemplo em Pascal: suponha que A = {1, 2, 3, 4, 5} e B = {4, 5, 6}.
Se x A, ento (x >= 1) AND (x <= 5) verdade.
Se x B, ento (x >= 4) AND (x <= 6) verdade.
Se x

A B, ento ((x >= 1) AND (x <= 5)) AND ((x >= 4) AND (x <= 6))

verdade. Ou seja, x {4, 5}. De outra forma, x [1, 5] [4, 6].


Edeyson Andrade Gomes

www.edeyson.com.br

EXPRESSES

O uso de operadores lgicos apresentado na Listagem 17.


1 program OperadoresLogicos;
2 {Este programa vai demonstrar Operadores Lgicos do Pascal}
3 uses crt;
4 var
5
valorLogico : boolean; {Variveis lgicas - podem ser TRUE ou FALSE}
6
x, inicio, fim : integer;
7
8 begin
9
{Atribuies de valores s varives}
10
inicio := 0;
11
fim := 10;
12
x := 5;
13
14
valorLogico := (x > inicio) and (x > fim);
15
writeln('Teste se ', x, ' eh > que ', inicio , ' E ', x, ' eh > que
', fim, ' : ', valorLogico);
16
17
valorLogico := (x > inicio) and (x < fim);
18
writeln('Teste se ', x, ' eh > que ', inicio , ' E ', x, ' eh < que
', fim, ' : ', valorLogico);
19
20
valorLogico := (x > inicio) or (x > fim);
21
writeln('Teste se ', x, ' eh > que ', inicio , ' OU ', x, ' eh > que
', fim, ' : ', valorLogico);
22
23
valorLogico := ((x >= 1) and (x <= 5)) AND ((x >= 4) and (x <= 6));
24
writeln('Teste se ', x, ' esta entre 1 e 5 e se ', x, ' esta entre 4
e 6 simultaneamente : ', valorLogico);
25
26
readkey;
27 end.

Listagem 3.8 Operadores Lgicos

Na Listagem 17, as linhas 5 e 6 definem as variveis e as linhas 10 a 11 as iniciam.


A linha 14 atribui varivel valorLogico o resultado do teste (valorLogico := (x > inicio)
and (x > fim)), ou seja, se x maior que inicio AND x maior que fim. Logo, x tem de
ser maior que o maior valor. Como inicio e fim foram iniciadas com 0 e 10,
respectivamente, o teste s verdade se x for maior que 10. Como x foi iniciada com 5,
valorLogico FALSE na linha 14.
A linha 17 atribui varivel valorLogico o resultado do teste (valorLogico := (x > inicio)
and (x < fim)), ou seja, se x maior que inicio AND x menor que fim. Como inicio e
fim foram iniciadas com 0 e 10, respectivamente, o teste s verdade se x for maior que
0 AND menor que 10. Como x foi iniciada com 5, valorLogico TRUE na linha 14.
A linha 20 atribui varivel valorLogico o resultado do teste (valorLogico := (x > inicio) or
(x > fim)), ou seja, se x maior que inicio OR x maior que fim. Como inicio e fim
foram iniciadas com 0 e 10, respectivamente, o teste s verdade se x for maior que 0
OR maior que 10.

49

50

Programao com Pascal

Diferente do AND, uma proposio composta com OR verdade se pelo menos uma
das proposies componentes for verdade.
Como x foi iniciada com 5, valorLogico TRUE, pois 5 maior que 0, embora 5 seja
menor que 10.
A linha 23 atribui varivel valorLogico o resultado do teste (valorLogico := ( (x >= 1) and
(x <= 5) ) AND ( (x >= 4) and (x <= 6) )), ou seja, se x deve estar no conjunto [1, 5] [4,6].
Note que o AND em maisculas s foi usado para destacar os conjuntos na expresso.
Em Pascal no h distino de maisculas e minsculas.
Como x tem o valor 5, o valorLogico TRUE na linha 24.
Ainda pela teoria bsica de conjuntos, define-se A U B por:
A U B = { x / x A or x

B}

Podemos afirmar que x pertence a A U B se, e somente se, x pertence a A OR x


pertence a B, ou seja, pertence a um ou ao outro. O conectivo OR opera a unio entre
proposies (e conjuntos).
Vejamos um exemplo em Pascal: suponha que A = {1, 2, 3, 4, 5} e B = {4, 5, 6}.
Se x A, ento (x >= 1) AND (x <= 5) verdade.
Se x B, ento (x >= 4) AND (x <= 6) verdade.
Se x A U B, ento ((x >= 1) AND (x <= 5)) OR ((x >= 4) AND (x <= 6)) verdade.
Ou seja, x {1, 2, 3, 4, 5, 6}. De outra forma, x [1, 5] U [4, 6].

Exerccios
1. Elabore um programa que deve:
a. Declarar a varivel x como inteira.
b. Solicitar ao usurio para informar um valor para x.
c. Determinar se x pertence aos intervalos:
i. [2, 7] U [10, 15]
ii. [1, 5) U [4, 10) U (20, 26]
iii. [0, 10] [7, 15]
iv. (0, 10] (7, 15)

Edeyson Andrade Gomes

www.edeyson.com.br

ESTRUTURAS DE DECISO

Todos os programas de exemplo elaborados at este captulo apresentam um conjunto


de aes seqenciais onde todas as aes so executadas numa mesma ordem.
O modelo da Figura 2 (Fluxogramas so abordados no apndice A) no comum em
programas quotidianos. Normalmente o programador se depara com aes que sero
executadas ou no a depender de uma determinada situao.
Entrada

Ao 1

Ao 2

Sada

Listagem 4.9 Fluxograma de sequncia

Quando uma ou mais aes dependem de uma ou mais condies para sua execuo,
necessitam-se de estruturas de deciso que controlam o fluxo de execuo do programa
efetuando tomadas de deciso e desvios de operaes.
Em Linguagem Natural podem-se descrever tais estruturas de deciso das seguintes
formas:
1. Seleo com uma via: Se a condio verdadeira ento execute a ao 1.
2. Seleo com duas vias: Se a condio verdadeira ento execute a ao 1.
Seno, execute a ao 2.
Em ambas as formas a ao 1 s ser executada se e somente se a condio for
verdadeira.
Na forma 1, seleo com uma via, caso a condio seja verdadeira adiciona-se uma ao
ao fluxo normal do programa. Na forma 2, escolhe-se um caminho a seguir, executando
a ao1 ou a ao 2.
Observaes:
1. Uma ao, como descrita no texto, no consiste apenas numa instruo. Ela pode
ser executada por um bloco de comandos bloco de programa com demarcao de
incio e fim (usando-se BEGIN e END) que contm uma ou vrias instrues.
2. A instruo Pascal end pode ser finalizado com um ponto-e-vrgula ( ; ) e no
apenas com um ponto. O uso de ponto ao final de um end ocorre somente na
finalizao de um programa.

4.1 IF .. THEN
A instruo do Pascal IF condio THEN ao pode ser lida assim: SE a condio
verdadeira ENTO execute a ao.

51

52

Programao com Pascal

IF .. THEN tem por finalidade testar uma condio e tomar uma deciso e uma
seleo com uma via. Se a condio verdadeira, um bloco de comandos executado.
Em caso contrrio, esse bloco saltado.
{Sintaxe:}
IF condio THEN
bloco de comandos

A listagem 20 apresenta um cdigo com seleo com uma via atravs de IF .. THEN.
1
2
3
4
5
6
7
8
9
10
11
12
13
14

program testaNota;
uses crt;
{Declarar uma varivel nota do tipo real;}
var nota : real;
begin
{Solicitar um valor para a nota;}
write('Digite uma nota: ');
readln(nota);
{Se a nota for maior ou igual a 6.0, ento imprimir: Aluno
aprovado.}
if (nota >= 6.0) then
writeln('Aluno aprovado.');
{Parar o programa at que algo seja pressionado}
readkey;
end.

Listagem 4.1 Seleo com uma Via IF .. THEN

O programa da Listagem 4.1 assim descrito:


1. Incio do Algoritmo;
a. Declarar uma varivel nota do tipo real;
b. Solicitar um valor para a nota;
c. Se a nota for maior ou igual a 6.0, ento imprimir: Aluno aprovado.
2. Terminar Algoritmo.
Neste programa declara-se uma varivel real chamada nota na linha 4. As linhas 7 e 8
solicitam o valor da nota (write) e efetuam sua leitura (readln), respectivamente.
Na linha 10 testa-se se a nota lida maior ou igual a 6 e, caso seja, e apenas com esta
condio, escreve-se Aluno aprovado.
Note que se a nota for menor que 6 o programa aguarda uma tecla ser pressionada
linha 13 e acaba.
Veja que neste cdigo, aps o IF no se colocou o par begin .. end, pois desejava-se
executar uma ao com apenas uma instruo linha 11.
Caso a ao desejada necessitasse de mais de uma instruo para executar, estas
deveriam estar inseridas em um bloco de comandos.

Edeyson Andrade Gomes

www.edeyson.com.br

ESTRUTURAS DE DECISO

Incio

nota

Nota >= 6.0

SIM

Aluno
aprovado

Fim

Listagem 4.2 Fluxograma da seleo com uma Via

O fluxograma correspondente ao programa da Listagem 20 apresentado na Figura 3.


Atravs dele deve ficar claro que a mensagem Aluno aprovado ser apresentada se, e
somente se, a nota for maior ou igual a seis.
4.2 IF .. THEN .. ELSE
Assim como a instruo IF condio THEN ao, a instruo IF condio THEN
ao1 ELSE ao2 tem por finalidade testar uma condio e tomar uma deciso. Se a
condio verdadeira, um bloco de comandos aps o THEN executado. Se a
condio falsa, um bloco de comandos aps o ELSE executado.
A instruo IF condio THEN ao1 ELSE ao2 pode ser lida assim: SE a condio
verdadeira ENTO execute a ao1. EM CASO CONTRRIO, execute a ao2.
Suponha que no programa da Listagem 21 tambm fosse necessrio informar se o aluno
est reprovado. Neste caso tem-se duas vias: Se a nota maior ou igual a 6, a via 1
informar Aluno Aprovado. Seno, se a nota menor que 6, a via 2 informar Aluno
Reprovado.
A listagem 21 apresenta um cdigo com seleo com duas vias atravs de IF .. THEN
onde a ao possui mltiplas instrues. Note o bloco de comandos delimitado por
BEGIN .. END.
{Sintaxe:}
IF condio THEN
bloco de comandos
ELSE
Vloco de comandos

O programa da Listagem 21 assim descrito:


1. Incio do Algoritmo;
a. Declarar uma varivel nota do tipo real;

53

54

Programao com Pascal

b. Solicitar um valor para a nota;


c. Se a nota for maior ou igual a 6.0, ento imprimir: Aluno aprovado.
d. Seno, imprimir: Aluno reprovado.
2. Terminar Algoritmo.

1
2
3
4
5
6
7
8
9

program testaNota;
uses crt;
{Declarar uma varivel nota do tipo real;}
var nota : real;
begin
{Solicitar um valor para a nota;}
write('Digite uma nota: ');
readln(nota);
{Se a nota for maior ou igual a 6.0, ento imprimir: Aluno
aprovado.}
if (nota >= 6.0) then
writeln('Aluno aprovado.')
else
writeln('Aluno reprovado.');

10
11
12
13
14
15
{Parar o programa at que algo seja pressionado}
16
readkey;
17 end.

Listagem 4.2 Seleo com 2 Vias IF .. THEN .. ELSE


Observaes:
1. Observe que um END antes de um ELSE no deve possuir ponto-e-vrgula ( ; ).

Note que o que diferencia as Listagens 20 e 21 que nesta a linha 10 testa se a nota lida
maior ou igual a 6 e, caso seja, e apenas com esta condio, escreve-se Aluno
aprovado. Em caso contrrio - teste da linha 12 - escreve-se se Aluno reprovado
linha 13.

Incio

nota

NO

Nota >= 6.0

Aluno
reprovado

SIM

Aluno
aprovado

Fim

Listagem 4.3 - Fluxograma da seleo com duas Vias

O fluxograma correspondente ao programa da Listagem 21 apresentado na Figura 4.


Atravs dele deve ficar claro que a mensagem Aluno aprovado ser apresentada se, e
Edeyson Andrade Gomes

www.edeyson.com.br

ESTRUTURAS DE DECISO

somente se, a nota for maior ou igual a seis e que Aluno aprovado ser apresentada em
caso contrrio. Estas so as duas vias.
Outro exemplo do uso de IF..THEN..ELSE est no programa da Listagem 22, que
simula um dbito numa conta corrente. O dbito s possvel se h saldo e/ou limite
disponveis para isso. O programa assim descrito:
1. Incio do Algoritmo;
a. Definir as variveis saldo, limite e valorADebitar como real;
b. Atribuir valores a saldo e limite;
c. Solicitar ao usurio o valor a debitar;
d. Se o saldo somado ao limite for maior que o valor a debitar, ento:
i. subtraia valorADebitar do saldo;
ii. Imprima 'Debito efetuado com sucesso'.
e. Seno:
i. Imprima 'Saldo insuficiente'.
f. Imprima: 'Fim da transacao. Pressione Alguma Tecla';
g. Pare o programa at que uma tecla seja pressionada.
2. Fim do algoritmo.
A Listagem 22 exibe o programa que implementa o referido algoritmo.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

program TesteContaCorrente;
{importao da biblioteca CRT}
uses crt;
var
{Definio das variveis saldo, limite e valorADebitar do tipo real}
saldo, limite, valorADebitar : real;
begin
{limpa a tela}
clrscr;

21
22
23
24
25
26
27
28
29
30
31
32
33 end.

{Atribuio de valores a saldo e limite}


saldo := 200;
limite := 500;
{Solicitar ao usurio o valor a debitar.}
writeln('Qual o valor a debitar?');
readln(valorADebitar);
{Se o saldo somado ao limite for maior que o valor a debitar,
ento debite o valorADebitar do saldo}
if (saldo + limite > valorADebitar) then
begin
saldo := saldo - valorADebitar;
writeln('Debito efetuado com sucesso.');
end
{Seno, imprima: 'Saldo Insuficiente'}
else
begin
writeln('Saldo insuficiente.');
end;
writeln('Fim da transacao. Pressione Alguma Tecla');
readkey;

Listagem 4.3 - Seleo com duas Vias

55

56

Programao com Pascal

Neste cdigo testa-se na linha 21 se a varivel saldo somada varivel limite tem valor
maior que a varivel valorADebitar. Se isto verdade, a linha 23 subtrai do saldo o
valorADebitar e a linha 24 imprime o sucesso do dbito.
Note que as linhas 22 a 25 e 28 a 30 compem blocos de comandos delimitados por
BEGIN .. END.

Incio

saldo = 200
limite = 500

valorADebitar

saldo + limite >


valorADebitar

NO

SIM
saldo = saldo - valorADebitar
Saldo Insuficiente
Debito efetuado
com sucesso

Fim da transacao.
Pressione Alguma
Tecla

Fim

Listagem 4.4 - Fluxograma da seleo com duas Vias

O fluxograma correspondente ao programa da Listagem 21 apresentado na Figura 4.


A instruo IF condio THEN ao1 ELSE ao2 tem uma limitao: ela s oferece
dois caminhos alternativos. Se a condio verdadeira, segue-se o caminho que executa
a ao1. Em caso contrrio, segue-se o caminho que executa a ao2.
comum, contudo, a necessidade de aninhamento de IF quando a condio possui
mltiplos caminhos alternativos (aninhamento de Selees de Duas Vias.). Suponha o
seguinte problema: uma seguradora d descontos progressivos no seguro de automvel
em funo da faixa etria do cliente. As faixas so as seguintes:
1. 20 a 25 anos: 3% de desconto;
2. 26 a 30 anos: 5% de desconto;
3. 31 a 45 anos: 8 % de desconto;
Edeyson Andrade Gomes

www.edeyson.com.br

ESTRUTURAS DE DECISO

4. Acima de 45 anos: 10% de desconto.


Uma especificao em Linguagem Natural para o clculo do desconto concedido pode
ser a seguinte, que chamaremos de Algoritmo Calcula Desconto 1:
1. Incio do Algoritmo Calcula Desconto1;
a. Ler um valor para a varivel idade;
b. Desconto de 0%;
c. Se a idade est entre 20 e 25 anos, o desconto de 3%;
d. Seno, Se a idade est entre 26 e 30 anos, o desconto de 5%;
e. Seno, Se a idade est entre 31 e 45 anos, o desconto de 8%;
f. Seno, Se a idade maior que 45 anos, o desconto de 10%;
g. Informar o desconto.
2. Fim do algoritmo Calcula Desconto1.
Um erro comum especificao em Linguagem Natural seria o seguinte, que
chamaremos de Algoritmo Calcula Desconto 2:
1. Incio do Algoritmo Calcula Desconto2;
a. Ler um valor para a varivel idade;
b. Desconto de 0%;
c. Se a idade est entre 20 e 25 anos, o desconto de 3%;
d. Se a idade est entre 26 e 30 anos, o desconto de 5%;
e. Se a idade est entre 31 e 45 anos, o desconto de 8%;
f. Se a idade maior que 45 anos, o desconto de 10%;
g. Informar o desconto.
2. Fim do algoritmo Calcula Desconto2.
Embora as duas especificaes dem o mesmo resultado, a primeira (Algoritmo Calcula
Desconto 1) o faz de maneira tima. Note que uma pessoa encontra-se numa nica faixa
etria, logo, se uma condio satisfeita as demais no precisam ser testadas. O
desconto sempre inicia em 0%, assumindo-se que no haver desconto (casos de
pessoas com menos de 20 anos).
A segunda especificao (Algoritmo Calcula Desconto 2) obriga a execuo de todos os
testes de condio, o que desnecessrio. Vejamos os Fluxogramas:
A Figura 6 apresenta o fluxograma do algoritmo Calcula Desconto 1. Como pode ser
notado, caso uma condio seja atendida (SIM), o algoritmo determina o novo desconto,
informa-o e termina. Caso o teste de uma condio falhe (NO), testa-se a prxima
condio at que uma seja verdadeira, determinando o novo desconto, informando-o e
terminando.

57

58

Programao com Pascal

Incio

idade

Desconto = 0%

idade >= 20 e
idade <= 25

NO

idade >= 26 e
idade <= 30

NO

idade >= 31 e
idade <= 45

SIM

SIM

SIM

Desconto = 3%

Desconto = 5%

Desconto = 8%

NO

idade > 45

SIM

Desconto = 10%

Informar
Desconto

Fim

Listagem 4.5 Fluxograma do Algoritmo Calcula Desconto 1

A Listagem 23 exibe o programa que implementa o algoritmo Calcula Desconto 1.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

program CalculaDesconto1;
{importao da biblioteca CRT}
uses crt;
var
{Definio das variveis idade e desconto como inteiras}
idade, desconto : integer;
begin
{limpa a tela}
clrscr;
{Solicitar ao usurio o valor da idade.}
writeln('Qual sua idade?');
readln(idade);
{Atribuio de valor inicial ao desconto}
desconto := 0;
{Selee aninhadas}
if (idade >= 20) and (idade <= 25) then
desconto := 3
else
if (idade >= 26) and (idade <= 30) then
desconto := 5
else
if (idade >= 31) and (idade <= 45) then
desconto := 8
else
if (idade >= 46) then
desconto := 10;
writeln('O desconto eh de ', desconto, '%');
readkey;
end.

Listagem 4.4 - Calcula Desconto 1

Edeyson Andrade Gomes

www.edeyson.com.br

ESTRUTURAS DE DECISO

Na Listagem 23, na linha 6 definem-se as variveis inteiras idade e desconto. Nas linhas
12 e 13 solicita-se o valor da idade. Na linha 16 inicia-se o desconto com 0.
A linha 19 testa se a idade est no limite [20, 25]. Se sim, atribui 3 ao desconto. Seno,
inicia um novo teste aninhado na linha 22 verificando se a idade est no limite [26, 30].
Note que o aninhamento de IF fica mais legvel graas endentao do cdigo. O
processo da aninhamento e endentao continua para os demais limites de idade.
A Figura 7 apresenta o fluxograma do algoritmo Calcula Desconto 2. Como pode ser
notado, mesmo com uma condio sendo atendida (SIM), o algoritmo continua a testar
desnecessariamente as demais condies para determinar o novo desconto, informandoo e terminando.
Embora o Algoritmo Calcula Desconto 1 seja mais eficiente que o 2, h um problema.
Imagine um conjunto com 20 condies. Com ficaria o fluxograma da Figura 6? Para
eliminar o problema que surgiria que existe a seleo com mltiplas vias (vide
Apndice A, e que implementado com a instruo CASE.

Incio

idade

Desconto = 0%

idade >= 20 e
idade <= 25

SIM

NO

idade >= 26 e
idade <= 30

NO

Desconto = 3%
idade >= 31 e
idade <= 45

SIM

NO

Desconto = 5%
SIM

idade > 45

Desconto = 8%
SIM

Desconto = 10%

Informar
Desconto

Fim

Listagem 4.5 - Fluxograma do Algoritmo Calcula Desconto 2

NO

59

60

Programao com Pascal

Exemplos de Cdigo

Edeyson Andrade Gomes

www.edeyson.com.br

ESTRUTURAS DE DECISO

4.3 CASE
Embora o aninhamento de IF seja comum quando a condio possui mltiplos
caminhos alternativos, normalmente ela usada com condies que necessitam de
avaliao de um valor lgico verdadeiro ou falso.
Em algumas situaes, contudo, a condio pode ser avaliada para um conjunto de
valores discretos, sendo estes inteiros ou caracteres. Por exemplo, imagine um sistema
que automatiza uma URA (Unidade de Reconhecimento Audvel), comum em
atendimento telefnico pelo sistema 0800. Comumente so oferecidas opes entre 0 e
9. Cada opo leva a uma ao diferente. Por exemplo, vamos analisar o problema URA
01 a seguir.
Uma soluo de URA (URA 01) deve oferecer as seguintes opes e aes:
1 Saldo;
2 Extrato Parcial;
3 Extrato da ltima Conta;
8 Falar com atendente;
9 Menu anterior.

Uma especificao em Linguagem Natural para a URA 01 pode ser a seguinte, que
chamaremos de Algoritmo URA 01 IF:
1. Incio do Algoritmo URA 01 IF;
a. Informar ao usurio quais as opes do menu;
b. Solicitar ao usurio qual a opo desejada;
c. Se a opo for 1, apresentar o saldo;
d. Seno, Se a opo for 2, apresentar o Extrato Parcial;
e. Seno, Se a opo for 3, apresentar o Extrato da ltima Conta;
f. Seno, Se a opo for 8, transferir a ligao para a atendente;
g. Seno, Se a opo for 9, desviar para o menu anterior;
h. Seno, informar opo invlida.
2. Fim do algoritmo URA 01 IF.
Com esta especificao teremos um fluxograma muito semelhante ao da Figura 6.
Todavia, existe a opo de reescrever o algoritmo usando Seleo com Mltiplas Vias
ao invs de Aninhamento de Selees de Duas Vias. Um exemplo o seguinte
Algoritmo URA 01 CASE:
1. Incio do Algoritmo URA 01 CASE;
a. Informar ao usurio quais as opes do menu;
b. Solicitar ao usurio qual a opo desejada;
c. Caso a opo seja:
i. 1 : apresentar o saldo;
ii. 2 : apresentar o Extrato Parcial;
iii. 3 : apresentar o Extrato da ltima Conta;
iv. 8 : transferir a ligao para a atendente;
v. 9 : desviar para o menu anterior;

61

62

Programao com Pascal

vi. Outra, informar opo invlida.


2. Fim do algoritmo URA 01 CASE.
A Figura 8 apresenta o fluxograma do algoritmo URA 01 CASE. Como pode ser
notado, testa-se uma condio em busca de um valor especfico (discreto) e desvia a
execuo para cada caso especificado.
Incio

Exibir as
opes

opo

opo

8
2

Saldo

Extrato Parcial

Extrato ltima
Conta

0, 4, 5, 6 ou 7
9

Transfere ligao
para Atendente

Desvia para o
Menu Anterior

Opo Invlida

Fim

Listagem 4.6 Fluxograma do algoritmo URA 01 CASE

A implementao do algoritmo URA 01 CASE deve ser feito com o comando CASE,
cuja sintaxe descrita a seguir:

{Sintaxe:}
CASE varivel OF
Valor1 : Bloco de Comandos 1;
Valor2 : Bloco de Comandos 2;
Valor3 : Bloco de Comandos 3;
...
ELSE
Bloco de Comandos n
END;

Observaes:
1. A varivel do CASE deve ser inteira ou caracter (integer ou char) apenas.
2. O ELSE usado para tratar uma possvel exceo de valor da varivel

Edeyson Andrade Gomes

www.edeyson.com.br

ESTRUTURAS DE DECISO

A Listagem 24 exibe o programa que implementa o algoritmo URA 01 CASE.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

program URA01Case;
{importao da biblioteca CRT}
uses crt;
var
{Definio das varivel opo como inteira}
opcao : integer;
begin
{limpa a tela}
clrscr;
{Informar opes ao usurio.}
writeln('Tecle 1 para Saldo');
writeln('Tecle 2 para Extrato Parcial');
writeln('Tecle 3 para Extrato da Ultima Conta');
writeln('Tecle 8 para Transferir ligao para a Atendente');
writeln('Tecle 9 para Retornar ao Menu anterior');
readln(opcao);
case opcao of
1: begin
{cdigo para apresentar saldo}
end;
2: begin
{cdigo para apresentar o Extrato Parcial}
end;
3: begin
{cdigo para apresentar o Extrato da ltima Conta}
end;
8: {transferir a ligao para a atendente};
9: {desviar para o menu anterior};
else
writeln('Opcao Invalida');
end; {end case}
readkey;
end.

Listagem 4.5 Algoritmo URA 01 Case

Na Listagem 24, a linha 6 define a varivel opo como inteira. As linhas 12 a 17


exibem as opes da URA e a linha 17 l a opo escolhida pelo usurio. A tomada de
deciso do que fazer aps a seleo da opo est entre as linhas 19 e 33.
O CASE da Listagem 24 baseia-se no valor da varivel opo. Para cada caso, um bloco
de aes sugerido. No caso, apenas fez-se a indicao de onde e como o bloco de
comandos deve ser inserido linhas 20 a 22, por exemplo.
Na linha 31 o ELSE captura qualquer valor de opo que no seja 1, 2, 3, 8 ou 9.

63

64

Programao com Pascal

4.4 EXERCCIOS
4.4.1 Dado o programa TesteCondicional, escreva seu algoritmo em Linguagem Natural, seu
fluxograma e reescreva-o usando CASE..ELSE.
1 program TesteCondicional;
2 {importao da biblioteca CRT}
3 uses crt;
4 var
5
condicao: integer;
6
7 begin
8
{limpa a tela}
9
clrscr;
10
{escreve no prompt de comando}
11
writeln('Digite o valor da condicao: ');
12
{esperando que o usurio digite algo e atribua aa varivel
condicao}
13
readln(condicao);
14
15
if (condicao = 1) then
16
writeln('A condicao eh 1')
17
else
18
if (condicao = 2) then
19
begin
20
writeln('A condicao eh 2');
21
writeln('E dois eh par e primo');
22
end
23
else
24
writeln('A condicao eh: ', condicao);
25
readkey;
26 end.

Listagem 4.6 Exerccio Teste Condicional

4.4.2 Escrever um algoritmo em Linguagem Natural, fluxograma e em Pascal que, lendo trs
lados de um tringulo, determine se o mesmo eqiltero, issceles ou escaleno.
Opo 1 de soluo em Linguagem Natural:
1. Incio do Algoritmo Tringulos
a. Obter os lados a, b e c
b. Se os trs lados so iguais, imprima que Equiltero
c. Seno, se dois lados so iguais, imprima que Issceles
d. Seno, imprima que Escaleno
2. Fim do Algoritmo Tringulos
Opo 2 de soluo em Linguagem Natural:
1. Incio do Algoritmo Tringulos
a. Obter os lados a, b e c
b. Se a = b e b = c, imprima que Equiltero
Edeyson Andrade Gomes

www.edeyson.com.br

ESTRUTURAS DE DECISO

c. Seno, se a = b ou b = c ou a = c, imprima que Issceles


d. Seno, imprima que Escaleno
2. Fim do Algoritmo Tringulos

Fluxograma:

Incio

a=beb=c

Tringulo
Equiltero

F
a, b, c
a=b
ou a = c
ou b = c

Tringulo
Issceles

Tringulo
Escaleno

Fim

Cdigo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

program Triangulos;
uses crt;
var
lado1, lado2, lado3 : integer;
begin
writeln('Digite o lado 1');
readln(lado1);
writeln('Digite o lado 2');
readln(lado2);
writeln('Digite o lado 3');
readln(lado3);
if (lado1 = lado2) and (lado2 = lado3) then
writeln('Triangulo Equilatero')
else
if ((lado1 = lado2) or (lado1 = lado3) or (lado2 = lado3) ) then
writeln('Triangulo Isosceles')
else
writeln('Triangulo Escaleno');
readkey;
end.

Listagem 4.7 -

65

66

Programao com Pascal

ESTRUTURAS DE REPETIO

Um mtodo recomendado construo de algoritmos (Top-Down) refora a busca de


pequenos passos, simples, que possam ser resolvidos manualmente por um humano. A
composio de passos simples a melhor forma de construir um algoritmo complexo.
Em muitas situaes, um conjunto de passos simples repetido um nmero determinado
de vezes. Por exemplo, suponha um problema onde se deseja ler uma coleo de 100
notas e, para cada uma, determinar se o aluno foi aprovado (nota maior ou igual a seis)
ou reprovado (nota menor que seis).
Os passos que devem ser repetidos so facilmente identificados: determinar se o aluno
foi aprovado ou no. Uma seleo com duas vias resolve este problema, contudo,
necessita-se testar uma coleo de 100 notas. Para isto, necessita-se de uma estrutura de
repetio.
Uma soluo possvel, porm muito ruim pela repetio de cdigo, seria assim descrito:
1. Incio do Algoritmo Le100Notas;
a. Declarar uma varivel nota do tipo real;
b. Solicitar um valor para a nota 1;
c. Se a nota 1 for maior ou igual a 6.0, ento imprimir: Aluno aprovado.
d. Seno, imprimir: Aluno reprovado.
e. Solicitar um valor para a nota 2;
f. Se a nota 2 for maior ou igual a 6.0, ento imprimir: Aluno aprovado.
g. Seno, imprimir: Aluno reprovado.
h. ...
i. Solicitar um valor para a nota 100;
j. Se a nota 100 for maior ou igual a 6.0, ento imprimir: Aluno
aprovado.
k. Seno, imprimir: Aluno reprovado.
2. Terminar Algoritmo Le100Notas.
Analisando-se o algoritmo Le100Notas nota-se que um conjunto de passos (ler a nota,
testar e tomar uma deciso em duas vias) se repetir 100 vezes. Imagine repetir o trecho
de cdigo entre a leitura da nota e sua anlise 100 vezes. Isso vivel? E se a coleo
fosse maior?
Em situaes com essas, onde necessria a repetio de um determinado trecho de
cdigo, usam-se estruturas de repetio, tambm chamadas de laos.
Uma forma mais apropriada de escrever o mesmo algoritmo o seguinte:
1. Incio do Algoritmo RepeteTesteNotas;
a. Declarar uma varivel nota do tipo real;
b. Repetir 100 vezes:
i. Solicitar um valor para a nota;
Edeyson Andrade Gomes

www.edeyson.com.br

ESTRUTURAS DE REPETIO

ii. Se a nota for maior ou igual a 6.0, ento imprimir: Aluno


aprovado.
iii. Seno, imprimir: Aluno reprovado.
2. Terminar Algoritmo RepeteTesteNotas.
O fluxograma correspondente ao algoritmo RepeteTesteNotas encontra-se na Figura
5.1.
Incio

i=0

Fim

NO

i < 40

SIM

nota

NO

Nota >= 6.0

Aluno
reprovado

SIM

Aluno
aprovado

i=i+1

Listagem 8.1 Fluxograma RepeteTesteNotas

Note que o fluxograma inicia i com zero e testa se i menor que 40. A varivel i
usada como um contador de vezes que o algoritmo executa a leitura e o teste das notas.
Assim, enquanto i for menor que 40 no se chega ao fim da repetio. Um dos passos
do algoritmo no fluxograma incrementar o valor de i para indicar que um passo foi
executado. Sem isso, nunca se chegaria ao fim.
estrutura de volta a um ponto do algoritmo para que este seja repetido chama-se de
Lao. Os laos dividem-se em dois grupos:
Laos Finitos: o nmero de repeties do lao conhecido;
Laos Infinitos (indeterminados): o nmero de repeties do lao
desconhecido previamente.

67

68

Programao com Pascal

5.1 FOR
O comando FOR permite a repetio de um comando, ou bloco de comandos, um
nmero finito de vezes. Esse nmero determinado por uma varivel denominada de
contador do FOR. Sua sintaxe :
{Sintaxe 1:}
for contador := incio to fim do
Comando;
{Sintaxe 2:}
for contador := incio to fim do
begin
Bloco de Comandos;
end;

Caso o lao contenha um nico comando, usa-se a sintaxe 1 ou a 2. Caso seja um bloco
de comandos, usa-se a sintaxe 2, obrigatoriamente.
O ponto central para o entendimento do FOR o entendimento de seu fluxo de
execuo. Por exemplo, com a sintaxe 2 tem-se o seguinte:
{Sintaxe 1:}
for contador := incio to fim do
begin
Bloco de Comandos;
end;

Os passos do fluxo de execuo do comando FOR so os seguintes:


1. O FOR inicia o contador com o valor de incio.
2. O FOR inicia um lao de execuo:
a. O FOR testa se o contador <= fim (condio de controle);
b. Se sim:
i. executa o Bloco de Comandos;
ii. o FOR incremente automaticamente o contador em um;
iii. volta ao lao (passo 2.a).
c. Seno:
i. Para e sai do FOR.

O Fluxo de Execuo para o FOR com a sintaxe 1 altera apenas o Bloco de Comandos
(subitem 2.b.i) para um Comando Simples (que no necessita ser delimitado por
begin..end).
Usando o comando FOR, a implementao do algoritmo RepeteTesteNotas fica como
apresentado na Listagem 5.1.

Edeyson Andrade Gomes

www.edeyson.com.br

ESTRUTURAS DE REPETIO

1
2
3
4
5
6
7

program RepeteTesteNotas;
{Importa a biblioteca CRT para usar ReadKey}
uses crt;
{Declara as variveis}
var nota : real;
i : integer; {Varivel que ajudar a contar nmero de
repeties}

8
9 {Inicia o programa principal}
10 begin
11
for i := 1 to 40 do
12
begin
13
write('Digite a nota do aluno entre 0 e 10: ');
14
readln(nota);
15
16
if (nota >= 6) then
17
writeln('Aluno aprovado')
18
else
19
writeln('Aluno reprovado');
20
end;
21 end.
Listagem 5.1 Uso de For para repetir teste de notas

A linha 11 inicia um lao de repetio de 40 vezes. Ela pode ser lida assim: faa i variar
de 1 at 40 e, para cada valor de i neste intervalo (incluindo 1 e 40) faa o que est entre
o begin..end.
Tudo que est entre o begin (linha 12) e o end (linha 20), que compe um bloco de
comandos, ser repetido 40 vezes. Isso garantido se o programador no mudar o valor
de i (que incrementado automaticamente pelo FOR).
As linhas 13 e 14 solicitam a digitao de uma nota entre 0 e 10. A linha 16 teste se a
nota digitada maior ou igual a seis. Em caso verdadeiro, escreve Aluno aprovado
(linha 17). Seno (linha 18), escreve Aluno reprovado (linha 19).
Na Listagem 5.2 temos outro exemplo do FOR. Veja que a varivel contador pode ter
qualquer nome (neste exemplo, numeroDaLinha) e inteira. O programa imprimir 8
vezes linha seguido do nmero do contador.
Na Listagem 5.2 a linha 11 determina o lao de repetio. As linhas 11 e 12 podem ser
lidas como: faa o numeroDaLinha variar entre 1 e 8 e para cada valor neste intervalo
imprima: linha: concatenado ao numeroDaLinha.
Neste caso, o FOR no usa o begin..end, pois ser executando apenas um comando por
vez (sintaxe 1).

69

70

Programao com Pascal

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

program ForSimples;
uses crt;
var
numeroDaLinha : integer;
begin
clrscr;
for numeroDaLinha := 1 to 8 do
writeln('linha: ', numeroDaLinha);
readkey;
end.
Listagem 5.2 For Simples

A descrio do algoritmo da Listagem 5.2 o seguinte:


1. Incio do Algoritmo ForSimples;
a. Para cada valor de numeroDaLinha entre 1 e 8 faa:
i. Imprimir: linha: concatenado com
numeroDaLinha.
2. Terminar Algoritmo ForSimples.

valor

de

O Fluxograma do ForSimples est na Figura 5.2. Os elementos em amarelo so


controlados automaticamente pelo FOR. So eles: atribuio inicial da varivel de
controle, teste da condio de controle e incremento da varivel contadora de iteraes
no lao.

Incio

numeroDaLinha = 1

numeroDaLinha <= 8

NO

Fim

SIM

Nota : i

numeroDaLinha =
numeroDaLinha + 1

Listagem 6.2 Fluxograma do ForSimples

O resultado da execuo do programa ForSimples o seguinte:


Edeyson Andrade Gomes

www.edeyson.com.br

ESTRUTURAS DE REPETIO

linha: 1
linha: 2
linha: 3
linha: 4
linha: 5
linha: 6
linha: 7
linha: 8

Para entender melhor tal resultado, deve-se seguir o Fluxo de Execuo para o FOR da
linha 11:
1. Inicie o numeroDaLinha com o valor 1.
2. Inicie o Lao (execuo do Comando).
a. Teste se o numeroDaLinha <= 8;
b. Se sim:
i. execute o comando: writeln('linha: ', numeroDaLinha);;
ii. incremente o numeroDaLinha; {Isso feito automaticamente
pelo FOR}
iii. Volte ao lao (passo 2.a).
c. Seno:
i. Pare.
O Passo a Passo de execuo da Listagem 5.2 o seguinte:

1: numeroDaLinha = 1
2.a: numeroDaLinha menor que 8?
2.b: sim
o 2.b.i escreva linha: 1
o 2.b.ii numeroDaLinha = 2
o 2.b.iii Voltar a 2.a
2.a: numeroDaLinha menor que 8?
2.b: sim
o 2.b.i escreva linha: 2
o 2.b.ii numeroDaLinha = 3
o 2.b.iii Voltar a 2.a
2.a: numeroDaLinha menor que 8?
2.b: sim
o 2.b.i escreva linha: 3
...

Uma dvida comum ao entendimento do fluxograma da Figura 5.1 o que significa


numeroDaLinha := numeroDaLinha + 1.
Em programao (assim como na matemtica) toda atribuio se inicia da direita para a
esquerda. Quando se escreve: x = 10 + 5, soma-se 10 com 5 e atribui-se o resultado a x.
Logo, x resultar em 15.

71

72

Programao com Pascal

E quando se escreve x = x + 5? Qual o resultado? O que isso significa : compute o


valor atual de x acrescido de 5 e atribua mesma varivel x. Logo, se x era 15, passar a
ser 20. Escrever x = x + y significa acumular o valor y ao de x. O novo valor de x ser
igual a seu valor antigo acrescido de y.
O FOR se vale disso para fazer o incremento da varivel de controle.
1
2
3
4

for i := 1 to 2 do
begin
writeln('valor de i: ', i);
end;
Listagem 5.3 uso do FOR

No trecho de cdigo da Listagem 5.3, o Bloco de Comandos (linhas 2, 3 e 4) vai ser


executado 2 vezes, com i assumindo os valores 1 e 2. Quando i for 3, o teste 2.a, do
fluxo de execuo do FOR, que testa se i <= 2, informa que o FOR acabou. Isso
explicado na Figura 5.3, onde a seta indica a linha sendo executada.

Edeyson Andrade Gomes

www.edeyson.com.br

ESTRUTURAS DE REPETIO

Listagem 6.3 Passo a passo do FOR.


Observaes:
1. Note que se a varivel usada como contador for alterada entre 2.a e 2.b.iii, o nmero de
repeties pode mudar.

Vejamos uma alterao intencional do contador com a mudana do fluxo de repeties:


1
2
3
4
5

for i := 3 to 10 do
begin
writeln('valor de i: ', i);
i := i + 5;
end;
Listagem 5.4 Exemplo de FOR

Note que o contador (no caso, a varivel i) pode iniciar em qualquer valor. Neste trecho
de cdigo da Listagem 5.4 (linha 1) ele inicia em 3. O que este trecho de cdigo far?
Veja que neste exemplo o contador i incrementado no bloco (linha 4) e tambm pelo
FOR (linha 1) automaticamente.

73

74

Programao com Pascal

Neste caso, o Bloco de comandos (linhas 3 e 4) vai ser executado 2 vezes, com i
assumindo os valores 3 e 9. Quando i for 15, o teste (i <= 10) informa que o FOR
acabou. Vamos seguir o Fluxo de Execuo na Figura 5.4.

Edeyson Andrade Gomes

www.edeyson.com.br

ESTRUTURAS DE REPETIO

O comando FOR apresentado at agora suporta o incremento automtico da varivel


denominada de contador, o que chamado de FOR Crescente. Existe, ainda, o FOR
Decrescente, que decrementa o contador
{Sintaxe 1:}
for contador := fim downto incio do
Comando;
{Sintaxe 2:}
for contador := fim downto incio do
begin
Bloco de Comandos;
end;

O raciocnio de uso o mesmo, a principal diferena a inverso do incio e fim e o


decremento do contador.

5.2 WHILE .. DO
O comando WHILE .. DO permite a repetio de um comando, ou bloco de comandos,
um nmero finito ou indeterminado de vezes. O nmero de repeties determinado
por uma condio de controle que deve ser testada antes da execuo do comando (ou
bloco de comandos).
{Sintaxe 1:}
while condio do
Comando;
{Sintaxe 2:}
while condio do
begin
Bloco de Comandos;
end;

75

76

Programao com Pascal

Note que o comando, ou bloco de comandos, s ser executado se a condio for


avaliada como verdadeira. Pode-se ler o comando como: ENQUANTO a condio for
verdadeira, FAA: executar comando (ou bloco de comandos).
A principal caracterstica do WHILE efetuar um teste lgico no incio de um loop
(lao), verificando se permitido executar o trecho de instrues abaixo dela. Desta
forma, poder executar um determinado conjunto de instrues enquanto a condio
verificada permanecer verdadeira. No momento em que a condio se torna falsa, o
processamento da rotina desviado para fora do lao.
Sendo a condio falsa logo no incio do lao, as instrues contidas nele so ignoradas.
Usando o comando WHILE .. DO, vamos elaborar um programa para imprimir todos os
nmeros entre 1 e 10. Para isto, a condio ser os nmeros serem maiores que 0 e
menores ou iguais a 10.
Usando o FOR, o programa seria como a Listagem 5.5
1
2
3
4

for i := 1 to 10 do
begin
writeln('valor de i: ', i);
end;
Listagem 5.5 Listagem de nmeros de 1 a 10

Note que o FOR controla implicitamente a condio, fazendo o i (controle) variar entre
1 e 10. Para fazer o mesmo com o WHILE, necessitamos de um cdigo similar. Vamos
iniciar uma varivel de controle com 1 e faz-la variar explicitamente de 1 em 1, at
chegar a 10. Por exemplo, vejamos a Listagem 5.6
1
2
3
4
5
6
7
8
9
10
11
12
13

program whileSimples;
uses crt;
var i : integer;
begin
i := 1;
while (i <= 10) do
begin
writeln('valor de i: ', i);
i := i + 1;
end;
readkey;
end.
Listagem 5.6 Listagem de nmeros de 1 a 10

A linha 6 inicia a varivel i com 1, pois desejam-se os nmeros entre 1 e 10. Logo, ela
tem de iniciar em 1.
Como o maior valor deve ser o 10, i ter de variar at 10. Isso deve ser garantido pela
condio do WHILE, o que feito na linha 7.

Edeyson Andrade Gomes

www.edeyson.com.br

ESTRUTURAS DE REPETIO

Tem-se, ento, um lao de repetio de 10 vezes. Porm, isso s verdade se i for


incrementado de 1 em 1, como feito na linha 10. Isso garante que i ser um valor do
conjunto {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}.
Se a linha 10 fosse i := i + 5, i passaria de 1 para 6, por exemplo, no atendendo o que
se deseja.
O cdigo da Listagem 5.6 pode ser lido assim: inicie i em 1, faa i variar de 1 em 1 at
10 e, enquanto i for menor que 10, imprima seu valor.
Tudo que est entre o begin (linha 5) e o end (linha 13), que compe um bloco de
comandos, ser repetido 10 vezes. Isso garantido se o programador incrementar o
valor de i de 1 em 1.
O fluxograma do programa da Listagem 5,6 apresentado na Figura 5.AA
Incio

i =1

i <= 10

NO

Fim

SIM

Valor de i:

i =i +1

Figura 5.AA While com Contador

Uma alterao interessante a este programa o seguinte: imprimir todos os nmero


pares entre 1 e 10. Apresentaremos duas solues possveis a este problema.
Na soluo 1, exibida na Listagem 5.7, vamos iniciar uma varivel de controle com 1 e
faz-la variar explicitamente de 1 em 1, at chegar a 10. Embora a soluo seja similar a
anterior, o bloco de comandos deve filtrar os elementos a exibir.

77

78

Programao com Pascal

1
2
3
4
5
6
7
8
9
10
11
12
13
14

program whilePares;
uses crt;
var i : integer;
begin
i := 1;
while (i <= 10) do
begin
if (i mod 2 = 0) then
writeln('valor de i: ', i);
i := i + 1;
end;
readkey;
end.
Listagem 5.7 Listagem de nmeros de 1 a 10

A principal alterao da Listagem 5.7 para a 5.6 est na adio da condicional na linha
9. Agora, um nmero s ser impresso se ele for par, ou seja, o resto da diviso de i por
2 zero (i mod 2 = 0), logo, i divisvel por 2.
O fluxograma desta soluo apresentado na Figura 5.BB
Incio

i =1

i <= 10

NO

Fim

SIM

i mod 2 = 0

SIM

Valor de i:

Lao do While

NO

i =i +1

Figura 5.BB Pares entre 1 e 10 com WHILE

Na soluo 2, exibida na Listagem 5.8, vamos usar um pouco de matemtica. Como se


desejam os nmeros pares entre 1 e 10, sabe-se que o primeiro nmero vlido 2. Logo,
pode-se iniciar a varivel de controle i com 2.
Edeyson Andrade Gomes

www.edeyson.com.br

ESTRUTURAS DE REPETIO

E, como se desejam apenas os pares, vamos variar explicitamente i de 2 em 2, at


chegar a 10. Assim, teremos {2, 4, 6, 8, 10}. Vejamos a soluo
1
2
3
4
5
6
7
8
9
10
11
12
13

program whilePares;
uses crt;
var i : integer;
begin
i := 2;
while (i <= 10) do
begin
writeln('valor de i: ', i);
i := i + 2;
end;
readkey;
end.

Listagem 5.8 Listagem de nmeros de 1 a 10

A principal alterao da Listagem 5.7 para a 5.6 est no incio da varivel i e em seu
incremento, agora de 2 em 2 (linha 10). Como i inicia em 2, teremos os valores {2, 4, 6,
8, 10}.
O fluxograma desta soluo apresentado na Figura 5.CC
Incio

i =2

i <= 10

NO

Fim

SIM

Valor de i:

Lao do While

i =i +2

Figura 5.CC

Os exemplos apresentados at agora usaram o WHILE com laos finitos, pois havia
uma condio de parada. Todavia, no seguinte problema, teremos um lao infinito
(indeterminado):

79

80

Programao com Pascal

Incio do Algoritmo WhileQuadrado


1. Solicitar ao usurio para digitar um nmero.
2. Enquanto o nmero digitado no for zero, faa:
a. imprimir o quadrado do nmero;
b. solicitar ao usurio para digitar um nmero.
Fim do Algoritmo WhileQuadrado
Quando o algoritmo WhileQuadrado chegar ao fim? Isso indeterminado, pois no se
sabe quando o usurio digitar o nmero 0.
O fluxograma deste algoritmo est na Figura 5.DD
Incio

i <> 0

NO

Fim

SIM

i*i

Lao do While
i

Figura 5.DD While

O cdigo deste algoritmo est na Listagem 5.9


1 program whileQuadrados;
2 uses crt;
3 var i : integer;
4
5 begin
6
writeln('Digite um valor. 0 para terminar.');
7
readln(i);
8
9
while (i <> 0) do
10
begin
11
writeln('O quadrado de : ', i, ' eh: ', i * i);
12
13
writeln(#10, #10, #13, 'Digite um valor. 0 para
terminar.');
14
readln(i);
15
end;
16
readkey;
17 end.

Listagem 5.9 While

Edeyson Andrade Gomes

www.edeyson.com.br

ESTRUTURAS DE REPETIO

No cdigo da Listagem 5.9, a linha 6 imprime uma mensagem e a 7 l um valor para i.


A linha 9 inicia um lao que se repetir enquanto i for diferente de 0 (i <> 0).
Se o usurio iniciar digitando 0, a condio da linha 9 faz com que o lao no seja
executado.
A linha 11 imprime o quadrado do nmero lido e a 13 solicita outro valor. Destaca-se o
uso de #10 (nova linha) e #13 (retorno de cursor) para criar duas linhas em branco e
posicionar o cursor na coluna da esquerda, na tela.
A linha 14 l um novo valor para i. Note que enquanto i for diferente de 0, o bloco de
comando entre as linhas 10 e 15 se repetir. Isso um lao infinito.

Desafios
1. Imprimir todos os mltiplos de 5 entre 1 e 100 usando WHILE e sem usar IF
ou Case.
2. Imprimir todos os mltiplos de 3 e 5 entre 1 e 100 usando WHILE e sem usar
IF ou Case.
3. Imprimir todos os mltiplos de 3 ou 5 entre 1 e 100 usando WHILE e sem usar
IF ou Case.

81

82

Programao com Pascal

5.3 REPEAT .. UNTIL


O comando REPEAT .. UNTIL permite a repetio de um comando, ou bloco de
comandos, um nmero finito ou indeterminado de vezes. O nmero de repeties
determinado por uma condio de controle que deve ser testada aps a execuo do
comando (ou bloco de comandos).
Note que sua principal diferena para o WHILE..DO est onde o teste ser feito. Como
o WHILE executa o teste da condio ANTES do comando, pode ser que este nunca
seja executado (no caso da condio ser falsa). O REPEAT testa a condio APS e
execuo do comando, o que significa que, ao menos, este ser executado uma vez.

{Sintaxe:}
repeat
Bloco de Comandos;
until (condio);

Note que o comando, ou bloco de comandos, ser executado at que a condio seja
avaliada como verdadeira, outra diferena para o WHILE, que executa at a condio
ser falsa.
Pode-se ler o comando como: REPITA a execuo do bloco de comandos AT QUE a
condio seja falsa.
A principal caracterstica do REPEAT..UNTIL efetuar um teste lgico ao final de um
loop (lao), verificando se permitido continuar a execuo do trecho de instrues.
Desta forma, poder executar um determinado conjunto de instrues enquanto a
condio verificada permanecer falsa. No momento em que a condio se torna
verdadeira, o processamento da rotina desviado para fora do lao.
Usando o comando REPEAT..UNTIL, vamos elaborar um programa para imprimir
todos os nmeros entre 1 e 10. Para isto, a condio ser os nmeros serem maiores que
0 e menores ou iguais a 10, tal qual com WHILE..DO.
O Fluxograma encontra-se na Figura 5.EE. Comparando-o com o mesmo fluxograma do
WHILE, Figura 5., nota-se que a nica diferena est onde o teste da condio feito.

Edeyson Andrade Gomes

www.edeyson.com.br

ESTRUTURAS DE REPETIO

Incio

i =1

Valor de i:

i
Lao do Repeat

i =i +1

i > 10

SIM

Fim

Figura 5.EE Repeat Until de 1 a 10

O cdigo est na Listagem 5.10.


1
2
3
4
5
6
7
8
9
10
11
12

program Repeat1a10;
uses crt;
var i : integer;
begin
i := 1;
repeat
writeln('valor de i: ', i);
i := i + 1;
until (i > 10);
readkey;
end.
Listagem 5.10 Listagem de nmeros de 1 a 10

A linha 6 inicia a varivel i com 1, pois desejam-se os nmeros entre 1 e 10. Logo, ela
tem de iniciar em 1.
Como o maior valor deve ser o 10, i ter de variar at 10. Isso deve ser garantido pela
condio do REPEAT, o que feito na linha 10, que pode ser lida: execute os comandos
AT QUE i seja maior que 10. Note que a condio diferente da do WHILE. Aqui,
informamos quando o lao deve terminar.
Tem-se, ento, um lao de repetio de 10 vezes. Porm, isso s verdade se i for
incrementado de 1 em 1, como feito na linha 9. Isso garante que i ser um valor do
conjunto {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}.

83

84

Programao com Pascal

O cdigo da Listagem 5.10 pode ser lido assim: inicie i em 1 e repita: imprima i e
incremente-o de 1 em 1 at que seja maior que 10.
Observaes:
1. O REPEAT..UNTIL j delimita por si s o bloco de comandos, tornando o uso de
BEGIN..END opcional.
2. Note que os comandos entre o REPEAT e o UNTIL compem o bloco de comandos e
sero repetidos.

Na Listagem 5.11 apresentaremos a converso do programa da Listagem 5.7 para o uso


de REPEAT..UNTIL.
Os passos para isto so os seguintes:
1. Onde se tem WHILE, substituir por REPEAT;
2. Eliminar, se houver, o begin do incio do bloco de comandos e substituir o
end pelo UNTIL; Lembrar que o REPEAT..UNTIL delimita um bloco de
comandos.
3. Negar a condio do WHILE e mov-la para a condio do UNTIL;
a. Neste caso, a negao de (i <= 10) (i > 10).
1
2
3
4
5
6
7
9
10
11
12
13
14

program repeatPares;
uses crt;
var i : integer;
begin
i := 1;
repeat
if (i mod 2 = 0) then
writeln('valor de i: ', i);
i := i + 1;
until (i > 10);
readkey;
end.
Listagem 5.11 Listagem de nmeros de 1 a 10

O fluxograma desta soluo apresentado na Figura 5.FF

Edeyson Andrade Gomes

www.edeyson.com.br

ESTRUTURAS DE REPETIO

Incio

i =1

i mod 2 = 0

SIM

Valor de i:
NO
Lao do Repeat

i =i +1

i > 10

SIM

Fim

Figura 5.FF

Desafios
4. Imprimir todos os mltiplos de 5 entre 1 e 100 usando REPEAT e sem usar IF
ou Case.
5. Imprimir todos os mltiplos de 3 e 5 entre 1 e 100 usando REPEAT e sem usar
IF ou Case.
6. Imprimir todos os mltiplos de 3 ou 5 entre 1 e 100 usando REPEAT e sem
usar IF ou Case.

85

86

Programao com Pascal

6. Arrays
Um Array, tambm chamado de vetor, quando unidimensional, ou matriz, quando
bidimensional, uma estrutura simples de dados.
Arrays mantm uma coleo de elementos, do mesmo tipo de dados. Elementos
individuais so acessados por sua posio no array, que determinada por um ndice.
{Sintaxe:}
nomeDoVetor : array [incio..fim] of tipoDeDados;

Em Pascal, define-se um array informando-se qual o valor de seu primeiro e ltimo


ndice (incio e fim, respectivamente). Por exemplo, analisemos o seguinte cdigo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

program TesteArray;
uses crt;
var
a : array[1..2] of integer;
i : integer;
begin
i := 10;
a[1] := -5; {Coloca -5 na posio 1 do vetor a}
a[2] := 2; {Coloca 2 na posio 2 do vetor a}
writeln('i: ', i);
writeln('a[1]: ', a[1]);
writeln('a[2]: ', a[2]);
readkey;
end.

Na linha 5 declara-se a varivel a como sendo um array de inteiros e na linha 6 declarase i como um inteiro.
O que diferencia i de a que i representa um nico inteiro, ou seja, um nico valor
inteiro. Pode-se atribuir um nico valor inteiro para i e acess-lo diretamente pelo nome
da varivel. Imagine que para cada varivel, o sistema reserva uma rea de memria
com seu nome. Referenciar o nome i significa para o sistema acessar seu contedo,
como representa a Figura XYZ.

Figura 6.XYZ

A varivel a, contudo, possui ndices 1 e 2 (especificado por [1..2], sendo incio = 1 e


fim = 2). Logo, a pode armazenar 2 valores distintos. A linha 10 atribui o valor -5
posio 1 do array a. A linha 11 atribui 2 sua segunda posio.
Edeyson Andrade Gomes

www.edeyson.com.br

ESTRUTURAS DE REPETIO

No se pode acessar a varivel a pelo nome, pois ela exige um ndice, como representa a
Figura ZZZ.

Figura 7

Imagine que, para cada vetor, o sistema reserva uma rea de memria com vrias
posies. Logo, apenas o nome (a, por exemplo) no serve para identificar qual posio
se quer acessar. Por isso necessita-se do ndice (a[1] e a[2]), que indica a posio correta
dentro da rea reservada.
O seguinte problema ilustra o uso de vetores: desejam-se ler 5 valores e, aps isso,
imprimir os pares separados dos mpares. Uma soluo est na Listagem 6.XX
1 program paresImparesSemArray;
2 uses crt;
3 var v1, v2, v3, v4, v5 : integer;
4
5 begin
6
writeln('Problema: ler 5 valores e, apos isso, imprimir os
pares separados dos mpares');
7
write('Digite o valor 1: ');
read(v1);
8
write('Digite o valor 2: ');
read(v2);
9
write('Digite o valor 3: ');
read(v3);
10
write('Digite o valor 4: ');
read(v4);
11
write('Digite o valor 5: ');
read(v5);
12
13
writeln(#10, #10, #13, 'Imprimindo os Valores Pares');
14
if (v1 mod 2 = 0) then writeln(v1);
15
if (v2 mod 2 = 0) then writeln(v2);
16
if (v3 mod 2 = 0) then writeln(v3);
17
if (v4 mod 2 = 0) then writeln(v4);
18
if (v5 mod 2 = 0) then writeln(v5);
19
20
writeln(#10, #10, #13, 'Imprimindo os Valores Impares');
21
if (v1 mod 2 = 1) then writeln(v1);
22
if (v2 mod 2 = 1) then writeln(v2);
23
if (v3 mod 2 = 1) then writeln(v3);
24
if (v4 mod 2 = 1) then writeln(v4);
25
if (v5 mod 2 = 1) then writeln(v5);
26
27
readkey;
28 end.

Para minimizar a rea da listagem, optou-se por usar comandos compostos numa mesma
linha, como o caso das linhas 7 a 10, onde a solicitao de um nmero e sua leitura

87

88

Programao com Pascal

esto numa mesma linha de cdigo. Tambm, os comandos IF, por no conterem blocos
de comando, fazem a escrita logo aps o THEN, numa mesma linha. Ressalta-se que
este no o modelo preferencial de escrita de cdigo, pois minimiza a legibilidade do
mesmo. Ele foi usado apenas para reduzir o espao da listagem.
Analisando o cdigo, a linha 3 declara 5 variveis inteiras necessrias ao programa. As
linhas de 7 a 10 fazem a leitura dos 5 nmeros inteiros, solicitando-os ao usurio. Em
seguida, linhas 13 a 18, apenas os nmeros pares so impressos. Aps isso, as linhas de
20 a 25 imprimem apenas os nmeros mpares.
Observaes:
1. O uso de #10 (nova linha) e de #13 (retorno do cursor) feito no WRITE(LN) para saltar
mltiplas linhas.
a. O comando writeln(#10, #10, #13, 'ABC') imprime 2 linhas em branco,

volta o cursos para a primeira coluna e depois imprime ABC.

Imagine a Listagem 6.XX caso o requisito fosse o de leitura de 30 nmeros. Seriam


necessrias mais 75 linhas de cdigo (25 para leitura, 25 para pares e 25 para mpares).
Uma soluo com vetores resolveria esse acrscimo de linha por todo o cdigo. A
Listagem 6.YY demonatra isso.
1 program paresImparesComArray;
2 uses crt;
3
4 const tamanhoVetor = 5;
5 var
v : array [1..tamanhoVetor] of integer;
6
i : integer;
7
8 begin
9
writeln('Problema: ler 5 valores e, apos isso, imprimir os
pares separados dos impares');
10
for i := 1 to tamanhoVetor do
11
begin
12
write('Digite o valor ', i, ' : ');
13
read(v[i]);
14
end;
15
16
writeln(#10, #10, #13, 'Imprimindo os Valores Pares');
17
for i := 1 to tamanhoVetor do
18
if (v[i] mod 2 = 0) then
19
writeln(v[i]);
20
21
writeln(#10, #10, #13, 'Imprimindo os Valores Impares');
22
for i := 1 to tamanhoVetor do
23
if (v[i] mod 2 = 1) then
24
writeln(v[i]);
25
26
readkey;
27 end.

Edeyson Andrade Gomes

www.edeyson.com.br

ESTRUTURAS DE REPETIO

Na Listagem 6.YY, a linha 4 declara uma constante tamanhoVetor com valor 5. A linha
5 declara v como um vetor com 5 posies inteiras (valor de tamanhoVetor). A linha 6
declara i como um inteiro, que ser o controlador do FOR.
As linhas 10-14 efetuam a leitura dos nmeros. Como so 5 nmeros, tem-se um lao
finito com 5 passos (linha 10: FOR com i variando entre 1 e 5). O bloco de comandos
deste lao composto pelas linhas 11-14, onde feita a solicitao de um valor e sua
leitura.
A linha 12 solicita um valor, identificando-o pelo controlador do FOR. O usurio sabe
que digitar o i-simo nmero da seqncia de 5.
A linha 13 efetua a leitura de um elemento do vetor, usando i como ndice.
As linhas 17 a 19 formam um novo lao com 5 passos. Em cada passo testa-se se um
dos elementos do vetor par (testa-se se v indexado por i e par: v[i] mod 2 = 0). Cada
elemento s impresso se a condio for verdadeira. As linhas de 22 a 24 fazem algo
similar, mas para mpares.
Note que o tamanho do cdigo da Listagem 6.YY no mudar mesmo que a quantidade
de nmeros a ler mude. Para isto, basta alterar a dimenso da constante tamanhoVetor.

89

90

Programao com Pascal

{Exerccios}
Algoritmo A4.1 (Fcil):
1. Declarar idade1 e idade2 como inteiro;
2. Declarar pessoa1 e pessoa2 como string;
3. Ler um valor para a varivel idade1 e outro para idade2;
4. Ler um valor para a pessoa1 e outro para a pessoa2;
5. Se (idade1 for maior que a idade2)
a. imprima: pessoa1, eh mais velha que , pessoa2
6. Se (idade2 for maior que a idade1)
a. imprima: pessoa2, eh mais velha que , pessoa1
7. Se (idade1 for igual a idade2)
a. imprima: pessoa1, e , pessoa2, tem a mesma idade

Algoritmo A4.2 (Fcil):


1. Declarar idade1 e idade2 como inteiro;
2. Declarar pessoa1 e pessoa2 como string;
3. Ler um valor para a varivel idade1 e outro para idade2;
4. Ler um valor para a pessoa1 e outro para a pessoa2;
5. Se (idade1 for maior que a idade2)
a. imprima: pessoa1 mais velha que pessoa2
6. Seno
a. Se (idade2 for maior que a idade1)
i. imprima: pessoa2 mais velha que pessoa1
b. Seno
i. imprima: pessoa1 e pessoa2 tem a mesma idade

Questes:
- Qual a diferena entre A4.1 e A4.2?
- Que linhas executam em A4.1 e no necessariamente executam em A4.2?
Justifique.

Edeyson Andrade Gomes

www.edeyson.com.br

ESTRUTURAS DE REPETIO

Algoritmo A4.1 (Mdio):


1. Declarar numeroDeLados como inteiro;
2. Declarar rea, lado1, lado2, lado3 e lado4 como real;
3. Declarar numeroDeAngulosIguais como inteiro;
4. Imprimir: Quantos lados tem a figura geomtrica: <3> ou <4>?
5. Ler um valor para a varivel numeroDeLados;
6. Imprimir: Quantos ngulos so iguais: <2>, <3> ou <4>?
7. Ler um valor para a varivel numeroDeAngulosIguais;
8. Ler rea, lado1, lado2, lado3 e lado4 como real;
9. Se numeroDeLados for diferente de 3 ou 4
a. Imprima: Numero de lados invlido.
10. Seno
a. Se numeroDeLados for igual a 3
i. Imprima: Triangulo
ii. Se todos os lados so iguais
1. Imprima: Isto eh um triangulo equilatero;
iii. Seno
1. Se dois lados forem iguais e numeroDeAngulosIguais for igual a 2
a. Imprima: Isto eh um triangulo isosceles;
2. Seno
a. Imprima: Isto eh um triangulo escaleno;
b. Seno
i. Imprima Retangulo ou Trapzio
ii. Se todos os lados so iguais e numeroDeAngulosIguais igual a 4
1. Imprima: Isto eh um quadrado;
2. Faa rea = lado1 * lado1;
3. Imprima a rea do quadrado.
iii. Seno,
1. Se os lados so iguais dois a dois e numeroDeAngulosIguais igual a 2
a. Imprima: Isto eh um retngulo;
b. Faa rea = lado1 (menor) * lado2 (maior);
c. Imprima: A area do retngulo , area.
2. Seno
a. Imprima: Isso um Trapezio.

91

92

Programao com Pascal

Apndice A Fluxogramas
Um Fluxograma um diagrama que representa o esquema de soluo de um problema.
Ele apresenta a linha de raciocnio lgico independente de linguagem de programao e
inteligvel por humanos e computadores.
Sua representao grfica feita por smbolos como:

Fluxogramas representam diversas estruturas de controle detalhadas a seguir.

Seqncia
Uma Seqncia representa a execuo de um conjunto de aes em srie. No
existe a possibilidade de alterao da ordem de processamento das aes. Por exemplo:
Entrada

Ao 1

Ao 2

Sada

Listagem 6 Fluxograma de Sequencia

Na Figura 2, apresenta-se uma sequncia onde as Aes 1 e 2 ocorrero sempre


e na mesma ordem.

Seleo com 1 Via


Uma Seleo com 1 Via representa uma tomada de deciso onde o fluxo de
processamento executa a Ao 1 apenas se o valor lgico da expresso avaliada no
incio da estrutura for verdade.
Por exemplo, na Figura 3 a Ao 1 s ser executada se o resultado da deciso
for verdadeiro. Em caso contrrio a Ao 1 no ser executada.

Edeyson Andrade Gomes

www.edeyson.com.br

Apndice A Fluxogramas

Entrada

Deciso
Verdade

Ao 1
Falso

Sada

Listagem 7 Seleo com 1 Via

Seleo com 2 Vias


Uma Seleo com 2 Vias representa uma tomada de deciso onde o fluxo de
processamento segue por 1 das 2 vias, dependendo do valor lgico da expresso
avaliada no incio da estrutura.
Por exemplo, na Figura 4 a Ao 1 s ser executada se o resultado da deciso
for verdadeiro. Em caso contrrio a Ao 2 ser executada. As aes 1 e 2 so
mutuamente exclusivas.
Entrada

Deciso
Verdade

Falso

Ao 1

Ao 2

Sada

Listagem 8 Seleo com 2 Vias

Seleo com N Vias


A Seleo com N Vias apresenta uma tomada de deciso onde o fluxo de
processamento segue por 1 das N vias, dependendo do valor lgico da expresso
avaliada no incio da estrutura.

93

94

Programao com Pascal

Por exemplo, na Figura 5, uma das aes ser executada em funo do valor da
Condio avaliada. As condies so mutuamente exclusivas.

Entrada

Avalia
Condio
Caso 1

Ao 1

Caso 2

Caso 3

Ao 2

Caso N

Ao 3

...

Ao N

Sada

Listagem 9 Seleo com N Vias

Repetio com Teste Antecipado

Usa-se a Repetio com Teste Antecipado quando h a necessidade de tomar


uma deciso com base no valor lgico de uma expresso. A mesma ao ser executada
repetidamente enquanto o resultado da expresso lgica se mantiver verdadeiro. O teste
da expresso lgica precede a ao. O teste funciona como uma condio de parada das
repeties.
No exemplo da Figura 6 a Ao 1 ser executada sempre que a Deciso retornar
um valor verdadeiro.
Entrada

Deciso
Verdade

Ao 1
Falso

Sada

Listagem 10 Repetio com Teste Antecipado

Edeyson Andrade Gomes

www.edeyson.com.br

Apndice A Fluxogramas

Repetio com Teste Postergado


A Repetio com Teste Postergado semelhante anterior, mudando apenas
quando efetuar o teste, que aps a Ao. A Figura 7 exemplifica isso.
Entrada

Ao

Verdade

Condio

Falso
Sada

Listagem 11 Repetio com Teste Postergado

Exemplos
Exemplo 1: Como calcular as razes de uma equao do primeiro grau?
Sabe-se que a forma da equao de 1 grau : y = ax + b
A descrio da soluo em linguagem natural pode ser:
1. Incio do Algoritmo Razes
a. Obter o coeficiente a
b. Se a igual a zero, informar que no h razes para a equao
e terminar o algoritmo.
c. Obter o coeficiente b
d. Calcular o valor de x quando y zero: x = -b / a
i. Fornecer como resultado o valor de x
e. Terminar o algoritmo.
2. Fim do Algoritmo Razes

O Fluxograma da soluo proposta apresentado na Figura 8.

95

96

Programao com Pascal

Incio

a=0

Ler a
NO

SIM
Obter b

x = -b/a
No h raiz
para a
equao
Exibe x

Fim

Listagem 12 Equao do 1 Grau

Exemplo 2: Determinar os tipos dos tringulos em funo da quantidade de lados.


Equiltero: possui todos os lados iguais.
Issceles: possui pelo menos dois lados iguais.
Escaleno: possui os trs lados diferentes.

A descrio da soluo em linguagem natural pode ser:


1. Incio do Algoritmo Tringulos
a. Obter os lados a, b e c
b. Se os trs lados so iguais, imprima que Equiltero.
c. Seno, se dois lados so iguais, imprima que Issceles.
d. Seno, imprima que Escaleno.
2. Fim do Algoritmo Tringulos
Uma descrio mais detalhada (prxima da programao) pode ser:
1. Incio do Algoritmo Tringulos
a. Obter os lados a, b e c
b. Se a = b e b = c, imprima que Equiltero.
c. Seno, se a = b ou b = c ou a = c, imprima que Issceles.
d. Seno, imprima que Escaleno.
2. Fim do Algoritmo Tringulos
O Fluxograma da soluo proposta apresentado na Figura 9.

Edeyson Andrade Gomes

www.edeyson.com.br

Apndice A Fluxogramas

Incio

a=beb=c

Tringulo
Equiltero

F
a, b, c
a=b
ou a = c
ou b = c

Tringulo
Issceles

Tringulo
Escaleno

Fim

Listagem 13 Tringulos quanto aos lados

97

98

Programao com Pascal

Apndice B Exerccios

Observaes:
1. Todas as questes trabalham com intervalos fechados. Logo, entre A e B corresponde a
[A, B].

1. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que resolve o


seguinte problema:
- Numa escola, decidiu-se fazer o censo de alunos. Criou-se uma base de dados
onde os registros so estruturados da seguinte forma:
Nome | Sexo
- O campo Nome informa o nome do aluno.
- O campo sexo, com valores F ou M, corresponde a Feminino ou Masculino,
respectivamente.
Seu algoritmo deve ler mltiplos registros e informar:
1. Total de meninos;
2. Total de meninas;
3. Total de alunos.
Incio de soluo:
Incio do Algoritmo
Iniciar as variveis TotalMeninos, TotalMeninas e TotalAlunos com zero.
Enquanto houver registros, faa:
Leia Registro
Se sexo = M ento adicione 1 a TotalMeninos
Seno, adicione 1 a TotalMeninas
TotalAlunos = TotalMeninos + TotalMeninas
Imprima TotalMeninos, TotalMeninas, TotalAlunos
Fim do Algoritmo

2. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que resolve o


seguinte problema:
- Numa escola, decidiu-se fazer o censo de alunos com Miopia. Criou-se uma
base de dados onde os registros so estruturados da seguinte forma:
Nome | Sexo | Miopia
- O campo Nome informa o nome do aluno.
- O campo sexo, com valores F ou M, corresponde a Feminino ou Masculino,
respectivamente.

Edeyson Andrade Gomes

www.edeyson.com.br

Apndice B Exerccios

- O campo Miopia indica o grau da disfuno. Grau zero indica no haver o


problema.
Seu algoritmo deve ler todos os registros da base de dados e informar:
1. Total de meninos;
2. Total de meninos com miopia;
3. Mdia de miopia entre os meninos;
4. Total de meninas;
5. Total de meninas com miopia;
6. Mdia de miopia entre as meninas;
7. Mdia geral de miopia.

3. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que resolve o


seguinte problema:
- Numa escola, decidiu-se fazer o censo de alunos com Miopia e Hipermetropia.
Criou-se uma base de dados onde os registros so estruturados da seguinte
forma:
Nome | Sexo | Miopia | Hipermetropia
- O campo Nome informa o nome do aluno.
- O campo sexo, com valores F ou M, corresponde a Feminino ou Masculino,
respectivamente.
- Os campos Miopia e Hipermetropia indicam o grau da disfuno. Grau zero
indica no haver o problema.
Seu algoritmo deve ler todos os registros da base de dados e informar:
1. Total de meninos;
2. Total de meninos com miopia;
3. Total de meninos com hipermetropia;
4. Mdia de miopia entre meninos;
5. Mdia de hipermetropia entre meninos;
6. Total de meninas;
7. Total de meninas com miopia;
8. Total de meninas com hipermetropia;
9. Mdia de miopia entre meninas;
10. Mdia de hipermetropia entre meninas.
11. Mdia geral de miopia.
12. Mdia geral de hipermetropia.

4. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que imprime


todos os mltiplos de N entre A e B. Note que N, A e B devem ser fornecidos pelo
usurio.
5. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que imprime o
Mximo Divisor Comum de dois nmeros A e B, fornecidos pelo usurio.
Dica por http://www.somatematica.com.br/fundam/mdc.php:

99

100

Programao com Pascal

Dois nmeros naturais sempre tm divisores comuns.


Por exemplo: os divisores comuns de 12 e 18 so 1, 2, 3 e 6. Dentre eles, 6 o maior.
Ento chamamos o 6 de mximo divisor comum de 12 e 18 e indicamos m.d.c.(12,18)
= 6.
Alguns exemplos:
mdc (6,12) = 6
mdc (12,20) = 4
mdc (20,24) = 4
mdc (12,20,24) = 4
mdc (6,12,15) = 3
CLCULO DO M.D.C. PELO PROCESSO DAS DIVISES SUCESSIVAS
Nesse processo efetuamos vrias divises at chegar a uma diviso exata. O divisor
desta diviso o m.d.c. Acompanhe o clculo do m.d.c.(48,30).
Regra prtica:
1) dividimos o nmero maior pelo nmero menor;
48 / 30 = 1 (com resto 18)
2) dividimos o divisor 30, que divisor da diviso anterior, por 18, que o resto da
diviso anterior, e assim sucessivamente;
30 / 18 = 1 (com resto 12)
18 / 12 = 1 (com resto 6)
12 / 6 = 2 (com resto zero - diviso exata)
3) O divisor da diviso exata 6. Ento m.d.c.(48,30) = 6.

6. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que imprime o


Mnimo Mltiplo Comum de dois nmeros A e B, fornecidos pelo usurio.
Sugestes:
Incio do Algoritmo
Leia A e B
Enquanto mltiplo de A menor que AxB faa
Se mltiplo de A for divisvel por B ento
Imprima: MMC mltiplo de A
Calcule prximo mltiplo de A
Fim do Algoritmo
Incio do Algoritmo
Leia A e B
Mltiplo = A
Enquanto Mltiplo menor ou igual a AxB faa
Se Mltiplo divisvel por B ento
Imprima: MMC Mltiplo
Termine Algoritmo
Mltiplo = Mltiplo + A
Fim do Algoritmo

Dica:
Edeyson Andrade Gomes

www.edeyson.com.br

Apndice B Exerccios

Dados dois nmeros A e B, encontre os mltiplos de A.


Para cada mltiplo de A, teste se ele divisvel por B.
Se sim, ele o MMC.
O ideal achar os mltiplos do maior nmero entre A e B e testar com o
menor.
Dica em http://www.somatematica.com.br/fundam/mmc.php:
7. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que l os lados de
um retngulo, calcula e imprime sua rea.
8. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que l o raio de
um crculo, calcula e imprime sua rea.
9. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que:
a. L o nmero de lados de um polgono regular. Se o nmero de lados
diferente de 3, 4 ou 6, termine o algoritmo.
b. L o tamanho do lado.
c. Calcula e imprime a rea do polgono e seu nome (tringulo, quadrado ou
hexgono).
Dica: http://www.mundoeducacao.com.br/matematica/area-hexagono-regular.htm
Incio do Algoritmo
Leia o nmero de lados do polgono.
Se o nmero de lados lido for diferente de 3, 4 ou 6, termine o algoritmo.
Seno, Leia o tamanho do lado.
Se nmero de lados igual a 3, ento rea = (frmula a ser lida). Imprima rea
calculada e tringulo.
Seno,
Se nmero de lados igual a 4, ento rea = lado 2. Imprima rea
calculada e quadrado.
Seno, rea = (frmula a ser lida). Imprima rea calculada e
hexgono.
Fim do Algoritmo

10. Usando Linguagem Natural e Fluxograma, descreva um algoritmo que leia um


conjunto de nmeros naturais e determine qual o menor e o maior. A leitura do conjunto
deve ser feita at que um nmero negativo seja encontrado.
11. Usando Linguagem Natural e Fluxograma, descreva um algoritmo que leia um
nmero inteiro que representa uma quantidade de segundos, e determine quantas horas,
minutos e segundos esto contidos neste nmero.
Por exemplo: 3600 segundos correspondem a 1 hora : 00 minutos : 00 segundos
12. Usando Linguagem Natural e Fluxograma, descreva um algoritmo que leia o sexo
de uma pessoa (H ou M) e sua altura e a partir dele calcule seu peso ideal:
a) Para homens (H): (72.7 * altura) - 58
b) Para mulheres (M): (62.1 * altura) 44.

101

102

Programao com Pascal

13. Usando Linguagem Natural e Fluxograma, descreva um algoritmo que leia os


valores de X e Y e calcule XY usando apenas a operao de multiplicao.
14. Usando Linguagem Natural e Fluxograma, descreva um algoritmo que leia os
valores de X e Y e calcule X * Y usando apenas a operao de soma.
Incio do Algoritmo
Leia X e Y
Resultado = 0
Faa Y vezes
Resultado = Resultado + X
Imprima Resultado
Fim do Algoritmo

15. O fatorial de um nmero natural n, representado por n!, o produto de todos os


inteiros positivos menores ou iguais a n. Usando Linguagem Natural e Fluxograma,
descreva um algoritmo leia n e imprima seu fatorial.
16. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que imprime
todos os nmeros primos entre A e B. Note que A e B devem ser fornecidos pelo
usurio.
17. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que imprime
todos os divisores de N entre A e B. Note que N, A e B devem ser fornecidos pelo
usurio. Se A for menor que 1 ou se A for maior que B ou se B for maior que N,
termine o algoritmo.
18. Usando Linguagem Natural e Fluxograma, descreva um algoritmo que leia os
valores de X e Y e calcule X / Y usando apenas a operao de subtrao.
19. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que imprime
todos os mltiplos de N entre A e B. Note que N, A e B devem ser fornecidos pelo
usurio.
20. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que usando
variveis que armazenam apenas 1 dgito [0..9] escreve todos os nmero entre 0 e 999.
Dica: sero necessrias 3 variveis.
21. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que leia algo do
teclado. Enquanto o que for lido for diferente de espao em branco, imprima o que foi
lido.
22. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que imprima o
nmero 20 vinte vezes, o nmero 19 dezenove vezes, o nmero 18 dezoito vezes, e
assim sucessivamente, at o nmero 1 uma vez.
23. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que leia um
nmero N e imprima o nmero N ene vezes, o nmero (N-1) ene menos uma vezes, e
assim sucessivamente, at o nmero 1 uma vez.

Edeyson Andrade Gomes

www.edeyson.com.br

Apndice B Exerccios

Por exemplo: Se N for 3 deve imprimir: 3 3 3 2 2 1


24. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que leia um
nmero N e um nmero F e imprima o nmero N ene vezes, o nmero (N-1) ene menos
uma vezes, e assim sucessivamente, at o nmero F efe vezes. Se F for maior que N,
encerre o algoritmo
Por exemplo: Se N for 5 e F for 3 deve imprimir: 5 5 5 5 5 4 4 4 4 3 3 3
Sugesto:
Incio do Algoritmo
Leia N, F
Enquanto N >= F faa
Cont = N
Faa Cont Vezes
Imprima N
N=N-1
Fim do Algoritmo

25. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que leia dois
nmeros, A e B e determine o valor da menor e da maior razo entre eles. Ou seja,
determine se A/B maior que B/A e imprima-os.
26. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que leia H
(altura) e g (gravidade) e determine a velocidade de um corpo a cada metro percorrido
aps ser largado de uma altura H.
Dica: H = gt2/2, onde t o tempo. Logo, t = 2H/g (raiz quadrada)
V = V0 + at2/2, onde a a acelerao. Neste caso, a = g.
27. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que leia g
(gravidade) e t (tempo) e determine a altura H percorrida por um corpo em queda.
Dica: H = gt2/2, onde t o tempo. Logo, t = 2H/g (raiz quadrada)
V = V0 + at2/2, onde a a acelerao. Neste caso, a = g.
28. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que leia H
(altura) e g (gravidade) e determine o tempo de queda de um corpo aps ser largado de
uma altura H.
Dica: H = gt2/2, onde t o tempo. Logo, t = 2H/g (raiz quadrada)
V = V0 + at2/2, onde a a acelerao. Neste caso, a = g.
29. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que leia V
(velocidade final), a (acelerao) e t (tempo) e determine a velocidade inicial de um
corpo em movimento.
Dica: V = V0 + at2/2, onde a a acelerao. Neste caso, a = g.
30. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que leia um
valor N. Se N for maior ou igual a zero, imprimir N e ler outro valor. Se N for menor
que zero, termine o algoritmo.

103

104

Programao com Pascal

31. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que leia dois
nmeros A e B, sendo B maior que A, e imprima todos os divisores de todos os
nmeros entre A e B.
32. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que resolve o
seguinte problema:
- Numa empresa, decidiu-se fazer o levantamento de consumo de telefone.
Criou-se uma base de dados onde os registros so estruturados da seguinte
forma:
Ramal | Numero Discado | Tempo Ligao
Seu algoritmo deve ler todos os registros da base de dados e informar quais os 5
ramais com maior tempo total de ligao. Existem, na empresa, 10 ramais.
33. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que resolve o
seguinte problema:
- Uma empresa area decidiu imprimir uma relao de funcionrios nordestinos.
Sabe-se que ela possui uma base de dados onde os registros so estruturados da
seguinte forma:
Nome | DataNascimento | CidadeNascimento |UF
Seu algoritmo deve ler todos os registros da base de dados e gerar tal relao.
UF possui valores como BA, SE, PB, etc.

34. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que leia um


valor N e imprima todos os nmero pares entre 1 e N.
35. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que leia um
nmero inteiro de at 4 dgitos N e imprima todos os seus dgitos.
Dica: 13 DIV 10 resulta em 1
13 MOD 10 resulta em 3
36. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que imprime
todos os nmeros de Armstrong entre 1 e 1000. Um nmero N dito de Armstrong se a
soma dos cubos de seus dgitos igual a N.
37. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que imprime
todos os nmeros simtricos entre 1 e 10000. Um nmero N dito simtrico se ele
lido igualmente da direita para a esquerda e da esquerda para a direita: Exemplo: 232,
1221, etc.
38. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que imprime
todos os nmeros simtricos e pares entre 1 e 10000.
39. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que imprime
todos os nmeros simtricos e primos entre 1 e 10000.

Edeyson Andrade Gomes

www.edeyson.com.br

Apndice B Exerccios

40. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que imprime


todos os nmeros simtricos entre 1 e 10000 e tambm todos os seus divisores.
41. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que determina
todas as possveis combinaes de nmeros consecutivos para os nmeros entre 1 e 100.
Para isto, tem-se que pegar um nmero N e descobrir somas de nmeros consecutivos
que resultem neste nmero N.
Por exemplo: se o nmero N 15, o nmero de combinaes consecutivas ser:
1 2 3 4 5, pois 1 + 2 + 3 + 4 + 5 = 15
4 5 6, pois 4 + 5 + 6 = 15
7 8, pois 7 + 8 = 15
42. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que determina os
8 primeiros nmeros naturais curiosos. Para isso, dado um nmero N, deve-se encontrar
seu nmero de dgitos (nd). Eleve N ao quadrado e pegue os nd dgitos da direita. Se o
nmero original N igual ao nmero formado pelos nd dgitos da direita de N2, N um
nmero curioso.
Por exemplo: 25 um nmero curioso. Note que nd = 2 (dois dgits em 25). 252= 625.
Os dois dgitos da direita so 25.
43. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que dado um
nmero real escreva-o por extenso e em Real (moeda).
Por exemplo: dado 1.325,17 escreva: Mil, trezentos e vinte e cinco reais e dezessete
centavos.

105

106

Programao com Pascal

Apndice C Exemplos de Cdigo

C1 - Tipos, Variveis e Constantes


C.1.1 - Este programa demonstra o uso de variveis e constantes no Pascal. Seu objetivo
determinar um valor para o Raio de um crculo e Calcular sua rea = r2.
Como uma constante matemtica, ela foi definida na linha 12.
rea e Raio so variveis, pois crculos diferentes tm valores diferentes.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

program VariaveisConstantes;
{Este programa demonstra o uso de variveis e constantes no Pascal.
Seu objetivo determinar um valor para o Raio de um crculo e
Calcular sua rea.}
uses crt;
var
{Declara area e raio como variveis REAIS}
area, raio : real;
const
{Declara pi como uma constante}
pi = 3.1415926536;
begin
{Atribuies de valores s varives}
{Determina o raio do crculo explicitamente.}
raio := 10;
{Calcula a rea do crculo = pi * raio ao quadrado}
area := pi * raio * raio;
writeln('A area do circulo de raio ', raio:3:2, ' eh: ', area:3:4);
readkey;
end.

Edeyson Andrade Gomes

www.edeyson.com.br

Apndice C Exemplos de Cdigo

C.1.2 - Este programa vai demonstrar os tipos de variveis do Pascal, como lhes atribuir
valores e imprimi-las. Para isto so definidas variveis inteiras, reais, lgicas, caracter e
texto.
1 program TiposDeVariaveis;
2 {Este programa vai demonstrar os tipos de variveis do Pascal,
3 como lhes atribuir valores e imprimi-las.}
4
5 uses crt;
6
7 {Tudo que vem aps VAR varivel
8 sintaxe:
9
nomeDaVarivel : tipo;
10 }
11 var
12
{Declara ai, bi e ci como variveis INTEIRAS}
13
ai, bi, ci : integer;
14
{Declara ar e br como varveis REAIS}
15
ar, br : real;
16
{Variveis lgicas - podem ser TRUE ou FALSE}
17
al, bl : boolean;
18
{Declara bs como String - uma cadeia de caracteres}
19
bs : string;
20
{O uso de [] na declarao de string delimita o nmero de
caracteres.
21
Neste caso, a varivel nome pode ter 10 caracteres no mximo.}
22
nome : string[10];
23
{Char representa um nico caracter}
24
caracter : char;
25
26 const
27
pi = 3.1415926536;
28
29 begin
30
{Atribuies de valores s variveis}
31
ai := 10;
32
bi := ai * 2;
33
ci := 2 * 23;
34
35
caracter := 'A';
36
writeln('A letra eh: ', caracter);
37
caracter := 'B';
38
writeln('A letra eh: ', caracter);
39
{Atribui a letra pelo valor da Tabela AscII}
40
caracter := #69;
41
writeln('A letra eh: ', caracter);
42
43
{Teste se 2 maior que 1 e atribui o resultado para al}
44
al := 2 > 1;
45
writeln('AL: ', al);
46
47
bs := ' Isto eh uma string longa. Pode ser uma frase.';
48
nome := 'Edeyson';
49
writeln(nome, bs);
50
51
readkey;
52 end.

107

108

Programao com Pascal

C.1.3 - Segunda lei de movimento de Newton ou Princpio da Proporcionalidade ou Lei


de Fora: Um ponto material sujeito ao de uma fora F adquire acelerao a, de
mesma direo e sentido que a fora e mdulo |a| proporcional intensidade de F; o
coeficiente de proporcionalidade um escalar essencialmente positivo que 'mede' a
inrcia do ponto - sua massa. Assim, calcula-se Fora = massa * acelerao.
1 program InteirosEmPascal;
2 {Este programa vai demonstrar o uso de Inteiros em Pascal
3
calculando a Fora que incide num ponto material de massa e
acelerao conhecidas.}
4
5 uses crt;
6
7 var
8
forca, massa, aceleracao : integer;
9
10 begin
11
writeln('Qual a massa do ponto material?');
12
readln(massa);
13
14
writeln('Qual a aceleracao do ponto material?');
15
readln(aceleracao);
16
17
forca:= massa * aceleracao;
18
writeln('A Forca aplicada ao ponto material eh: ', forca);
19
readkey;
20 end.

C.1.4 - Segunda lei de movimento de Newton ou Princpio da Proporcionalidade ou Lei


de Fora: Clculo da Massa.
1 program ReaisEmPascal;
2 {Este programa vai demonstrar o uso do tipo Real em Pascal calculando a
massa de um ponto material conhecendo-se a fora nele aplicada e sua
acelerao.}
4
5 uses crt;
6
7 var
8
forca, massa, aceleracao : real;
9
10 begin
11
writeln('Qual a forca do ponto material?');
12
readln(forca);
13
14
writeln('Qual a aceleracao do ponto material?');
15
readln(aceleracao);
16
17
massa := forca / aceleracao;
18
writeln('A massa eh: ', massa:3:2);
19
readkey;
20 end.

Edeyson Andrade Gomes

www.edeyson.com.br

Apndice C Exemplos de Cdigo

C.1.5 Uso de String e Char em Pascal.


1 program StringChar;
2 uses crt;
3 var
4
endereco, nome : string; {endereo e nome so cadeias com 0 a 255
caracteres.}
5
CPF : string[11];
{O uso de [] delimita o nmero de caracteres.
Neste caso CPF tem 11 caracteres.}
6
sexo : char;
{char representa um nico caracter. Neste caso
sexo pode ser 'M' ou 'F'}
7
8 begin
9
{Atribuies de valores s varives}
10
endereco := 'Rua dos Alferes, 1234, Ap. 1001, Barra, Salvador, Bahia
- CEP: 40.130.280';
11
nome:= 'Jose da Silva Santos';
12
CPF := '12345678901';
13
sexo := 'M';
14
15
writeln('Endereco: ', endereco);
16
writeln('Cliente: ', nome);
17
writeln('CPF: ', cpf);
18
writeln('Sexo: ', sexo);
19
readkey;
20 end.

C.1.6 Uso de String e Char em Pascal.


1 program StringsEmPascal;
2 {Este programa vai demonstrar o uso de String em Pascal.}
3
4 uses crt;
5
6 var
7
endereco : string; {endereo uma cadeia com 0 a 255 caracteres.}
8
nome : string[30];
9
CPF : string[11];
{O uso de [] delimita o nmero de caracteres.
Neste caso CPF tem 11 caracteres.}
10
11 begin
12
endereco := 'Rua dos Alferes, 1234, Ap. 1001, Barra, Salvador, Bahia
- CEP: 40.130.280';
13
nome:= 'Jose da Silva Santos';
14
CPF := '12345678901';
15
writeln('Endereco: ', endereco, ' Cliente: ', nome, ' CPF: ', cpf);
16
readkey;
17 end.

109

110

Programao com Pascal

C.1.7 Uso de Boolean em Pascal.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

program BooleanEmPascal;
{Este programa vai demonstrar o tipo boolean do Pascal}
uses crt;
var
aprovado : boolean; {Variveis lgicas - podem ser TRUE ou FALSE}
maior, menor, igual : boolean;
begin
{Atribuies de valores s varives}
{Atribui TRUE a aprovado}
aprovado := true;
{Atribui o resultado do teste: 2 > 1? a maior}
maior := 2 > 1;
{Atribui o resultado do teste: 2 > 1? a igual}
igual := 2 = 1;
{Atribui o resultado do teste: 2 > 1? a menor}
menor := 2 < 1;
writeln('Aprovado: ', aprovado);
writeln('2 > 1? eh: ', maior);
writeln('2 = 1 eh: ', menor);
writeln('2 = 1 eh: ', igual);
readkey;
end.

C.1.8 Uso de Char em Pascal.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

program CharEmPascal;
{Este programa vai demonstrar o tipo chardo Pascal}
uses crt;
var
letraAMinuscula, letraAMaiuscula : char;
letraBMinuscula, letraBMaiuscula : char;
{char representa um nico caracter.}
sexo : char;
begin
{Atribuies de valores s varives}
sexo := 'M';
letraAMinuscula := 'a';
letraAMaiuscula := #65;
letraBMinuscula := #98;
letraBMaiuscula := 'B';
writeln('Sexo: ', sexo);
writeln('Letras Maiusculas: ', letraAMaiuscula, letraBMaiuscula);
writeln('Letras Minusculas: ', letraAMinuscula, letraBMinuscula);
readkey;
end.

Edeyson Andrade Gomes

www.edeyson.com.br

Apndice C Exemplos de Cdigo

C2 - Operadores
C.2.1 - Este programa demonstra o uso de operadores de concatenao de Strings.
1 program ConcatenacaoDeStrings;
2 {Este programa vai demonstrar a Concatenao de
3 uses crt;
4 var
5
nome
: string[20];
6
sobrenome
: string[20];
7
nomeCompleto : string[40];
8
9 begin
10
nome := 'Edeyson';
nome}
11
sobrenome:= 'Gomes';
sobrenome}
12
nomeCompleto := nome + ' ' + sobrenome;
sobrenome}
13
writeln('Nome Completo: ', nomeCompleto);
14
15
readkey;
16 end.

Strings em Pascal.}
{Definio de variveis}

{Atribui Edeyson aa var.


{Atribui Gomes aa var.
{Concatena nome e
{Exibe o nome completo}

C.2.2 - Este programa demonstra o uso de operadores lgicos.


1 program OperadoresLogicos;
2 {Este programa vai demonstrar Operadores Lgicos do Pascal}
3 uses crt;
4 var
5
valorLogico : boolean; {Variveis lgicas - podem ser TRUE ou FALSE}
6
x, inicio, fim : integer;
7
8 begin
9
{Atribuies de valores s varives}
10
inicio := 0;
11
fim := 10;
12
x := 5;
13
14
valorLogico := (x > inicio) and (x > fim);
15
writeln('Teste se ', x, ' eh > que ', inicio , ' E ', x, ' eh > que
', fim, ' : ', valorLogico);
16
17
valorLogico := (x > inicio) and (x < fim);
18
writeln('Teste se ', x, ' eh > que ', inicio , ' E ', x, ' eh < que
', fim, ' : ', valorLogico);
19
20
valorLogico := (x > inicio) or (x > fim);
21
writeln('Teste se ', x, ' eh > que ', inicio , ' OU ', x, ' eh >
que ', fim, ' : ', valorLogico);
22
23
valorLogico := ((x >= 1) and (x <= 5)) AND ((x >= 4) and (x <= 6));
24
writeln('Teste se ', x, ' esta entre 1 e 5 e se ', x, ' esta entre
4 e 6 simultaneamente : ', valorLogico);
25
26
readkey;
27 end.

111

112

Programao com Pascal

C.2.3 - Este programa demonstra o uso de operadores relacionais com Strings.


1 program OperadoresRelacionaisComString;
2 {Este programa vai demonstrar Operadores Relacionais do Pascal}
3 uses crt;
4 var
5
valorLogico : boolean; {Variveis lgicas - podem ser TRUE ou
FALSE}
6
string1, string2 : string;
7
8 begin
9
{Atribuies de valores s varives}
10
string1 := 'abc';
11
string2 := 'def';
12
13
valorLogico := string1 = string2;
14
writeln('Teste se ', string1, ' eh = a ', string2, ' : ',
valorLogico);
15
16
valorLogico := string1 > string2;
17
writeln('Teste se ', string1, ' eh > que ', string2, ' : ',
valorLogico);
18
19
valorLogico := string1 < string2;
20
writeln('Teste se ', string1, ' eh < que ', string2, ' : ',
valorLogico);
21
22
readkey;
23 end.

C.2.4 - Este programa demonstra o uso de operadores relacionais com Inteiros.


1 program OperadoresRelacionaisComInteger;
2 {Este programa vai demonstrar Operadores Relacionais do Pascal}
3 uses crt;
4 var
5
{Variveis lgicas - podem ser TRUE ou FALSE}
6
valorLogico : boolean;
7
inteiro1, inteiro2 : integer;
8
9 begin
10
{Atribuies de valores s varives}
11
inteiro1 := 10;
12
inteiro2 := 20;
13
14
valorLogico := inteiro1 = inteiro2;
15
writeln('Teste se ', inteiro1, ' eh = a ', inteiro2, ' : ',
valorLogico);
16
17
valorLogico := inteiro1 < inteiro2;
18
writeln('Teste se ', inteiro1, ' eh < que ', inteiro2, ' : ',
valorLogico);
19
20
valorLogico := inteiro1 > inteiro2;
21
writeln('Teste se ', inteiro1, ' eh > que ', inteiro2, ' : ',
valorLogico);
22
23
readkey;
24 end.

Edeyson Andrade Gomes

www.edeyson.com.br

Apndice C Exemplos de Cdigo

C.2.5 - Este programa demonstra o uso de operadores relacionais com Reais.


1 program OperadoresRelacionaisComReal;
2 {Este programa vai demonstrar Operadores Relacionais do Pascal}
3 uses crt;
4 var
5
valorLogico : boolean; {Variveis lgicas - podem ser TRUE ou FALSE}
6
real1, real2 : real;
7
8 begin
9
{Atribuies de valores s varives}
10
real1 := 8/6;
11
real2 := 4/3;
12
13
valorLogico := real1 > real2;
14
writeln('Teste se ', real1:3:4, ' eh > que ', real2:3:4, ' : ',
valorLogico);
15
16
valorLogico := real1 = real2;
17
writeln('Teste se ', real1:3:4, ' eh = a ', real2:3:4, ' : ',
valorLogico);
18
19
valorLogico := real1 < real2;
20
writeln('Teste se ', real1:3:4, ' eh < que ', real2:3:4, ' : ',
valorLogico);
21
22
readkey;
23 end.

113

114

Programao com Pascal

C.2.6 - Este programa demonstra o uso de operadores lgicos e Tabela Verdade.


No programa so definidas duas proposies simples: p e q. Atribuem-se valores
lgicos a p e q nas linhas 7, 12, 17 e 22. As outras linhas imprimem os resultados da
conjuno e disjuno entre p e q. Vale lembrara que TRUE Verdade e FALSE
Falso.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

program TabelaVerdade;
uses crt;
var
p, q : boolean;
begin
p := true; q:= true;
writeln('p:', p, ' e q:', q, ' = ', p and q);
writeln('p:', p, ' ou q:', q, ' = ', p or q);
writeln;
p := true; q:= false;
writeln('p:', p, ' e q:', q, ' = ', p and q);
writeln('p:', p, ' ou q:', q, ' = ', p or q);
writeln;
p := false; q:= true;
writeln('p:', p, ' e q:', q, ' = ', p and q);
writeln('p:', p, ' ou q:', q, ' = ', p or q);
writeln;
p := false; q:= false;
writeln('p:', p, ' e q:', q, ' = ', p and q);
writeln('p:', p, ' ou q:', q, ' = ', p or q);
readkey;
end.

Edeyson Andrade Gomes

www.edeyson.com.br

Apndice C Exemplos de Cdigo

C3 - Condicionais
C.3.1 - Este programa visa ler uma nota (varivel real) e test-la. Se a nota estiver no
intervalo [0, 3) deve imprimir Sem Rendimento. Seno, se estiver no intervalo [3, 6)
deve imprimir Medio. Seno, deve imprimir Superior.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

program Condicioal01;
uses crt;
var
nota : real;
begin
writeln('Digite uma nota');
readln(nota);
if (nota >= 0) and (nota < 3) then
writeln('Sem Rendimento')
else
if (nota >= 3) and (nota <= 6) then
writeln('Medio')
else
writeln ('Superior');
readkey;
end.

C.3.2 - Este programa deve ler uma varivel inteira e determinar se a mesma par ou
mpar. Uma varivel valor par quando divisvel por 2, ou seja, se (valor mod 2 = 0).
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

program Paridade;
uses crt;
var
valor : integer;
begin
writeln('Digite o valor: ');
readln(valor);
if (valor mod 2 = 0) then
writeln(valor, ' eh PAR')
else
writeln(valor, ' eh IMPAR');
readkey;
end.

C.3.3 - Este programa deve:


1. Solicitar que o usurio digite o sexo da pessoa.
2. Ler o sexo da pessoa.
3. Solicitar a altura da pessoa em centmetros.
4. Ler a altura da pessoa.
5. Calcular o peso ideal da pessoa.
a) Para homens (H): (72.7 * altura) - 58

115

116

Programao com Pascal

b) Para mulheres (M): (62.1 * altura) 44.

8 program pesoIdeal;
9
10 {importao da biblioteca CRT}
11 uses crt;
12
13 var
14
{criao da varivel sexo do tipo caracter - ou F ou M}
15
sexo : char;
16
17
{criao da varivel altura (em cm) do tipo inteiro}
18
altura : integer;
19
20
{criao da varivel peso do tipo real (ponto flutuante)}
21
peso : real;
22
23 begin
24
{limpa a tela}
25
clrscr;
26
27
{escreve no prompt de comando}
28
writeln('Escolha o sexo: (F)eminino ou (M)asculino');
29
30
{esperando que o usurio pressione alguma tecla e atribuindo o
caractere a varivel sexo}
31
sexo := readkey;
32
33
{tornando maiscula(caixa alta), pois o usurio pode digitar em
minsculas}
34
sexo := upcase(sexo);
35
36
{escreve no prompt do comando}
37
write('Digite a altura em CM: ');
38
39
{esperando queo usurio digite algo e atribua a varivel altura}
40
readln(altura);
41
42
{se sexo contiver M faa}
43
if(sexo = 'M') then
44
{realize o clculo do peso ideal}
45
peso := ((72.7 * altura)/100) - 58
46
{do contrrio, se sexo contiver F faa}
47
else
48
if(sexo='F') then
49
{realize o clculo do peso ideal}
50
peso := ((62.7 * altura)/100) - 48
51
else
52
writeln('Oh, Zeh, no sabe o que eh sexo???');
53
54
{escreva no prompt do comando + o valor da varivel com 3 casas
decimais e 2 aps o ponto}
55
writeln('Seu peso ideal: ', peso:3:2);
56
57
{espera que algo seja teclado para finalizar o programa}
58
readkey;
59 end.

Edeyson Andrade Gomes

www.edeyson.com.br

Apndice C Exemplos de Cdigo

C4 - For
C.4.1 - Este programa deve ilustrar o funcionamento do For, imprimindo nmeros de 1
a 10.
1
2
3
4
5
6
7
8
9
10
11
12
13

program ForSimples;
uses crt;
var
i : integer;
begin
for i := 1 to 10 do
begin
writeln('Valor de i: ', i);
end;
readkey;
end.

C.4.2 Desafio: o que este programa faz?


1
2
3
4
5
6
7
8
9
10
11
12
13
14

program ForSimples;
uses crt;
var
i : integer;
begin
for i := 1 to 10 do
begin
writeln('Valor de i: ', i);
i := i + 5;
end;
readkey;
end.

117