A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 5 - Decisões Capitulo 5 Decisões.

Apresentações semelhantes


Apresentação em tema: "Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 5 - Decisões Capitulo 5 Decisões."— Transcrição da apresentação:

1 Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 5 - Decisões Capitulo 5 Decisões

2 Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 5 - Decisões Uma decisão

3 Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 5 - Decisões A instrução if if (condição) { instrução } if (amount <= balance) { balance = balance - amount; }

4 Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 5 - Decisões Conjunto de instruções com um único if : if (amount <= balance) { balance -= balance; }

5 Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 5 - Decisões Condições alternativas

6 Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 5 - Decisões Instrução if/else if (condição) { instrução1 } else { instrução2 } if (amount <= balance) { balance = balance - amount; } else { balance = balance - OVERDRAFT_PENALTY; }

7 Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 5 - Decisões Operadores relacionais (comparações) diferente = corresponde a == != corresponde a =

8 Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 5 - Decisões Comparação de valores com virgula flutuante Erros de arredondamento: double r = Math.sqrt(2) r * r é e não 2 r * r == 2 é falso Para testar se x e y são suficientemente próximos: |x - y| e, e é um valor muito pequeno (e.x ) Não é valido para números muito grande, p.e., Deve usar-se : |x - y| max(|x|, |y|) Math.abs(x - y) <= EPSILON * Math.max(Math.abs(x), Math.abs(y));

9 Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 5 - Decisões Comparação de Strings Não utilizar == para strings! if (input == "Y") // Errado!!! Utilize o método equals : if (input.equals("Y")) == testa se duas strings se referem ao mesmo objecto, i.e., se são apenas dois nomes diferentes para o mesmo objecto. Método equals testa se os objectos a que se referem são iguais. Para efectuar um teste Case insensitive ("Y" ou y") if (input.equalsIgnoreCase("Y"))

10 Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 5 - Decisões Comparação de Objectos == para testar a identidade, equals para testar o conteúdo Rectangle a = new Rectangle(5, 10, 20, 30); Rectangle b = new Rectangle(5, 10, 20, 30); a != b, mas a.equals(b) Aviso: devemos definir o método equals na nossa classe (capitulo 9)

11 Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 5 - Decisões Comparação de objectos

12 Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 5 - Decisões Comparação Lexicográfica s.compareTo(t) < 0 significa: s vem antes de t no dicionário "car" vem antes de "cargo" que vem antes de "cathode". Todas as letras maiúsculas vem antes das minúsculas: "Hello" vem antes de "car"

13 Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 5 - Decisões Comparação lexigrafica

14 Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 5 - Decisões Alternativas múltiplas if (condição1) instrução1; else if (condição2) instrução2; else if (condição3) instrução3; else instrução4; A primeira condição verdadeira é executada. A ordem é importante.

15 Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 5 - Decisões Program Richter.java public class Richter { public String getMagnitude(double theMagnitude) { Earthquake quake = new Earthquake(theMagnitude); return quake.getDescription()); } public class Earthquake { public Earthquake(double magnitude) { richter_ = magnitude; }

16 Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 5 - Decisões public String getDescription() { String r; if (richter_ >= 8.0) r = "Most structures fall"; else if (richter_ >= 7.0) r = "Many buildings destroyed"; else if (richter_ >= 6.0) r = "Many buildings considerably damaged, some collapse"; else if (richter_ >= 4.5) r = "Damage to poorly constructed buildings"; else if (richter_ >= 3.5) r = "Felt by many people, no destruction"; else if (richter_ >= 0) r = "Generally not felt by people"; else r = "Negative numbers are not valid"; return r; } private double richter_; } // Nota: a regra de estilo n.º10 não foi respeitada apenas por // falta de espaço

17 Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 5 - Decisões Ciclos aninhados if (condição1) { if (condição1a) { instrução1a; } else { instrução1b;}

18 Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 5 - Decisões Cálculo de impostos

19 Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 5 - Decisões Program Tax.java public class Tax { // method to calculate the incoming tax // status may be M or S public getTax(double income,String status) { TaxReturn aTaxReturn = new TaxReturn(income, status); return aTaxReturn.getTax(); }

20 Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 5 - Decisões public class TaxReturn { public TaxReturn(double anIncome, String aStatus) { income_ = anIncome; status_ = aStatus; } public double getTax() { double tax = 0; final double RATE1 = 0.15; final double RATE2 = 0.28; final double RATE3 = 0.31; final double SINGLE_CUTOFF1 = 21450; final double SINGLE_CUTOFF2 = 51900;

21 Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 5 - Decisões final double SINGLE_BASE2 = ; final double SINGLE_BASE3 = ; final double MARRIED_CUTOFF1 = 35800; final double MARRIED_CUTOFF2 = 86500; final double MARRIED_BASE2 = 5370; final double MARRIED_BASE3 = 19566; if (status_.equalsIgnoreCase("S")) { if (income_ <= SINGLE_CUTOFF1) { tax = RATE1 * income_; } else if (income <= SINGLE_CUTOFF2) { tax = SINGLE_BASE2 + RATE2 * (income_ - SINGLE_CUTOFF1); } else { tax = SINGLE_BASE3 + RATE3 * (income_ - SINGLE_CUTOFF2); }

22 Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 5 - Decisões else { if (income_ <= MARRIED_CUTOFF1) { tax = RATE1 * income_; } else if (income_ <= MARRIED_CUTOFF2) { tax = MARRIED_BASE2 + RATE2 * (income_ - MARRIED_CUTOFF1); } else { tax = MARRIED_BASE3 + RATE3 * (income_ - MARRIED_CUTOFF2); } return tax; } private double income_; private String status_; }

23 Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 5 - Decisões O tipo booleano George Boole ( ): pioneiro no estudo da lógica O valor da expressão x < 10 é true ou false. Tipo booleano : um de dois valores ( V ou F ) O método equals devolve um valor do tipo boolean

24 Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 5 - Decisões Operadores booleanos && e || ou ! negação if ( (tday == bday) && (tmonth == month) )... if ( (tmonth == 4) || (tmonth == 6) || (tmonth == 9) || (tmonth == 11) )... if ( (tmonth > bmonth) || ((tmonth == bmonth) && (tday > bday)) )...

25 Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 5 - Decisões Fluxograma para combinações de && e ||

26 Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 5 - Decisões Tabelas de verdade A B A && B true true true true false false false any false A B A || B true any true false true true false false false A !A true false false true

27 Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 5 - Decisões Lei de De Morgan !(A && B) é idêntico a !A || !B !(A || B) é idêntico a !A && !B if ( !(country.equals("USA") && !state.equals("AK) && !state.equals("HI")) )... if (!country.equals("USA") || !!state.equals("AK) || !!state.equals("HI"))...

28 Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 5 - Decisões Variáveis booleanas boolean shipByAir = false; if (!country.equals("USA")) { shipByAir = true; } else if ( state.equals("AK") || state.equals("HI") ) { shipByAir = true; } if (shipByAir)... else... As variáveis bolenas são por vezes chamadas flags

29 Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 5 - Decisões Boolean do's and don'ts não escrever: if (shipByAir == true)... if (shipByAir != false)... escrever: if (shipByAir)... não escrever: if (balance < 0) { return true; } else { return false; } escrever: return balance < 0;


Carregar ppt "Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 5 - Decisões Capitulo 5 Decisões."

Apresentações semelhantes


Anúncios Google