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: 0 a 255; shortint -128 a 127; word 0 a 65.535; integer -32.768 a 32.767; longint -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
+ : adição; - : subtração; * : multiplicação; / : divisão real; div : divisão inteira; mod: 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);
Formatos:
If decisão then
comando ou
bloco de comandos;
cuidado: antes do “else” não colocar “;”
If decisão then
comando ou
bloco de comandos
else
comando ou
bloco de comandos;
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 thenbegin if y > 3 writeln(‘saída A’)
elsewriteln(‘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 thenbegin if y > 3 then writeln(‘saída A’)
elsewriteln(‘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) thenbegin
writeln(‘saída A’);endelsebegin
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”;
Estrutura de controle de decisão
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 receba duas notas, calcule a média das notas e mostre na tela se o aluno foi aprovado.
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.
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;
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 decisã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 dobegin 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);
Estrutura de controle de repetição
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);
Transformação de tipos de dados
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 ]);
...
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.
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.
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.
SubrotinasRotina 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 2+2
Operador: +
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:
Resultado : = 2+2;
Quando o pascal executa a instrução, o lado direito é calculado e o resultado é atribuído a Resultado.
atribuição
Complementos: Expressões inteira s e reais
Exemplo de instrução lógica:
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.
comparação
Complementos: Uso de integer.
program m1;Uses Crt;var x, y, z: real; i, j, k: integer;
begin clrscr; j:=2; i:= j+1; j:= 3 div j; k:= (1+j) div (3+j); writeln(i, ' ', j, ' ', k);
Complementos: Uso de integer
j:=2; x:= j+1; y:= 3 / j; z:= (1+j) div (3+j);
Writeln(x:2:2, ' ', y:2:2, ' ', z: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;beginclrscr; 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'); readln; end.
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.
Top Related