Existem vários operadores para a realização de expressões em Pascal, como detalhado a seguir.
Operador de Atribuição
O operador de atribuição é utilizado para atribuir o valor de uma expressão a uma variável.
Exemplos de atribuições:
Listagem 3.1 – Operador de Atribuição
Das linhas 13 a 21, exceto a linha 16, temos atribuições de valores a variáveis de diversos tipos. Note que o que está após o := é uma expressão.
Operadores Aritméticos
Os operadores aritméticos são utilizados para efetuar operações aritméticas com números inteiros e reais. São eles: Subtração (-), Adição (+) e Multiplicação (*).
1 program VariaveisPascal; 2
3 var
4 a, b, c : integer; {Declara a, b e c como variáveis inteiras} 5 media : real; {Declara media do tipo real}
6 aprovado : boolean; {Variáveis lógicas - podem ser TRUE ou FALSE} 7 endereco : string; {endereço é uma cadeia com 0 a 255 caracteres.} 8 CPF : string[11]; {O uso de [] delimita o número de caracteres.} 9 sexo : char; {char representa um único caracter.}
10 11 begin
12 {Atribuições de valores às variáves}
13 endereco := 'Rua dos Alferes, 1234, Ap. 1001, Barra, Salvador, Bahia - CEP: 40.130.280';
14 nome:= 'Jose da Silva Santos'; 15 CPF := '12345678901';
16 writeln('Endereco: ', endereco, ' Cliente: ', nome, ' CPF: ', cpf); 17 sexo := 'M'; 18 a := 7; 19 b := a + 2; 20 c := 8; 21 media := (a + b + c) / 3; 22 readkey; 23 end. {Sintaxe:} nomeDaVariável := expressão;
O operador de Divisão Real (/) só se aplica a números reais e os operadores de Divisão Inteira (DIV) e Resto da Divisão Inteira (MOD) só se aplicam a números inteiros. A (/) é chamada de Divisão Real, pois sempre resultará num número real. Não se pode garantir que a divisão de dois inteiros resultará num número inteiro, como é o caso da divisão de 10 por 3. Logo, para obter a parte inteira da divisão entre inteiros existe o operador DIV. O operador MOD fornece o resto inteiro da divisão.
Exemplos:
1. 16 / 3 5,3333 (número real) 2. 7 / 2 3,5 (número real)
3. 16 DIV 3 5 (note que todos os fatores são inteiros) 4. 16 MOD 3 1
A listagem 11 apresenta um código que ilustra o uso de DIV e MOD apresentando o dividendo, divisor, quociente, resto numa divisão inteira e a Listagem 12 demonstra como extrair todos os dígitos de um número com 3 dígitos.
Listagem 3.2 – Uso de DIV e MOD
Na Listagem 11 as linhas 7 e 8 definem as variáveis dividendo, divisor, quociente e resto como inteiros e quocienteReal como real. Tais variáveis representarão os elementos numa divisão.
As linhas 11 e 12 iniciam o dividendo com 10 e o divisor com 3. A divisão entre 10 e 3 é uma dízima periódica 3.333, que será o valor de quocienteReal calculado na linha 14. Pensando-se numa divisão com todos os fatores inteiros, quociente (linha 13) assumirá o valor 3 e resto (linha 16) assumirá o valor 1. Vale lembrar que 10 dividido por 3 é igual a 3 com resto 1 (10 = 3 * 3 + 1).
1 program UsoDivMod;
2 {Este programa demonstra o uso de DIV e MOD como operadores de
inteiros.} 3
4 uses crt; 5
6 var
7 dividendo, divisor, quociente, resto : integer; 8 quocienteReal : real;
9 10 begin
11 dividendo := 10; 12 divisor := 3;
13 quociente := dividendo div divisor; 14 quocienteReal := dividendo / divisor; 15
16 resto := dividendo mod divisor; 17
18 writeln('Dividendo: ', dividendo:3, ' Divisor: ', divisor:3); 19 writeln('Quociente: ', quociente:3, ' Resto : ', resto:3); 20 writeln('Quociente Real: ', quocienteReal:3:4);
21
22 readkey; {Para o programa até que algo seja teclado} 23 end.
O resultado da execução do programa da Listagem 11 é:
Listagem 3.3 – Uso de DIV e MOD com Unidade, Dezena e Centena
O objetivo do programa da Listagem 12 é apresentar os valores de unidade, dezena e centena de um número. Na linha 12 atribui-se o valor 367 à variável numero. Note que 367 = 3 * 100 + 67.
A linha 13 atribui à variável centena o valor de numero div 100, ou seja, o quociente inteiro da divisão entre 367 e 100, que resulta em 3.
A linha 14 atribui à variável resto o valor de numero mod 100, o que representa o resto inteiro da divisão. Como número é igual a 367, resto será 67.
Seguindo o raciocínio do uso de DIV e MOD, a linha 15 atribui 6 a dezena e a linha 16 atribui 7 a unidade.
O resultado da execução do programa da Listagem 12 é:
Centena: 3 Dezena : 6 Unidade: 7 1 program UsoDivMod2;
2 {Este programa vai demonstrar o uso de DIV e MOD.}
3
4 uses crt; {Usa a biblioteca CRT onde está readkey}
5 6 var
7 numero, centena, dezena, unidade, resto : integer; 8 {Operações sobre Inteiros: +, -, *, DIV e MOD} 9
10 begin {inicia o programa}
11 {Atribuições de valores às variáves}
12 numero := 367; {XYZ = X * 100 + YZ} 13 centena := numero div 100; {centena = X}
14 resto := numero mod 100; {resto = YZ} {YZ = Y * 10 + Z} 15 dezena := resto div 10; {dezena = Y}
16 unidade := resto mod 10; {unidade = Z} 17
18 writeln('Centena: ', centena); 19 writeln('Dezena: ', dezena); 20 writeln('Unidade: ', unidade); 21
22 readkey; {Para o programa até que algo seja teclado} 23
24 end. {termina o programa}
Dividendo: 10 Divisor: 3 Quociente: 3 Resto : 1 Quociente Real: 3.3333
Operador de Concatenação
O operador de concatenação efetua a junção de duas variáveis ou constantes do tipo string. Por exemplo, suponha as strings nome e sobrenome. Nome armazena ‘Edeyson’ e sobrenome, ‘Gomes’. Como obter uma string com o nome completo? Strings suportam a operação de soma (+) que funciona com a concatenação (junção).
A Listagem 13 exibe um exemplo de concatenação de strings.
Listagem 3.4 - Concatenação de Strings
Na Listagem 13, as linhas 7, 8 e 9 declaram strings com tamanho definido. As variáveis nome e sobrenome só podem armazenar cadeias com, no máximo, 20 caracteres. Já a variável nomeCompleto pode armazenar cadeias de até 40 caracteres.
Na linha 12 atribui-se a string ‘Edeyson’ à variável nome. Na linha 13 atribui-se ‘Gomes’ para sobrenome.
Note que na linha 14 faz-se uma operação de soma entre strings. Isso significa que as strings ‘Edeyson’, espaço em branco e ‘Gomes’ serão concatenadas e o resultado atribuído à variável nomeCompleto.
O resultado da linha 15 será: Nome Completo: Edeyson Gomes.
1 program ConcatenacaoDeStrings;
2 {Este programa vai demonstrar a Concatenação de Strings em Pascal.}
3
4 uses crt; 5
6 var
7 nome : string[20]; {Definição de variáveis} 8 sobrenome : string[20];
9 nomeCompleto : string[40]; 10
11 begin
12 nome := 'Edeyson'; {Atribui Edeyson para a var. nome} 13 sobrenome:= 'Gomes'; {Atribui Gomes para a var. sobrenome} 14 nomeCompleto := nome + ' ' + sobrenome; {Concatena nome,
espaço em branco e sobrenome} 15 writeln('Nome Completo: ', nomeCompleto); {Exibe o nome completo} 16
17 readkey; 18 end.
Operadores Relacionais
Os operadores relacionais são utilizados para efetuar a comparação entre dados de mesmo tipo, por exemplo, se um número inteiro é maior que outro, se um número real é menor ou igual a outro, se duas strings são iguais, etc.
Tabela 3.2 – Operadores Relacionais
OPERADOR SÍMBOLO Maior que > Menor que < Igual = Maior Igual >= Menor Igual <= Diferente <> Exemplo de operadores relacionais:
Listagem 3.5 – Operadores Relacionais com Integer
Na Listagem 14 a linha 5 define uma variável valorLogico do tipo boolean, ou seja, ela só armazena Verdade (TRUE) ou Falso (FALSE). A linha 6 define duas variáveis inteiras que são inicializadas nas linhas 10 e 11, respectivamente.
A linha 13, valorLogico := inteiro1 = inteiro2, precisa de destaque aos :=, que é o símbolo de atribuição do Pascal. Este atribui ao símbolo da esquerda do :=, no caso
valorLogico, o valor lógico ou absoluto do que está à direita do símbolo.
1 program OperadoresRelacionaisComInteger;
2 {Este programa vai demonstrar Operadores Relacionais do Pascal}
3 uses crt; 4 var
5 valorLogico : boolean; {Variáveis lógicas - podem ser TRUE ou FALSE} 6 inteiro1, inteiro2 : integer;
7 8 begin
9 {Atribuições de valores às variáves} 10 inteiro1 := 10;
11 inteiro2 := 20; 12
13 valorLogico := inteiro1 = inteiro2;
14 writeln('Teste se ', inteiro1, ' eh = a ', inteiro2, ' : ', valorLogico);
15
16 valorLogico := inteiro1 < inteiro2;
17 writeln('Teste se ', inteiro1, ' eh < que ', inteiro2, ' : ', valorLogico);
18
19 valorLogico := inteiro1 > inteiro2;
20 writeln('Teste se ', inteiro1, ' eh > que ', inteiro2, ' : ', valorLogico);
21
22 readkey; 23 end.
A linha 13 é lida assim: o valor do inteiro1 é igual ao valor do inteiro2? Se sim, atribua TRUE para valorLogico; se não, atribua FALSE.
A linha 14 imprime o resultado do teste lógico. Note que as linhas 16/17 e 19/20 fazem algo similar às linhas 13/14, apenas mudando o operador relacional.
O resultado da execução do programa da Listagem 14 é:
Listagem 3.6 – Operadores Relacionais com String
Na Listagem 15, similar a Listagem 14, a linha 5 define uma variável valorLogico do tipo boolean, ou seja, ela só armazena Verdade (TRUE) ou Falso (FALSE). A linha 6 define duas variáveis do tipo string (cadeias de caracter) que são inicializadas nas linhas 10 e 11, respectivamente.
A linha 13 é lida assim: o valor da string1 é igual ao valor do string2? Se sim, atribua TRUE para valorLogico; se não, atribua FALSE.
A linha 14 imprime o resultado do teste lógico. Note que as linhas 16/17 e 19/20 fazem algo similar às linhas 13/14, apenas mudando o operador relacional. Note que strings podem ser comparadas com >, <, etc. O resultado da execução do programa da Listagem 15 é:
Teste se 10 eh = a 20 : FALSE Teste se 10 eh < que 20 : TRUE Teste se 10 eh > que 20 : FALSE
1 program OperadoresRelacionaisComString;
2 {Este programa vai demonstrar Operadores Relacionais do Pascal}
3 uses crt; 4 var
5 valorLogico : boolean; {Variáveis lógicas - podem ser TRUE ou FALSE} 6 string1, string2 : string;
7 8 begin
9 {Atribuições de valores às variáves} 10 string1 := 'abc';
11 string2 := 'def'; 12
13 valorLogico := string1 = string2;
14 writeln('Teste se ', string1, ' eh = a ', string2, ' : ', valorLogico);
15
16 valorLogico := string1 > string2;
17 writeln('Teste se ', string1, ' eh > que ', string2, ' : ', valorLogico);
18
19 valorLogico := string1 < string2;
20 writeln('Teste se ', string1, ' eh < que ', string2, ' : ', valorLogico);
21
22 readkey; 23 end.
Listagem 3.7 – Operadores Relacionais com Reais
A listagem 16 é similar a 14 e 15. Ressaltam-se as linhas 10 e 11 que fazem a atribuição de números não inteiros às variáveis real1 e real2. Fica como exercício sua execução e a observação do resultado.
Operadores Lógicos
O Pascal dispõe dos seguintes operadores lógicos: AND (E), OR (OU) e NOT (NÃO, NEGAÇÃO). Para compreendê-los, vamos fazer uma breve introdução à Lógica.
A lógica é a ciência que estuda a correção do pensamento, do raciocínio. Quando elaboramos frases como: a) A Lua é maior que a Terra; b) A água do mar é salgada e c) 2 (dois) é o único número primo que é par, podemos determinar a elas um valor lógico verdadeiro ou falso. Logo, a é falso, b e c são verdade.
Tais frases são chamadas de proposições, pois afirmam fatos, exprimem juízos.
Teste se abc eh = a def : FALSE Teste se abc eh > que def : FALSE Teste se abc eh < que def : TRUE
1 program OperadoresRelacionaisComReal;
2 {Este programa vai demonstrar Operadores Relacionais do Pascal}
3 uses crt; 4 var
5 valorLogico : boolean; {Variáveis lógicas - podem ser TRUE ou FALSE} 6 real1, real2 : real;
7 8 begin
9 {Atribuições de valores às variáves} 10 real1 := 8/6;
11 real2 := 4/3; 12
13 valorLogico := real1 > real2;
14 writeln('Teste se ', real1:3:4, ' eh > que ', real2:3:4, ' : ', valorLogico);
15
16 valorLogico := real1 = real2;
17 writeln('Teste se ', real1:3:4, ' eh = a ', real2:3:4, ' : ', valorLogico);
18
19 valorLogico := real1 < real2;
20 writeln('Teste se ', real1:3:4, ' eh < que ', real2:3:4, ' : ', valorLogico);
21
22 readkey; 23 end.
A Lógica Matemática apresenta regras fundamentais do pensamento baseadas em dois princípios (Axiomas):
a. Princípio da Não Contradição - uma proposição ou é Verdadeira ou é Falsa; b. Princípio do Terceiro Excluído - toda proposição ou é Verdadeira ou é Falsa -
apenas esses valores são possíveis.
Nas listagens 14, 15 e 16 foram elaboradas proposições, por exemplo, em
valorLogico:= inteiro1 = inteiro2. A proposição é: o inteiro1 tem o mesmo valor do
inteiro2. O valor lógico (verdadeiro ou falso) desta proposição é armazenado na variável valorLogico e depende dos valores atribuídos a inteiro1 e inteiro2. Como exemplo, se inteiro1 armazena o valor 10 e inteiro2 armazena o valor 20, valorLogico
é FALSO.
As proposições usadas nas Listagens 14, 15 e 16 são ditas Simples ou Atômicas, pois não contém outra proposição como parte integrante.
Uma proposição é dita Composta quando ela resulta da combinação (via conectivos E ou OU, por exemplo) de outras proposições. Por exemplo, supondo-se que se queira saber se um número x pertence ao Intervalo Fechado nos extremos a e b :
[a, b] = { x
ϵ
R ; a ≤ x ≤ b }. Em Pascal necessitamos de uma proposição composta como segue:valorLogico:= (x >= a) AND (x <= b);
Esta proposição é lida da seguinte forma: Teste se x é maior ou igual a a E se x é menor ou igual a b. Se ambos forem verdade, e apenas neste caso, valorLogico será verdade. Note o seguinte: supondo o intervalo [1, 5]. Sendo a = 1 e b = 5; se x = 6 o teste 6 >= 1 é verdade, mas 6 <= 5 é falso, logo x = 6 não pertence ao intervalo [1, 5]. Por isso o
valorLogico neste caso é falso.
Uma proposição composta com conectivos AND só é verdade se todas as suas componentes são verdade.
Pela teoria básica de conjuntos, define-se A ∩ B por: A ∩ B = { x / x
ϵ
A exϵ
B }Podemos afirmar que x pertence a A ∩ B se, e somente se, x pertence a A AND x pertence a B, ou seja, pertence aos dois conjuntos simultaneamente. O conectivo AND opera a interseção entre proposições (e conjuntos).
Vejamos um exemplo em Pascal: suponha que A = {1, 2, 3, 4, 5} e B = {4, 5, 6}. Se x
ϵ
A, então (x>= 1) AND (x <= 5) é verdade.Se x
ϵ
B, então (x>= 4) AND (x <= 6) é verdade.Se x
ϵ
A ∩ B, então ((x>= 1) AND (x <= 5)) AND ((x>= 4) AND (x <= 6)) é verdade. Ou seja, xϵ
{4, 5}. De outra forma, xϵ
[1, 5] ∩ [4, 6].O uso de operadores lógicos é apresentado na Listagem 17.
Listagem 3.8 – Operadores Lógicos
Na Listagem 17, as linhas 5 e 6 definem as variáveis e as linhas 10 a 11 as iniciam. A linha 14 atribui à variável valorLogico o resultado do teste (valorLogico:=(x >inicio) and (x>fim)), ou seja, se x é maior que inicio AND x é maior que fim. Logo, x tem de ser maior que o maior valor. Como inicio e fim foram iniciadas com 0 e 10, respectivamente, o teste só é verdade se x for maior que 10. Como x foi iniciada com 5, valorLogico é FALSE na linha 14.
A linha 17 atribui à variável valorLogico o resultado do teste (valorLogico:=(x >inicio) and (x<fim)), ou seja, se x é maior que inicio AND x é menor que fim. Como inicio e fim foram iniciadas com 0 e 10, respectivamente, o teste só é verdade se x for maior que 0 AND menor que 10. Como x foi iniciada com 5, valorLogico é TRUE na linha 14. A linha 20 atribui à variável valorLogico o resultado do teste (valorLogico:=(x>inicio) or
(x > fim)), ou seja, se x é maior que inicio OR x é maior que fim. Como inicio e fim foram iniciadas com 0 e 10, respectivamente, o teste só é verdade se x for maior que 0 OR maior que 10.
1 program OperadoresLogicos;
2 {Este programa vai demonstrar Operadores Lógicos do Pascal}
3 uses crt; 4 var
5 valorLogico : boolean; {Variáveis lógicas - podem ser TRUE ou FALSE} 6 x, inicio, fim : integer;
7 8 begin
9 {Atribuições de valores às variáves} 10 inicio := 0;
11 fim := 10; 12 x := 5; 13
14 valorLogico := (x > inicio) and (x > fim);
15 writeln('Teste se ', x, ' eh > que ', inicio , ' E ', x, ' eh > que ', fim, ' : ', valorLogico);
16
17 valorLogico := (x > inicio) and (x < fim);
18 writeln('Teste se ', x, ' eh > que ', inicio , ' E ', x, ' eh < que ', fim, ' : ', valorLogico);
19
20 valorLogico := (x > inicio) or (x > fim);
21 writeln('Teste se ', x, ' eh > que ', inicio , ' OU ', x, ' eh > que ', fim, ' : ', valorLogico);
22
23 valorLogico := ((x >= 1) and (x <= 5)) AND ((x >= 4) and (x <= 6)); 24 writeln('Teste se ', x, ' esta entre 1 e 5 e se ', x, ' esta entre 4 e 6 simultaneamente : ', valorLogico);
25
26 readkey; 27 end.
Diferente do AND, uma proposição composta com OR é verdade se pelo menos uma das proposições componentes for verdade.
Como x foi iniciada com 5, valorLogico é TRUE, pois 5 é maior que 0, embora 5 seja menor que 10.
A linha 23 atribui à variável valorLogico o resultado do teste (valorLogico:=( (x>=1) and
(x<=5) ) AND ( (x>=4) and (x<=6) )), ou seja, se x deve estar no conjunto [1, 5] ∩ [4,6]. Note que o AND em maiúsculas só foi usado para destacar os conjuntos na expressão. Em Pascal não há distinção de maiúsculas e minúsculas.
Como x tem o valor 5, o valorLogico é TRUE na linha 24.
Ainda pela teoria básica de conjuntos, define-se A U B por: A U B = { x / x
ϵ
A orxϵ
B }Podemos afirmar que x pertence a A U B se, e somente se, x pertence a A OR x pertence a B, ou seja, pertence a um ou ao outro. O conectivo OR opera a união entre proposições (e conjuntos).
Vejamos um exemplo em Pascal: suponha que A = {1, 2, 3, 4, 5} e B = {4, 5, 6}. Se x
ϵ
A, então (x>= 1) AND (x <= 5) é verdade.Se x
ϵ
B, então (x>= 4) AND (x <= 6) é verdade.Se x
ϵ
A U B, então ((x>= 1) AND (x <= 5)) OR ((x>= 4) AND (x <= 6)) é verdade. Ou seja, xϵ
{1, 2, 3, 4, 5, 6}. De outra forma, xϵ
[1, 5] U [4, 6].Exercícios
1. Elabore um programa que deve:
a. Declarar a variável x como inteira.
b. Solicitar ao usuário para informar um valor para x. c. Determinar se x pertence aos intervalos:
i. [2, 7] U [10, 15]
ii. [1, 5) U [4, 10) U (20, 26] iii. [0, 10] ∩ [7, 15]
ESTRUTURAS DE DECISÃO
Todos os programas de exemplo elaborados até este capítulo apresentam um conjunto de ações seqüenciais onde todas as ações são executadas numa mesma ordem.
O modelo da Figura 2 (Fluxogramas são abordados no apêndice A) não é comum em programas quotidianos. Normalmente o programador se depara com ações que serão executadas ou não a depender de uma determinada situação.
Ação 1 Ação 2
Entrada Saída
Listagem 4.9 – Fluxograma de sequência
Quando uma ou mais ações dependem de uma ou mais condições para sua execução, necessitam-se de estruturas de decisão que controlam o fluxo de execução do programa efetuando tomadas de decisão e desvios de operações.
Em Linguagem Natural podem-se descrever tais estruturas de decisão das seguintes formas:
1. Seleção com uma via: Se a condição é verdadeira então execute a ação 1.
2. Seleção com duas vias: Se a condição é verdadeira então execute a ação 1. Senão, execute a ação 2.
Em ambas as formas a ação 1 só será executada se e somente se a condição for verdadeira.
Na forma 1, seleção com uma via, caso a condição seja verdadeira adiciona-se uma ação ao fluxo normal do programa. Na forma 2, escolhe-se um caminho a seguir, executando a ação1 ou a ação 2.