Pascal Módulo Intermediario ...
Comandos de Entrada e Saída
Na maioria das vezes um programa necessita de
interatividade com o usuário, ou seja, durante a sua execução o programa ler
valores fornecidos pelo o usuário e escreve outros para o usuário. Essa
interatividade é conseguida através dos comando de entrada e saída.
Comandos WRITE e WRITELN
São comandos de saída do Pascal, a
diferença é que o comando writeln após exibir o conteúdo dos seus parâmetros
efetua uma quebra de linha.
write (Variável ou
Expressão);
writeln(Variável ou Expressão);
Comandos READ e READLN
Representam os comandos de
entrada do pascal, onde o readln também executa uma quebra de linha após ler os
seus parâmetros.
write (Variável);
writeln(Variável);
EXPRESSÕES
Uma expressão é um conjunto de
operandos unidos por operadores, de forma a computar um valor ou
resultado.
Os operandos podem ser
variáveis, constantes ou valores gerados por funções.
Os operadores identificam as
operações a serem efetuadas sobre os operandos.
Cada tipo de dados possui um conjunto de operadores relacionados. Os operadores classificam-se em Unários e
Binários, conforme tenham um ou dois operandos, respectivamente.
Prioridade das Operações
Se vários operadores aparecerem
em uma expressão, a ordem de execução das operações será dada segundo os
critérios abaixo :
·
pelo emprego explícito de parênteses
·
pela ordem de precedência existente entre os
operadores
·
se existirem operadores de mesma ordem de
precedência, a avaliação será feita da esquerda para a direita.
Ordem de Precedência dos
Operadores ( da maior para a menor )
Operadores
|
Categoria
|
( )
|
Parêntesis
|
@ not
|
Operadores Unários
|
* / div
mod
|
Operadores Multiplicativos
|
and
shl shr + -
or xor
|
Operadores Aditivos
|
=
<> < >
<= >= in
|
Operadores Relacionais
|
Tipos de Expressões
Existem três tipos básicos de
expressões:
·
Numéricas: Uma expressão é numérica
quando os seus operandos são numéricos ( inteiros ou reais ) e o resultado
também é um valor numérico. Nas expressões relacionais são usados os operadores
Aritméticos e os de Manipulação de Bits.
·
Literais: Uma expressão é literal quando
os seus operandos são literais do tipo string
(não pode ser char) e o resultado também é um valor literal. Só existe um único operador para se usar em
expressões literais, o operador Concatenação( + ).
·
Boolenas: Uma expressão é booleana quando
seu resultado é do tipo boolean (TRUE ou FALSE), podendo seu operando serem de
qualquer tipo de dados. Nas expressões
relacionais são usados os operadores Lógicos e os Relacionais.
Tipos de Operadores
·
Atribuição
·
Aritméticos
·
Manipulação de Bits
·
Concatenação
·
Relacionais
·
Lógicos
·
Operadores de Ponteiros
·
Operadores de Conjuntos
·
Operador Type-Cast
OPERADOR ATRIBUIÇÃO ( := )
Usado para atribuir o valor de
uma expressão a uma variável.
Exemplo:
A := 10;
Nome := ´Josias´;
OPERADORES ARITMÉTICOS
Usados para efetuar operações
aritméticas com número inteiros e reais.
Subtração
|
-
|
Adição
|
+
|
Multiplicação
|
*
|
Divisão Real
|
/
|
Divisão Inteira ( truncada )
|
div
|
Resto da Divisão Inteira
|
mod
|
Inverte Sinal
|
-
|
Mantém Sinal
|
+
|
Exemplo:
var
A, B : integer;
C, D : real;
BEGIN
A := 1;
B := 3;
C := 5;
D := 10;
A := 1 + B;
A := B + D; { errado, D é real }
B := 10 div 3;
A := 10 mod 3;
C := D / C;
D := 10 div C; { errado, o operado div é só para inteiros }
A := -1;
B := 5 + A;
B := -A;
C := D * A;
B := C * B; { errado, C é real }
END.
OPERADORES DE MANIPULAÇÃO DE BITS
Usados para efetuar a
manipulação dos bits de uma variável.
E binário
|
and
|
Deslocamento de bits ( Shift Left )
|
shl
|
Deslocamento de bits ( Shift Right )
|
shr
|
OU binário
|
or
|
XOR binário
|
xor
|
NOT binário
|
not
|
OPERADOR CONCATENAÇÃO ( + )
Efetua a junção de duas variáveis ou constantes do tipo
string.
Exemplo:
var
PreNome, SobreNome, NomeCompleto : string[ 30 ];
BEGIN
{ Suponhamos o nome Josias Lima Santos
}
PreNome := ´Josias´;
SobreNome := ´Santos´;
NomeCompleto := PreNome + SobreNome;
writeln( NomeCompleto );
NomeCompleto := ´Jose´ + ´Maria´;
writeln( NomeCompleto );
...
END.
OPERADORES RELACIONAIS
Usados para efetuar a
comparação entre dados de mesmo tipo.
Maior que
|
>
|
Menor que
|
<
|
Maior ou igual
|
>=
|
Menor ou igual
|
<=
|
Igual
|
=
|
Diferente
|
<>
|
Exemplo:
var
Nota1, Nota2 : real;
NomeAluno1, NomeAluno2 : string[ 30 ];
A, B, C : integer;
BEGIN
A := 2;
B := 3;
C := 1;
if B = A + C then
writeln( B );
Nota1 := 5.0;
Nota2 := 10.0;
if Nota1 < Nota2 then
writeln( Nota1 );
NomeAluno1 := ´Maria Jose´;
NomeAluno2 := ´MariaJose´;
if NomeAluno1 < NomeAluno2 then
writeln( NomeAluno1 );
END.
OPERADORES LÓGICOS
Usado para se analisar duas ou
mais expressões interrelacionadas.
E
|
and
|
OU
|
or
|
NÃO
|
not
|
Exemplo:
var
Nota1, Nota2 : real;
NomeAluno1, NomeAluno2 : string[ 30 ];
A, B, C : integer;
BEGIN
A := 2;
B := 3;
C := 1;
NomeAluno1 := ´Maria Jose´;
NomeAluno2 := ´MariaJose´;
if ( B = A + C ) and ( NomeAluno1
<> NomeAluno2 ) then
writeln( NomeAluno1, B );
if ( A = C ) or ( NomeAluno1 =
NomeAluno2 ) then
writeln( NomeAluno1 );
if not( A = C ) then
writeln( NomeAluno1 );
END.
TABELAS VERDADE
OPERADOR AND
OPERANDO 1
|
OPERANDO 1
|
RESULTADO
|
TRUE
|
TRUE
|
TRUE
|
TRUE
|
FALSE
|
FALSE
|
FALSE
|
TRUE
|
FALSE
|
FALSE
|
FALSE
|
FALSE
|
OPERADOR OR
OPERANDO 1
|
OPERANDO 1
|
RESULTADO
|
TRUE
|
TRUE
|
TRUE
|
TRUE
|
FALSE
|
TRUE
|
FALSE
|
TRUE
|
TRUE
|
FALSE
|
FALSE
|
FALSE
|
OPERADOR NOT
OPERANDO
|
RESULTADO
|
TRUE
|
FALSE
|
FALSE
|
TRUE
|
OPERADORES DE PONTEIROS
Usado na manipulação de
variáveis dinâmicas e apontadores.
Endereço
|
@
|
Referência
|
^
|
OPERADORES DE CONJUNTOS
Usados na manipulação de
variáveis do tipo conjunto.
União
|
+
|
Complemento
|
-
|
Intersecção
|
*
|
Igualdade
|
=
|
Desigualdade
|
<>
|
Subconjunto
|
<= ,
>=
|
Pertinência
|
in
|
Acesso a campos
COMANDOS ESTRUTURADOSComando Composto
Consiste de um ou vários
comandos que devam ser executados sequencialmente, sendo usado em situações
onde a sintaxe de alguns comandos do Pascal permite apenas um único comando.
Os comandos que fazem parte do
comando composto são separados por ponto-e-vírgula, devendo começar e terminar
pelas palavras reservadas begin e end;, respectivamente, de acordo com a
sintaxe :
begin
comando [ ; comando ]...
end;
Exemplo:
if A > B then
begin
Temp := A;
A
:= B;
B
:= Temp;
end;
Comandos CondicionaisIF-THEN-ELSE
O comando IF-THEN-ELSE permite
efetuarmos um desvio bidirecional na lógica do programa, segundo uma
determinada condição booleana.
Sintaxe:
if exp-booleana
then
comandos
[else
comandos];
Exemplo:
if A
<= B then
A := ( A + 1 ) / 2
if odd(
I ) then
J := J + 1
else
J := J div 2 + 1;
if Nome1
= ´Jose´ then
begin
J := J div 2 + 1;
writeln( J * 2 );
end;
if Media
>= 5 then
begin
writeln( ´Aluno Aprovovado´ );
writeln( ´Parabéns !!!´ );
end
else
writeln( ´Aluno Reprovado´ );
if Sexo
= MASCULINO then
if Idade
> 18 then
begin
writeln( ´Jovem, aliste-se no Exército, Marinha ou
Aeronautica!´ );
writeln( ´Sirva à sua pátria, venha fazer uma carreira
brilhante´ );
end
else
writeln( ´Você ainda é muito jovem para o serviço militar´
);
if Sexo
= MASCULINO then
begin
if Idade
> 18 then
begin
writeln( ´Jovem, aliste-se no Exército, Marinha ou
Aeronautica!´ );
writeln( ´Sirva à sua pátria, venha fazer uma carreira
brilhante´ );
end
else
writeln( ´Você ainda é muito jovem para o serviço militar´
);
writeln( ´Qual o seu Nome ? ´);
end;
Comando CASE
O comando CASE permite
efetuarmos um desvio multidirecional na lógica do programa. Ele consiste de um expressão ( chamada seletor ) e uma lista de comandos, cada
um precedido por constantes ou
subintervalos separados por vírgulas ( chamados rótulos de case ), de mesmo tipo do seletor, que pode ser qualquer
escalar ordenado ( integer, char, boolean, enumerated, faixa ).
Sintaxe :
case expressão of
rotulo-case : comando;
[rotulo-case : comando;]...
[else
comando [; comando ]...
end;
Exemplo:
program
Figuras;
type
TFigura = ( Triangulo, Retangulo, Quadrado, Circulo );
var
Figura : TFigura;
Tipo : integer;
BEGIN
writeln( ‘Qual o tipo da figura ? ‘);
writeln( ‘0-Triangulo’ );
writeln( ‘1-Retangulo’ );
writeln( ‘2-Quadrado’ );
writeln( ‘3-Circulo’ );
readln( Tipo );
Figura := TFigura( Tipo );
case
Figura
of
Triangulo : writeln( ‘Você escolheu a
figura Triangulo’ );
Retangulo : writeln( ‘Você escolheu a
figura Retangulo’ );
Quadrado : writeln( ‘Você escolheu a figura
Quadrado’ );
Circulo : writeln( ‘Você escolheu a figura
Circulo’ );
end;
END.
program TestaTecla;
{ Programa para testar a tecla pressionada }
var Tecla
: char;
BEGIN
writeln( ‘Pressione uma Tecla : ‘ );
readln( Tecla );
case Tecla of
‘A’..’Z’, ‘a’..’z’: writeln(‘Você pressionou uma Letra’);
‘0’..’9’: writeln(‘Você pressionou um
Numero’);
‘+’, ‘-‘, ‘*’, ‘/’: writeln(‘Você pressionou um Sinal
Aritmetico’);
else
writeln( ‘Você pressionou uma outra
tecla qualquer’ );
end;
END.
OBS.: O Comando CASE pode
ser substituído por um conjunto de IF-THEN-ELSE aninhados, no entanto, nesses
casos, onde há muitas condições, o comando CASE, torna o programa mais legível.
program
TestaIdade;
{ Programa para testar a idade de serviço militar }
var Idade
: integer;
BEGIN
writeln( ‘Qual a sua Idade ? ‘ );
readln( Idade );
case Idade
>= 18 of
TRUE
: writeln( ‘Voce já pode servir ao exército’ );
FALSE : writeln( ‘Voce ainda não pode
servir ao exército’ );
end;
END.
Comandos de Repetição
Comandos de repetição são
aqueles que fazem com que um ou vários comandos sejam executados repetidas
vezes.
Comando WHILE
O comando WHILE faz com que um
comando seja executado enquanto a expressão de controle permanecer verdadeira (
TRUE ).
Sintaxe :
while expressao do
comando;
A expressão que controla a
repetição deverá ser do tipo boolean, sendo
a mesma avaliada antes que o comando do laço seja executado. Isto quer dizer que, se logo no início o
resultado da expressão for FALSE, o laço não será executado nenhuma vez.
Exemplo:
program
TesteWhile;
var I, J :
integer;
BEGIN
I := 0;
while I < 5 do
I := I + 1;
writeln( I );
J := 0;
while J < 5 do
begin
J := J + 1;
writeln( J );
end;
END.
Comando REPEAT
O comando REPEAT faz com que um
comando seja executado enquanto a expressão de controle permanecer falsa (
FALSE ). O teste da condição é feito ao
final do laço, dessa forma o laço sempre é executado pelo menos uma vez.
Sintaxe :
repeat
comando [;comando]...
until expressao;
A expressão que controla a
repetição deverá ser do tipo boolean, sendo a mesma avaliada antes que o
comando do laço seja executado. Isto
quer dizer que, se logo no início o resultado da expressão for FALSE, o laço
não será executado nenhuma vez.
Exemplo:
program TesteRepeat;
var I, J : integer;
BEGIN
I := 0;
repeat
I := I + 1;
until I >= 5;
writeln( I );
J := 0;
repeat {
Não é necessário o BEGIN e END }
J := J + 1;
writeln( J );
until J >= 5;
END.
Comando FOR
O comando FOR executa
repetitivamente um comando enquanto é atribuído uma série de valores a uma variável de controle (contador do FOR).
Sintaxe :
for variavel
:= expressao1 to/downto expressao2 do
comando;
Onde :
variavel = É uma variável de
controle cujo valor será incrementado (se usado o to) ou decrementado (se usado o downto) de uma unidade.
Expressao1 = É o valor inicial da variável de controle
Expressao2 = É o valor final da variável de controle
A variável de controle poderá
ser de qualquer tipo escalar ordenado e as expressões de um tipo compatível com
ela.
O comando FOR funciona da seguinte
maneira :
·
Inicialmente, a variável de controle recebe o
valor da primeira expressão ( expressão1 )
·
Antes de começar a execução do laço, a variável
de controle é testada para verificar se ela é menor ou igual ( se for usado o TO ) ou se maior ou igual ( se for usado o DOWNTO ) à segunda expressão.
·
Se o resultado do teste for verdadeiro, o
comando do laço é executado
·
Ao terminar a execução do comando do laço, a
variável de controle é testada para verificar se ela é igual ao valor final
·
Se a variável de controle for igual ao valor
final, a repetição termina
·
Se não for igual, ela é incrementada ou
decrementada de uma unidade
Após o término do comando FOR,
a variável de controle, terá o valor da
Expressao2, a não ser que o comando tenha sido interrompido por um comando goto ou break.
Exemplo :
for I := 1 to 100 do
Soma := Soma + I;
for I := 1 to 100 do
begin
readln( x );
Soma := Soma + x;
end;
for I := 100 downto 1 do
writeln( I );
type TDias
= ( Dom, Seg, Ter, Qua, Qui, Sex, Sab );
var
Dia : Tdias
Vendas, VendasToal : real;
...
for Dia := Seg to Sex do
begin
readln( Vendas );
VendasTotal := VendasTotal + Vendas;
end;
Comando CONTINUE
O comando CONTINUE causa o
desvio para o final do laço mais interno de um comando de repetição.
Exemplo:
while expressao do
begin
...
continue;
...
{ o comando continue desvia para aqui }
end;
for I := expressao1 to expressao2 do
begin
...
continue;
...
{ o comando continue desvia para aqui }
end;
repeat
...
continue;
...
{ o comando continue desvia para aqui }
until expressao;
OBS.: O comando CONTINUE não faz parte do Pascal
Padrão.
Comando BREAK
O comando BREAK causa a saída
incodicional do laço mais interno de um comando de repetição.
Exemplo:
while expressao do
begin
...
break;
...
end;
{ o comando break desvia para aqui }
...
for I := expressao1 to expressao2 do
begin
...
break;
...
end;
{ o comando break desvia para aqui }
...
repeat
...
break;
...
until expressao;
{ o comando break desvia para aqui }
...
OBS.: O comando BREAK não faz parte do Pascal
Padrão.
Comando HALT
O comando HALT causa o término
imediato do programa.
Program teste;
BEGIN
...
if Opcao = ´F´ then
halt; {O programa terminará, aqui se a condicao do IF
for satisfeita }
...
END. {O programa
terminará, aqui se a condicao do IF não for satisfeita}
|
.
|