• Nenhum resultado encontrado

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.

Documentos relacionados