Você está na página 1de 68

Notas de Aula

A linguagem de programao Pascal

Conceitos bsicos

Marcelo Trindade Rebonatto


e-mail: rebonatto@upf.tche.br
pgina: http://vitoria.upf.tche.br/~rebonatto
Universidade de Passo Fundo
Curso de Cincia da Computao
2
Sumrio

1 Introduo ______________________________________________________________________ 4
1.1 O que um programa ___________________________________________________________ 4
1.2 Evoluo da programao________________________________________________________ 4
1.3 O que uma Linguagem de Programao ___________________________________________ 5
1.4 Normas Bsicas de Programao __________________________________________________ 5
2 Linguagem TURBO PASCAL ______________________________________________________ 6
2.1 Estrutura de um Programa em Turbo Pascal__________________________________________ 6
2.1.1 rea de Identificao _______________________________________________________ 7
2.1.2 rea das definies de Variveis ______________________________________________ 7
2.1.3 rea dos Procedimentos e Funes ____________________________________________ 8
2.1.4 rea do Programa __________________________________________________________ 8
2.2 Observaes relativas a escrita de programas Pascal ___________________________________ 9
2.3 Comentrios __________________________________________________________________ 9
3 Tipos de dados _________________________________________________________________ 10
3.1 Identificadores________________________________________________________________ 10
3.2 Introduo aos Tipos de Dados Padro_____________________________________________ 11
3.2.1 Tipos de variveis numricas inteiras __________________________________________ 11
3.2.2 Tipos de variveis numricas Reais ___________________________________________ 11
3.2.3 Tipos de dados lgicos: Boolean _____________________________________________ 11
3.2.4 Tipos de dados caracter: Char e String _________________________________________ 12
3.3 Ambiente Turbo Pascal _________________________________________________________ 12
3.3.1 Comandos de edio _______________________________________________________ 12
3.3.2 Manipulao de Blocos _____________________________________________________ 12
3.3.3 Funes para uso do ambiente Turbo Pascal ____________________________________ 12
4 Comandos e funes do Turbo Pascal _______________________________________________ 14
4.1 Comandos/Funes bsicos aos programas _________________________________________ 14
4.2 Programa exemplo sem procedimentos ____________________________________________ 16
4.3 Programa exemplo com procedimentos ____________________________________________ 17
5 Programas seqenciais ___________________________________________________________ 18
5.1 Exerccios de programas seqenciais no Turbo Pascal_________________________________ 18
6 Testes e Selees________________________________________________________________ 21
6.1 Condio ____________________________________________________________________ 21
6.2 Comando Condicional Simples___________________________________________________ 23
6.3 Comando Condicional Mltiplo __________________________________________________ 25
6.4 Exerccios de programas com seleo no Turbo Pascal ________________________________ 26
7 Comandos de Repetio __________________________________________________________ 28
7.1 Novos Conceitos na utilizao de variveis _________________________________________ 28
7.1.1 CONTADOR ____________________________________________________________ 28
7.1.2 ACUMULADOR _________________________________________________________ 28
7.1.3 FLAG __________________________________________________________________ 28
7.2 Lao com contador ____________________________________________________________ 29
7.3 Lao com teste no final _________________________________________________________ 30
7.4 Lao com teste no incio ________________________________________________________ 31
7.5 Exerccios de programas com repetio ____________________________________________ 32

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


3
8 Tcnicas avanadas de programao ________________________________________________ 35
8.1 Definio de Constantes ________________________________________________________ 35
8.2 Variveis locais e variveis globais _______________________________________________ 35
8.3 Passagem de Parmetros ________________________________________________________ 37
8.4 Funes _____________________________________________________________________ 38
8.5 Exerccios com funes e passagem de parmetros ___________________________________ 40
9 Tipo de dados orientados a caracteres________________________________________________ 41
9.1 Caracter _____________________________________________________________________ 41
9.2 Tipo de dados Char __________________________________________________________ 41
9.3 Tipo de dados String _________________________________________________________ 42
9.4 Exerccios de manipulao de strings ____________________________________________ 43
10 Novos tipos de dados ____________________________________________________________ 44
10.1 Conjunto de Dados de mesmo tipo (array) __________________________________________ 44
10.1.1 Manipulao de conjuntos de dados de mesmo tipo_______________________________ 44
10.1.2 Vetores _________________________________________________________________ 45
10.1.3 Exerccios de programas com manipulao de vetores ____________________________ 47
10.1.4 Matrizes_________________________________________________________________ 49
10.1.5 Exerccios de programas com manipulao de matrizes ___________________________ 51
10.2 Conjuntos de dados de tipos diferentes_____________________________________________ 53
10.2.1 Exerccios de programas com manipulao de registros ___________________________ 55
11 Arquivos ______________________________________________________________________ 56
11.1 Exerccio com manipulao de arquivos ___________________________________________ 62
12 Glossrio de Funes do Pascal ____________________________________________________ 63
12.1 Funes matemticas __________________________________________________________ 63
12.2 Funes para uso com tipos caracter_______________________________________________ 64
12.3 Funes/procedimentos e comandos de propsito geral________________________________ 66
13 Bibliografia ____________________________________________________________________ 68

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


4
1 Introduo
A programao diferencia o computador de todas as outras mquinas. Ao lhe proporcionar
funcionalidade, interatividade e flexibilidade torna-o um aliado til em inmeras atividades, como
clculos, processamento grfico, comunicao e lazer.

A programao exige persistncia, pacincia, criatividade, raciocnio lgico e capacidade de


estudo.

Tudo o que h dentro de um computador, alm das funes que ele realiza, foi criado pelo
homem. Pode, portanto, ser explicado e entendido.

1.1 O que um programa


Programas so seqncias de instrues executadas pelo computador, ou mais precisamente, pelo
seu crebro, o processador. As instrues nem sempre so realizadas na mesma seqncia, a ordem muda
e trechos do programa podem ou no ser executados.
O programa age de acordo com as aes do usurio e as condies internas da mquina. isso
que confere ao computador sua capacidade de tomar decises e agir com inteligncia.

1.2 Evoluo da programao


Desde a dcada de 40, quando surgiram os primeiros computadores, os programas tem evoludo
com grande rapidez.

I. A programao por Hardware : Os engenheiros que desenvolveram os primeiros computadores


criavam os programas mudando fisicamente suas conexes. Eram utilizados grandes painis, com
centenas de conectores, semelhantes s antigas mesas telefnicas. A programao era alterada
plugando-se os fios em diferentes conectores. O processo era complicado e sujeito a muitos erros.
Para salvar um programa, somente em diagramas impressos em papel (fotografias da mesa de
conexes).
II. As instrues numricas : No incio cada instruo era representada no formato numrico. Uma
determinada combinao numrica significava some, mova para outra posio, inverta,
diminua ou outra operao elementar. Os programas eram montados escrevendo-se um cdigo
composto por uma seqncia dessas instrues elementares. Os programas podiam ser guardados
em dispositivos que possibilitavam sua fcil recuperao.
III. A Linguagem Assembly : Para contornar o problema, os engenheiros associaram cada instruo a
uma palavra que lembrasse seu significado. Por exemplo, a instruo somar foi representada
pela palavra ADD (adicionar, em ingls), a instruo diminua foi representada pela palavra
SUB, entre outros. Apesar do avano, ainda havia dificuldades. Como as instrues dadas ao
computador devem ser elementares (simples), para a execuo de uma nica ao eram
necessrias dezenas de instrues em linguagem Assembly. Isso tornava a escrita de programas
muito trabalhosa. E, apesar de baseadas em palavras em no idioma ingls, na prtica era muito
difcil entender seu significado.
IV. Linguagens de Programao de mdio e alto nvel : Criadas para contornar as dificuldades da
linguagem Assembly. Utilizam palavras e expresses em ingls, alm de operadores matemticos
semelhantes ao que usamos em nosso dia-a-dia. Uma nica instruo nestas linguagens eqivale a
dezenas ou centenas de instrues em linguagem Assembly. Escrever um programa agora
assemelha-se a escrever uma srie de instrues em ingls. Depois do cdigo pronto, programas
especiais chamados compiladores e interpretadores traduzem os programas em linguagem de
Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal
5
alto nvel para as instrues elementares em formato numrico que o computador executa.
Existem centenas de linguagens de alto e mdio nvel, cada uma adequada a um tipo especfico de
aplicao. Algumas das mais comuns so : Pascal, Fortran, C, Cobol, Clipper, Basic, Java, entre
outras.
V. Ambientes grficos de desenvolvimento : Tradicionalmente, o programador escolhia uma
linguagem e a usava para escrever todas as instrues que formavam seu programa. Mas, com o
tempo, os software ficaram mas sofisticados e o processo de criao ficou demorado, mesmo com
as linguagens de programao de alto nvel. Com a popularizao dos ambientes grficos, como
Windows e Mac OS, os diferentes softwares utilizados em um computador passaram a ter
afinidades, ou seja, solues semelhantes. Isso permitiu a criao de ambientes de programao
que geram as instrues automaticamente segundo diretrizes fornecidas graficamente pelo
programador. Os ambientes de desenvolvimento que automatizam parte da criao do cdigo do
programa so as ferramentas RAD (Rapid Application Development - Desenvolvimento rpido de
aplicativos). Atualmente as ferramentas RAD mais conhecidas so o Borland Delphi e Microsoft
Visual Basic.

1.3 O que uma Linguagem de Programao


Uma linguagem de programao o elo entre a linguagem que os seres humanos entendem e as
instrues que uma mquina deve executar para realizar uma determinada ao. Entretanto, a linguagem
sozinha insuficiente: precisamos do auxlio de um COMPILADOR.

COMPILADOR: Programa de computador (escrito por outras pessoas), que traduz a linguagem
entendida pelo homem e gera um cdigo a ser entendido pela mquina em um processo de
COMPILAO.
COMPILAO: Passar para a linguagem de mquina as instrues escritas em uma Linguagem de
Programao.
INTERPRETADOR: Programa de computador que em tempo de execuo (ou seja enquanto o
programa esta sendo executado) traduz a linguagem de programao de alto nvel para um cdigo que
a mquina entende. D mais flexibilidade ao programa, porm o torna mais lento.

1.4 Normas Bsicas de Programao


Existem algumas normas de programao que so mundialmente respeitadas. Nada mais til do
que list-las. Sempre que escrevermos um programa devemos respeit-las. S E M P R E mesmo
Usar SEMPRE comentrios em seu cdigo fonte;
Usar IDENTAO de seus fontes. (Padro min 3 espaos);
O padro de indentao (endenao) deve ser o mesmo em todo o programa e deve ser inserido na
digitao do programa e no aps ele j estar pronto;
Nunca tentar redefinir palavras reservadas de um compilador;
Em expresses matemticas, no existem {} (Chaves), [] (Colchetes). Todos os nveis de precedncia
devem ser construdos com () (Parnteses);
Todas as regras matemticas so respeitadas pelo computador;
O 0 (zero) totalmente diferente de nada --> 0 <> Nada;
Devemos sempre que possvel aproveitar ao mximo as linhas de cdigo e as variveis j existentes;
O computador detecta somente erros de sintaxe, nunca erros de lgica.

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


6
2 Linguagem TURBO PASCAL
O turbo pascal uma linguagem de programao de grau mdio (no tem muitas funes,
principalmente comercias definitas, mas d um alto grau de poder ao programador para fazer o que quiser
como quiser). Devido ao seu grau, uma das linguagens mais rpidas existentes. uma linguagem de
programao muito difundida no meio tecnolgico, ela de fcil assimilao e rpido aprendizado. Todos
os seus comandos e funes so palavras ou abreviaes que podem ser facilmente decifradas
(entendidas, traduzidas) no idioma ingls.

2.1 Estrutura de um Programa em Turbo Pascal

rea de Identificao

rea de definies de variveis

rea dos procedimentos e Funes

rea do programa Principal

Igual a de qualquer folha, a mesma ordem de leitura de um programa mantida, ou seja, o


programa lido de cima para baixo, da esquerda para a direita.
a) Primeiro, devemos dizer que programa estamos escrevendo (rea de identificao).
b) Logo aps, dizemos quais so as variveis envolvidas em nosso programa (rea de definies de
variveis).
c) Em seguida, escrevemos o cdigo dos programas propriamente dito, ou seja, devemos escrever tudo
aquilo que desejamos que o nosso programa faa. Escrevemos isto em procedimentos e funes (rea
dos procedimentos e funes).
d) Finalmente, decidimos qual a ordem de chamada dos procedimentos e das funes. O primeiro
procedimento a ser chamado ser tambm o primeiro a ser executado (rea do programa principal).

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


7
2.1.1 rea de Identificao

uma rea obrigatria em um programa.


Serve para a identificao do programa.
Deve obrigatoriamente conter comentrios.
Deve comear pela palavra chave program, seguida do nome do programa, que deve comear por
letras, com tamanho mximo de 64 caracteres e ser mnemnico.
Deve-se terminar a frase com um ponto-e-vrgula (;)
A seguir devemos incluir o uso de bibliotecas que contm os principais comandos e funes por ns
utilizados em nossos programas.

Exemplo

program primeiro;
{ Este programa serve para o calculo de anos bissextos }
{ Autor: Fulano de tal Criado em: 29/02/1500 }
{ ltima modificao: 30/02/1900 }
uses crt;

2.1.2 rea das definies de Variveis

onde vamos definir todas (mas todas mesmo) as variveis que vamos utilizar no programa.
Deve comear pela palavra chave var
Aps, na prxima linha, os nomes das variveis, divididos por vrgulas.
Os nomes das variveis seguem as mesmas regras do nome do programa.
Aps a ltima varivel de uma linha, utilizaremos o separador dois-pontos e colocaremos o tipo desta
lista de variveis, terminando a frase com um ponto-e-vrgula.
Nas prximas linhas, repetimos as listas de variveis (com nomes diversos) de tipos diferentes ou no.

Exemplo

var
mes, dia, ano : integer;
salario : real;
folgou_feriado : boolean;
dias_trabalhados : integer;
<nome>, <nome> : <tipo de varivel> ;
......, ...... : ..................

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


8
2.1.3 rea dos Procedimentos e Funes

onde definimos os procedimentos e funes a serem utilizados em nosso programa.


Procedimentos e funes executam uma determinada ao que pode ou no se repetir no programa.
A diferena bsica entre procedimento e funo que a funo retorna um valor, e o procedimento
no.
A definio de um procedimento deve comear com a palavra chave procedure, seguida do
nome deste procedimento e terminada por um ponto-e-vrgula.
A seguir, na prxima linha a palavra chave begin
Nas demais linhas, os comandos a serem executados, sempre terminando a linha com um ponto-e-
vrgula.
Podemos chamar um procedimento/funo dentro de outro, desde que o procedimento/funo
chamado tenha sido escrito antes daquele que o chama.
Para terminarmos o procedimento, devemos inserir a palavra chave end seguida de um ponto-e-
vrgula
A definio de uma funo segue as mesmas regras de um procedimento.

Exemplo:

procedure inicio;
begin
gotoxy(10,10);
write('Inicio do programa');
end ;

2.1.4 rea do Programa

uma rea obrigatria.


onde o programa comea realmente a ser executado. O primeiro comando da rea de programa ser
o primeiro comando a ser executado.
Deve comear pela palavra chave begin.
Nas demais linhas devem continuar as chamadas de procedimentos/funes e comandos para
efetuarmos nosso programa, terminadas com um ponto-e-vrgula.
Deve terminar com a palavra chave end, seguida de um ponto-final (.).

Exemplo

begin
clrscr;
inicio;
leitura;
x := calculo(a, b);
mostra('o resultado de x vale');
end.

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


9
2.2 Observaes relativas a escrita de programas Pascal
Uma linha de comando em Pascal termina sempre com um ponto-e-vrgula (;)
Podemos ter dois comandos em uma mesma linha, desde que os mesmos estejam separados por
ponto-e-vrgula (;)
Escrever os comandos e chamadas de funes da linguagem em letras minsculas (utilizao com o
Pascal)
As regras para nomes de identificadores (nome do programa, nomes de variveis, nomes de
procedimentos/funes) vlidas em Pascal so que os mesmos devem obrigatoriamente comear por
letras, ter no mximo 64 caracteres e no possuir espaos em branco no meio do nome.
Os nomes de quaisquer identificadores (variveis, procedimentos, nome do programa, funes) no
podem em hiptese nenhuma ser repetidos.
Aps o trmino de cada rea de programa ou aps cada procedimento aconselhvel deixarmos uma
linha em branco para uma melhor organizao do nosso cdigo fonte.

2.3 Comentrios
Os comentrios devem ser escritos, sempre. Eles servem para futuramente sabermos o que
fizemos nos programas, ou at mesmo em grandes empresas para sabermos o que outros fizeram.
aconselhvel ao incio de um programa ou um procedimento, escrever para que serve o
programa/procedimento, qual a lgica utilizada e, em programas, o nome do autor e a data de criao bem
como a data da ltima modificao.
Eles so identificados pelos smbolos {, } (chaves) que marcam respectivamente o incio e o
fim do trecho de comentrios. Os comentrios no so interpretados pelo compilador.

Exemplo

program calc_media;
uses wincrt;
{ Este um programa de teste que calcula a mdia dos alunos }

procedure calculo;
{ Este procedimento calcula as raizes de uma equao de 2
grau, usando a formula de bskara }

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


10
3 Tipos de dados
Os dados so representaes das informaes a serem processadas por um programa de
computador. Estas informaes esto classificadas em diversos tipos de dados, cada um com suas
particularidades.
Existem tipos de dados bsicos, que se eqivalem em todas as linguagens de programao. Estes
tipos padres representam os dados , e so divididos basicamente em quatro categorias:
Inteiros (nmeros inteiros);
Reais (nmeros fracionrios);
Caracteres (quaisquer seqncias de letras e nmeros);
Lgicos (s podem ser verdadeiro ou falso).

As linguagens de programao possuem ainda tipos de dados padres que representam todos os
tipos bsicos. Na linguagem Pascal, ainda podemos criar nossos prprios tipos de dados.

3.1 Identificadores
Para a execuo de um programa, o computador faz uso das instrues a serem executadas,
juntamente com os valores dos dados que o programa manipula. Como j vimos, uma instruo pode ser
um comando ou uma chamada de procedimento/funo.
Um procedimento/funo identificado pelo seu nome. Os dados que o programa manipula,
devem tambm ser identificados. Para isto existem as variveis e constantes, que nada mais so do que a
identificao na memria do computador de um dado em especial. Como a memria do computador
internamente identificada atravs de posies (nmeros, onde esto gravados valores em binrio), o uso
de identificadores ao invs de sua posio na memria de vital importncia para o programador.
Existem regras para a definio dos identificadores, so elas:
Devem obrigatoriamente comear por letras, ter no mximo 64 caracteres e no podem possuir
espaos em branco no meio do nome;
indiferente o uso de letras maisculas ou minsculas no nome de identificadores. O Pascal
reconhece apenas o significado, no importando se foi escrito em letras maisculas ou minsculas;
Todos os nomes definidos pelo programador (nomes de variveis, do programa, de procedimentos e
de funes) devem ser mnemnicos e nunca repetidos;
Nunca usar uma varivel sem antes defini-la. E, aps utiliz-la, ter certeza de liberar seu espao
ocupado na memria;
Nunca utilizar o valor de uma varivel sem antes ter certeza de que ela realmente j possua um valor.

Constantes: Como o prprio nome diz, so valores que nunca mudam de valor durante a execuo de
um programa. Na prtica devemos ao incio de um programa definir o valor da constante e ela
permanecer com este valor at o final do programa.
Variveis: So identificados por um nome . Seu valor pode mudar durante a execuo de um
programa. Tecnicamente so regies na memria principal em que guardamos determinados dados.
Podemos sempre verificar ou alterar seu contedo.

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


11
3.2 Introduo aos Tipos de Dados Padro
Os programas Pascal podem trabalhar com dados expressos como valores literais (tal como o
string 'Passo Fundo' ou o nmero 5) ou com valores representados simbolicamente por
identificadores (tais como variveis ou constantes). Sem considerar como o valor do dado est expresso,
deve-se tomar cuidado para distinguir os diversos tipos de dados que o Turbo Pascal reconhece. A mistura
de tipos de dados de modo no apropriado resulta em erros em tempo de compilao. A linguagem Pascal
possui diversos tipos de dados padro, dos quais os mais usados so:
Tipos numricos inteiros (integer);
Tipos de nmeros reais (real);
Tipos de caractere (char) e string (string);
Tipo Booleano (boolean).

3.2.1 Tipos de variveis numricas inteiras


So variveis que guardam apenas tipos de dados inteiros. So usadas para armazenarem dados
que sabidamente so inteiros, e como contadores. Os diversos tipos variam apenas de acordo com o
intervalo de valores e o nmero de bytes que ocupam na memria. So manipuladas pelo programador em
nmeros decimais e podem ser visualizadas sem nenhuma formatao especial.

Nome Intervalo de Valores Tamanho em Bytes


Byte 0 .. 255 1
Shortint -128 .. 127 1
Integer -32768 .. 32767 2
Word 0 .. 65535 2
Longint -2147483648 .. 2147483647 4

3.2.2 Tipos de variveis numricas Reais


So variveis que guardam tipos de dados reais. Sabidamente, englobam tambm os nmeros
inteiros, ou seja, podemos guardar nelas valores inteiros. Os diversos tipos variam de acordo com o
intervalo de valor e a preciso dos nmeros aps a vrgula. Alguns tipos especficos necessitam de
diretivas ao processador. So manipuladas pelo programador em notao cientfica. Para serem
visualizadas necessitam de formatao.

Nome Intervalo de Valores Dgitos significativos Tamanho em Bytes


Single 1.5*10-45 .. 3.4*1038 7-8 4
-39 38
Real 2.9*10 .. 1.7*10 11-12 6
-324 308
Double 5.0*10 .. 1.7*10 15-16 8
63 63
Comp -2 +1.. 2* +1 19-20 8
Extended 3.4*10-4932 .. 1.1*104932 19-20 10

3.2.3 Tipos de dados lgicos: Boolean

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


12
Varivel lgica, s assume dois valores pr-definidos True (verdadeiro) e False (falso)
representados internamente por 1 e 0, respectivamente. Ocupa 1 byte. So manipuladas pelo programador
como caracteres, TRUE ou FALSE. Para outro tipo de visualizao necessitam de tratamento.
3.2.4 Tipos de dados caracter: Char e String

Char: Varivel em que se armazena um caracter de acordo com o conjunto ASCII estendido (0-255);
normalmente representado entre aspas (' '), pode ser apenas um caracter e ocupa 1 byte. Mais de 1
caracter, usar o tipo string.

String: Cadeia de at 255 caracteres, armazena valores alfanumricos (nmeros e letras). Ocupa 1
byte por caracter. Pode-se visualizar um string como uma matriz de Char.

So manipuladas pelo programador de forma igual ao seu contedo, ou seja, no necessitam nem
de tratamento nem de formatao para uma perfeita visualizao.

3.3 Ambiente Turbo Pascal


Para uma maior facilidade na programao, foi desenvolvido o ambiente Turbo Pascal. Este ambiente,
fornece um editor de textos personalizado para a escrita de programas, compilador e ambiente de
execuo. Todos os componentes so integrados em apenas um programa. A seguir, uma referncia dos
principais comandos e funes utilizados.

3.3.1 Comandos de edio


<Insert>, ^v : Troca o modo Insert/OverWrite
<Delete>, ^d : Apaga o caracter atual (em cima do cursor)
<BackSpace>, ! : Apaga o caracter imediatamente a esquerda do cursor
^t : Apaga a palavra a direita do cursor
^y : Apaga a linha onde est o cursor
^qf : Localiza o texto selecionado
^qa : Localiza o texto selecionado e pode substitu-lo

3.3.2 Manipulao de Blocos


Incio do Bloco : ^kb
Fim do Bloco : ^kk
Copia o Bloco Marcado : ^kc
Move o Bloco Marcado : ^kv
Apaga o Bloco Marcado : ^ky
Desmarca/Remarca o Bloco : ^kh
Grava um bloco em forma de arquivo : ^kw
L um bloco gravado em forma de arquivo : ^kr
*** Para marcar um bloco, pode tambm ser utilizadas as teclas <Shift> e setas, em conjunto. Para isso,
segura-se o <Shift> pressionado e movimenta-se o cursor com as setas para as direes onde queremos marcar
o bloco. Tambm pode-se utilizar o mouse.

3.3.3 Funes para uso do ambiente Turbo Pascal


F1: Help sensitivo;

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


13
F2: Salva o arquivo corrente no Editor;
F3: Carrega um arquivo do disco;
F4: Executa o programa at
F5: Zoom;
F6: Troca a janela ativa;
F7: Executa um programa passo a passo;
F8: Executa um programa rotina por rotina;
F9: Executa um "Make" no programa;
F10: Vai para o Menu;

Alt-F3: Fecha a janela ativa;


Alt-F5: Exibe a tela do usurio;
Alt-F6: Ativa a janela anterior;
Alt-F9: Compila o seu programa;

Alt-BkSp: Desfaz a ltima tarefa no editor;


Alt-0 : Ativa lista de janelas disponveis;
Alt-X: Termina a sesso do Turbo;

Ctrl-F9: Compila e executa o programa que estiver na janela ativa;


Ctrl-Del: Remove o texto selecionado para a rea do "Clipboard";
Ctrl-Ins: Copia o texto selecionado para a rea do "Clipboard".
Ctrl-L : Repete a ltima busca ou busca e troca.

Shift-Del: Remove o texto selecionado para a rea do "Clipboard".


Shift-Ins: Copia para o texto o contedo selecionado no "Clipboard".

Observaes:

Na composio dos nomes dos programas, utilizar apenas nomes com o formato DOS. Para o
nome do arquivo, utilizar no mximo 8 caracteres, sem espaos em branco. Nunca usar . ou colocar
extenso nos arquivos, deixar que o prprio ambiente se encarregue de adicionar a extenso aos
programas.

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


14
4 Comandos e funes do Turbo Pascal
O Pascal, possui uma srie de comandos e funes previamente definidos em seu cdigo. Outros
comandos e funes esto definidas nas inmeras bibliotecas de comandos/funes disponveis por ele.
Uma das principais bibliotecas a Wincrt, que j foi includa em nosso programa (vide rea de
identificao).
Podemos ainda criar nossos prprios comandos (atravs da definio de procedimentos) e nossas
prprias funes (atravs da definio de nossas prprias funes), assuntos para mais adiante.

4.1 Comandos/Funes bsicos aos programas


clrscr : Limpa a tela e posiciona o cursor na posio (1, 1)
Exemplo

clrscr;

gotoxy(C, L): Posiciona o cursor em uma determinada posio da tela especificada pela dupla
(C, L).
C --> Coluna desejada, L --> linha desejada
Exemplo

gotoxy(10,5);

write : Escreve algo na tela do computador a partir da posio atual do cursor e mantm o cursor
no final do trecho escrito.
Exemplo

write('Informe um No. :');

read : o comando de entrada de dados, atribui a uma varivel um valor lido pelo teclado.
Exemplo

read(varnum);

Atribuio : ( := )
Atribui a varivel da esquerda o valor da direita.
Exemplo

X := 10;
Y := 20 - X;
Z := X + y;
Z := Z - (X + 8);
varmed := X / Z;
total := Y * 5;

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


15
A partir dessa linha a varivel varmed vale 5 e a varivel total vale 50

Regra geral de atribuies

<variavel> := <expressao>--> Constante ======> a := 5


|-> Varivel =======> a := b
|-> com variveis ==> a := b * 4

Existem muitos outros comandos e tantas outras funes padres no Pascal, porm, sero vistas
no decorrer das necessidades do semestre. Alguns destes comandos e destas funes esto descritos ao
final desta apostila. A seguir, um programa exemplo extremamente simples em Pascal, escrito em duas
verses: uma com uso de procedimentos e outra sem procedimentos.

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


16
4.2 Programa exemplo sem procedimentos
{ Inicio do programa }
program calcmedia ;
{Programa que serve para calcular a media ponderada de notas de uma disciplina}
{A media da 1a. prova tem peso 3 enquanto a da 2a. peso 7 }
{Marcelo Trindade Rebonatto - 14/03/2000 - Modificado em 04/08/2000 }

uses crt ;
{ Final da area de Identificacao }

var
numero_do_aluno : integer ;
nota_prova1, nota_prova2, media : real ;
{ Final da area de Definicao das variaveis }

begin
clrscr; { limpa a tela }

gotoxy(10,05) ; { posiciona o cursor }


write('Informe o Numero do Aluno .....: ') ;
read(numero_do_aluno) ;
gotoxy(10,07) ;
write('Informe a Nota da 1a. Prova ...: ') ; {Escreve mensagem na tela}
read(nota_prova1); { Le, informa a variavel a partir do teclado }
gotoxy(10,09) ;
write('Informe a Nota da 2a. Prova ...: ') ;
read(nota_prova2) ;

media := ( (nota_prova1 * 3) + (nota_prova2 * 7) ) / 10;

gotoxy(10,15) ; write('RESULTADOS OBTIDOS');


gotoxy(10,17) ;
write('A media das provas e ',media:4:2) ;

readkey; { espera ate que uma tecla seja pressionada para que os resultados }
end. { do programa possam ser visualizados pelo usuario }

{ Final da area de Programa }

{ Final do programa }

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


17
4.3 Programa exemplo com procedimentos
{ Inicio do programa }
program calcmedia ;
{Programa que serve para calcular a media ponderada de notas de uma disciplina}
{A media da 1a. prova tem peso 3 enquanto a da 2a. peso 7 }
{Marcelo Trindade Rebonatto - 14/03/2000 - Modificado em 04/08/2000 }

uses crt ;
{ Final da area de Identificacao }

var
numero_do_aluno : integer ;
nota_prova1, nota_prova2, media : real ;
{ Final da area de Definicao das variaveis }

procedure leituras ;
{ Procedimento para ler (informar) as variveis p/ o programa }
{ E onde damos ENTRADA nos dados. So lidos: nmero do aluno e notas das provas}
begin
gotoxy(10,05) ; { posiciona o cursor }
write('Informe o Numero do Aluno .....: ') ;
read(numero_do_aluno) ;
gotoxy(10,07) ;
write('Informe a Nota da 1a. Prova ...: ') ; {Escreve mensagem na tela}
read(nota_prova1); { Le, informa a variavel a partir do teclado }
gotoxy(10,09) ;
write('Informe a Nota da 2a. Prova ...: ') ;
read(nota_prova2) ;
end ;

procedure calculo ;
{ Procedimento onde se faz o PROCESSAMENTO do programa }
begin
media := ( (nota_prova1 * 3) + (nota_prova2 * 7) ) / 10;
end;

procedure mostra_resultados ;
{ Procedimento que serve para externar (mostrar) os resultados obtidos }
{ pelo programa. E este procedimento que faz a SAIDA do programa }
begin
gotoxy(10,15);
write('RESULTADOS OBTIDOS');
gotoxy(10,17);
write('A media das provas e ',media:4:2);
end;

{ Final da area de Procedimento e funcoes }

{ Progama Principal (main) }


begin
clrscr ; { Limpa a tela }
leituras ;
calculo ; { Chamada de Procedimento }
mostra_resultados ;
readkey; { espera ate que uma tecla seja pressionada para que os resultados }
end. { do programa possam ser visualizados pelo usuario }
{ Final da area de Programa }

{ Final do programa }

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


18
5 Programas seqenciais
Os primeiros programas que iremos trabalhar so programas estritamente seqenciais, ou seja, os
programas assim como o programa exemplo, iniciaro na primeira instruo da rea de programa. Sendo
esta instruo executada, o computador partir para a prxima instruo, aps ela a seguinte, e assim por
diante.
Caso alguma instruo seja uma chamada de procedimento/funo (o que muito comum), no
momento da chamada deste procedimento/funo, a linha de execuo do programa se deslocar para a
primeira instruo do procedimento/funo chamado. A linha de execuo continuar processando as
instrues de forma seqencial dentro do procedimento/funo. Quando o procedimento/funo terminar
sua execuo (no restarem mais instrues a serem processadas), a linha de execuo se deslocar para
a instruo seguinte, logo aps a instruo que chamou o procedimento/funo, esta prxima instruo
ser o alvo da linha de execuo.
A execuo do programa se comporta da maneira acima descrita, passando por todas as
instrues at o seu trmino.
A ordem que quase todos os programas de qualquer tipo seguem a seguinte:
Primeiro, existe uma ENTRADA de dados;
Aps, existe algum tipo de PROCESSAMENTO, a fim de encontrar resultado(s);
O(s) resultado(s) encontrado(s), devem ser externados, ou seja, mostrados aos usurios. Nesta etapa
realizada a SADA do programa.

Regra geral

ENTRADA " PROCESSAMENTO " SADA

5.1 Exerccios de programas seqenciais no Turbo Pascal


1) Escrever um programa que leia a nota de duas provas e de dois trabalhos realizados em uma
disciplina. Calcule a mdia das provas e a mdia de dois trabalhos. Mostrar a mdia das provas e a
mdia dos trabalhos.

2) Escrever um programa que leia uma temperatura em graus Centgrados. Calcular a converso desta
temperatura para graus Fahrenheit. Mostrar a temperatura lida em graus Fahrenheit. A frmula de
converso : F # (9 * C + 160) / 5. Onde F a temperatura em Fahrenheit e C a temperatura em
Centgrados.

3) Escrever um programa que leia uma temperatura em graus Fahrenheit. Calcular a converso desta
temperatura para graus Centgrados. Mostrar a temperatura lida em graus Centgrados. A frmula de
converso : C # (F - 32) * (5 / 9). Onde F a temperatura em Fanrenheit e C a temperatura em
Centgrados.

4) Escrever um programa que leia dois valores (A e B) e efetuar as operaes de adio, subtrao,
multiplicao e diviso de A por B, apresentando ao final os quatro resultados obtidos.

5) Escrever um programa que leia o raio de uma circunferncia. Calcular a rea desta circunferncia
atravs da frmula AREA # PI * RAIO2. Mostrar a rea da circunferncia calculada.

6) Escrever um programa que leia a quantidade de horas trabalhadas por um funcionrio em um ms, o
valor que ele recebe por hora e o percentual de desconto para o INSS. Calcular o salrio bruto (horas
Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal
19
trabalhadas * valor hora), o valor do desconto para o INSS e o salrio lquido (Salrio bruto -
desconto INSS). Mostrar o salrio bruto, o valor do desconto do INSS e o salrio lquido do
funcionrio.

7) Montar um programa que leia trs nmeros A, B e C, que representam os valores de uma equao de
2 grau (Ax2 + Bx + C = 0). Calcular e mostrar as razes reais.

8) Escrever um programa que leia 3 variveis: A, B e C. Calcular: a rea de um tringulo com base A e
B por altura, rea de um crculo com raio C, rea de um trapzio que tem A e B por bases e C por
altura, rea de um quadrado de lado B, rea de um retngulo de lados A e B e a rea da superfcie de
um cubo de aresta C. Mostrar as reas calculadas.

9) Calcular e apresentar o valor do volume de uma lata de leo, utilizando a frmula:


VOLUME # 3.1415 * (r - 2) * ALTURA. Onde r igual ao raio da circunferncia da lata.

10) Ler dois valores para as variveis A e B, efetuar a troca dos valores de forma que a varivel A passe a
possuir o valor da varivel B e que a varivel B passe a possuir o valor da varivel A. Apresentar os
valores trocados.

11) Efetuar o clculo da quantidade de litros de combustvel gastos em uma viagem, utilizando-se um
automvel que faz 12 km por litro. Para obter o clculo, o usurio dever fornecer o tempo gasto na
viagem e a velocidade mdia durante a mesma. Desta forma, ser possvel obter a distncia percorrida
com a frmula DISTNCIA # TEMPO * VELOCIDADE. Tendo o valor da distncia, basta calcular
a quantidade de litros de combustvel utilizada na viagem com a frmula:
LITROS_USADOS # DISTNCIA / 12. O programa dever apresentar os valores de velocidade
mdia, tempo gasto na viagem, a distncia percorrida e a quantidade de litros de combustvel
utilizados na viagem.

12) Escrever um programa que leia trs valores: A, B e C , que so os lados de um tringulo, calcule e
mostre a rea deste tringulo. rea = S * (S - A) * (S - B) * (S - C) onde S o semi-permetro.

13) Montar um programa que leia trs nmeros: A, B e C. Encontrar e mostrar o maior dos trs nmeros.
Frmulas: Maior [A,B] = (A + B + |A B|) / 2.
Obs.: Valor em mdulo: ABS(x) = |X|.

14) Escrever um programa que leia um valor em R$, calcule e mostre o menor nmero possvel de notas
de 100, 50, 10, 5, 1 em que o valor lido pode ser decomposto. Mostrar as quantidades de cada um dos
tipos de notas encontradas.

15) O custo ao consumidor de um carro novo a soma do custo de fbrica com a percentagem do
distribuidor e dos impostos, ambos aplicados ao custo de fbrica. Supondo que a percentagem do
distribuidor seja 28% e os impostos de 45%, escrever um programa para ler o custo de fbrica de um
carro e escrever o custo ao consumidor.

16) Fazer um novo programa, semelhante ao anterior (nmero 15), porm, deve-se aplicar a percentagem
do distribuidor aps j ter sido calculado o percentual dos impostos.

17) Uma loja de animais precisa de um programa para calcular os custos de criao de coelhos. O custo
calculado com a frmula : CUSTO # (70% do NR_COELHOS) / 18 + 10. Escrever um programa
que leia o nmero de coelhos, calcule o custo de criao e mostre o custo calculado.

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


20
18) Um sistema de equaes lineares do tipo:
ax + by = c
dx + ey = f
pode ser resolvido segundo o que mostrado abaixo:
x = ce - ef e y = af - cd
ae - db ae -bd
Escrever um programa Pascal que leia os coeficiente a, b, c, d, e e f. Calcular o mostrar os
valores para x e y.

19) Um imvel foi comprado por 5 pessoas. Joo, comprou a metade do imvel. Do restante, Pedro,
comprou a metade. O que ainda sobrou, foi divido por Maria, Jos e Luza, sendo que Jos, ficou com
a metade do que ficou Maria, que por sua vez, ficou com parte igual a Luza. Escrever um programa
em Pascal, que leia o valor recebido pelo aluguel do referido imvel, e quanto em R$ cada um dos
scios no imvel deve receber.

20) Ricardo, apostou em corridas de cavalos R$ 150,00. Acertou o ganhador e com isso, recebeu 80 vezes
o valor apostado. Ao receber o prmio, constatou que haviam descontos como segue:
a) 3,5 % para a associao dos apostadores
b) R$ 40,00 como taxa de uso do caixa do Hipdromo
c) 1,45% para o seguro do cavalo ganhador
d) e por fim, o I.R. lhe tirou 10%, do saldo j descontando as outras taxas, que ele ia levar para casa.
Escrever um programa que faa o extrato (na tela do computador) que Ricardo deveria receber pelo caixa
do Hipdromo, mostrando o valor ganho bruto, os descontos individualizados e o valor que realmente ele
levou para casa.

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


21
6 Testes e Selees
Como j foi visto at aqui, trabalhamos programas seqncias, onde a lgica consiste sempre de
ENTRADA " PROCESSAMENTO " SADA. Estes programas so teis para uma grande quantidade
de problemas, porm, seus recursos so um tanto quanto limitados.
Existem vrios problemas que, para serem resolvidos, devem levar em conta valores das
variveis do programa. Um exemplo um programa que l as notas de um aluno e calcula sua mdia
semestral. At aqui tudo bem, podemos resolv-lo facilmente do modo seqencial, porm, se quisssemos
mostrar ainda se o aluno foi APROVADO ou REPROVADO, como faramos ??? Para dizer qual foi
o conceito obtido pelo aluno, devemos analisar o valor da varivel que contm sua mdia. Dependendo
do seu valor, o aluno ser APROVADO ou no.
Outro exemplo bem comum um programa que calcule o salrio de um funcionrio. Caso seu
salrio esteja dentro de uma faixa salarial, o desconto do INSS, por exemplo, pode ser de 8%. Caso
contrrio, seu desconto ter uma outra alquota.
Mais um exemplo, o caso de um programa que calcula as razes de uma equao de 2o grau. Se
o programa resolve esta equao pela frmula de Bskara, temos de verificar se o valor do delta
(determinante, aquele termo onde extramos uma raiz quadrada na frmula) superior ou igual a zero
(no existe raiz quadrada de nmeros negativos).
Em todas as situaes citadas, os dados manipulados pelos programas necessitam de algum tipo
de tratamento, para verificar, testar seu contedo. Para isto, vamos trabalhar com novos comandos, os
chamados comandos condicionais.
Para verificar o contedo de uma varivel, devemos inseri-la em uma condio. As condies
so formadas por variveis, constantes, operadores relacionais semelhantes aos que usamos no dia a dia e
na matemtica (> maior, < menor, entre outros) e por operadores lgicos, que sero descritos mais
adiante.

6.1 Condio
Condio nada mais do que uma (ou vrias) Expresso(es) Lgica(s).
Uma Expresso Lgica composta de proposies assertivas que podem estar corretas
(verdadeiras) ou incorretas (falsas). No resultado de uma condio, no existem valores diferentes de
Verdadeiro ou Falso.
Para formar uma expresso lgica, usa-se os seguintes operadores relacionais:

Operador Relacional Significado Exemplo Verdadeiro Exemplo Falso


= Igual 5=5
>= Maior ou Igual 8 >= 2
<= Menor ou Igual 9 <= 9
> Maior 0 > -8
< Menor 2 < 20
<> Diferente 6 <> 7
In Dentro de um Intervalo 5 in [1..10]

Vale relembrar, que o resultado de uma condio sempre TRUE (verdadeiro) ou FALSE
(Falso). No existem quaisquer outros resultados possveis. O operador de atribuio (:=), nunca pode
ser utilizado em uma condio.
Podemos ainda, montar um condio composta, ou seja, uma condio que depende de mais de
uma operao de verificao. Sendo uma condio composta ainda uma condio, seu resultado final
continua sendo sempre TRUE ou FALSE.

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


22
Para criarmos uma condio composta, devemos usar os operadores lgicos, que esto descritos
na tabela abaixo.

Operador Lgico Significado Exemplo Verdadeiro Exemplo Falso


and e (produto lgico) (5 = 5) and (5 < 10)
or ou (soma lgica) (8 > 2) or (0 > -8)
not no (negao) not (6 < 2)

Conforme pode ser visto nos exemplos, os operadores lgicos ficam no centro de duas condies
e deve-se obrigatoriamente envolver os operadores relacionais da sentena por parnteses.
Na resoluo de uma condio com operadores lgicos, deve-se proceder da seguinte maneira:
a) Encontrar o resultado de cada uma das comparaes envolvidas (esta comparao como se fosse
uma condio separada, resulta em TRUE ou FALSE);
b) De posse dos resultados encontrados, comparar os resultados que fazem parte de um operador, ou
seja, sempre se compara os resultados, dois a dois (um de cada lado do operador lgico), encontrando
novamente um resultado para a condio, que sempre ser TRUE ou FALSE.

Os operadores lgicos, so resolvidos de acordo com o seu significado:


and: necessita que as duas condies sejam verdadeiras, para dar um retorno verdadeiro.
or: se pelo menos uma condio for verdadeira, seu resultado ser verdadeiro.
not: inverte o resultado de uma condio, se era verdadeira, passa a ser falsa, se era falsa, passa a
ser verdadeira.
Uma tabela verdade, pode ser criada para auxiliar a compreenso dos resultados de operadores
lgicos. Observe a tabela abaixo, sendo P1 e P2, proposies (condies) que podem estar verdadeiras ou
falsas.

P1 P2 Not (P1) Not (P2) (P1) and (P2) (P1) or (P2)


True True False False True True
True False False True False True
False True True False False True
False False True True False False

Vale lembrar ainda, que todos os exemplos com condies foram feitos com nmeros absolutos
(5, 10, 12, -1, ...), nos dois extremos dos operadores relacionais. Porm uma condio s tem sentido, se
em pelo menos um dos lados, o operador seja uma varivel.
Exemplos

P1 = A >=B
P2 = A < C
P3 = C > 1

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


23
6.2 Comando Condicional Simples
{ If ... Then ... [Else]}

Regra geral

if <condio> then
comando[;] / begin <comandos;> end[;]
else
comando; / begin <comandos;> end;

O comando condicional simples (Se ... Ento ...[Seno]), tem por finalidade avaliar uma
condio (simples ou composta) e decidir se os comandos sero ou no executados.
A forma de avaliao da condio, segue o descrito nas condies. SE o resultado da condio
for TRUE (verdadeiro), as instrues referentes ao ENTO (THEN) sero executadas, caso contrrio,
quando o resultado da condio for FALSE (falso), os comandos referentes ao ento (THEN) no
sero executados. O comando permite ainda opcionalmente (no obrigatrio seu uso) colocar comandos
que somente sero executados se a condio for falsa (FALSE). Estes comandos devero ser escritos
aps o comando de SENO (ELSE).
Em nenhuma hiptese comandos relativos ao ENTO e ao SENO sero executados juntos. Um
automaticamente exclui o outro, ou seja, caso a linha de execuo siga pelo then, ela no poder
passar pelo else e caso siga pelo else ela no poder passar pelo then.
Em ambos os casos de execuo poder existir apenas 1 comando ou um bloco de comandos
dentro das opes de condio verdadeira ou falsa.
Um bloco de comandos, consiste de um conjunto de comandos envolto pelo par begin
end. Um procedimento delimitado em um bloco de comandos, o programa principal tambm
delimitado em um bloco de comandos, entre outros.
Convm lembrar que todo o bloco de comandos deve possuir sempre incio e fim (begin
end), sob pena de acusar erros em tempo de compilao.
Exemplo

if media > 5 then Incio do bloco


begin de comandos
gotoxy(10,10);
write('O aluno foi APROVADO');
gotoxy(10,12);
write('Sua mdia foi de ',media:4:2); Fim do bloco
end; de comandos

Quando fazemos uso da condio de seno (ELSE), devemos tomar o cuidado de no encerrar
o comando antes. Em Pascal, como j foi visto, um comando encerra-se com um ponto-e-vrgula.
Portanto, para incluirmos a opo de execuo, caso a condio seja falsa (ELSE), NO podemos
inserir o (;) no comando ou ao final do bloco de comandos (end do bloco de comandos).

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


24
Exemplo

if mdia > 5 then


begin gotoxy(10,10);
gotoxy(10,10); if media > 5 then
write('O aluno foi APROVADO'); write('Aprovado')
end else
else write('Reprovado');
begin
gotoxy(10,10);
write('O aluno foi REPROVADO');
end;
No pode ser colocado o ;

Como j dito anteriormente, em uma condio composta obrigatrio o uso de parnteses


envolvendo as condies simples.
Exemplo

if a > b then { No precisa de parnteses }


write(a);

if (a >= b) and (b <> 0) then {Necessita obrigatoriamente }


write(b); { de parnteses }

Como observao final, podemos ainda frisar, que dentro de um comando condicional simples
(if then [else]), podemos ter diversos outros comandos condicionais. Isto conhecido
como condies aninhadas.
Exemplo

if matricula <> 0 then


if nr_faltas < 16 then
if media > 7 then Ifs aninhados
begin
gotoxy(10,10);
write('O aluno foi APROVADO');
end;

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


25
6.3 Comando Condicional Mltiplo
{ Case ... of ... : ... End; }

Regra Geral

case <condio> of <opo 1> : Comando; / Bloco de Comandos;


<opo 2> : Chamada de Procedimento/Funo
... ...
else Comando; / Bloco de Comandos;
end;

A exemplo do comando condicional simples, o comando condicional mltiplo tambm faz um


desvio na linha de execuo de um programa. A diferena que em comando condicional simples, avalia-
se apenas uma condio, que pode ser verdadeira ou falsa, tendo no mximo duas opes para a
continuidade da linha de execuo; enquanto que em um comando condicional mltiplo, o desvio poder
se dar em diversas opes.
Em um comando condicional mltiplo, assim como em um comando condicional simples,
apenas uma das opes de continuidade da linha de execuo ser executada, ou seja, se a linha segue por
uma opo, no poder seguir em outra logo aps, podendo existir apenas em cada opo um comando ou
bloco de comandos.
As condies so montadas de forma diferente do que em um comando condicional simples.
Todas as comparaes so realizadas em cima de uma mesma varivel (ou expresso envolvendo
variveis, mas que resultem sempre em apenas um valor), que deve obrigatoriamente ser uma varivel
inteira, um char ou um boolean. A comparao ser feita com cada um dos valores de caso
escritos para o programa.
Existe ainda uma condio opcional, que s ser selecionada se nenhuma das condies de caso
o foi. Da mesma forma que um comando condicional simples, esta opo descrita pelo comando
else, e segue a mesma regra das outras opes de valores de caso.
O comando deve terminar com a escrita de um end (o incio o prprio case).
Exemplo

case variavel of
25,50:
begin
write('variavel vale 25 ou 50');
end;
100:
write('variavel vale 100');
101..200:
write('variavel vale de 101 a 200');
300:
mostra300;
else
write('variavel no entrou em nenhum dos casos');
end;

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


26
6.4 Exerccios de programas com seleo no Turbo Pascal
21) Escrever um programa que efetue a leitura de trs valores (variveis A, B e C) e apresente os valores
dispostos em ordem crescente.

22) Escrever um programa que leia um nmero inteiro. Mostrar se o nmero lido par ou mpar.
(No pode ser usada a funo odd() )

23) Escrever um programa que efetua a leitura de trs valores (variveis A, B e C) e calcula as razes de
uma equao de 2 grau, apresentando as duas razes, se para os valores informados for possvel
efetuar o referido clculo, caso os valores no possam ser resolvidos pela frmula de Bskara, indicar
que a equao no possui razes reais.

24) Escrever um programa que leia quatro valores referentes a quatro notas escolares de um aluno e
imprimir uma mensagem dizendo que o aluno foi aprovado, se o valor da mdia escolar for maior
ou igual a 5.0. Se o aluno no foi aprovado, indicar uma mensagem informando esta condio.
Apresentar junto com uma das mensagens o valor da mdia do aluno para qualquer condio.

25) Escrever um programa que leia dois valores numricos e mostre a diferena do maior para o menor.

26) Escrever um programa que leia dois valores A e B. Escrever a seguinte mensagem: So mltiplos
ou No so mltiplos.

27) Escrever um programa que leia trs valores A, B e C e verifica se eles formam ou no um tringulo.
Supor que os valores lidos so inteiros e positivos. Caso os valores formem um tringulo, calcular e
escrever a rea deste tringulo. Se no formam um tringulo, escrever esta mensagem: No formam
um tringulo.

28) Escrever um programa que leia 2 nmeros. Mostrar quais nmeros so divisveis por 2 e por 3.

29) Escrever um programa que leia 2 nmeros. Mostrar quais nmeros so divisveis por 4 ou por 5.

30) O departamento que controla o ndice de poluio do meio ambiente mantm trs grupos de indstrias
que so altamente poluentes. O ndice de poluio aceitvel varia de 0,05 a 0,25. Se o ndice sobe at
0,3 as empresas do 1 grupo so notificadas a paralisarem suas atividades. Se o ndice aumenta at 0,4
as empresas do 1 e 2 grupos so notificadas a paralisarem suas atividades. Finalmente, se o ndice
cresce para uma valor maior que 0,4 as empresas do 1, 2 e 3 grupos devem ser notificadas a
paralisarem suas atividades. Escrever um programa que leia o ndice de poluio medido e emita a
notificao adequada aos diferentes grupos de empresas.

31) Escrever um programa que l o nmero de um vendedor, seu salrio fixo e o total de vendas por ele
efetuado em um determinado ms. Cada vendedor recebe salrio fixo mais uma comisso,
proporcional s vendas por ele efetuadas. A comisso de 10% sobre o total de vendas at
R$1.000,00 e 20% sobre o que ultrapassa este valor. Escrever o total ganho em comisses juntamente
com o salrio fixo.

32) Escrever um programa que leia um nmero inteiro. Caso este nmero seja divisvel por 2, mostrar o
quadrado do nmero lido. Caso este nmero seja divisvel por 3, mostrar o cubo deste nmero e caso
o nmero seja divisvel por 4, mostrar a raiz quadrada do nmero. O nmero pode ser divisvel pelos
3 valores citados, (ex. 12), ento deve-se mostrar as 3 condies.

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


27
33) Escrever um programa que leia um nmero inteiro. Mostrar o seu valor em mdulo. (No pode ser
usada a funo abs()).

34) Escrever um programa que leia o nmero de identificao e as trs notas obtidas por um aluno nas trs
verificaes. Para o aluno calcular a mdia de aproveitamento segundo a frmula de mdia ponderada
descrita abaixo:

Ma := (n1 + (n2 * 2) + (n3 * 3) ) / 6 :


Conceito Mdia (Ma)
O programa deve escrever a mdia de A >= 9.0
aproveitamento, o conceito correspondente e a mensagem: B >= 7.5 e < 9.0
Aprovado, se o conceito for A ou B, e Reprovado se o C >= 6.0 e < 7.5
conceito for C, D ou E. D >= 4.0 e < 6.0
E <4
A atribuio de conceitos obedece a tabela ao lado

35) Escrever um programa que leia 5 nmeros, A, B, C, D e E. Mostrar o maior nmero e o menor
nmero.

36) Escrever um programa que leia um valor inteiro. Caso o valor seja menor que 100 e maior que -1,
escrever em qual dezena ele se encontra (8 est na 1a dezena, 23 est na 3a dezena, 91, est na 10a
dezena). Caso o nmero no esteja em nenhuma das 10 primeiras dezenas, escrever esta informao.

37) Ler quatro valores referentes a notas escolares de um aluno e imprimir uma mensagem dizendo que o
aluno foi aprovado, se o valor da mdia escolar for maior ou igual a 7.0. Se a mdia for menor que
7.0, solicitar a nota de exame, somar com a mdia e obter nova mdia. Se a nova mdia for maior ou
igual a 5.0, apresentar uma mensagem dizendo que o aluno foi aprovado em exame. Se o aluno no
foi aprovado, indicar uma mensagem informando esta condio. Apresentar junto com as mensagens
o valor da mdia do aluno, para qualquer condio.

38) Efetuar a leitura de quatro valores (variveis A, B, C e D) e apresentar os valores dispostos em ordem
decrescente.

39) Escrever um programa que leia uma hora inicial (horas e minutos) e uma hora final (horas e minutos).
Mostrar o tempo decorrido entre a hora inicial e a hora final, em horas e minutos.

40) Escrever um programa que leia 3 valores. Verificar se eles formam um tringulo. Caso eles no
formem um tringulo, indicar esta mensagem. Caso eles formem um tringulo, indicar o tipo de
tringulo que eles formam. Deve-se para cada tringulo informado, ser mostrado apenas 1 tipo.

Condio Tipo de tringulo


Todos os valores iguais Tringulo Equiltero
Dois valores iguais (Quaisquer) Tringulo Isceles
a2 = b2 +c2 Tringulo Retngulo
a2 > b2 +c2 Tringulo Obtusngulo
a2 < b2 +c2 Tringulo Acutngulo

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


28
7 Comandos de Repetio
Como o prprio nome diz, so programas que repetem sua execuo at um determinado ponto
quando encerram. So vulgarmente conhecidos como laos, ou seja, quando chegamos ao final de um
trecho de programa envolto por um lao, retornamos ao incio do mesmo, e o executamos novamente.

7.1 Novos Conceitos na utilizao de variveis


As variveis vistas at agora serviram sempre para o armazenamento de valores do programa.
Uma varivel era definida, colocado um valor nela via teclado (quando era lida) ou via expresso
numrica (comando de atribuio). Seu valor era utilizado ou em testes ou em clculos e, finalmente,
quando necessrio, era exposto. Todavia, veremos utilizaes um pouco mais inteligentes para as
variveis.
Os tipos de variveis no mudam, ou seja, os tipos integer, boolean, real entre
outros so os mesmos; o que muda o enfoque dado a estas variveis. Elas sero especialmente teis em
programas com repetio.

7.1.1 CONTADOR
Varivel do tipo numrica inteira, que serve para, como diz o seu nome, contar quantas vezes algum
trecho de programa foi executado (quantas vezes alguma ao foi realizada). Por exemplo: para sabermos
quantas vezes foi executado um bloco de comandos, colocamos um comando a fim de incrementar1 a
varivel contadora, que j deve ter sido previamente inicializada (para no somarmos nada com algum
nmero). Quando o programa parar de executar o referido bloco de comandos, a varivel conter o
nmero de vezes que o referido bloco foi executado.

7.1.2 ACUMULADOR
Varivel que serve para acumular valores, geralmente numricos. Serve na prtica para obtermos
uma determinada soma. Por exemplo: para sabermos a soma de 30 nmeros a serem lidos, junto com o
trecho de leitura atualizamos a varivel acumuladora, que j deve estar inicializada. No final da 30a
leitura, teremos a soma dos 30 nmeros lidos. Ela til tambm para sabermos a mdia dos nmeros
lidos pois ela nada mais do que a soma dos nmeros divididos pela quantidade de nmeros lidos.

7.1.3 FLAG
Traduo do Ingls: bandeira, sinal. um tipo de varivel para controle do estado de um programa.
Usada em testes. Serve na prtica para sabermos se um lao pode ou no acabar, se uma frmula foi ou
no resolvida (o programador deve saber os motivos o porqu da frmula no ser resolvida). Nos
possibilita a comunicao entre diversas partes de um programa. Pode ser qualquer tipo de varivel, mas
no caso de necessitarmos de apenas dois estados, aconselhvel o uso de variveis do tipo boolean,
devido a sua facilidade no uso em testes e por que seu contedo so as constantes mnemnicas true
ou false.

1
ao de somar uma unidade a um valor
Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal
29
7.2 Lao com contador
Regra geral

for <variavel> := <valor inicial> to <valor final> do


Bloco de Comandos

A variavel uma varivel contadora, que controlada pelo computador. O bloco de


comandos vai ser executado tantas vezes quantas forem necessrias para a variavel sair do valor
inicial e alcanar o valor final. A cada final do bloco de comandos, a varivel incrementada (somada) a
uma unidade. Na prtica, como se ao final do bloco o computador realizasse estas trs aes:
Verificar se a varivel de controle j chegou ao valor final
Se chegou, segue para o prximo comando, aps o final do bloco
Se no chegou, incrementa uma unidade varivel de controle, e retorna ao incio do lao, a fim do
bloco de comandos ser executado novamente.
Como o contador controlado pelo computador, PROIBIDO alterar o valor da varivel
dentro do lao. O valor do contador pode ser apenas testado ou visualizado. Ao final do lao, a varivel
ir conter o valor final, definido no incio do comando.
O exemplo abaixo, mostra a leitura de 10 nmeros, encontrando o maior.
Exemplo
Valor inicial
procedure leitura;
begin
for i := 1 to 10 do
begin Valor final
gotoxy(10,10);
write('Informe um No. : ');
num := 0;
read(num);
if i = 1 then
maior := num;
if num > maior then
Varivel de controle
maior := num;
end;
end;

A varivel de controle de lao, no caso anterior a varivel i, sempre incrementada de uma


(1) unidade. Em Pascal, no possvel, increment-la com mais de uma unidade. Por ser um contador
deve ser do tipo numrico inteiro, como j foi visto.
Este comando tambm conhecido como lao com contador progressivo, pois o contador
incrementado at alcanar o seu valor final (que obviamente maior do que o valor inicial).
Tambm faz parte do lao com contador um tipo de lao que o contador comea com um valor
inicial maior do que o valor final, chamado de contador regressivo. Neste caso, a ao ocorre da mesma
maneira que o contador progressivo, mas ao invs de incrementar em uma unidade, a varivel
decrementada (diminuda) de uma unidade a cada passagem.

Regra geral

for <variavel> := <valor final> downto <valor inicial> do


Bloco de Comandos

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


30
A incluso do downto ao invs do to, transforma o comportamento do lao em regressivo. O
exemplo abaixo, mostra os nmeros mpares entre 1 e 10, comeando pelo maior. Este exemplo mostra
ainda uma rotina para controle de posies na tela, a fim de que os valores no apaream de forma
bagunada.
Exemplo

coluna := 10; linha := 10;


for i := 10 downto 1 do
begin
if odd(i) then
begin
gotoxy(coluna,linha);
write(i) ;
coluna := coluna + 5;
if coluna > 60 Then
begin
coluna := 10;
linha := linha + 1;
end;
end;
end;

7.3 Lao com teste no final


Regra geral

repeat
comando; / bloco de comandos;
until <condio> ;

O bloco de comandos vai ser executado sempre pelo menos uma vez e s vai ser terminado
quando a condio de sada (FLAG) for verdadeira. Na prtica ocorre o seguinte:
a) bloco de comandos executado inteiro
b) Ao chegar ao final (until), a condio avaliada. Caso ela seja TRUE, a linha de execuo segue
para o prximo comando, logo aps o until. Caso a condio seja FALSE, a linha de execuo
retorna ao primeiro comando do bloco, onde recomea a execuo
A delimitao de incio e de fim do bloco de comandos, realizada pelas prprias partes do
comando: repeat marca o incio e until <condio> marca o fim.
A condio a ser colocada no final do comando, segue as regras de condies j comentadas,
podendo ser simples ou compostas.
Um exemplo muito comum da utilizao de lao com teste no final, a leitura de uma varivel
dentro de um certo domnio de valores vlidos. Isto acontece, por exemplo, em um programa que l
valores de notas para alunos. As notas vlidas esto no intervalo de 0.0 a 10.0 (in [0.0 .. 10.0]).
Nos programas anteriores, o usurio poderia digitar a nota que quisesse (por exemplo 312.6) que o
programa iria calcular a mdia, e, com certeza, estaria errada. Para solucionarmos esses problemas,
usamos o tipo de construo abaixo:

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


31
Exemplo

repeat
var_num := 0;
read(var_num);
until (var_num >= 0.0) and (var_num <= 10.0);

No exemplo anterior, a linha de execuo s vai sair de dentro do lao quando for digitada uma
nota vlida. Este tipo de construo tambm til quando trabalhamos com nmeros inteiros. Os nmeros
inteiros possuem limites de abrangncia de valores. Por outro lado, impossvel proibir o usurio de
tentar informar um nmero real em uma varivel inteira. Para isto devemos proteger a leitura da varivel
inteira.
Exemplo

repeat
num := 0;
read(num);
until (num >= -32768) and (num <= 32767)and (num = int(num) );
a := trunc(num);

No exemplo acima, a varivel de trabalho num utilizada apenas para evitar a ocorrncia de
um erro, caso o valor digitado pelo usurio seja do tipo real ( bvio que a varivel num do tipo real).
As duas primeiras condies verificam o escopo do valor, enquanto a ltima verifica se dentro da varivel
num existe um nmero inteiro (a varivel num real, mas a verificao para conferir se o seu
contedo inteiro).
Este comando tambm utilizado quando em um programa, se faz a verificao se dois nmeros
lidos so mltiplos. Para resolver o problema, no precisamos de lao de repetio. Mas, e se quisssemos
informar e verificar outra dupla de nmeros ? Teramos de executar novamente o programa e, assim,
sucessivamente. Com a utilizao do lao, podemos executar o mesmo programa quantas vezes
quisermos. A condio de parada (FLAG de sada) pode ser quando o valor da varivel a for zero.
Exemplo

begin Inicio do programa


repeat principal
leitura;
verifica; Fim do programa
mostra; principal
until (a = 0)
end;

7.4 Lao com teste no incio


Regra geral

while <condio> do
comando / bloco de comandos;

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


32
Diferente do comando visto anteriormente, este lao testa a condio antes de executar o bloco
de comandos. O lao executado enquanto a <condio> for verdadeira. Na prtica, acontece o seguinte:
a) Ao chegar ao comando a condio avaliada. Se for FALSE, o bloco de comandos no
executado, e a linha de execuo passa para o prximo comando aps o delimitador de final de bloco;
b) Caso a condio avaliada seja TRUE, o bloco de comandos executado inteiro, e ao final deste, a
condio novamente avaliada, seguindo novamente esta sistemtica.

A condio a ser colocada no incio do comando, segue as regras j comentadas e podem ser
simples ou compostas.
A utilizao prtica deste comando se d, pela necessidade de que alguns comandos s se
repitam quando e enquanto uma condio for verdadeira. Este comando embute as funcionalidades de um
comando condicional simples, junto com um lao de repetio. Por j realizar o teste no incio, a(s)
varivel(eis) envolvida(s) na condio devem conter um valor antes do inicio do comando.
Um exemplo prtico a soma de valores (utilizao de um acumulador) enquanto este no for
maior do que um valor previamente estabelecido.
Exemplo

soma := 1;
final := 100;
while soma < final do
begin
soma := soma + (soma * 2);
end;
gotoxy(12,5);
write('O valor que est no acumulador vale : ',soma);

Os dois ltimos laos tem funo bastante semelhante. Em cada caso deve ser avaliada a
utilizao de um ou outro, segundo as necessidades. A diferena bsica entre eles que ...

7.5 Exerccios de programas com repetio


41) Escrever um programa que leia 10 nmeros e mostre o maior.

42) Escrever um programa que leia 5 valores para A, um de cada vez, contar quantos destes valores so
negativos e escrever esta informao.

43) Escrever um programa que l 8 valores para a varivel B, um de cada vez. Mostrar a soma dos
valores lidos que sejam pares.

44) Escrever um programa que leia dois nmeros inteiros A e B, calcular e mostrar:
a soma dos inteiros entre eles;
a quantidade de nmeros mpares entre eles;
a quantidade de nmeros pares entre eles, inclusive eles.

45) Escrever um programa que leia um nmero inteiro M e um valor para a varivel N. Escrever o
valor da potncia de NM .

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


33
46) Escrever um programa que gera e escreve os nmeros mpares entre 100 e 200.

47) Montar um programa que leia um nmero inteiro, positivo menor ou igual a 10. Montar e mostrar a
tabuada deste nmero, como o exemplo abaixo.

Informe um nmero: _

Tabuada de 8
1 x 8 = 8
2 x 8 = 16

10 x 8 = 80

48) Escrever um programa que leia uma quantidade no determinada de vezes um nmero inteiro. Para
cada nmero lido calcular e mostrar seu quadrado, seu cubo e sua raiz quadrada. Parar de informar
quando o nmero lido for igual a zero. A exposio deve ser feita da maneira abaixo.

Informe um nmero: _

Nmero Quadrado Cubo Raiz


5 25 125 2,2361
4 16 64 2
8 64 512 2,8284

49) A srie de Fibonacci tem como os dois primeiros termos respectivamente 0 e 1. A partir deles, os
demais so construdos pela seguinte regra:
tn = tn-1 + tn-2
Escrever um programa que gere e mostre os 10 primeiros termos da srie, um abaixo do outro, indicando
a sua posio de ordem (se o 1o, ou o 2o ou o 7o da srie, etc) mostrando tambm a soma dos 10
primeiros termos.

50) Escrever um programa que l um nmero inteiro. Mostrar se o nmero ou no primo.

51) Escrever um programa que gere e escreva os 4 primeiros nmeros perfeitos, juntamente com o seu
nmero de ordem. Um nmero perfeito aquele em que a soma dos seus divisores, exceto ele, seja
igual a ele prprio. Ex.: 6 = 1+2+3; 28=1+2+4+7+14.

52) Supondo que a populao de uma cidade A seja de 90.000, com taxa de crescimento de 3,1% ao
ms, e que a populao de uma cidade B seja de 200.000, com taxa de crescimento de 1,5% aos
ms. Escrever um programa que calcule e escreva com quantos meses a cidade A ultrapassaria em
populao da cidade B, mantendo as taxas atuais de crescimento. Mostrar as populaes das
cidades.

53) Escrever um programa que l um nmero no conhecido de valores inteiros, um de cada vez, e conta
quantos deles esto em cada um dos intervalos : [0..25], (25..50], (50..75] e (75..100]. Parar de
informar quando o nmero 1 for digitado. Mostrar quantos nmeros entraram em cada intervalo e
quantos no entraram em nenhum intervalo.

54) Escrever um programa que l 5 pares de valores A e B, todos inteiros e positivos, um par de cada
vez, e com A < B. Escrever os inteiros pares de A at B, incluindo A e B se forem pares.
Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal
34
55) Escrever um programa que l um nmero no determinado de valores inteiros e positivos, menores
que 5.000. A cada nmero lido, mostrar a quantidade de nmeros lidos, juntamente com a mdia
destes. Parar de informar quando o valor informado seja igual a 1.

56) Escrever um programa que l um nmero no determinado de pares valores M e N, ambos


inteiros e positivos, um par de cada vez. Calcular e escrever a quantidade de nmeros inteiros
existentes entre eles, bem como a soma dos inteiros mpares existentes entre eles. Parar de informar
quando o primeiro nmero seja igual a 0 (zero).

57) Joo possui R$ 1.800,00. Gostaria de comprar um computador que custa R$ 2.000. Ele gosta de
aplicar seu dinheiro na caderneta de poupana, que paga sempre 1,5% ao ms. Supondo que o preo
do computador no mude, escreva um programa que calcule em quantos meses Joo ir poder
comprar o computador, mostrando a evoluo de seu saldo na poupana, conforme o modelo abaixo.

Saldo anterior Juros Saldo Atual


o
1 ms 1800.00 27 1827.00
2o ms 1827.00 27,40 1854,40
3o ms 1854.40 27,81 1882,21

58) Escrever um programa que leia um valor x, e escreve os 20 primeiros termos da srie abaixo:
1o termo: 1
2o termo: 1 + 1/x2
3o termo: 1 + 1/x3
4o termo: 1 + 1/x4

59) O cardpio de uma casa de lanches dado pela tabela abaixo:


Cdigo Especificao Preo Unitrio
100 Cachorro Quente 2,50
101 X Simples 2,80
102 X Especial 3,00
103 X Especial c/ bacon 3,30
104 Refrigerante 0,70
Escrever um programa que leia o pedido de um cliente, especificando a quantidade de cada item. Parar de
informar quando o cdigo informado seja igual a zero. Montar (na tela do computador) o pedido como
segue:

Escolha o item:
Informe a quantidade do item:
Cdigo Especificao Quantidade Valor
100 Cachorro Quente 1 2,50
103 X Especial c/ bacon 3 9,90
104 Refrigerante 4 2,80
-------
Total--> 11,20

60) Repetir o programa acima para um nmero indeterminado de clientes. Ao final da conta de cada
cliente, realizar a seguinte pergunta: Informar mais um cliente (Sim/No). Quando no houverem
mais clientes a informar, mostrar o total do faturamento da lanchonete (o total geral das contas
vendidas).

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


35
8 Tcnicas avanadas de programao
8.1 Definio de Constantes
Muitos programas possuem determinados valores que nunca so alterados, como o nmero de
dias de uma semana, ou se mudam, diferem somente de um programa para outro, com a mesma lgica
(caso de um programa para uma empresa e outro para outra). O uso de identificadores de constantes para
esses valores simplificam os programas e facilitam sua atualizao. Para que o valor se altere em todo o
programa, necessria somente a alterao do seu valor em um ponto.
Para definir uma constante usamos a palavra reservada const. Esta incluso marca o incio
da rea de declarao de constantes. Esta seo deve estar inserida logo aps a rea de identificao do
programa, antes da rea de definio das variveis. A utilizao de outra palavra reservada (por exemplo
o incio da rea de definio de variveis) marca o fim das declaraes de constantes.
Exemplo
uses crt;
Marca o incio da rea de
const declarao de Constantes
tamanho = 15
nr_leituras = 20
Marca o fim da rea de declarao
var de Constantes
i, j : integer;

O uso de constantes alm de auxiliar a leitura e interpretao do cdigo fonte, facilita a


reutilizao de um programa para a criao de outro. Por exemplo, caso um programa calcule o salrio de
vendedores com percentuais de 3% e 5%, dependendo a quantia vendida num determinado ms (empresa
X), para escrever o mesmo programa para outra empresa que paga 4% e 6% de comisso (empresa
Y), somente sero mudadas as constantes de comisso, , enquanto todo o restante do programa
permanecer inalterado.
Exemplo
{ exemplo usado no programa { exemplo usado no programa
para calculo da empresa X } para calculo da empresa Y }
Const const
Comiss1 := 3; comiss1 := 4;
Comiss2 := 5; comiss2 := 6;

O uso de constantes em testes, expresses envolvendo atribuio, ou qualquer outro comando


que no modifique o valor da constante so vlidos. Uma constante pode ser encarada como uma varivel
que nunca muda de valor. Nas expresses envolvendo atribuies, as constantes devem ficar no lado
direito da expresso.

8.2 Variveis locais e variveis globais


As variveis definidas na seo de definio de variveis de um programa Pascal, so
consideradas globais. Elas so conhecidas em todas as partes do programa, e seu valor tambm pode ser
verificado ou incluso em operaes aritmticas.

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


36
Mas devido ao fato de que, ocasionalmente, uma varivel utilizada em apenas um
procedimento, torna-se pouco cmodo deixar sua definio na rea das globais. Para isto, podemos incluir
uma nova seo de variveis, logo aps a declarao do procedimento/funo, definindo nela , as que
sero usadas somente naquele procedimento. A estas variveis, declaradas na parte interna de um
procedimento ou funo, damos o nome de variveis locais.
Exemplo
uses crt;
var
x,y : integer; Variveis globais, existem em
r : real; todas as partes do programa
procedure calcula;
var
i,j,k : integer;
p : real;
begin Variveis locais, s existem dentro
... do procedimento calcula
...
end;

Nenhuma relao existe entre uma varivel local e uma global, ainda que definidas com o
mesmo nome. totalmente desaconselhvel a definio de uma varivel local com o mesmo nome de
uma global, a fim de evitar confuso por parte do programador. O programa no faz confuso nenhuma,
porm o programador pode facilmente se confundir.
Dentro de um procedimento, as variveis locais tem preferncia sobre as globais, ou seja, caso
exista uma varivel x global, e uma x local (note-se que so duas variveis distintas, mas com igual
nome), quando for requisitado o valor da varivel x, ser mostrado o valor da varivel x local.
Vale lembrar ainda, que uma varivel local, existe somente dentro do procedimento que a
declarou. Mesmo que um procedimento seja chamado dentro de outro que possui variveis locais, estas
no existiro dentro do procedimento chamado, ou seja, o valor destas variveis no poder ser utilizado.
A grande vantagem das variveis locais que o espao de armazenamento destas na memria, s
efetivamente ocupado quando o procedimento executado. Ao final da execuo, esse espao liberado
para a memria livre. Com isso, os programas ficam mais leves, ou seja, ocupam menos memria.
Regra geral
programa var Valem em todo o
x : integer;
programa.
y : real;
{ procedimentos }

a : integer
Variveis Proc1 b : integer;
locais distintas c : real;
Variveis local e
global com o
mesmo nome.
a : integer; Dentro de proc2
Proc2 x : integer; vale a local.
d : char;

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


37
8.3 Passagem de Parmetros
A passagem de parmetros uma necessidade para a programao. Ela possibilita o
reaproveitamento de cdigo, de maneira a tornar o programa mais limpo, curto e fcil de entender. Ela
nada mais do que a chamada a um procedimento ou funo, estabelecendo valores iniciais dos dados
que este sub-programa manipula.
Rotinas com passagem de parmetros devem ser escritas sempre que um determinado bloco de
cdigo (parte de um programa fonte) se repita. Por exemplo, para escrevermos uma mensagem na tela do
computador, sempre utilizada a dupla de comandos: gotoxy(C,L) e write(texto). O
primeiro comando para posicionar o cursor e o segundo para escrever algo na tela. Esta operao se
repete sempre, mudando apenas a posio onde se quer escrever (C,L) e o que se deseja escrever (texto).
Nada mais sensato do que criar um procedimento que realize a tarefa de escrever algo na tela,
que possa ser usado com quaisquer valores para a posio e para o texto a ser escrito.
Exemplo

procedure escreve(p_col, p_lin : integer; texto : string);


begin
gotoxy(p_col,p_lin);
write(texto);
end; Definio dos parmentros
do procedimento

Outro exemplo prtico da utilizao de parmetros o caso de um procedimento que calcula as


razes de uma equao de 2o grau pela frmula de Bskara. Toda a parte do processamento idntica para
todos os valores. A frmula nunca muda, o que muda so os valores que nela so inseridos. Nada mais
lgico do que construir um sub-programa que execute a frmula de Bskara, mudando apenas os valores
de entrada.

Exemplo

procedure baskara(p_a, p_b, p_c : real)


begin Definio dos parmetros

{ parte relativa ao clculo da frmula sempre igual,


usando os parmetros de entrada deste procedimento }

end;

Quando um procedimento/funo definido para receber parmetros, a chamada destes deve


obrigatoriamente ser acompanhada dos valores dos argumentos, que devem ser passados na mesma ordem
e na mesma seqncia em que foram definidos, ou seja, se o primeiro parmetro o valor de uma coluna
(da tela), o primeiro parmetro a ser passado deve ser o da coluna. A mesma quantidade de parmetros
definidos deve ser passada na chamada do procedimento/funo, sob pena de erros em tempo de
compilao.

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


38
Exemplo

begin
escreve(10,10, 'mensagem de teste');
col := 15;
lin := 15;
escreve(col, lin, 'outro teste');
end;

Os parmetros dentro de um procedimento/funo so considerados variveis locais, ou seja, s


existem dentro dele prprio. Podem ter seu valor alterado, mas esta tcnica no muito recomendada.
Ainda por serem variveis locais, os parmetros no necessitam de uma definio prvia na rea de
definies de variveis, e tambm no necessitam ser definidos como variveis locais, porque a prpria
definio ao lado do nome do procedimento/funo se encarrega disso.
Os parmetros servem ainda para a comunicao entre diversas partes do programa. Isto
significa que os dados locais de um procedimento podem ser passados a outro, desde que enviados como
parmetros. Por este motivo e por tudo que j foi visto, os parmetros so tambm conhecidos como
parmetros de entrada.
Vale lembrar que a designao dos nomes de parmetros seguem as normas dos nomes de
identificadores. Os exemplos aqui mostrados sugerem a utilizao do p_ antes do nome, apenas com o
motivo de mais fcil identificao dos mesmos como parmetros.

8.4 Funes
Funes, como j foi visto, so procedimentos que retornam um valor. Existem cdigos de
programas que so utilizados para chegar a um resultado que deve ser enviado de volta ao ponto onde o
bloco de cdigo foi chamado.
Por exemplo, havendo a necessidade de encontrar o maior valor entre 3 nmeros, deve-se
escrever o cdigo para solucionar o pedido (igual a um procedimento, que pode conter parmetros). De
posse do valor correto, basta envi-lo como resultado da funo. Como retorna um valor, na definio de
uma funo deve-se indicar o tipo de dado que ela retornar.
A forma de escrita de uma funo difere da de um procedimento em apenas 3 pontos:
a) nome, comea por function e no por procedure;
b) deve-se definir o tipo de dados que a funo retorna
c) deve-se explicitar o retorno da funo
Exemplo

function calcula(p_a, p_b, p_c : integer) : integer;


var
maior : integer;
begin
maior := p_a;
if p_b > maior then Indicao Tipo de valor que esta
maior := p_b; que esta funo retorna
if p_c > maior then uma funo
maior := p_c;
calcula := maior; Implementao do retorno da funo.
end;

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


39
Como o tipo de retorno de uma funo definido em seu cabealho, se pode afirmar uma
varivel com o nome da funo no programa. O tipo desta varivel o tipo definido na funo. Podemos
utilizar uma funo em qualquer hiptese de utilizao de uma varivel. No caso de uma funo receber
parmetros (parmetros de entrada) estes no podem ser omitidos em uma chamada de funo. O valor de
retorno de uma funo tambm conhecido como parmetro de sada.
Exemplo

a := 5;
b := 6;
c := a + b;
{ chamada de funo com atribuio }
ma := calcula(a,b,c);
{ chamada de funo com uso do valor de retorno em um if }
if calcula(a, b, c) = c then {
{ chamada de funo com o uso do valor de retorno em um
write}
write('o maior valor vale ',calcula(a,b,c) );

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


40
8.5 Exerccios com funes e passagem de parmetros
61) Elaborar uma funo que converta graus Centgrados em Fahrenheit.
Dados de entrada : graus Centgrados (real)
Dado de sada : graus Fahrenheit (real)

62) Elaborar uma funo que converta graus Fahrenheit em Centgrados


Dados de entrada : graus Fahrenheit (real)
Dado de sada : graus Centgrados (real)

63) Elaborar uma funo que calcule o volume de uma lata.


Dados de entrada : Raio (R) e altura (A) (reais)
Dado de sada : volume (real)

64) Elaborar uma funo que calcule a soma dos quadrados de 3 nmeros.
Dados de entrada : A, B, C (inteiros)
Dado de sada : soma (real)

65) Elaborar uma funo que eleve um nmero a um expoente.


Dados de entrada : Nmero (real) expoente (inteiro)
Dado de sada : resultado (real)

66) Elaborar uma funo que calcule se um nmero primo.


Dados de entrada : Nmero (inteiro)
Dado de sada : Resultado (boolean: True ou False)

67) Elaborar uma funo que calcule se um nmero multiplo de outro.


Dados de entrada : A, B (inteiros)
Dado de sada : Resultado (boolean: True ou False)

68) Elaborar uma funo que calcule o quantos nmeros pares existem entre dois nmeros.
Dados de entrada : A, B (inteiros)
Dado de sada : Quantidade de nmeros (inteiro)

69) Elaborar uma funo que calcule uma determinada operao entre 2 nmeros (soma +, subtrao -,
diviso/, multiplicao *).
Dados de entrada : A, B (inteiros), operao (char)
Dado de sada : Resultado (real)

70) Elaborar uma funo que leia um nmero inteiro dentro de uma faixa..
Dados de entrada : COL, LIN, inicio, fim (inteiros), texto (string)
Dado de sada : nmero lido (inteiro)

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


41
9 Tipo de dados orientados a caracteres
9.1 Caracter
Um caractere uma letra, um dgito, um sinal de pontuao, um espao em branco ou outro
elemento do conjunto de caracteres. Em um programa Pascal, cada caractere realmente armazenado
como um cdigo de um nico byte inteiro, de 0 a 255. Este cdigo definido como ASCII (American
Standard Code for Information Interchange), define o conjunto de caracteres disponveis, providenciando
um equivalente numrico para cada um dos 256 caracteres.
A maior parte da primeira metade do cdigo ASCII - nmeros de 0 a 127 - usada como padro
pelos computadores pessoais. Ela fornece os cdigos para as letras maisculas de A a Z (65 a 90); as
letras minsculas de a a z (97 a 122); os dgitos de 0 a 9 (48 a 57); os sinais de pontuao (: 58,
; 59, . 46, , 44), o sinais de operaes matemticas (+ 43,- 45,/ 47,* 42). A segunda metade
do cdigo ASCII, 128 a 255, fornece caracteres no padro que so freqentemente implementados de
modo diferente por diferentes marcas de computadores.

9.2 Tipo de dados Char


Os tipos de dados char definem no Pascal as variveis do tipo caractere. Este tipo de varivel
pode armazenar um caracter de cada vez. Os valores manipulados por variveis deste tipo devem ser
envoltos por aspas simples (nunca acento agudo). Podemos utilizar os valores de acordo com seu cdigo
ASCII, desde que eles sejam precedido do caracter de sustenido (#).
Exemplo

var
ch, ch1 : char;

{ area de programa ou de procedimentos/funcoes }


ch := 'a';
gotoxy(10,10);
write(ch); { aparecera na tela o caracter a }
ch1 := #65;
gotoxy(10,12);
write(ch1); { aparecera na tela o caracter A }
gotoxy(10,14);
if (ch = #65) then
write('Sao iguais')
else
write('Nao sao iguais');

Vale lembrar, que o caracter a diferente do caracter A, devido a eles serem dois caracteres
diferentes, existem um cdigo ASCII para cada um deles.

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


42
9.3 Tipo de dados String
Os tipos de dados string, armazenam seqncias de caracteres. O comprimento de uma
string igual ao nmero de caracteres que contm. No Pascal, o tamanho mximo de uma
string de 255 caracteres, enquanto o tamanho mnimo de 0 caracteres. Uma string que no
possua caracteres chamada de null ou vazia.
Na declarao de uma varivel do tipo string, podemos delimitar o tamanho mximo da
mesma, declarando logo aps a palavra reservada string, um nmero mximo de caracteres, envolto
entre colchetes.
Exemplo

var
st1 : string;
nome : string[30];

Os valores manipulados por variveis deste tipo, devem ser envoltos por aspas simples (nunca
acento agudo). Por ser um conjunto de caracteres, podemos acessar apenas um caracter da string. Os
caracteres em um string so numerados da esquerda para a direita, comeando em 1 e terminando no
valor do tamanho da string. Para fazer acesso a um caracter apenas, utilizamos o nome da
string, indicando qual a posio que queremos acessar, envolta entre colchetes.
Exemplo

st := ' P a s s o F u n d o '
posies -> 1 2 3 4 5 6 7 8 9 10 11

Exemplo

st := 'Passo Fundo';
gotoxy(10,10);
write(st[7]); { ira mostrar a letra F }

Como cada parte de uma string pode ser visualizada como um char, podemos
realmente manipular cada pedao da string como se fosse uma varivel do tipo char, valendo
para este pedao, todas as regras de um tipo de dados char.
Vale lembrar que o comprimento real de uma varivel do tipo string dinmico. O
tamanho mximo nela delimitado no significa que seja sempre o seu tamanho real. Este ser
determinado pelo nmero de caracteres que esto armazenados nela em um dado momento.
Uma string pode ser aumentada, diminuda, ter seus elementos trocados de ordem ou
mudados de contedo atravs de funes que a prpria linguagem Pascal j possui nela embutida (vide
relao de funes).
Por serem conjuntos ordenados de caracteres, as strings se assemelham muito a vetores
(variveis que armazenam vrios valores de um mesmo tipo) de char.

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


43
9.4 Exerccios de manipulao de strings
71) Escrever um procedimento que processe uma string de 8 valores binrios. Esta string contm apenas 7
posies preenchidas. O procedimento deve gerar a oitava posio da string, contendo o valor da
paridade par do nmero binrio compreendido nas suas 7 primeiras posies.

72) Escrever um procedimento que processe uma string de 8 valores binrios. Esta string contm apenas 7
posies preenchidas. O procedimento deve gerar a oitava posio da string, contendo o valor da
paridade mpar do nmero binrio compreendido nas suas 7 primeiras posies.

73) Escrever um procedimento que realize a soma binria de duas strings de 7 posies. A string
resultante poder ter 8 posies.

74) Escrever uma funo que receba como parmetro uma string contendo um valor binrio e o retorne no
formato decimal.

75) Escrever uma funo que receba como parmetro um nmero inteiro. Gerar a string que contenha o
valor correspondente no formato binrio e retornar o valor encontrado.

76) Escrever uma funo que receba como parmetro uma string contendo um valor octal e o retorne no
formato decimal.

77) Escrever uma funo que receba como parmetro um nmero inteiro. Gerar a string que contenha o
valor correspondente no formato octal e retornar o valor encontrado.

78) Escrever uma funo que receba como parmetro uma string contendo um valor hexadecimal e o
retorne no formato decimal.

79) Escrever uma funo que receba como parmetro um nmero inteiro. Gerar a string que contenha o
valor correspondente no formato hexadecimal. e retornar o valor encontrado.

80) Escrever um programa que leia uma string contendo apenas valores binrios (0 e 1). Mostrar a string
lida. Mostar o valor que ela representa em complemento de 2 e em sinal e magnitude.

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


44
10 Novos tipos de dados
A linguagem Pascal oferece uma grande variedade de tipos de dados padro. Entre eles, citamos
o tipo inteiro (integer) e o tipo real (real). Entretanto, alm desses tipos de variveis (tipos de
dados) padres, a linguagem de programao Pascal possibilita a construo de tipos de dados
especficos, atravs do comando Type. Esta declarao deve ser acrescentada antes da rea das
definies de variveis, pois cria novos tipos de dados.
Sua sintaxe consiste da declarao do tipo, seguida de um sinal de igualdade. Aps, devemos
escrever a estrutura do novo tipo de dados. Para descrev-la utilizaremos os tipos primitivos de dados.
Exemplo

Type
Inteiro = integer;
Alfanumerico = string;

Nas declaraes acima criamos dois novos tipos de dados, baseados em tipos primitivos do
Pascal. Se quisermos, no entanto, declarar variveis do tipo inteiro ou alfanumrico
podemos faz-lo, pois estes foram criados com o comando Type.
Exemplo

Var
i : inteiro;
nome : alfanumerico;

10.1 Conjunto de Dados de mesmo tipo (array)


A linguagem Pascal tambm nos proporciona a utilizao de variveis que no armazenam um
nico dado, mas conjuntos de dados. Entre as variveis que armazenam conjuntos de dados, encontramos
a definio de arrays, que possibilitam o armazenamento de um conjunto de valores de um mesmo
tipo de dados. Assim, podemos criar o tipos de dados que armazenam vrios valores de um mesmo tipo.
Exemplo

Type
novotp = array [1..10] of integer;

O tipo de dados novotp criado anteriormente, armazena valores inteiros. Variveis


declaradas como novotp, armazenam 10 valores inteiros distintos. Qualquer tipo de dado pode ser
estendido para um array. Um array uma varivel que repete um tipo de dado por um nmero
especificado de vezes.

10.1.1 Manipulao de conjuntos de dados de mesmo tipo


Conjuntos de dados de mesmo tipo tambm so conhecidos como variveis dimensionadas
(variveis que possuem mais de uma dimenso).

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


45

Toda a varivel dimensionada, OBRIGATORIAMENTE deve ser indexada. Ou seja, deve ser
acessada (manipulada) com a utilizao de seus ndices.

As variveis dimensionadas tem a caracterstica de poderem armazenar mais de uma valor


indistintamente. Para tanto, sempre que quisermos acessar uma varivel deste tipo, devemos fazer
referncia ao seu nome, juntamente com o ndice. Os ndices das variveis dimensionadas variam sempre
de 1 at o limite da dimenso, sendo sempre valores inteiros.

PROIBIDO: Referenciar uma posio fora do limite.


Referenciar uma matriz ou vetor (em leituras, clculos, mostragens)
sem os ndices.

10.1.2 Vetores

Vetor um conjunto de dados do mesmo tipo (criado com o auxlio de um array). Possui
apenas uma dimenso, ou seja, para identificar um elemento qualquer dentro de um vetor, necessitamos
apenas de um valor para ndice. Outro conjunto de dados do mesmo tipo so as matrizes, que possuem
sempre mais do que uma dimenso (para acessar um elemento, necessrio mais do que um ndice). Os
vetores tambm so conhecidos como matrizes de uma dimenso.
Podemos especificar um vetor criando um novo tipo de dados, que armazenam variveis com as
mesmas caractersticas e aps definindo uma varivel deste tipo, ou ainda diretamente declarando a
varivel como se fosse um conjunto de dados de iguais caractersticas.
Exemplo

type
vetor = array[1..10] of integer;

var
a,b,c : vetor;
x,y : array[1..10] of integer;

No exemplo acima, todas as variveis definidas (a, b, c, x e y), armazenam cada uma
10 valores inteiros distintos. desaconselhvel a definio de variveis dimensionadas diretamente em
sua seo, pois desta forma impossvel a construo de procedimentos/funes com passagem de
parmetros manipulando estes tipos de variveis.
Os valores das posies dentro de um vetor, comeam sempre em 1 e vo at o limite de
tamanho do vetor. Em cada posio de um vetor possvel armazenar um valor distinto.
Exemplo

a = 54 3 -9 7 88 65 0 7 12 15
posies -> 1 2 3 4 5 6 7 8 9 10

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


46
O acesso a elementos dentro de um vetor realizado atravs das posies. Os ndices das
posies so sempre valores inteiros. importante salientar que apenas os ndices devem ser inteiros, e
que os valores dos elementos podem ser de qualquer tipo.
importante lembrar a diferena entre o valor do elemento de um vetor e o valor de seu ndice.
Os ndices so sempre fixos, sua ordem crescente do valor inicial at o final. Os ndices tambm so
conhecidos como apontadores pois existe um valor sendo apontado por ele. O contedo de uma posio
apontada por um ndice chamado de valor do elemento ou simplesmente elemento. Relembrando, o
valor do ndice no possui nenhuma relao com o valor do seu contedo.
Um elemento de um vetor considerado como se fosse uma varivel independente. Todas as
regras de utilizao das variveis valem para os elementos dos vetores. Geralmente, elementos de vetores
no so tratados de forma individual, mas sim em conjunto. Esta a grande vantagem de trabalhar com
uma varivel de mesmo nome, contendo diversos valores.
A manipulao de vetores semelhante a qualquer outro tipo de manipulao de outra varivel.
O nico cuidado lembrar que num vetor, no existe apenas um valor, mas vrios (um em cada posio).
Os exemplos de cdigo abaixo demonstraro este cuidado adicional.
Leitura do vetor A de 10 posies
Exemplo
for i:= 1 to 10 do
begin
gotoxy(10,10);
write('Informe um valor para a ',i, ' posio do vetor: ');
read(a[i]);
end;

Troca dos valores negativos do vetor B de 25 posies pelo ndice da posio atual
Exemplo
for m := 1 to 25 do
begin
if b[m] < 0 then
b[m] := m;
end;

Mostragem do vetor C de 15 posies.


Exemplo
col := 10;
lin := 10;
for j := 1 to 15 do
begin
gotoxy(col,lin);
write(c[j]);
col := col + 5;
if (col > 70) then
begin
col := 10;
lin := lin + 1;
end;
end;

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


47
Para construir procedimentos/funes com passagem de parmetros envolvendo vetores se faz
necessria a criao de um tipo especfico. Como j foi dito, parmetros so variveis locais. Para um
procedimento de leitura (onde os valores devem existir tambm fora do procedimento/funo em
questo), devemos transformar os parmetros desejados em variveis globais.
A utilizao de uma varivel como ndice de um vetor no decreta sua utilizao como sendo
parte apenas dele. Esta varivel pode ser utilizada como ndice em outro vetor. Do mesmo modo, um
vetor pode ser acessado utilizando diversos ndices. O que necessrio controlar que a ao desejada,
ou seja, o valor da varivel utilizada como ndice, est no momento com seu valor correto.
Exemplo

j := 1;
for i := 1 to 10 do
begin
if a[i] < 0 then
b[i] := a[i] * i
else
begin
b[i] := a[j];
j := j + 1;
end;
end;

10.1.3 Exerccios de programas com manipulao de vetores


81) Escrever um programa que l um vetor V[6] e o escreve. Conte, a seguir, quantos valores de V so
negativos e escreva a informao.

82) Escrever um programa que l um vetor A[10] e o escreve. Leia, a seguir, um nmero qualquer para a
varivel X. Contar quantas vezes a varivel X aparece no vetor.

83) Escrever um programa que leia um vetor B[50] de nmeros inteiros e o escreve. Encontrar o menor e
o maior valor lido. Mostrar os valores encontrados.

84) Escrever um programa que leia um vetor A[10] de nmeros inteiros. Mostrar o vetor lido. Ler um
nmero inteiro e multiplicar todo o vetor pelo nmero lido. Mostrar o vetor modificado.

85) Escrever um programa que leia um vetor de 80 posies. Encontrar o maior valor do vetor e sua
posio; mostra-lo juntamente com sua posio.

86) Escrever um programa que leia um vetor V[30] e o escreve. Contar quantos valores do vetor so pares
e quantos so mpares. Mostrar estas informaes, juntamente com a mdia dos valores do vetor.

87) Escrever um programa que leia um vetor V[30] e o escreve. Calcular a mdia dos valores do vetor, a
mdia dos valores do vetor das posies pares e a mdia dos valores do vetor das posies mpares.
Mostrar as mdias calculadas com uma mensagem adequada a cada uma.

88) Escrever um programa que leia um vetor A[20] de nmero reais. Mostrar o vetor lido. Trocar a seguir
o 1 elemento com o 11, o 2 com o 12 e, assim, sucessivamente at o 10 com o 20. Mostrar o vetor
modificado.

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


48
89) Escrever um programa que leia um vetor A[20] de nmeros inteiros. Mostrar o vetor lido. Trocar a
seguir o 1 elemento com o 20, o 2 com o 19 e, assim, sucessivamente at o 10 com o 11. Mostrar
o vetor modificado.

90) Escrever um programa que leia 2 vetores de 10 posies, A e B. Mostrar os vetores lidos. Gerar um
novo vetor Y, que seja a unio dos lidos. Mostrar o vetor Y.

91) Escrever um programa que leia 2 vetores de 10 posies A e B. Mostrar os vetores lidos. Gerar um
novo vetor Y, que seja a interseo dos lidos. Mostrar o vetor Y.

92) Escrever um programa que leia um vetor de 25 posies, de nmeros inteiros. Mostrar o vetor lido.
Orden-lo, a seguir, em ordem crescente. Mostrar o vetor modificado.

93) Escrever um programa que leia um vetor V[20]. Mostrar o vetor lido. Criar dois vetores: PAR para os
valores pares e IMPAR para os valores mpares, do vetor V. Mostrar os vetores gerados.

94) Escrever um programa que leia um vetor de 30 posies sem nmeros repetidos. Mostrar o vetor lido.
Mostrar tambm quantos nmeros o usurio digitou para preencher o vetor.

95) Escrever um programa que leia um vetor de 30 posies. Mostrar o vetor lido. Encontrar o valor
maior e o menor valor. Passar o maior para a ltima posio do vetor e passar o menor para a primeira
posio, transferindo os valores que estavam nas extremidades do para as posies do maior e do
menor.
96) Escrever um programa que leia 2 vetores X e Y de 10 posies de nmeros inteiros. Ordenar os
vetores em ordem crescente. Passar os vetores para um vetor Z e, a seguir, ordenar o vetor Z em
ordem decrescente.

97) Escrever um programa que leia 2 vetores X e Y de 10 posies de nmeros inteiros. Ordenar os
vetores em ordem crescente. Passar os valores dos dois para um vetor Z, mantendo a ordem crescente,
sendo proibido reordena-lo. Mostrar o vetor Z.

98) Escrever um programa que gere os 10 primeiros nmeros primos acima de 500 e os armazene no vetor
X[10]. Mostrar, ao final, o vetor criado.

99) Escrever um programa que leia um vetor de 30 posies. Mostrar o vetor lido. Mostrar em uma nica
tela, todos os seus valores, indicando quantas vezes cada um aparece. No repetindo os que aparecem
mais de uma vez.

100) Escrever um programa que leia para um vetor de V[30] as suas vinte primeiras posies. Ordena-
las em ordem crescente. Ler, a seguir, 10 valores e inseri-los no vetor V, mantendo a ordem crescente.
A cada valor inserido, mostrar a nova formao do vetor.

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


49
10.1.4 Matrizes
Conforme j visto no estudo dos vetores, as matrizes fazem parte do grupo de variveis que
armazenam vrios valores de um mesmo tipo. As matrizes diferem dos vetores por possurem mais de
uma dimenso, ou seja, necessitam de dois ndices para identificar um elemento.
O conceito de matriz estende-se para vrias dimenses (no mximo 9), porm, para efeito deste
estudo, consideraremos somente 2, a exemplo do que ocorre na matemtica.
Para definirmos uma matriz, podemos ou criar um tipo ou declar-la diretamente na rea das
variveis. Os efeitos destas duas maneiras diferentes de declarar variveis dimensionadas j foi discutido
(ver seo de vetores).
Exemplo

type
matriz = array[1..5,1..5] of integer

var
m, n, o : matriz;

O exemplo acima criou o tipo matriz (tipo de dados que armazena 25 valores inteiros) e
definiu as variveis m, n e o como sendo deste tipo.
De forma semelhante aos vetores, os ndices nas matrizes comeam sempre em 1 e vo at o
limite da dimenso.
Exemplo

ndice das linhas



ndice das colunas 1 2 3 4 5
1 4 15 6 -7 28
2 4 7 2 6 33
m= 3 6 9 0 4 4
4 -38 23 -1 41 -9
5 -78 36 0 6 -7

Da mesma forma que ocorre com os vetores, o acesso aos elementos dentro de uma matriz feito
atravs das posies. Entretanto, como um vetor possui apenas um ndice, sua posio igual ao a este
mesmo ndice, enquanto, nas matrizes, a posio formada pela tupla < nmero da linha, nmero da
coluna > (por exemplo[2,3]).
Exemplo

1 2 3 4 5
1 [1,1] [1,2] [1,3] [1,4] [1,5]
ndices de uma 2 [2,1] [2,2] [2,3] [2,4] [2,5]
matriz quadrada 3 [3,1] [3,2] [3,3] [3,4] [3,5]
de ordem 5 4 [4,1] [4,2] [4,3] [4,4] [4,5]
5 [5,1] [5,2] [5,3] [5,4] [5,5]

A diferena entre uma posio de uma varivel dimensionada e o seu valor se torna mais
evidente nas matrizes. Enquanto a posio formada por dois valores distintos de ndices, o seu contedo
(seu valor) de apenas um.

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


50
Todas as afirmaes realizadas para os vetores valem para as matrizes. A seguir, exemplos de
cdigo envolvendo operaes bsicas sobre matrizes.

Leitura de uma matriz M[5 x 5]


Exemplo
for i:= 1 to 5 do
begin
for j := 1 to 5 do
begin
gotoxy(10,10);
write(Digite um valor para a posicao [,i, ,,j,] da matriz);
read(m[i,j]);
end;
end;

Contar os valores mpares de uma matriz N[100 x 100]


Exemplo
cont := 0;
for l := 1 to 100 do
begin
for c := 1 to 100 do
If odd(n[l,c]) then
cont := cont + 1;
end;

Mostragem de uma matriz O[8 x 8].


Exemplo
col := 10;
lin := 10;
for l := 1 to 8 do
begin
for c := 1 to 8 do
begin
gotoxy(col,lin);
write(o[l,c]);
col := col + 5;
end;
col := 10;
lin := lin + 1;
end;

Nos exemplos acima, as matrizes foram trabalhadas por linha, ou seja, foram manipulados
primeiro os valores de toda a 1a linha, e aps os da seguinte. Nada impede que uma matriz seja acessada
por colunas porm sua manipulao por linha de mais fcil compreenso.
Em alguns tipos de problemas, como encontrar somas, maiores ou menores elementos de uma
coluna da matriz, faz-se necessria a manipulao da mesma por colunas.
Apenas para facilitar o entendimento das matrizes, sero mostradas as referncias a cada um dos
pedaos em que geralmente dividida uma matriz.

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


51
Regra geral

i

j 1 2 3 4 5
SUP SUP SUP
1 DP DS SUP
SUP
2 INF DP DS SUP SUP
SUP SUP
3 INF INF DP DS
SUP
4 INF DS INF INF DP
5 DS INF INF INF INF DP

Significado Frmula
DP : Diagonal principal i = j
DS : Diagonal Secundria i + j = n* + 1
SUP
: Superior a DP i < j
INF : Inferior a DP i > j

* " n: ordem da matriz, no exemplo 5

10.1.5 Exerccios de programas com manipulao de matrizes


101) Escrever um programa que leia uma matriz M[3,2]. Mostrar a matriz lida. Contar quantos valores
de M so positivos.

102) Escrever um programa que leia uma matriz N[4,3]. Mostrar a matriz lida. Ler, a seguir, um valor
para a varivel X. Contar quantas vezes este valor aparece na matriz e mostrar a informao.

103) Escrever um programa que leia uma matriz M[3,3]. Mostrar a matriz lida. Encontrar o menor
elemento da matriz e mostr-lo.

104) Escrever programa que leia uma matriz M[5,5] e calcular as somas:
a) da linha 4 de M
b) da coluna 2 de M
c) da diagonal principal
d) da diagonal secundria
e) de todos os elementos da matriz
Escrever as somas e a matriz.

105) Escrever um programa que leia uma matriz M[5,5] e a escreve. Trocar, a seguir:
a) a linha 1 com a linha 4
b) a coluna 2 com a coluna 5
c) a diagonal principal com a diagonal secundria
d) a linha 2 com a coluna 5
A cada troca realizada, mostrar a matriz. Fazer com que a matriz em todos os estgios de trocas fique
visvel em uma nica tela.

106) Escrever um programas que l uma matriz M[5,5] de nmeros inteiros. Mostrar a matriz lida.
Criar dois vetores, SC e SL contendo, respectivamente, as somas das colunas e das linhas de M.
Mostrar os vetores criados.
Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal
52
107) Escrever um programa que leia um matriz M[4,6]. Mostrar a matriz lida e criar:
a) Uma matriz M1, transposta da matriz M
b) Uma matriz M2, com as posies em que a soma dos ndices seja par, preenchida com 2, e as demais
preenchidas com 1.
c) Uma matriz N1, como sendo uma matriz identidade de uma matriz quadrada de ordem 6.
Mostrar todas as matrizes envolvidas, de modo que sejam visveis em uma nica tela.

108) Montar um programa que leia uma matriz M[6,6] de nmeros inteiros. Mostrar a matriz lida.
Passar para o vetor V, os elementos da matriz M. Mostrar o vetor V

109) Montar um programa que leia um vetor V[32]. Mostrar o vetor lido. Passar o vetor V para uma
matriz M[8,4], preenchendo a matriz por linhas. Mostrar a matriz M.

110) Ler para uma matriz M[10,4], as 3 primeiras posies de cada linha. Completar a ultima posio
de cada linha, com a soma dos 3 primeiros elementos da linha. Mostrar a matriz.

111) Na teoria de sistemas define-se o elemento mnimax de uma matriz como sendo o menor elemento
da linha onde se encontra o maior elemento da matriz. Escrever um programa que l uma matriz
M[10,10] e determina o elemento mnimax desta matriz, mostrando a matriz, o elemento e a posio
do mnimax.

112) Escrever um programa que leia uma matriz [5,15] de nmeros inteiros. Criar uma matriz com
apenas 4 colunas, onde cada coluna conter, respectivamente, o menor e o maior valor da linha, a
mdia e a soma de todos os valores da linha. Mostrar as matrizes envolvidas.

113) Escrever um programa que leia uma matriz M[7,7] de nmeros inteiros. Passar para o vetor PAR,
todos os elementos das linhas pares e passar para o vetor IMPAR, todos os elementos das linhas
mpares da matriz. Mostrar os vetores gerados.

114) Escrever um programa que leia uma matriz M[7,7]. Mostrar a matriz lida. Dividir todos os
elementos de uma linha pelo maior elemento da linha em questo. Mostrar a matriz modificada.

115) Escrever um programa que leia trs valores A, B e C, todos inteiros, positivos e menores que 11.
Preencher uma matriz M[3,10], com os 10 primeiros mltiplos positivos de cada um dos nmeros
lidos.

116) Escrever um programa que gere um vetor V[6], contendo o resultado da mega-sena obtidos
nmeros aleatrios (os nmeros vlidos na mega-sena esto no intervalo [1..60]). Ler, a seguir, de
uma matriz M[10,7], apenas as 6 primeiras posies de cada linha os nmeros apostados em 10
cartes. Calcular o nmero de acertos em cada carto, e colocar esta informao na stima coluna de
cada linha.

117) Escrever um programa que leia uma matriz M[9,9]. Mostrar a matriz lida. Encontrar o maior
elemento de cada linha e pass-lo para a posio da diagonal principal na linha. Mostrar a matriz
modificada.

118) Escrever um programa que leia uma matriz M[4,4] sem elementos repetidos. Mostrar a matriz lida

119) Muitos problemas de clculo numrico utilizam o mtodo de Gauss para efetuar o clculo. O
mtodo de Gauss s pode ser usado quando todos os elementos da diagonal principal sejam diferente
de 0 (zero), no importando se a ordem das linhas da matriz for mudada. Escrever um programa que
leia uma matriz M[5,5], e a prepara para ser utilizada no mtodo de Gauss

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


53
10.2 Conjuntos de dados de tipos diferentes
Regra geral

type
<nome_de _tipo> = record
identificador_de_campo1 : tipo;
identificador_de_campo2 : tipo;
identificador_de_campo3 : tipo;
. . .
identificador_de_campon : tipo;
end; { Final da declaracao do registro }

Embora a matriz (lembre-se, vetor uma matriz de 1 dimenso) seja uma estrutura de dados
muito til, limitada, porque todos os seus elementos devem ser do mesmo tipo. Em alguns casos, so
necessrios conjuntos de informaes em que os dados no sejam de tipo uniforme. As estruturas de
dados, que armazenam um conjunto de dados, no tendo o mesmo tipo em Pascal chamam-se
REGISTROS.
A vantagem que um registro oferece como dado estruturado a sua flexibilidade. A estrutura dos
registros formada por campos e cada campo pode ser de um tipo diferente.

Exemplo

type
pessoa = record
nome : string[20];
idade : integer;
altura : real;
peso : real;
end;

A definio do registro acima criou um novo tipo chamado "pessoa". O novo tipo um registro.
Portanto quando uma varivel declarada como sendo do tipo "pessoa", poder armazenar dados
referentes a nome, idade, altura, endereo e peso de uma pessoa. A declarao de uma varivel como
sendo um registro, aps a criao do tipo registro (com o comando type) feita de forma semelhante a
qualquer outra varivel.

Exemplo

var
fulano : pessoa;
beltrano, ciclano : pessoa;

A flexibilidade dos registros tambm proporciona uma maior facilidade no manuseio de


informaes do mesmo tipo. Uma data composta de um conjunto de 3 nmeros: dia, ms e ano. Pode-se
facilmente armazenar datas em um vetor de 3 posies, porm, a referncia a um identificador "mes",
mais facilmente compreendido do que a referncia a um "vet[2]".

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


54
Exemplo

type
data = record
dia : integer;
mes : integer;
ano : integer;
end;

var
hoje : data;
amanha, ontem : data;

O acesso aos elementos de uma varivel, declarada a partir de um tipo registro, realizado
usando como prefixo o nome da varivel, seguido de um "." (ponto), e logo aps o nome do campo do
registro desejado. Todos os comandos e funes do Pascal que podem ser empregados sobre uma
varivel, podem ser empregados sobre um campo de um registro.

Exemplo

hoje.dia := 07;
hoje.mes := 12;
hoje.ano := 2000;

read(fulano.nome);
read(amanha.ano);

write(amanha.dia);
write(ciclano.endereco);

x := fulano.idade - hoje.ano;

Nada impede que se crie um conjunto de dados de mesmo tipo sendo este um registro. No caso,
teramos da mesma forma uma matriz (ou vetor) de dados de tipos semelhantes, porem, cada elemento
desta matriz ter vrios campos.

Exemplo

var
amigos : array[1..10] of pessoa;
semana : array[1..7] of data;

O acesso neste caso, dever ser realizado atravs do nome da varivel, seguido de seus ndices
(entre colchetes, claro) tendo, logo a seguir, um "." junto com o nome do campo desejado.

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


55
Exemplos:

{ leitura de 10 amigos }
for i := 1 to 10 do
begin
read(amigos[i].nome);
read(amigos[i].idade);
read(amigos[i].altura);
read(amigos[i].peso);
end;

{ mostrar 10 amigos }
lin := 10;
for i := 1 to 10 do
begin
gotoxy(05,lin); write(amigos[i].nome);
gotoxy(30,lin); write(amigos[i].idade);
gotoxy(35,lin); write(amigos[i].altura:2:2);
gotoxy(55,lin); write(amigos[i].peso:4:2);
lin := lin + 1;
end;

{ calcular a mdia de altura de 10 amigos }


soma:=0;
for j := 1 to 10 do
begin
soma := soma + amigo[i].altura;
end;
media := soma / 10;

10.2.1 Exerccios de programas com manipulao de registros


120) Montar um programa que leia os dados de 1 pessoa (voc). O programa dever mostrar a sua
relao peso/altura.

121) Montar um programa em pascal que crie um registro para guardar as informaes de carros
(modelo, velocidade mxima, mdia de consumo, nmero de marchas e preo de mercado). Aps
criado o registro, definir 2 variveis como sendo do tipo carro. Ler informaes para as variveis e
mostr-las.

122) Usando o programa anterior, ler novamente 2 carros. Mostrar todos os dados do carro com a
menor mdia de consumo.

123) Montar um programa que informe dados referentes a 10 amigos seus. O programa dever mostrar
o nome de seu amigo mais velho.

124) Montar um programa que leia 20 datas aleatrias. O programa dever mostrar qual a maior e a
menor data. Mostrar ainda a mdia dos anos (levar em considerao apenas os anos) informados.

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


56
11 Arquivos
No decorrer deste trabalho, foram desenvolvidos vrios programas interessantes em Pascal.
Porm todos eles compactuam de uma mesma limitao: a entrada de dados deve ser realizada via teclado
ou includa no cdigo do programa e os resultados aparecem na tela do computador. Este procedimento
pode ser adotado em pequenas aplicaes, mas se forem muitos os resultados devem ser fornecidos em
uma impressora, ou conter sua entrada/sada em um arquivo.
Arquivos so estruturas de dados que continuam existindo mesmo aps o final da execuo do
programa. Eles so utilizados para armazenar dados numa forma utilizvel pelo computador sem requerer
a reentrada dos mesmos. Programas muito complexos que geram um elevado volume de dados como
sadas (por exemplo uma grande quantidade de ndices calculados) devem ter sua sada direcionada para
um arquivo para posterior depurao dos resultados, com tempo sem necessidade de os mesmos serem
transcritos ou impressos.
Um arquivo armazenado em um dispositivo de memria secundria (ou seja quando o
programa encerrado e o micro desligado, suas informaes permanecem gravadas) como por exemplo
um winchester (HD) ou um disquete. Tanto pelo sistema operacional quanto dentro de um programa, um
arquivo deve ser referenciado pelo seu nome. Por exemplo "dados.arq", pode ser o nome de um arquivo
que armazena os dados referentes a um programa qualquer. A referncia ao arquivo pode conter ainda a
especificao da unidade de disco onde o mesmo se encontra: "A" ou "C".
O Pascal suporta dois tipos bsicos de arquivo: os arquivos de dados (baseados em registros) e
os arquivos sem formato definido que armazenam texto. Os arquivos que armazenam texto devem ser
referenciados por um identificador de arquivo texto. Para se definir um identificador de arquivo texto,
sendo seguidas as regras de definio de variveis, apenas usando a palavra reservada "textfile".

Exemplo:

var
idtexto : textfile;
arq_text : textfile;

Ao contrrio dos arquivos baseados apenas em texto, os arquivos com tipos definidos, devem
armazenar apenas dados dos tipos para os quais foram definidos (os arquivos texto podem guardar
qualquer tipo de dado, mas sempre no formato texto). Os arquivos com tipo definido, podem ser baseados
em registros, o que aumenta o leque de suas aplicaes. Nada impede que seja definido um arquivo que
ir armazenar informaes de apenas um tipo de dado padro do Pascal. Para definir um arquivo baseado
em registros, deve-se definir um identificador para o arquivo, usando as palavras reservadas "file of".

Exemplo:

type
pessoa = record
nome : string[20]
idade : integer;
. . .
end;

var
arq_pes : file of pessoa ;
arq_dias : file of integer ;
ciclano : pessoa;

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


57
No exemplo anterior, foram definidos como variveis dois identificadores para arquivos de tipos
definidos: "arq_pes" e "arq_dias". O primeiro serve para referenciarmos um arquivo baseado em tipos
(definidos no registro pessoa), enquanto o segundo um identificador para um arquivo que armazena
apenas dias (de tipo integer).
Uma prtica bastante comum em programas que manipulam arquivos de tipo definido baseados
em registros, a definio de uma varivel de memria (os registros de cada arquivo so considerados
variveis de arquivo) para trabalhar com as informaes do arquivo em memria. o caso da varivel
"ciclano" no exemplo acima.
Ambos os tipos de arquivo, possuem caractersticas semelhantes no aspecto relativo aos
programas que os manipulam. Os arquivos devem ser: identificados, abertos, lidos/gravados,
posicionados e fechados.
O comando "assign(<variavel de arquivo>,<nome do arquivo>)", liga uma varivel
identificadora de arquivo a um arquivo em uma unidade de disco. Sua sintaxe compreende o nome do
identificador, seguido do nome do arquivo. O nome do arquivo pode conter ainda a identificao da
unidade de disco onde o mesmo se encontra, juntamente com a especificao do diretrio do arquivo.

Exemplo:

assign(idtexto, text.txt);

assign(arq_pes, pessoas.dat);

assign(arq_dias,A:dias.dat);

assign(arq_texto, C:\TP\BIN\exemplo.txt);

Aps ligar um identificador a um nome de arquivo, o mesmo deve ser aberto para que
informaes possam ser escritas/lidas. Existem basicamente duas formas de se abrir um arquivo: abrir um
arquivo j existente para uso de informaes contidas ou criando um arquivo que ainda no possui dados.
O comando "reset(<varivel de arquivo>)" abre um arquivo j existente em uma unidade de
disco. Aps aberto, pode-se ler as informaes nele contidas ou inserir novos dados.
O comando "rewrite(<varivel de arquivo>)", cria um novo arquivo em uma unidade de disco.
Caso j exista um arquivo com o mesmo nome na mesma unidade de disco e diretrio (ligao pela
<varivel de arquivo>), este arquivo ser apagado e um novo tomar o seu lugar. Esta opo deve ser
usada apenas na criao de arquivos, nunca em programas que iro ler os dados de um determinado
arquivo.

Exemplo:

reset(idtexto); { abre o arquivo ligado em idtexto }

rewrite(arq_pes); { cria um novo arquivo na unidade de disco


com o nome especificado em arq_pes }

As operaes de leitura e escrita em arquivo, tanto de tipo definido ou no so realizadas de


forma semelhante a uma leitura/escrita de uma varivel em programa Pascal. Os comandos "read" e
"write" funcionam tanto nos dispositivos de E/S padro (teclado e vdeo) quanto em arquivos. Deve-se
identificar, antes de referenciar o que se deseja gravar/ler, onde se deseja fazer esta operao. Para
identificar onde a ao ser realizada, informa-se o identificador de arquivo. Caso nada seja informado, os
dados sero lidos/gravados nos dispositivos padro (como feito desde o incio dos programas).

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


58
Exemplo:

write(idtexto, Passo Fundo);


{grava a string Passo Fundo no arquivo apontado por idtexto}

read(arq_pes, ciclano);
{ transefere as informaes referentes a um registro de arq_pes para a varivel de
memria ciclano }

Em arquivos de tipo definido, a localizao de um registro em especial de extrema utilidade.


Os registros so armazenados de forma seqencial, podendo ser acessados usando seu nmero de entrada.
O comando "seek(<variavel de arquivo>,<posicao>)", posiciona um arquivo numa determinada posio.
Arquivos possuem forte semelhana com as matrizes. Uma maneira fcil de entender as posies de cada
registro em um arquivo visualizar as mesmas com ndices de linhas em uma matriz. As colunas da
matriz podem da mesma forma, serem vistas como os campos de cada registro. O posicionamento em
arquivos de suma importncia, pois quando um registro lido, o que ser transferido para a memria o
registro que estiver na posio atual do arquivo.

Exemplo:

read(posicao); { le um inteiro (posicao desejada) }

seek(arq_pes, posicao);
{ posiciona o arquivo arq_pes, na posio indicada pela varivel }

As matrizes possuem sempre um tamanho pr-definido. No caso de uma matriz ser definida para
ter 50 linhas com 10 colunas, se sabia de antemo que a linha de nmero 50 seria a ltima. Com arquivos,
o tamanho em linhas (nmero de registros) teoricamente limitado pelo espao disponvel na unidade de
disco. Porm, quando estamos procurando dados em um arquivo, devemos saber quando chegamos ao
final do arquivo. A funo "eof(<variavel de arquivo>)", retorna um valor booleano (True ou False) se j
foi alcanado o final do arquivo. Sua utilizao imprescindvel para, por exemplo, percorrer todas as
linhas (registros) de um arquivo a fim de procurar um nmero qualquer.

O exemplo abaixo, percorre todo o arquivo, mostrando o contedo do mesmo. Ao chegar no


ltimo registro, o lao se encerra.

Exemplo:

lin := 10;
while not eof(arq_pes) do
begin
read(arq_pes,fulano);
gotoxy(10,lin); write(fulano.nome);
gotoxy(40,lin); write(fulano.idade);
lin := lin + 1;
if lin > 23
begin
clrscr;
lin := 10;
end;
end;

Todas as operaes de escrita/leitura realizadas sobre um arquivo, no so imediatamente


realizadas no meio fsico de armazenamento (disquete ou HD). Todos os sistemas operacionais trabalham
Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal
59
com buffers, que so regies na memria principal que guardam pedaos da memria secundria a fim
de no sobrecarregar os acionadores de disco (este um dos motivos que leva a perda de dados quando da
falta de luz, pois as informaes ainda no foram fisicamente transferidas). Quando um programa encerra
sua execuo, todas as alteraes em arquivos devem ser fisicamente atualizadas, sob pena de perda de
informaes e/ou perda de todo o arquivo. Desta forma, aps ser utilizado, um arquivo deve ser fechado
de maneira correta, seguindo o comando "close(<arquivo de programa>)". Este comando fecha o arquivo,
atualizando a memria secundria, deixando-o em um estado seguro.

Exemplo:

begin
. . .
{ comandos de manipulao de arquivos }
. . .
close(arq_pes);
end.

Exemplo completo de programa com manipulao de arquivos

program cria_arquivo;
{ Este program cria um arquivo de nome EMPRESA.DAT no meio magntico}
uses crt;

type
registro = record
codigo : integer;
altura : real;
end;
var
cadastro : file of registro;
func : registro;
i, opcao, busca, flag : integer;

procedure parada;
begin
gotoxy(10,24);
write('Operacao concluida - pressione qualquer tecla');
readkey;
clrscr;
end;

procedure le_grava_dados;
begin
gotoxy(10,10);
write('Informe o codigo : ');
readln(func.codigo);
gotoxy(10,12);
write('Informe a altura: ');
read(func.altura);
write(cadastro, func);
end;

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


60
procedure busca_dados;
begin
gotoxy(10,09);
write('Informe o codigo desejado :');
read(busca);
seek(cadastro, 0); { posiona o ponteiro do arquivo no inicio }
flag := 0;
while not eof(cadastro) do
begin
read(cadastro, func);
if func.codigo = busca then
begin
flag := 1;
exit; { Abandona a execucao do laco }
end;
end;
end;

procedure mostra_dados;
begin
if flag = 1 then
begin
gotoxy(10,15);
write('Dados buscados do arquivo');
gotoxy(10,16);
write('Codigo : ', func.codigo);
gotoxy(10,18);
write('Altura : ', func.altura:4:2);
end
else
begin
gotoxy(10,15);
write('Registro nao encotrado');
end;
end;

procedure mostra_arquivo;
var
lin : integer;
begin
seek(cadastro, 0);
lin := 10;
gotoxy(10,lin-1);
write('Codigo Altura');
while not eof(cadastro) do
begin
read(cadastro, func);
gotoxy(10,lin);
write(func.codigo);
gotoxy(20,lin);
write(func.altura:4:2);
lin := lin + 1;
if lin > 22 then
begin
gotoxy(10,24);
write('Pressione qualquer tecla para continuar');
readkey;
clrscr;
lin := 10;
end;
end;
end;

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


61
procedure escolhe_opcao;
begin
gotoxy(10,03); write('[1] Insere dados');
gotoxy(10,04); write('[2] Busca dados');
gotoxy(10,05); write('[3] Mostra todo o arquivo');
gotoxy(10,06); write('[0] Encerra o programa');
gotoxy(10,07);
write('Informe a sua opo: ');
read(opcao);
end;

procedure controla;
begin
clrscr;
repeat
escolhe_opcao;
if opcao = 1 then
le_grava_dados;
if opcao = 2 then
begin
busca_dados;
mostra_dados;
end;
if opcao = 3 then
mostra_arquivo;
if opcao <> 0 then
parada;
until opcao = 0;
end;

begin
clrscr;
assign(cadastro,'a:EMPRESA.DAT');
rewrite(cadastro);
controla;
close (cadastro);
end.

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


62
11.1 Exerccio com manipulao de arquivos
125) Montar um programa que crie um arquivo de pessoas chamado PESSOAS.DAT. O programa
dever ainda inserir dados de seus amigos. Parar de informar pessoas quando o cdigo for igual a 0
(zero). Usar o record abaixo para o arquivo.
type
pessoa = record
codigo : integer;
idade : integer;
altura : real;
peso : real;
end;

126) Montar um programa que mostre o contedo do arquivo criado no exerccio anterior.

127) Montar um programa que processa o arquivo PESSOAS.DAT e encontra seus o seu amigo mais
alto e o mais baixo.

128) Montar um programa que processe o arquivo PESSOAS.DAT e mostra a mdia de altura e de peso
de seus amigos.

129) Montar um programa que leia o cdigo de um amigo. Procurar no arquivo PESSOAS.DAT e
mostrar os dados referentes a esta pessoa. Caso o cdigo desta pessoa no exista no arquivo, mostrar
uma mensagem indicando este fato.

130) Montar um programa que leia um matriz M[10,5] de nmeros reais. O programa devera criar o
arquivo MATRIZ.DAT com os dados desta matriz. Usar o record abaixo para armazenar as
informaes.
type
linha = record
coluna1 : real;
coluna2 : real;
coluna3 : real;
coluna4 : real;
coluna5 : real;
end;

131) Montar um programa que leia o arquivo MATRIZ.DAT. Passar o seu contedo para uma matriz
M[10,5]. Mostrar a matriz gerada.

132) Montar um programa que leia o arquivo MATRIZ.DAT. Passar o seu contedo para uma matriz
M[10,5]. Mostrar a matriz gerada. Calcular as seguintes somas:
a) Soma das linhas pares (apenas 1 soma)
b) Soma das colunas mpares (apenas 1 soma)
c) Soma da diagonal principal
d) Soma da diagonal secundria
e) Soma de toda a matriz.

133) Montar um programa que leia o arquivo MATRIZ.DAT. Passar o seu contedo para uma matriz
M[10,6]. Mostrar a matriz gerada. Completar a ultima coluna de cada linha com a soma dos elementos
da linha e mostrar a matriz modificada.

134) Montar um programa que faa o mesmo do programa anterior, porm aps ser completada a sexta
coluna da matriz, gravar a matriz modificada com o nome de MATRIZ2.DAT.

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


63
12 Glossrio de Funes do Pascal
O Pascal contm um grande nmero de funes definidas. Estas funes ajudam o programador
a resolver mais facilmente seus problemas. Existem funes matemticas, funes para o uso com tipos
de dado caracter, funes de propsito geral, entre outras.

12.1 Funes matemticas


As funes a seguir so algumas de uso comum com a matemtica. Existem mais, porm que
no sero necessrias neste estudo.

Funo: abs(x : qualquertipo) : mesmotipo;


Significado: Retorna o valor (mdulo) absoluto de um nmero (real ou inteiro)
Na matemtica : x=|x|
Exemplo de uso : x := -9.8; y := -8; z := 17;
x := abs(x); { x passa a valer 9.8 }
y := abs(y); { y passa a valer 8 }
z := abs(z + y); { z passa a valer 9 }

Funo: int(x : real) : real ;


Significado: Retorna a parte inteira de um nmero real
Na matemtica : x = int( x )
Exemplo de uso : x := 9.8; y := -8;
x := int(x); { x passa a valer 9 }
y := int(y); { y passa a valer -8 }

Funo: frac(x : real) : real ;


Significado: Retorna a parte fracionria de um nmero real
Na matemtica : x = frac( x )
Exemplo de uso : x := 9.8; y := -8;
x := frac(x); { x passa a valer 0.8 }
y := frac(y); { y passa a valer 0.0}

Operador : mod : integer;


Significado: Retorna o resto da diviso entre dois valores inteiros.
Na matemtica :
Exemplo de uso : x := 5; y := 2;
z := x mod y { Z passa a valer 1 }
k := y mod x { k passa a valer 5 }

Funo: odd(x : integer) : Boolean;


Significado: Retorna se o nmero mpar ou no.
Na matemtica :
Exemplo de uso : x := 5; y := 4;
if odd(x) then { retorna TRUE }
if odd(y) then { retorna FALSE }

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


64
Funo: sqr(x : qualquertipo) : mesmotipo;
Significado: Retorna o quadrado de um nmero.
Na matemtica : x = x2
Exemplo de uso : x := 5; y := 4.5;
x := sqr(x) { x passa a valer 25 }
y := sqr(X + y) { y passa a valer 90.25 }

Funo: sqrt(x : real) : real;


Significado: Retorna a raz quadrada de um nmero.
Na matemtica : x = x
Exemplo de uso : x := 81; y := 96;
x := sqrt(x) { x passa a valer 9 }
y := sqrt(X + y) { y passa a valer 13,3041}

12.2 Funes para uso com tipos caracter


As funes e os procedimentos a seguir so para uso exclusivo com tipos de dados caracter.
Existem mais, porm que no sero necessrias neste estudo.

Funo: concat(s1, s2, ...: string) : string;


Significado: Concatena (agrupa) uma seqncia de strings (tem o mesmo efeito do
operador +)
Exemplo de uso: x:= 'Passo'; y := ' '; z := 'Fundo';
x:=concat(x,y,z);{ x passa a conter 'Passo Fundo'}

Funo: copy(s : string;


PosInicio, NoCaracs : Integer) : string;
Significado: Retorna (extrai) parte de uma string, da posio inicial (PosInicio) um
n de caracteres (NoCaracs).
Exemplo de uso: x := 'Passo Fundo';
y := copy(x,7,5); { x passa a conter 'Fundo' }

Funo: delete(var s : string;


PosInicio, NoCaracs : Integer) : integer;
Significado: Apaga caracteres em um string. Retorna o nmero de caracteres apagados
da string. A varivel que vai como argumento a mesma que
modificada.
Exemplo de uso: x := 'Passo Fundo';
delete(x,7,5); { x passa a conter 'Passo' }

Funo: insert(substr : string;


var s : string;
PosInicio, NoCaracs : Integer) : integer;
Significado: Insere caracteres numa string. Retorna o nmero de caracteres inseridos na
string. A varivel s que vai como argumento a mesma que ser
modificada.
Exemplo de uso: x := 'PassoFundo';
y := ' ';
insert(y,x,6); { x passa a conter 'Passo Fundo' }

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


65
Funo: length(s : string) : integer;
Significado: Retorna o tamanho de um string (quantos caracteres ela possui)
Exemplo de uso: x := 'Passo Fundo'; y := ''; z := 'a';
i := length(x); { i passa a valer 11 }
j := length(y); { j passa a valer 0 }
k := length(z); { k passa a valer 1 }

Funo: pos(substr, StrPrincipal : string) : byte;


Significado: Retorna a posio da primeira ocorrncia da substr na
StrPrincipal.
Exemplo de uso: x := 'Passo Fundo';
y := 'F';
i := pos('o',x); { i passa a valer 5 }
j := pos(y,x); { j passa a valer 7 }
k := pos('f',x); { k passa a valer 0, a substr
no se encontra na StrPrincipal }

Funo: readkey() : char;


Significado: L apenas um caracter do teclado. O caracter lido no mostrado na tela..
Exemplo de uso: x := readkey;
{ x recebe o caracter que foi digitado no
teclado, no acontecendo nada na tela }

Procedimento : str(x : qualquernumero; var s : string);


Significado: Converte um tipo de dado numrico em um string.
Exemplo de uso: i := -10;
r := 9.8;
str(r:4:2,x); { x passa a conter '9.80' }
str(r,y); { y vai valer ' 9.8000000000E+00'}
str(i,z); { z passa a conter '-10' }

Procedimento: val(s : string; var i : integer; var r : real)


Significado: Converte uma string em um nmero real, retornando no argumento inteiro
a posio da string se ocorreu um erro.
Exemplo de uso: x := '9.8';
val(x,i0,r); { r passa a conter 9.8 }
{ i0 passa a conter 0 }
r0 := r + 10; { r0 passa a conter 19.8 }

Funo: upcase(ch : char) : char;


Significado: Retorna o caracter enviado como argumento, no formato maisculo.
Exemplo de uso: x := 'a';
y := 'B';
x := upcase(x); { x passa a valer 'A' }
y := upcase(y); { y passa a valer 'B' }

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


66
12.3 Funes/procedimentos e comandos de propsito geral
As funes e os procedimentos a seguir so de propsito geral. Existem mais, porm que no
sero necessrias neste estudo.

Funo: trunc(r : real) : integer;


Significado: Converte um nmero real para um nmero inteiro. Troca o tipo.
Exemplo de uso: r: 9.8; q:= 1;
i := trunc(r); { i passa a valer 9 };
j := trunc(q); { j passa a valer 1 },

Procedimento: clreol;
Significado: Limpa toda uma linha, da posio atual do cursor at o final da linha.
Exemplo de uso: gotoxy(20,10);
clreol; { limpa a linha 10, da coluna 20 at o
final }

Funo: ramdom(qualquernumero) : qualquernumero;


Significado: Retorna um nmero aleatrio entre 0 e o argumento. Deve ser utilizado em
conjunto com Ramdomize
Exemplo de uso: i := ramdom(256); { i vai conter um valor valor
aleatorio entre 0 e 256 }

Procedimento: Ramdomize;
Significado: Inicializa um gerador de nmeros aleatrios, baseado no relgio do
computador.
Exemplo de uso: Randomize;
repeat { vai ficar mostrando nmeros }
i:=Random(256); { [0..256] at que seja }
Write(i,' '); { pressionada uma tecla }
until KeyPressed;

Procedimento: Readkey
Significado: Provoca uma parada no processamento at que uma tecla seja pressionada
Exemplo de uso: write(Resultados obrtidos);
readkey;

Comando: exit
Significado: Aborta o processamento do lao atual
Exemplo de uso: cont := 0;
repeat
read(cod);
cont := cont + 1;
if cod = 0 then
exit; { Mesmo que cont no seja igual a 100}
{ o lao tera sua execucao finalizada}
until cont = 100;

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


67

Procedimento: textcolor(cor : integer);


Significado: Altera a cor da letra de todas as escritas na tela. Usa uma tabela fixa de
cores. recomendada aps sua utilizao retornar a cor padro (branco).
Exemplo de uso: textcolor(4); { vermelho }
write(escrevendo em vermelho`);
textcolor(2); { verde }
write(escrevendo em verde);
textcolor(15); {voltando a cor branca}

Procedimento: textbackground(cor : integer);


Significado: Altera a cor do fundo de todas as escritas na tela. Usa uma tabela fixa de
cores. recomendada aps sua utilizao retornar a cor padro (preto).
Exemplo de uso: textbackground(7);
write(fundo cinza`);
textbackground(14);
write(fundo amarelo);
textbackground(0); {voltando ao fundo preto}

Tabela de Cores

Nmero Cor Nmero Cor


0 Preto 8 Cinza Escuro
1 Azul 9 Azul claro
2 Verde 10 Verde claro
3 Cyano 11 Cyano claro
4 Vermelho 12 Vermelho claro
5 Lils 13 Lils claro
6 Margenta 14 Amarelo
7 Cinza Claro 15 Branco

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal


68
13 Bibliografia

FIALHO, Lcio. Guia Rpido Turbo Pascal 6.0, Rio de Janeiro, Editora Cincia Moderna Ltda.

GOTTFRIRED, Byron. Programao em Pascal. Portugla: McGraw-Hill de Portugal, lda, 1988.

HERGET, Douglas. Dominado Turbo Pascal 5. Rio de Janeiro, Editora Cincia Moderna Ltda., 1989

LEITE, Dennis Cintra, PRATES, Rubens. Carto de referncia Turbo Pascal verso 5.0.

MANZANO, Jos Augusto N. G., FIGUEIREDO, Jayr. Algoritmos. So Paulo: rica, 1997.

ORTH, Afonso Incio. Algoritmos Cincia dos Computadores, 1985.

OBRIEN, Sthephen K. Turbo Pascal 6: completo e total. So Paulo: Makron, McGraw-Hill, 1992.

PRATT, Terrence W. Programming languagens. Englewood Cliffs, Prentice-Hall Internacional, 1984.

SEBESTA, Robert W. Concept of programming languages. Menlo Park, Addison-Wesley Publishing


Company, 1996.

SILVA, Jos Carlos G. da & ASSIS, Fitelis Sigmaringa G. de. Linguagem de programao: conceitos e
avaliao: FORTRAN, C, Pascal, Modula-2, Ada, Chill. So Paulo, Mc-Graw Hill, 1988.

Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal

Você também pode gostar