Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila Prog1 Ago2006 PDF
Apostila Prog1 Ago2006 PDF
Apostila da disciplina de
PROGRAMAO I
- Linguagem Pascal -
Agosto de 2006
Apostila de Programao I - Linguagem Pascal
Sumrio
Pgina
1 INTRODUO ............................................................................................................................................................3
2 PROGRAMAS E PROGRAMAO ..........................................................................................................................3
3 LINGUAGEM DO COMPUTADOR...........................................................................................................................4
4 LINGUAGENS DE ALTO NVEL ..............................................................................................................................5
4.1 LINGUAGEM PASCAL ...............................................................................................................................................6
4.2 TIPOS DE INSTRUES DE ALTO NVEL .....................................................................................................................6
5 CONVERSO DO PROGRAMA-FONTE..................................................................................................................8
6 SOFTWARE QUE VOC PRECISA TER OU CONHECER ....................................................................................9
7 TIPOS DE PROGRAMAS .........................................................................................................................................10
8 ESTRUTURA DE UM PROGRAMA........................................................................................................................11
9 TIPOS DE DADOS.....................................................................................................................................................12
10 OPERADORES ARITMTICOS............................................................................................................................14
11 EXPRESSES ARITMTICAS..............................................................................................................................14
11.1 FUNES NUMRICAS PREDEFINIDAS ...................................................................................................................15
12 FUNES DE FORMATAO DA TELA............................................................................................................16
13 EXPRESSES LGICAS........................................................................................................................................16
13.1 RELAES ...........................................................................................................................................................16
13.2 OPERADORES LGICOS .........................................................................................................................................17
13.3 PRIORIDADES .......................................................................................................................................................19
14 ESTRUTURA CONDICIONAL (SELEO)........................................................................................................20
14.1 IF-THEN-ELSE .................................................................................................................................................20
14.2 CASE.................................................................................................................................................................23
15 ESTRUTURAS DE REPETIO ...........................................................................................................................24
15.1 WHILE-DO........................................................................................................................................................24
15.2 REPEAT-UNTIL.................................................................................................................................................25
15.3 FOR-TO-DO .......................................................................................................................................................26
16 EXPRESSES LITERAIS.......................................................................................................................................28
17 FUNES PREDEFINIDAS ...................................................................................................................................29
18 DEFINIO DE CONSTANTES ............................................................................................................................31
19 DEFINIO DE TIPOS ..........................................................................................................................................32
20 ESTRUTURAS DE DADOS.....................................................................................................................................33
20.1 ARRAY ................................................................................................................................................................33
20.1.1 Como declarar e acessar VETORES em Pascal ............................................................................................33
20.1.2 Como declarar e acessar MATRIZES em Pascal...........................................................................................34
20.2 REGISTRO (RECORD) ...........................................................................................................................................37
20.2.1 Como declarar e acessar REGISTROS em Pascal.........................................................................................37
20.2.2 Exemplos de Registros .................................................................................................................................39
21 COMANDO WITH...................................................................................................................................................42
22 MODULARIZAO ...............................................................................................................................................43
22.1 PROCEDIMENTOS (PROCEDURE) ...........................................................................................................................43
22.1.1 Passagem de parmetros POR VALOR.........................................................................................................44
22.2 FUNES (FUNCTION) ..........................................................................................................................................46
22.2.2 Passagem de parmetros POR REFERNCIA..............................................................................................47
1 Introduo
Um computador uma mquina que, para realizar algo, precisa que algum lhe indique o que fazer, de
uma forma que ele entenda. Para que voc possa fazer isso, preciso que:
Nesta introduo veremos informaes bsicas para se aprender uma linguagem de programao de
computadores.
2 Programas e Programao
3 Linguagem do Computador
1 2 3 4 5 6 ...
56 23 0 247 154 87 ...
Armazene 9 no registrador DS
Armazene 204 no endereo de memria 1.234.244
Some 5 ao contedo do registrador AL
Se a ltima instruo deu resultado 0, passe a executar as instrues a partir do endereo de
memria 457.552
PUSH DS
CLD
Este tipo de linguagem chamada linguagem de mquina ou assembly
MOV CX,0FFFFH
(veja ao lado um trecho de programa). As instrues so executadas na
XOR AL,AL
seqncia em que estiverem na memria, a menos que o fluxo de execuo
NOT CX
seja redirecionado por alguma instruo apropriada. Nesta linguagem,
LES DI,Dest
mesmo para mostrar algo na tela necessrio colocar nmeros em certos
REP MOVSB
endereos de memria, reservados para isso. No h indicao explcita do
MOV AX,DI
tipo nmero da linha ou da coluna da tela; devemos calcular esses dados.
MOV DX,ES
DEC AX
POP DS
ClrScr;
Write (513 + 450 + 1200);
Uma linguagem de programao de alto nvel possui vrias caractersticas em comum com a
nossa linguagem. Elas possuem um alfabeto (letras, nmeros e outros smbolos) e palavras. H
palavras predefinidas na linguagem, mas tambm podemos formar as nossas prprias. Frases podem
ser construdas com as palavras, respeitando-se certas regras. O conjunto de regras de construo de
palavras e frases numa linguagem de alto nvel, assim como nas linguagens comuns, chama-se sintaxe.
O que voc pode fazer dentro de um programa, utilizando uma linguagem de alto nvel? Vamos ver
algumas analogias com outras mquinas.
Um televisor possui vrios recursos: a tela, o alto-falante, o controle remoto, opes de
configurao. Quando voc aperta ou gira um boto de controle, est de certa forma instruindo o
televisor a fazer algo; uma forma rudimentar de linguagem. Em qualquer caso, voc est limitado a
atuar sobre os recursos do seu televisor; no h meios de instrui-lo a gravar algo numa fita de vdeo.
Da mesma forma, numa linguagem de programao voc no vai encontrar (a princpio) instrues
para regular contraste ou temperatura. Uma categoria de instrues que voc pode esperar que existam
so aquelas que vo lhe permitir interagir com os recursos disponveis: teclado e mouse (entrada),
tela e impressora (sada), discos (entrada e sada), memria. Assim, h instrues para se ler algo do
teclado e mostrar algo na tela. Sendo o disco rgido estruturado em pastas (diretrios) e arquivos, h
instrues para se ler e gravar arquivos no disco rgido, e para se saber seu contedo. Tambm h
instrues que declaram que voc quer usar a memria, e instrues para armazenar e consultar dados
nela armazenados.
Para poder executar uma gravao programada, seu videocassete precisa tomar pelo menos
duas decises: quando inici-la e quando interromp-la. Assim num programa: em vrias situaes
ser necessrio fazer verificaes e tomar decises de quando executar ou no um conjunto de
instrues, ou executar um ou outro conjunto. Por exemplo, um programa que l uma nota que um
aluno tirou em uma disciplina e deve informar se ele foi aprovado ou no. Ou o programa informa que
o aluno passou ou que foi reprovado, mas nunca as duas coisas. Portanto, numa linguagem de alto
nvel, tambm voc pode esperar que existam instrues para tomada de decises.
5 Converso do Programa-Fonte
Como o computador no entende as instrues de um programa-fonte (ou cdigo-fonte), para que este
possa ser executado, ele precisa ser convertido para a linguagem que o computador reconhece, a
linguagem de mquina. Uma instruo em uma linguagem de alto nvel pode corresponder a centenas
ou at milhares de instrues em linguagem de mquina. A converso feita por programas
apropriados, e pode ser feita antes ou durante a execuo do programa.
Quando o programa-fonte todo convertido em linguagem de mquina antes da execuo,
esse processo chamado de compilao, e os programas que o fazem so chamados compiladores. O
programa resultante chamado programa-objeto (ou cdigo-objeto), que contm instrues em
linguagem de mquina, mas ainda no pode ser executado; para que isso ocorra, necessria outra
etapa chamada "linkedio" ou ligao, efetuada tambm por um programa apropriado chamado
"linkeditor" ou ligador. Na linkedio, so juntados ao cdigo-objeto do programa outros cdigos-
objeto necessrios sua execuo. Aps esta etapa, a converso est completa e produz finalmente um
programa executvel, observe a Figura 1.
Sistema Operacional: como programador, voc precisa ter um mnimo de informaes sobre o
sistema ou ambiente operacional em que vai trabalhar, como por exemplo:
Se o computador em que voc trabalha est conectado a uma rede, voc vai precisar de um
nome registrado, associado a uma senha, para poder acessar arquivos e programas da rede.
Editor de Textos: um programa Pascal um texto simples, sem caracteres de controle do tipo negrito,
tamanho de fonte, paginao etc. Voc vai precisar de um editor para digitar seu programa no
computador. Editores que produzem tais textos so o Edit, que vem com o MS-DOS, o Bloco de Notas
(NotePad), que vem com o Windows, e vrios outros. Textos formatados pelo Word ou WordPad, por
exemplo, no servem. Os compiladores comerciais normalmente trazem um editor; us-los ser
normalmente mais prtico.
Compilador: uma vez que voc digitou o texto do programa, precisar convert-lo para
linguagem de mquina. Para isso voc precisa de um compilador. Como compiladores
comerciais da linguagem Pascal temos por exemplo as vrias verses do Turbo Pascal, da
Borland (http://www.borland.com.br), inclusive h verses para DOS e para Windows. H vrios
outros, como o Free Pascal, que utilizaremos nesta disciplina e que voc pode transferir via Internet
gratuitamente atravs do endereo: http://www.freepascal.org
7 Tipos de Programas
Talvez voc esteja familiarizado com programas para Windows, com barras de menus e de
ferramentas, botes, cones, caixas de dilogos e outros tipos de objetos. Os programas que veremos
no possuem a tela em modo grfico, como no Windows, e sim em modo texto. Neste modo a tela
dividida em linhas e colunas, assim:
T E X T O _
X X X X X
X X
X X
- - - X X
| | X X X X X
- - -
8 Estrutura de um Programa
Na linguagem Pascal no tem diferena entre maisculas e minsculas. Mas uma boa prtica
de programao utilizar a grande maioria dos caracteres em minsculo. Utiliza-se maisculas
somente em casos especiais. Um texto escrito com a maioria das letras em maisculo torna-se
pesado visualmente para o leitor!
* Ao final de todo comando ou declarao deve ter um ponto-e-vrgula, exceto antes de end.
* O nome interno do programa criado por voc, no cabealho do programa, seguindo algumas
regras:
9 Tipos de Dados
INTEIRO: na linguagem Pascal h cinco tipos de inteiros pr-definidos. Cada tipo denota um
subconjunto dos nmeros inteiros de acordo com a Tabela 2.
Byte 0 a 255 1
Word 0 a 65535 2
REAL: a Tabela 3 apresenta a faixa numrica, nmero de dgitos significativos e o tamanho do tipo
Real.
Nmero de Dgitos
Tipo Faixa Numrica Nmero de Bytes
Significativos
Real 2,9*10-39 a +1,7*1038 11 a 12 6
Tipo Caractersticas
Char usado para armazenar caracteres ASCII 1
armazena uma seqncia de caracteres com um comprimento varivel
String
entre 1 e 255.
Inteiro ou string? Em alguns casos pode haver um dilema na representao de um dado que s
contm dgitos: como string ou como inteiro? Esse o caso de um nmero de telefone. Outros dados
possuem dgitos e sinais, mas o armazenamento dos sinais desnecessrio, como em um CEP ou um
CPF. Em princpio, voc pode aplicar a regra: se no sero feitas operaes matemticas com o
dado, use o tipo string, a menos que tenha um bom motivo para no faz-lo. Nessa questo (como em
vrias outras), a experincia ser seu melhor professor ;-)
LGICO: variveis lgicas podem assumir os valores verdadeiro ou falso. Veja suas caractersticas
na Tabela 5.
Tipo Caractersticas
Boolean pode assumir o valor TRUE (verdadeiro) ou FALSE (falso)
1
ASCII (American Standard Code for Information Interchange) um conjunto de cdigos para o computador representar
nmeros, letras, pontuao e outros caracteres. Surgido em 1961, um dos seus inventores foi Robert W. Bemer. ASCII
uma padronizao da indstria de computadores, onde cada caracter manipulado na memria discos etc, sob forma de
cdigo binrio. O cdigo ASCII formado por todas as combinaes possveis de 7 bits, sendo que exitem vrias extenses
que abrangem 8 ou mais bits. Mais informaes em: http://pt.wikipedia.org/wiki/ASCII
10 Operadores Aritmticos
Tipo do
Smbolo Significado Tipo dos Operandos Prioridade
Resultado
inteiro * inteiro inteiro
* multiplicao inteiro * real real 1
real * real real
inteiro / inteiro real
/ diviso inteiro / real (sempre resulta real, 1
indiferente dos
real / real operandos)
div diviso inteira inteiro div inteiro inteiro 1
Exemplo: 11 div 4 = 2
mod resto da diviso inteiro mod inteiro inteiro 1
Exemplo: 11 mod 4 = 3
Observao1: Soma e Subtrao so iguais a Multiplicao!!!
Mas suas prioridades = 2
11 Expresses Aritmticas
Um programa, escrito em Pascal, pode fazer uso das seguintes funes numricas, que so
consideradas preexistentes na linguagem e tm prioridade sobre qualquer operao:
Observao1: As funes Abs e Sqr podem receber um argumento real ou inteiro e produzem,
respectivamente, resultado real ou inteiro. As funes Trunc e Round recebem argumento real e
produzem resultado inteiro. As demais recebem argumentos reais ou inteiros e produzem resultados
reais.
Note que:
Observao: Este comando deve ser colocado antes do comando de limpar a tela (ClrScr).
Observao: Em vez de colocar o nmero correspondente a cor desejada, pode-se colocar o "nome" da
cor em ingls. Exemplo: textcolor (red)
Black 0 Darkgray 8
Blue 1 Lightblue 9
Green 2 Lightgreen 10
Cyan 3 Lightcyan 11
Red 4 Lightred 12
Magenta 5 Lightmagenta 13
Brown 6 Yellow 14
Lightgray 7 White 15
13 Expresses Lgicas
Expresso lgica uma expresso cujos operadores so os operadores lgicos e cujos operandos so
relaes e/ou variveis do tipo lgico.
13.1 Relaes
Uma relao uma comparao realizada entre valores do mesmo tipo. Estes valores so
representados na relao por constantes, variveis ou expresses do tipo correspondente. A natureza da
comparao indicada por um dos operadores relacionais apresentados na tabela 10 a seguir:
Exemplo: X + Y = Z uma relao que ser falsa ou verdadeira dependendo da expresso aritmtica
ter valor diferente ou igual ao valor da varivel Z.
A lgebra das Proposies define trs conectivos usados na formao de novas proposies a partir de
outras j conhecidas. Esses conectivos so os operadores nas expresses lgicas, veja na tabela abaixo:
Operador Funo
and conjuno
or disjuno
not negao
A Tabela 11 abaixo apresenta um resumo do operador lgico and, onde o resultado final ser true se
todos os testes da expresso forem true.
Teste Resultado
A Tabela 12 abaixo apresenta um resumo do operador lgico or, onde o resultado final ser false se
todos os testes da expresso forem false.
Teste Resultado
Teste Resultado
Quando for necessrio fazer uma ou mais verificaes combinadas, como "N1 = 0 e N2 = 0", "N < 0
ou N > 9". podemos juntar duas ou mais expresses lgicas atravs dos conectivos lgicos and (e) e
or (ou). Para o operador and, uma expresso ser verdadeira somente quando todas as expresses que
a compem forem avaliadas como verdadeiras. Para o operador or, toda a expresso verdadeira
quando qualquer uma das expresses resultar verdadeira. Eles podem ser usados em expresses
lgicas dos comandos if, while e qualquer outro que contenha expresses desse tipo. As expresses
parciais sempre tm de estar entre parnteses. Por exemplo:
No Pascal voc no pode construir expresses lgicas do tipo "0 Numero 9", como na
Matemtica; voc deve usar and ou or.
Verificar se um nmero est entre duas faixas numricas: 0 a 100 ou 200 a 300:
Um operador muito interessante e conciso o in, atravs do qual voc verifica se um valor ou
resultado de expresso pertence a um conjunto, definido entre colchetes e no qual podem constar
valores ou faixas numricas. Veja como os comandos acima ficam mais simples com esse operador:
13.3 Prioridades
Pode-se ter mais de um operador lgico na mesma expresso, alm dos operadores de relao e dos
operadores aritmticos. Em Pascal, a prioridade das operaes est dada na Tabela 14.
Prioridade Operadores
1 not
2 *, /, div, mod, and
3 +, -, or
4 =, < >, <, >, < =, > =, in
Vrios nveis de parnteses tambm podem ser usados em expresses lgicas para fixar entre os
operadores uma ordem de execuo, diferente da indicada pela prioridade dada na Tabela 14.
Sugesto: use parnteses para definir a ordem de execuo das operaes e durma tranqilo :-D
Na linguagem Pascal existem duas estruturas de seleo: if-then-else e case, sendo que a primeira
estrutura pode-se apresentar de duas formas (simples ou composta).
14.1 IF-THEN-ELSE
if condio then
begin
seqncia A de comandos;
end
;
onde:
if - then - so palavras-chaves
A seqncia A de comandos ser executada se a condio for verdadeira; caso contrrio, o comando
a ser executado ser o que vier logo aps o end;.
Ao ser mencionada "seqncia de comandos" est implcito que ela contm um ou mais comandos e
pode conter uma ou mais estruturas.
Quando a seqncia A de comandos constituda por um nico comando, o begin e o end podem ser
omitidos.
Exemplo1:
program Teste_If_Simples_1;
uses crt;
var A, B, C : real;
begin
clrscr;
write ('Digite um valor para A: ');
readln (A);
write ('Digite um valor para B: ');
readln (B);
write ('Digite um valor para C: ');
readln (C);
if (A + B < C) then
writeln ('A soma de A com B menor do que C!')
;
writeln ('Tchau...');
end.
Exemplo2:
program Teste_If_Simples_2;
uses crt;
var A, B, C : real;
begin
clrscr;
write ('Digite um valor para A: ');
readln (A);
write ('Digite um valor para B: ');
readln (B);
write ('Digite um valor para C: ');
readln (C);
if (A + B < C) then
begin
writeln ('Eu calculei A + b < C e conclu que:');
writeln ('A soma de A com B menor do que C!');
end
;
writeln ('Tchau...');
end.
if condio then
begin
seqncia A de comandos;
end
else
begin
seqncia B de comandos;
end
;
onde:
Quando a seqncia A de comandos e/ou a seqncia B de comandos forem constitudas por um nico
comando, o begin e o end, que as contm, podem ser omitidos.
Exemplo1:
program Teste_If_Composto_1;
uses crt;
var A, B : real;
begin
clrscr;
write ('Digite um valor para A: ');
readln (A);
write ('Digite um valor para B: ');
readln (B);
if (A = B) then
writeln ('A igual a B')
else
writeln ('A no igual a B')
;
writeln ('Tchau...');
end.
Exemplo2:
program Teste_If_Composto_2;
uses crt;
var A, B, X, Y : real;
begin
clrscr;
write ('Digite um valor para A: ');
readln (A);
write ('Digite um valor para B: ');
readln (B);
if (A = B) then
begin
X := 1.5;
Y := 2.5;
end
else
begin
X := -1.5;
Y := -2.5;
end
;
writeln ('X= ', X:3:1,' Y= ', Y:3:1); {Formato de sada
end. 3 = total de caracteres
1 = caracteres depois do ponto}
14.2 CASE
case varivel of
valordeCaso1 : seqncia A de comandos;
valordeCaso2 : seqncia B de comandos;
valordeCaso ... : seqncia C de comandos;
else
seqncia D de comandos;
end;
onde:
Como a estrutura IF, o comando CASE divide uma seqncia de possveis aes em sees de
cdigo individuais. Para a execuo de um determinado comando CASE, somente uma dessas sees
ser selecionada para execuo. A seleo est baseada numa srie de testes de comparao, sendo
todos executados sobre um valor desejado.
O comando ELSE opcional, ou seja, assim como no IF, pode no haver a opo ELSE.
Exemplo:
program Teste_Case;
uses crt;
var numero: integer;
begin
clrscr;
write ('Digite um nmero inteiro: ');
readln (numero);
case numero of
1 : writeln ('O nmero digitado foi 1');
2 :
begin
writeln ('Eu sei qual o nmero que voc digitou');
writeln ('O nmero digitado foi 2');
end;
3,4 : writeln ('O nmero digitado foi 3 ou 4 ');
5..10 : writeln ('O nmero digitado est entre 5 e 10');
else
writeln ('O nmero digitado no est entre 1 e 10 ');
end;
end.
2) Os testes (as comparaes) s podem ser feitas com constantes e no com variveis.
case X of
15 Estruturas de Repetio
Na linguagem Pascal, existem trs estruturas de repetio: while-do, repeat-until e for-to-do, sendo
que esta terceira estrutura pode-se apresentar de duas formas. Veja abaixo as caractersticas e sintaxe
das trs estruturas:
15.1 WHILE-DO
while condio do
begin
seqncia A de comandos;
end
;
onde:
while - do - so palavras-chaves
Nesta estrutura, a seqncia A de comandos ser repetida enquanto a condio for verdadeira.
Quando isto no mais ocorrer, a repetio interrompida e a seqncia de comandos, que estiver logo
aps o end; da estrutura, passa a ser executada.
Exemplo:
program Historia;
uses crt;
begin
clrscr;
write ('Voc quer ler uma histria? [S]im ou [N]o ');
readln (Resp);
while (Resp = 'S') or (Resp = 's') do
begin
writeln ('Era uma vez um bolo ingls...');
writeln ('Quer que eu conte outra vez? [S]im ou [N]o ');
readln (Resp);
end
;
writeln ('Tchau...');
end.
15.2 REPEAT-UNTIL
repeat
seqncia A de comandos;
until condio;
onde:
Nesta estrutura, a seqncia A de comandos ser repetida at que a condio se torne verdadeira.
Quando isto ocorrer, a repetio interrompida e a seqncia de comandos, que estiver logo aps a
estrutura, passa a ser executada.
Exemplo:
program Historia_2;
uses crt;
begin
clrscr;
repeat
writeln ('Era uma vez um bolo ingls...');
writeln ('Quer que eu conte outra vez? [S]im ou [N]o ');
readln (Resp);
until (Resp = 'N') or (Resp = 'n');
writeln ('Tchau...');
end.
15.3 FOR-TO-DO
onde:
for - to - do - so palavras-chaves
onde:
Exemplo1:
program Teste_For_To;
uses crt;
var i : integer;
begin
clrscr;
for i := 1 to 10 do
writeln (i)
;
end.
Exemplo2:
program Teste_For_downTo;
uses crt;
var x : integer;
begin
clrscr;
for x := 10 downTo 1 do
writeln (x)
;
end.
Dica:
16 Expresses Literais
As expresses do tipo char so formadas por uma constante, uma varivel ou a ativao de uma
funo do tipo char. Existem, porm, funes predefinidas, tais como as apresentadas abaixo, na
Tabela 15:
As funes Ord (X), Succ (X) e Pred (X) aplicam-se no apenas s variveis ou constantes do
tipo char, mas de qualquer tipo predefinido, exceto real.
17 Funes Predefinidas
UpCase (X) - recebe um argumento X do tipo char e retorna uma verso em letras maisculas da
varivel X.
Exemplo:
program teste_upcase;
uses crt;
begin
letra := 'a';
writeln (letra);
writeln (upcase(letra);
readln;
end.
>> Os dois comandos writeln deste programa produzem as seguintes linhas na tela de sada:
a
A
ReadKey - uma outra importante funo localizada na unidade CRT. Esta funo espera que o
usurio pressione uma tecla e depois retorna com um char da mesma.
Exemplo:
program MostraTecla;
uses crt;
begin
writeln ('Pressione uma tecla');
tecla := ReadKey;
writeln ('Voc pressionou a tecla ', tecla);
writeln ('Pressione <Enter> para terminar');
readln;
end.
Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira 29
Apostila de Programao I - Linguagem Pascal
ReadKey uma funo que retorna o caractere correspondente tecla pressionada. Uma vantagem
de usar ReadKey para ler um caractere que o usurio no precisa teclar Enter, como no Readln.
Sendo uma funo, podemos chamar ReadKey dentro de um Write ou atribuir seu resultado a uma
varivel.
Observao: O programa acima funcionar para teclas de caracteres normais, como alfabticos e
numricos. Para teclas de funo ou normais alteradas por uma tecla de controle, como Shift, Alt e
Control, ReadKey retornar zero e ser necessrio cham-lo novamente parar obter um segundo
cdigo. Para tratar essa situao, so necessrias outras instrues.
IMPORTANTE: As funes UpCase e ReadKey, assim como outras existentes na linguagem Pascal,
funcionam somente em alguns compiladores, ou seja, para que elas funcionem adequadamente,
verifique se o compilador que voc est utilizando suporta tais funes.
18 Definio de Constantes
Na seo Const, voc define identificadores que representam valores fixos de dados por toda a
execuo de um programa. Esses identificadores podem ser usados como sinnimos de constantes,
desde que tenham sido previamente definidos como tal.
onde:
const - uma palavra-chave que inicia uma parte do programa para a definio de constantes
valordaconst - um nmero (com ou sem sinal), um valor lgico, uma string etc.
Exemplo:
program salario;
uses crt;
begin
write ('Quantos salrios mnimos voc recebe? ');
readln (qtos_sal);
sal_total := salario_min * qtos_sal;
writeln ('Salrio total: ', sal_total:8:2);
{"8:2" a formatao de sada do nmero}
end.
19 Definio de Tipos
Embora a linguagem Pascal oferea uma variedade de tipos de dados predefinidos (integer, real,
boolean, char, etc.), nem sempre os tipos de dados disponveis na linguagem atendem perfeitamente s
necessidades do programa. Uma caracterstica da linguagem Pascal a possibilidade que o
programador tem de declarar seus prprios tipos de dados. Uma vez criado o novo tipo, pode-se
declarar quantas variveis quiser do tipo criado. Usa-se a palavra reservada Type para declarar um tipo
de dado definido pelo programador.
A seo Type declarada antes da seo Var, pois na seo Var pode-se declarar as variveis
que pertencem aos tipos padro e aos tipos definidos pelo usurio. Veja os exemplos a seguir:
Exemplo1:
program exemplo_type;
uses crt;
begin
salario := 200.00;
...
Exemplo2:
...
type tIdade = 1..120; {declarao de um tipo chamado tIdade que
representa um range (conjunto) de 1 a 120}
tMaiusc = 'A'..'Z';
Exemplo3:
...
type vet = array [1..10] of integer; {declarao de um tipo
chamado vet que representa um vetor de 10 elementos inteiros}
var x : vet;
...
20 Estruturas de Dados
Existem dois tipos importantes de estruturas de dados estudados nesta disciplina, os Arrays e os
Registros. Um array uma estrutura que representa listas (vetores) ou tabelas (matrizes) de valores
sob um nico nome de varivel. Um registro (record) uma estrutura que representa vrios tipos de
dados distintos.
20.1 Array
O nome de uma varivel composta segue as mesmas regras das variveis simples. O nome
refere-se, coletivamente, a todos os elementos da varivel composta. Para referncia de um elemento,
necessrio colocar o nome da varivel, seguido de um ou mais ndices, entre colchetes.
program exemplo_vetor;
uses crt;
Tenha em mente que cada elemento de um vetor uma varivel semelhante s outras, podendo sofrer
atribuio, ser passado como parmetro ou participar como operando em expresses, desde que voc
indique qual o elemento, atravs do ndice.
program exemplo_matriz;
uses crt;
for i := 1 to 2 do
for j := 1 to 3 do
begin
writeln ('Digite um valor inteiro para a matriz: ');
readln (M [i,j]);
end
;
;
for i := 1 to 2 do
for j := 1 to 3 do
begin
writeln (M [i,j]);
end
;
;
Na declarao de matrizes, devemos informar mais de um conjunto de ndices, ou seja, uma faixa
numrica ("tamanho") para cada dimenso da matriz:
Exemplo:
var M:array [1..10, 1..20, 1..5] of byte; {declarao de uma matriz com 3 dimenses}
Ao acessar um elemento de uma matriz, devemos informar um ndice para cada dimenso:
Exemplo:
Um record um conjunto de valores individuais de dados chamados campos. Uma varivel record ,
portanto, um identificador nico que representa todos os valores dos campos de um determinado
record. A caracterstica mais importante de um record talvez seja a de que os diversos campos
nomeados possam ter tipos de dados diferentes, por isso, variveis do tipo record so variveis
compostas heterogneas.
Definir a estrutura record em uma declarao TYPE e, depois declarar a prpria varivel em um
comando VAR
ou
A primeira destas tcnicas , provavelmente, a mais clara e mais utilizada, mas vamos explorar
as duas maneiras nesta disciplina.
program exemplo_registro;
uses crt;
var Cliente : record
Nome, Ender : string [35];
Fone : string [20];
Sexo : char;
Idade : byte;
Salario : real;
end;
...
No exemplo acima, declarada uma varivel do tipo registro de nome Cliente que possui seis
campos, onde os campos Nome, Ender e Fone so do tipo string, o campo Sexo do tipo char, o
campo Idade do tipo byte e o campo Salario do tipo real.
program exemplo_registro;
uses crt;
type Pessoa = record
Nome, Ender : string [35];
Fone : string [20];
Sexo : char;
Idade : byte;
Salario : real;
end;
var funcionario, aluno : Pessoa;
...
No exemplo acima, declarado um tipo chamado Pessoa que representa um registro com seis
campos, onde os campos Nome, Ender e Fone so do tipo string, o campo Sexo do tipo char, o
campo Idade do tipo byte e o campo Salario do tipo real. Aps, so declaradas duas variveis:
funcionrio e aluno, do tipo Pessoa definido antes pelo programador.
...
write ('Nome: '); {pede que o usurio entre com um nome}
readln (funcionario.nome); {armazena o nome lido no campo nome da varivel
funcionrio que do tipo Pessoa (que um registro)}
aluno.sexo := 'F'; {o campo sexo da varivel aluno recebe a letra F}
writeln (aluno.sexo); {escreve o contedo do campo sexo da varivel aluno}
...
Vetor de Registros
...
aluno[1].nome := 'Joo';
aluno[1].idade := 20;
aluno[1].nota := 8.5;
...
aluno.data_nasc.dia := 10;
aluno.data_nasc.mes := 02;
aluno.data_nasc.ano := 1981;
...
type regdata = record
dia, mes, ano : word;
end;
regpessoa = record
nome : string [30];
data_nasc : regdata;
salario : real;
notas : regnotas;
end;
begin
...
aluno[1].notas[1] := 8.0;
aluno[1].data_nasc.dia := 12;
...
21 Comando WITH
...
...
...
>> Agora, acessando os campos do registro "endereco", com o uso do comando WITH:
with endereco do
begin
write ('Digite a rua: ');
readln (rua);
write ('Digite a cidade: ');
readln (cidade);
write ('Digite o estado: ');
readln (estado);
end
;
Observao: Este comando WITH (assim como vrios outros) no funciona em todos os
compiladores, somente em alguns :-(
22 Modularizao
Exemplo: Escreva um procedimento que imprima uma linha de vinte asteriscos na tela. Utilizar a
posio corrente do cursor. Aps a impresso dos asteriscos o cursor deve ficar posicionado no incio
da linha seguinte. (Procedimento sem passagem de parmetros).
Exemplo:
program exemplo;
uses crt;
begin
clrscr;
linha (40);
linha (20); {40 e 20 so parmetros reais }
for j := 1 to 10 do
linha (j)
;
end.
>> Parmetros: so canais pelos quais se estabelece uma comunicao bidirecional entre um
procedimento e o programa chamador (procedimento ou programa principal).
program exemplo;
uses crt;
begin
clrscr;
write ('Digite um nmero: ');
readln (num);
write ('Digite um caractere: ');
readln (car);
linha (num, car);
end.
>> Como o mdulo pode retornar um valor para o local onde foi chamado? Utilizando uma
funo :-D
Calcular um resultado
Retorna um valor ao ponto de sua chamada, sendo que este ser associado ao prprio
nome que identifica o mdulo.
program exemplo_funcao;
uses crt;
var a, b, c: integer;
begin
clrscr;
write ('Digite um valor: ');
readln (a);
write ('Digite outro valor: ');
readln (b);
c := soma (a, b);
writeln ('Resultado: ', c);
end.
>> Como permitir que a modificao de uma varivel dentro do procedimento tenha efeito em
uma varivel fora do procedimento? Utilizando passagem de parmetros for referncia : -D
program exemplo;
uses crt;
var x, y: integer;
begin
x := 10;
y := 20;
troca (x, y);
writeln ('X= ', x, 'Y= ', y);
end.
>> Passamos uma varivel com um valor indeterminado ("lixo") e retornamos o resultado desejado
por ela. Veja exemplo a seguir.
Exemplo: Funo divide que retorne o resultado da diviso e um cdigo que indique se ela foi ou no
bem sucedida. (0 = diviso OK, 1 = erro: diviso por zero).
program exemplo;
uses crt;
begin
clrscr;
write ('Digite um nmero: ');
readln (x);
write ('Digite outro nmero: ');
readln (y);
r := divisao (x,y,cod);
if cod = 1 then
writeln ('Diviso por zero')
else
writeln ('Resultado: ', r)
;
end.
Observao1: Passagem por referncia pode ser usada tanto em funes quanto em procedimentos.
Observao2: Um procedimento s poder chamar outro que tenha sido declarado antes dele.
Obtm_Resposta Calcular_Diviso
Obtm_um_Valor Resolve_Problema
Obtm_todos_Valores
Entrada: nenhuma
program exemplo;
uses crt;
procedure calcula_divisao;
var a, b, r: real;
x: char;
begin
repeat
obtem_todos_valores (a,b);
write ('Dados corretos (S/N)? ');
x := obtem_resposta;
until x = 's';
r := a/b;
writeln ('Resultado: ', r);
end;
procedure resolve_problema;
var c: integer;
x: char;
begin
c := 0;
repeat
calcula_divisao;
c := c + 1;
write ('Novo Clculo (S/N)? ');
x := obtem_resposta;
until x = 'n';
writeln ('Foram calculadas ', c, ' divises');
end;
{------------------------------------Programa principal}
begin
clrscr;
resolve_problema;
end.