Computação I
MPCE
Programação Pascal
Prof. Dr. Marcelo Duduchi
Objetivos
Como funciona e qual a estrutura
básica de um programa Pascal?
 Quais as estruturas de controle de fluxo
de controle existentes no Pascal?
 Quais as estruturas de dados prédefinidas no Pascal?
 Como trabalhar com subrotinas em
Pascal?
Tópicos Abordados (1)
Estrutura de um programa Pascal;
 Tipos de dados, variáveis e constantes;
 Operadores;
 Comandos de leitura e escrita (I/O);
 Estruturas de controle seqüencial;
 Estruturas de controle de decisão;
 Estruturas de controle de repetição;
Tópicos Abordados (2)
Transformação de tipos de dados;
 Tipos estruturados homogêneos:
unidimensionais e multidimensionais;
 Tipos estruturados heterogêneos;
 Criação de Novos tipos de dados;
 Manipulação de cadeias de caracteres;
 Subrotinas (funções e procedimentos);
 Passagem de parâmetros;
Estrutura de um programa Pascal
Program Nomedoprograma;
uses biblioteca 1,...,biblioteca n;
const constante 1,...,constante n;
type nome do tipo = declaração do tipo;
var lista de variáveis : tipo da variável;
declaração das procedures e functions;
begin comandos end.
Tipos de Dados
Inteiro;
 Número em ponto flutuante (real);
 Caractere;
 Cadeia de Caracteres;
 Lógico;
Valores Inteiros
byte:
 shortint
 word
 integer
 longint
0 a 255;
-128 a 127;
0 a 65.535;
-32.768 a 32.767;
-2147483648 a 2147483647;
respectivamente: 1, 1, 2, 2 e 4 bytes
Valores em Ponto Flutuante
single
1.5E-45 a 3.4E38;
 real
2.9E-39 a 1.7E38;
 double
5.0E-324 a 1.1E308;
 extended
3.4E-4951 a 1.1E4932;
 comp
9.2E-18 a 9.2E18;
respectivamente:8,12,15,20 e 20 casas;
respectivamente:4,6,8,10 e 8 bytes
Um Único Caractere (char)
Ocupa um byte e permite
armazenar um caractere da tabela
ASCII que possui 256 caracteres;
 Pode ser informado entre apóstrofo
ou com o caractere # e o número da
tabela referente ao caractere;
 Exemplo: #70 ou ‘F’
Cadeia de Caracteres (String)
Ocupa até 256 bytes dependendo
da declaração e permite armazenar
caracteres da tabela ASCII;
 seu tamanho pode ser informado
entre colchetes na declaração e tem
valor referenciado entre apóstrofos;
 exemplo: ‘cadeia de caracteres’
Valor lógico (boolean)
Ocupa um byte de memória usado
para armazenar os valores lógicos
verdadeiro (true) e falso (false);
 pode ser manipulado pelos
operadores lógicos:
NÃO (not), E (and), OU (or) e
OU EXCLUSIVO (xor)
Identificadores
Nomes que são criados pelo
programador para representar
elementos diversos dentro do
programa;
 São usados no Pascal para
denominar programas, novos tipos
de dados, constantes, variáveis,
funções e procedimentos;
Identificadores
Pode ter qualquer tamanho com 63
primeiros dígitos significativos;
 Pode utilizar os caracteres de:
‘0’ a ‘9’, ‘A’ a ‘Z’, ‘a’ a ‘z’ e ‘_’
 Deve ser diferente das palavras
reservadas do Pascal;
 Não pode começar por número;
 Trata Maiúsculas = Minúsculas;
Declaração de Constantes
Deve-se indicar a palavra const
seguida do nome, = e o valor a ser
armazenado;
 Não pode ter seu valor alterado
durante o programa;
 const nome = valor;
 Exemplo: const PI = 3.1416;
Variáveis
Área de memória cujo valor pode
ser alterado através de seu nome
ou seu endereço;
 É utilizada para guardar valores
temporários do programa;
 Seu conteúdo pode ser alterado
durante a execução do programa;
Declaração de Variáveis
Deve-se indicar a palavra var
seguida do nome, : e o tipo de
dados a ser armazenado por ela;
 var nome : tipo de dado;
 Exemplos: var nota:integer;
var N1, N2, N3:real;
var Nome: string[40];
Operadores Lógicos
NÃO: identificado por not;
 E: identificado por and;
 OU: identificado por or;
 OU EXCLUSIVO: por xor;
Operadores Aritméticos
+:
-:
*:
/:
div :
mod:
adição;
subtração;
multiplicação;
divisão real;
divisão inteira;
resto da divisão;
Operadores Relacionais
< , <= : menor e menor ou igual;
 > , >= : maior e maior ou igual;
 =
: valor igual;
 < >
: valor diferente;
 in [ valor inicial .. valor final] :
verificar se o valor está entre valor
inicial e final citado no comando;
Comando de Escrita (saída)
Pode ser usado só write escrevendo na
posição corrente do cursor o conteúdo
indicado;
 Pode ser usado writeln escrevendo o
conteúdo indicado e pulando de linha
em seguida;
 Formato:
write ( valor : tamanho : decimais );
Comando de Escrita (saída)
Exemplos:
write(custo:9:2);
writeln(‘João’);
writeln(‘Valor = ’,x);
write(x+y);
Comando de Leitura (entrada)
Pode ser usado read ou readln
colocando dentro da variável indicada o
valor digitado pelo usuário;
 O readln é usado para ler a linha toda
até o enter o read permite a inclusão de
diversos valores de acordo com o
número de variáveis
 Formato:
read (variável1, variável2);
Comando de Leitura (entrada)
Exemplos:
read(a,b,c);
readln(nome);
readln(turma);
Pode ter sua saída controlada por {$I-}
e {$I+} em conjunto com o ioresult;
Comando de Leitura (readkey)
Utilizado quando necessitamos de
digitação onde a entrada não necessita
de um <enter> no final;
 Retorna um valor para a rotina
chamadora que deve ser atribuído a
alguma variável;
 formato:
variável : = readkey;
Comando de Leitura (readkey)
Exemplos:
x:=readkey;
writeln(readkey);
entrada:=readkey;
Necessita da declaração: “uses CRT”;
Comentários
Às vezes é interessante comentar linhas
de código para que este fique
documentado.
 Para isto usamos seguinte:
{ comentário }
ou
(* comentários de diversas linhas *)
Controle de fluxo de execução
Para que se controle a seqüência de
comandos a serem executados
permitindo que seja criada uma lógica
que corresponde ao algoritmo
desejado usamos as estruturas de
controle:
 seqüencial;
 de decisão ou condicional;
 de repetição ou de loop;
Estrutura de controle seqüencial
Usada para agrupar conjunto de
comandos;
 Faz com que o bloco seja tratado como
um único comando;
 Usado em estruturas de controle,
funções e procedimentos com “;” e no
final do programa com o “.”;
 Formato: begin comandos end;
Estrutura de controle de decisão
If é usada quando se deve tomar uma
decisão de qual grupo de rotinas o
programa deve executar;
 Não permite por si só que comandos
voltem a executar de forma repetitiva;
 Pode ser usada de forma a encadear
uma estrutura de decisão dentro de
outra (ninho de if ’s);
Estrutura de controle de decisão
Formatos:
If decisão then
comando ou
bloco de comandos;
If decisão then
comando ou
bloco de comandos
else
comando ou
bloco de comandos;
cuidado: antes do “else”
não colocar “;”
Estrutura de controle de decisão
Exemplos:
...
If nota >= 5.0 then
writeln(‘aprovado’);
...
...
readln(nota);
If nota >= 5.0 then
writeln(‘aprovado’)
else
writeln(‘reprovado’);
...
Estrutura de controle de decisão
Exemplos:
...
If nota >= 5.0 then
begin
writeln(‘exame:’);
readln(nota);
end;
...
If x <= y then
begin
writeln(‘pode ser:’);
writeln(‘x < ou = y’);
end
else
writeln(‘x é maior’); ...
Estrutura de controle de decisão
Exemplos:
...
If x > 3 then
begin
if y > 3
writeln(‘saída A’)
else
writeln(‘saída B’);
end;
Se X = 2 e Y = 2:
Se X = 2 e Y = 5:
Se X = 5 e Y = 2:
Se X = 5 e Y = 5:
Estrutura de controle de decisão
Exemplos:
...
If x > 3 then
begin
if y > 3 then
writeln(‘saída A’)
else
writeln(‘saída B’);
end;
Se X = 2 e Y = 2:
Não escreve nada;
 Se X = 2 e Y = 5:
Não escreve nada;
 Se X = 5 e Y = 2:
Escreve “saída B”;
 Se X = 5 e Y = 5:
Escreve “saída A”;
Estrutura de controle de decisão
Exemplos:
...
If (x>3) and (y>3) then
begin
writeln(‘saída A’)
else
writeln(‘saída B’);
end;
Se X = 2 e Y = 2:
Se X = 2 e Y = 5:
Se X = 5 e Y = 2:
Se X = 5 e Y = 5:
Estrutura de controle de decisão
Exemplos:
...
If (x>3) and (y>3) then
begin
writeln(‘saída A’);
end
else
begin
writeln(‘saída B’);
end;
Se X = 2 e Y = 2:
Escreve “saída B”;
 Se X = 2 e Y = 5:
Escreve “saída B”;
 Se X = 5 e Y = 2:
Escreve “saída B”;
 Se X = 5 e Y = 5:
Escreve “saída A”;
Faça um programa que receba duas notas, calcule
a média das notas e mostre na tela se o aluno foi
aprovado.
Program exmedia;
uses crt;
var soma,nota1,nota2:real;
begin
writeln(´Digite as notas das provas´);
read (nota1,nota2);
media:=(nota1+nota2)/2;
if media>=5 then
writeln(´Aprovado´)
else
writeln(´Reprovado´);
end.
Faça um programa que tendo como entrada a altura e o
sexo de uma pessoa , construa um algorítimo que calcule
seu peso ideal, utilizando as seguintes fórmulas:
para homens: (72.7*h)-58; para mulheres: (62,1*h)-44.7;
Program expesoideal;
uses crt;
var sexo:char;
h,peso:real;
begin
writeln(´Calcule seu Peso Ideal´);
write (´Digite seu sexo (M:masculino , F:feminino)´);
readln (sexo);
write (´Entre com a sua altura´);
readln(h)
if sexo=´F´ then
peso:=(62.1*h)-44.7
else
peso:=(72.2*h)-58;
writeln(´seu peso ideal é´,peso:2:2);
readkey;
end.
Estrutura de controle de decisão
Case é usada quando se deve tomar
uma decisão entre mais de duas
opções para uma variável enumerável;
 Usada só com inteiros, caracteres e
variáveis do tipo lógico;
 Pode ter opção else caso nenhuma
das anteriores for aceita;
 Possui um end no final sem begin;
Estrutura de controle de decisão
Formato:
case variável of
constante1: comandos1;
constante2: comandos2;
constante3: comandos3;
else
comando n;
end;
Estrutura de controle de decisão
Exemplo:
case idade of
1,2,3:writeln(‘bebê’);
4..12:writeln(‘criança’);
13..22:writeln(‘adolesc.’);
else
writeln(’adulto’);
end;
Estrutura de controle de repetição
while é usado quando o teste deve ser
feito no início e não se tem um valor
contável determinado;
 repeat é usado quando o teste deve
ser feito no final;
 for é usado quando a iteração utiliza
um evento contável tendo controle
automático da variável de controle;
Estrutura de controle de repetição
Formato 1:
while decisão do
comandos;
Formato 2:
repeat
comandos;
until decisão;
Estrutura de controle de repetição
Exemplo 1: ...
ct:=1;
while ct<11 do
begin
writeln(‘4*’,ct,’=’,ct*4);
ct:=ct+1;
end;
...
Estrutura de controle de repetição
Exemplo 2: ...
ct:=1;
repeat
writeln(‘4*’,ct,’=’,ct*4);
ct:=ct+1;
until ct >10;
...
Estrutura de controle de repetição
Formato 3:
for ct:= v.i. to v.f. do
comandos;
Formato 4:
for ct:= v.i. downto v.f. do
comandos;
Estrutura de controle de repetição
Exemplo 3:
for ct:= 1 to 10 do
writeln(‘4*’,ct,’=’,ct*4);
Exemplo 4:
writeln(‘contagem...’)
for ct:= 10 downto 1 do
writeln(ct);
Transformação de tipos de dados
Inteiro para caractere:
variável caractere:=chr(variável inteira);
Ex: ch:=chr(97); { retorna ‘a’ }
 Caractere para inteiro:
variável inteira:=ord(variável caractere);
Ex: varint:=ord(‘A’); { retorna 65 }
Transformação de tipos de dados
String para número:
val(cadeia,variável numérica,erro);
Ex: val(leitura,num,erro);
 Número para string:
str(variável numérica:tam:dec,cadeia);
Ex: str(num:10:2,valor);
Tópicos a abordar na seqüência...
Tipos estruturados homogêneos:
unidimensionais e multidimensionais;
 Tipos estruturados heterogêneos;
 Manipulação de cadeias de caracteres;
 Criação de Novos tipos de dados;
 Subrotinas (funções e procedimentos);
 Passagem de parâmetros;
Tipos estruturados homogêneos
Conjunto de elementos do mesmo tipo
que ocupam uma área contínua de
memória e são referenciados através
de um nome e um índice;
 Também denominados de:
 Vetores,
Matrizes, Tabelas, Arrays;
Podem ser:
 Unidimensionais
ou Multidimensionais;
Tipos estruturados homogêneos
Declaração (unidimensional):
var nome:array [vi..vf] of tipo de dados;
onde:
nome: rótulo dado ao array;
vi: valor inicial do array;
vf: valor final do array;
tipo de dados: tipo de dados dos
elementos do array;
Tipos estruturados homogêneos
Utilização (unidimensional):
utilizar o nome seguido da posição
entre colchetes que deseja considerar
tanto para atribuição de valores quanto
para a recuperação:
nome [ posição ]
Tipos estruturados homogêneos
Exemplo (unidimensional):
...
var notas:array [1..4] of integer;
...
begin...
For i:=1 to 4 do
read(notas [ i ]);
...
Tipos estruturados homogêneos
Declaração (multidimensional):
var nome:array [vi..vf] of tipo de dados;
onde:
nome: rótulo dado ao array;
[vi..vf ]: podem ser substituídos por
[vi1..vf1,vi2..vf2,...,viN..vfN]
tipo de dados: tipo de dados dos
elementos do array;
Tipos estruturados homogêneos
Utilização (multidimensional):
utilizar o nome seguido das posições
entre colchetes que deseja considerar
tanto para atribuição de valores
quanto para a recuperação.
 Não omitir nenhuma dimensão;
nome [ posições entre vírgulas ]
Tipos estruturados homogêneos
Exemplo (multidimensional):
var vet:array [1..50,1..4] of real;
...
begin...
for i:=1 to 50 do
for j:=1 to 4 do
read(vet [ i , j ]);
...
Faça um programa que receba um conjunto de 100
valores inteiros colocando-os em um vetor e em
seguida mostre na tela o maior dos valores do vetor.
program exmaior;
const fim=100;
var seq: array[1..fim] of integer;
k,maior:integer;
begin
for k:=1 to fim do
readln(seq[k]);
maior:=seq[1];
for k:=2 to fim do
if seq[k]>maior then
maior:=seq[k];
writeln(maior);
end.
Tipos estruturados heterogêneos
Conjunto de elementos de tipos
diferentes agrupados por estarem
relacionados entre si de acordo com a
lógica do programa;
 Também denominados de:
 registros
ou records;
São sempre unidimensionais e podem
estar atrelados a declaração de
vetores e arquivos;
Tipos estruturados heterogêneos
Declaração:
Utilizar o nome, “:”, a palavra
reservada record seguido da definição
dos elementos que o compõe através
da declaração destes da mesma forma
que as variáveis com um end no final;
Tipos estruturados heterogêneos
Declaração:
var nome: record
nome1:tipo de dados;
nome2:tipo de dados;
...
nomeN:tipo de dados;
end;
Tipos estruturados heterogêneos
Exemplo de declaração:
var aluno: record
ca:longint;
nome:string[30];
notafinal:real;
end;
Tipos estruturados heterogêneos
Utilização:
utilizar o nome seguido de “.” (ponto) e
o nome do elemento do registro que
deseja considerar tanto para atribuição
de valores quanto para a recuperação;
 Não omitir o elemento a referenciar;
nome . elemento
Tipos estruturados heterogêneos
Exemplo de utilização:
...
readln(aluno.ca);
readln(aluno.nome);
readln(aluno.notafinal);
...
{considerando a declaração
do exemplo anterior}
Utilizando tipos estruturados
Podemos declarar também:
var classe: array [1..40] of
record
ca:longint;
nome:string[30];
nt1,nt2,nt3,nt4:real;
end;
Utilizando tipos estruturados
E utilizar no programa:
... For i:=1 to 40 do
begin
readln(classe [ i ].ca);
readln(classe [ i ].nome);
readln(classe [ i ].nt1);
end; ...
Utilizando tipos estruturados
Ou ainda:
... For i:=1 to 40 do
begin
writeln( (classe [ i ].nt1*0.4+
classe [ i ].nt2*0.4+
classe [ i ].nt3*0.2);
end; ...
Criação de novos tipos de dados
Podemos criar nossos próprios tipos
de dados usando:
Type nome= declaração;
 Exemplo:
Type aluno = record
Nome:string;
nt1,nt2:real;
end;
Estrutura de um programa Pascal
Program Nomedoprograma;
uses biblioteca 1,...,biblioteca n;
const constante 1,...,constante n;
type nome do tipo = declaração do tipo;
var lista de variáveis : tipo da variável;
declaração das procedures e functions;
begin comandos end.
Subrotinas
Rotina que executa uma tarefa
específica que pode ser:
Procedimento (procedure): Não
retorna valor à rotina chamadora de
forma explícita;
 Função (function): Retorna um único
valor à rotina chamadora de forma
explícita;
Estrutura de um programa Pascal
Program Nomedoprograma;
uses biblioteca 1,...,biblioteca n;
const constante 1,...,constante n;
type nome do tipo = declaração do tipo;
var lista de variáveis : tipo da variável;
declaração das procedures e functions;
begin comandos end.
Subrotinas (Procedimento)
Sintaxe:
procedure nome (parâmetros);
var variáveis locais;
begin
comandos;
end;
Subrotinas (Procedimento)
Exemplo:
procedure linha (tamanho:integer);
var i:integer;
begin
for i:= 1 to tamanho do
write(´-´);
writeln;
end;
Subrotinas (função)
Sintaxe:
function nome (parâmetros):tipo;
var variáveis locais;
begin
comandos;
nome:=valor de retorno;
end;
Subrotinas (função)
Exemplo:
function soma (n1,n2:integer):integer;
var total: integer;
begin
total:=n1+n2;
soma:=total;
end;
Subrotinas (Procedimento)
Exercício: alterar a rotina linha para que o
símbolo da linha apresentada possa variar:
Subrotinas (Procedimento)
Exercício: alterar a rotina linha para que o
símbolo da linha apresentada possa variar:
procedure linha (tamanho:integer;ch:char);
var i:integer;
begin
for i:= 1 to tamanho do
write(ch);
writeln;
end;
Parâmetros (valor e referência)
Valor (ou cópia): As alterações dentro da
rotina não alteram as variáveis da rotina
chamadora passadas como parâmetro;
Referência: As alterações dentro da rotina
alteram as variáveis da rotina chamadora
passadas (basta usar o var antes da
declaração dos parâmetros);
Complementos: Expressões inteira s e reais
Aritmética e lógica no pascal: Blaise Pascal
(matemático do século XVII);
 Base Aritmética: Expressão (ou equação)
Combinação de: Identificadores
Valores
Funções numéricas
Operadores,
que resultam num valor numérico específico,
Complementos: Expressões inteira s e reais
Exemplo de expressão:
Valor numérico: 2
Operador: +
2+2
No pascal uma expressão integra uma
instrução de atribuição ou uma instrução
lógica.
Complementos: Expressões inteira s e reais
Exemplo de instrução aritmética:
atribuição
Resultado : = 2+2;
Quando o pascal executa a instrução, o lado
direito é calculado e o resultado é atribuído
a Resultado.
Complementos: Expressões inteira s e reais
Exemplo de instrução lógica:
comparação
If Resultado = (2+2) then
Uma expressão aritmética que pertence a uma
instrução lógica tem como resultado Verdadeira
ou Falsa.
O valor em Resultado não é alterado.
Complementos: Uso de integer.
program m1;
Uses Crt;
var x, y, z: real;
i, j, k: integer;
begin
clrscr;
j:=2;
i:= j+1;
k:= (1+j) div (3+j);
writeln(i, ' ', j, '
j:= 3 div j;
', k);
Complementos: Uso de integer
j:=2;
x:= j+1;
z:= (1+j) div (3+j);
Writeln(x:2:2, '
z:2:2);
y:= 3 / j;
', y:2:2, '
Writeln; writeln('Aperte enter
readln;
end.
',
');
Complementos: Hierarquia de operadores
Nível 1: Unário (Subtração e Adição)
Nível 2: Parênteses
Nível 3 Multiplicação e Divisão
Nível 4: Adição e Subtração
Exemplo: A:= 3*4+5;
A:= 3*(4+5);
Complementos: Hierarquia de operadores
Nível 1: Unário (Subtração e Adição)
Nível 2: Parênteses
Nível 3 Multiplicação e Divisão
Nível 4: Adição e Subtração
Exemplo: A:= 3*4+5;
A:= 3*(4+5);
Complementos: Hierarquia de operadores
mmmm
Complementos: Hierarquia de operadores
Uses Crt;
var
l1, l2, l3: real;
begin
clrscr;
write('digite l1: '); readln(l1);
Write('Digite l2: '); readln(l2);
Write('Digite l3: '); readln(l3);
if (l1+l2<l3) or (l1+l3<l2) or (l2+l3<l1)
then
writeln ('triangulo invalido')
program triang;
Complementos: Hierarquia de operadores
else
begin
if (l1=l2) and (l1=l3) and (l2=l3) then
writeln('equilatero');
if (l1=l2) or (l1=l3) or (l2=l3) then
writeln('isosceles');
if (l1<>l2) and (l1<>l3) and (l2<>l3) then
writeln('escaleno');
end;
Write('pressione enter');
end.
readln;
Complementos: Hierarquia de operadores
program oplogico;
Uses Crt;
var Byte1, Byte2, Byte3: byte;
begin
clrscr;
byte1:=77;
byte2:= 62;
byte3:=
byte1 and byte2;
writeln('byte1= ', byte1, ' byte2=
',byte2, ' byte3= ',byte3);
Writeln; writeln('Aperte enter ');
readln;
end.