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.
Download

curso_pascal - miltonrocha.eng.br