operadores lógicos e relacionais comandos condicionais (if …if669/material/aulasnovas2016/... ·...

21
Ricardo Massa F. Lima [email protected] Sérgio C. B. Soares [email protected] Operadores Lógicos e Relacionais Comandos condicionais (if-else) Casting AULA 04 Introdução a Programação – IF669 http://www.cin.ufpe.br/~if669

Upload: others

Post on 31-Aug-2020

16 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Operadores Lógicos e Relacionais Comandos condicionais (if …if669/material/aulasNovas2016/... · 2016. 3. 11. · Java é uma linguagem fortemente tipada – Atribuir um valor

Ricardo Massa F. Lima [email protected]

Sérgio C. B. Soares [email protected]

Operadores Lógicos e Relacionais Comandos condicionais (if-else)

Casting

AULA 04

Introdução a Programação – IF669 http://www.cin.ufpe.br/~if669

Page 2: Operadores Lógicos e Relacionais Comandos condicionais (if …if669/material/aulasNovas2016/... · 2016. 3. 11. · Java é uma linguagem fortemente tipada – Atribuir um valor

Operadores Relacionais

n  Igual n Diferente n Menor que n Maior que n Menor ou igual n Maior ou igual

int x = ...

if (x == 2) ...

if (x != 2) ...

if (x < 2) ...

if (x > 2) ...

if (x <= 2) ...

if (x >= 2) ...

Page 3: Operadores Lógicos e Relacionais Comandos condicionais (if …if669/material/aulasNovas2016/... · 2016. 3. 11. · Java é uma linguagem fortemente tipada – Atribuir um valor

Operadores lógicos/booleanos

n Negação

– !

n Ou (or)

– | ou ||

n  E (and)

– & ou &&

boolean b = ...

if (!b) ...

if ( (x > 2) ||

(x < 2) ) ...

if ( (x > 2) &&

(y > 0) ) ...

Page 4: Operadores Lógicos e Relacionais Comandos condicionais (if …if669/material/aulasNovas2016/... · 2016. 3. 11. · Java é uma linguagem fortemente tipada – Atribuir um valor

Tabela Verdade

n Uma tabela verdade contém todas as combinações true-false de uma expressão booleana

4

a b !b a && b a || b a ^ b

true true false true true false

true false true false true true

false true false false true true

false false true false false false

^ é o operador de

disjunção exclusiva

Page 5: Operadores Lógicos e Relacionais Comandos condicionais (if …if669/material/aulasNovas2016/... · 2016. 3. 11. · Java é uma linguagem fortemente tipada – Atribuir um valor

Operadores booleanos (short-circuited)

n  E (and) - && vs &

n Ou (or) - || vs |

n Os operadores && e || só avaliam o segundo operando se necessário

– false && ?

– true || ?

Page 6: Operadores Lógicos e Relacionais Comandos condicionais (if …if669/material/aulasNovas2016/... · 2016. 3. 11. · Java é uma linguagem fortemente tipada – Atribuir um valor

Exemplos de expressões booleanas

6

boolean b = true;

boolean c = !b;

c = !(true || b) && c;

b = c || !(!b);

true ?

b c

true false

true false

true false

Qual o valor de b e c a cada passo?

Page 7: Operadores Lógicos e Relacionais Comandos condicionais (if …if669/material/aulasNovas2016/... · 2016. 3. 11. · Java é uma linguagem fortemente tipada – Atribuir um valor

Mais exemplos de expressões booleanas

7

boolean b, c;

b = true || false;

c = true && b;

b = b == c;

Qual o valor de b e c a cada passo?

? ?

b c

true ?

true true

true true

Page 8: Operadores Lógicos e Relacionais Comandos condicionais (if …if669/material/aulasNovas2016/... · 2016. 3. 11. · Java é uma linguagem fortemente tipada – Atribuir um valor

Expressões lógicas/booleanas

n  Estruturas de controle (seleção e repetição) utilizam expressões booleanas para decidir –  qual bloco de comandos

será executado

–  se o bloco de comandos deverá ser repetido

8

if (EXPR_BOOL) {

//bloco 1

} else {

//bloco 2

}

while (EXPR_BOOL) {

//bloco

}

Page 9: Operadores Lógicos e Relacionais Comandos condicionais (if …if669/material/aulasNovas2016/... · 2016. 3. 11. · Java é uma linguagem fortemente tipada – Atribuir um valor

Estrutura de controle de seleção Comando if-else

if (EXPR_BOOL) { //bloco 1

} else {

//bloco 2

}

if (EXPR_BOOL) //comando 1

else

//comando 2

Sem abre-fecha chaves

if (EXPR_BOOL) //comando 1

Padrão Só um if

if (EXP1) { //bloco 1

} else if (EXP2) {

//bloco 2

} else {

//bloco 3

}

if encadeado

Bloco = comandos delimitados por { e }

Page 10: Operadores Lógicos e Relacionais Comandos condicionais (if …if669/material/aulasNovas2016/... · 2016. 3. 11. · Java é uma linguagem fortemente tipada – Atribuir um valor

Exercício 1 (vamos fazer aqui) n Um programa que lê três números inteiros

distintos e imprime o maior dos três Scanner in = new Scanner(System.in); int n1, n2, n3; System.out.println("Digite o primeiro inteiro"); n1 = in.nextInt(); System.out.println("Digite o segundo inteiro"); n2 = in.nextInt(); System.out.println("Digite o terceiro inteiro"); n3 = in.nextInt(); if ( (n1 > n2) && (n1 > n3) ) { System.out.println(n1); } else if (n2 > n3) { System.out.println(n2); } else { System.out.println(n3); }

Como tornar a solução mais genérica?

Page 11: Operadores Lógicos e Relacionais Comandos condicionais (if …if669/material/aulasNovas2016/... · 2016. 3. 11. · Java é uma linguagem fortemente tipada – Atribuir um valor

Exercício 2 (10 minutos)

n  Ler um valor real correspondente a uma nota, tal que 0 ≤ nota ≤ 10, e imprimir o conceito equivalente (A, B, C, D ou E), conforme a seguinte tabela:

Conceito Intervalo

A 8,5 ≤ nota ≤ 10,0

B 7,0 ≤ nota < 8,5

C 5,0 ≤ nota < 7,0

D 3,0 ≤ nota < 5,0

E nota < 3,0

Page 12: Operadores Lógicos e Relacionais Comandos condicionais (if …if669/material/aulasNovas2016/... · 2016. 3. 11. · Java é uma linguagem fortemente tipada – Atribuir um valor

Tipos Primitivos - Casting

n  Java é uma linguagem fortemente tipada –  Atribuir um valor de tipo errado resulta em um

erro de compilação

n  Java pode, implicitamente, promover um tipo mais restrito em um tipo com maior amplitude –  Nenhuma informação é perdida

n  Para restringir um tipo mais amplo é preciso utilizar casts explicitamente –  Cast cria um novo valor e permite que ele seja

tratado como um tipo diferente de sua definição original

Page 13: Operadores Lógicos e Relacionais Comandos condicionais (if …if669/material/aulasNovas2016/... · 2016. 3. 11. · Java é uma linguagem fortemente tipada – Atribuir um valor

Exemplos

byte b = 1; short s = b; int i = s; long l = i; float f = i; double d = f;

s = i;

l = i;

i = b;

f = d;

Algum problema? Onde?

s = (short)i;

f = (float)d;

Solução usando cast

Erro de compilação Valores int são maiores que short Valores double maiores que float

Page 14: Operadores Lógicos e Relacionais Comandos condicionais (if …if669/material/aulasNovas2016/... · 2016. 3. 11. · Java é uma linguagem fortemente tipada – Atribuir um valor

Operações com tipos primitivos

n  Operações binárias em valores numéricos de tipos diferentes serão tratados da seguinte maneira:

–  Se um dos operandos for do tipo double, então o outro será convertido para double (antes da operação)

–  Caso contrário, se um dos operandos do tipo float, o outro será convertido para float (antes da operação)

–  Caso contrário, se um dos operandos do tipo long, o outro será convertido para long (antes da operação)

–  Caso contrário, ambos os operandos serão convertidos para int (antes da operação)

double è float è long è int

Page 15: Operadores Lógicos e Relacionais Comandos condicionais (if …if669/material/aulasNovas2016/... · 2016. 3. 11. · Java é uma linguagem fortemente tipada – Atribuir um valor

Exemplos

byte b = 1 + 1.0; b = 1 + 1; b = 1 + b; short s = i + b; int i = s + b; i = i + 1;

Algum problema? Onde?

Erro de compilação (double) OK (int), 2 (constante) cabe no byte Erro de compilação (int) Erro de compilação (int) OK (int) OK (int)

O Compilador não armazena valores, só checa os tipos

A promoção de valores int para byte ou short só é implícita se forem constantes

Page 16: Operadores Lógicos e Relacionais Comandos condicionais (if …if669/material/aulasNovas2016/... · 2016. 3. 11. · Java é uma linguagem fortemente tipada – Atribuir um valor

long p = (long) 12345.56;

int g = p;

char c = ‘t’;

int j = c;

short k = c;

short k = (short) c;

float f = 12.35;

ok! p = 12345L

Erro! Apesar de um int suportar o valor 12345

Casting automático!

Erro! Não faz casting automático de char para short (e vice-versa), mesmo com o tamanho dos tipos iguais.

ok! Casting Explícito!

Ilegal! 12.35 é um double! 12 estaria correto, faria o casting de int para float

Casting Implícito vs. Explícito

Page 17: Operadores Lógicos e Relacionais Comandos condicionais (if …if669/material/aulasNovas2016/... · 2016. 3. 11. · Java é uma linguagem fortemente tipada – Atribuir um valor

Precedência de operadores

n  Procure no google por

n Mas lembre-se que parênteses sempre

forçam a precedência

e tornam o programa mais claro!

“Operator Precedence in Java”

1 + 5 * 9 (1 + 5) * 9

Page 18: Operadores Lógicos e Relacionais Comandos condicionais (if …if669/material/aulasNovas2016/... · 2016. 3. 11. · Java é uma linguagem fortemente tipada – Atribuir um valor

MAIS EXERCÍCIOS

Todas as soluções dos exercícios sempre em http://www.cin.ufpe.br/~if669/material/solucoes

Page 19: Operadores Lógicos e Relacionais Comandos condicionais (if …if669/material/aulasNovas2016/... · 2016. 3. 11. · Java é uma linguagem fortemente tipada – Atribuir um valor

Exercício 3

n  Ler dois valores reais, x e y, correspondentes às coordenadas de um ponto no plano e dizer em que quadrante se encontra, ou se está no eixo-x ou no eixo-y ou se está na origem.

1º 2º

4º 3º x

y

Page 20: Operadores Lógicos e Relacionais Comandos condicionais (if …if669/material/aulasNovas2016/... · 2016. 3. 11. · Java é uma linguagem fortemente tipada – Atribuir um valor

Exercício 4

n  Ler valores para os três lados de um triângulo e dizer o seu tipo (eqüilátero, isósceles ou escaleno).

Page 21: Operadores Lógicos e Relacionais Comandos condicionais (if …if669/material/aulasNovas2016/... · 2016. 3. 11. · Java é uma linguagem fortemente tipada – Atribuir um valor

Exercício 5

n  Ler dois valores reais, correspondentes ao peso e à altura de uma pessoa, e calcular o Índice de Massa Corporal (IMC), pela fórmula:

IMC =pesoaltura2

IMC calculado Mensagem

IMC≤ 18,5 abaixo do peso

18,5<IMC≤25 peso normal 25<IMC≤30 acima do peso

30<IMC obeso

n  Em seguida, dar mensagem conforme a seguinte tabela:

A solução está um pouco mais interessante