engenharia informática programação i & estruturas de dados e algoritmos 2001/2002 1 capitulo...

27
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 6 - Iterações Capitulo 6 Iterações

Upload: internet

Post on 17-Apr-2015

109 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 6 - Iterações Capitulo 6 Iterações

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

1

Capitulo 6 - Iterações

Capitulo 6

Iterações

Page 2: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 6 - Iterações Capitulo 6 Iterações

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

2

Capitulo 6 - Iterações

Ciclo while• while (condição) instruções;

• Repete o ciclo enquanto a condição é verdadeira

• while (balance < 2 * initial){

year++;balance = balance +

balance * rate / 100;}

Page 3: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 6 - Iterações Capitulo 6 Iterações

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

3

Capitulo 6 - Iterações

Programa DoubleInv.java

public class DoubleInv

{

public double getYearsDoubleInv(double rate,

double initialBalance)

{

int year = 0;

double balance = initialBalance;

double interest = 0.0;

Page 4: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 6 - Iterações Capitulo 6 Iterações

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

4

Capitulo 6 - Iterações

// keep accumulating interest until balance // doubles

while (balance < 2 * initialBalance)

{

year++;

interest = balance * rate / 100;

balance = balance + interest;

}

return year;

}

} // End Class

Nota: As regras de estilo no que toca aos comentários não foram seguidas apenas por falta de espaço.

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

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

5

Capitulo 6 - Iterações

Floxograma de um ciclo while

Page 6: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 6 - Iterações Capitulo 6 Iterações

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

6

Capitulo 6 - Iterações

Erro comum : Ciclo Infinito• while (year < 20) {

balance = balance + balance * rate / 100;

}

• while (year > 0) {

year++;

. . . }

• O ciclo nunca termina

Page 7: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 6 - Iterações Capitulo 6 Iterações

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

7

Capitulo 6 - IteraçõesCiclo for• for (init; condition; update) statement

• Exemplo: for (i = 1; i <= 10; i++) ... for (y = 20; y > 0; y--) ...

• Equivalente a:init;while (condition){

statement;

update;

}

Page 8: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 6 - Iterações Capitulo 6 Iterações

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

8

Capitulo 6 - Iterações

Programa Invest.java

public class Invest

{

public double getBalance(double rate)

{

final double INITIAL_BALANCE = 10000;

final int NYEARS = 20;

double balance = INITIAL_BALANCE;

double interest = 0.0;

Page 9: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 6 - Iterações Capitulo 6 Iterações

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

9

Capitulo 6 - Iterações

for (int year = 1; year <= NYEARS; year++)

{

interest = balance * rate / 100;

balance = balance + interest;

System.out.println("year: " + year +

" balance: " + balance);

}

return balance;

}

} // End Class

Nota: As regras de estilo no que toca aos comentários não foram seguidas apenas por falta de espaço.

Page 10: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 6 - Iterações Capitulo 6 Iterações

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

10

Capitulo 6 - Iterações

Floxograma de umciclo for

Page 11: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 6 - Iterações Capitulo 6 Iterações

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

11

Capitulo 6 - Iterações

Ciclo do• do instruções;while (condição);

• Executa as instruções pelo menos uma vez• Examplo:do{

rate ++;} while (rate <= 0);

Page 12: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 6 - Iterações Capitulo 6 Iterações

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

12

Capitulo 6 - Iterações

Floxograma de um ciclo do

Page 13: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 6 - Iterações Capitulo 6 Iterações

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

13

Capitulo 6 - Iterações

Diferenças

• while : repete 0 ou mais vezes

• do ... while : repete 1 ou mais vezes

• for : repete n vezes

Page 14: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 6 - Iterações Capitulo 6 Iterações

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

14

Capitulo 6 - Iterações

Erros comuns (1)• year = 0;while (balance < 2 * initial){

year++; balance = balance + balance * rate / 100;}System.out.println("Doubled after " + year + " years.");

• O year deve iniciar a 0 ou 1 ?• O teste deve ser < ou <= ?

Page 15: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 6 - Iterações Capitulo 6 Iterações

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

15

Capitulo 6 - Iterações

• Um ponto e virgula que não deve existirsum = 0;for (i = 1; i <= 10; i++);

{sum = sum + i;

}

System.out.println(sum);

• Um ponto e virgula que faltafor (i = 1; i <= 10; sum = sum + i++)System.out.println(sum);

Erros comuns (2)

Page 16: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 6 - Iterações Capitulo 6 Iterações

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

16

Capitulo 6 - Iterações

Ciclos Aninhados (1)• Tabela de potências x y

1 1 1 1 1 2 4 8 16 32 3 9 27 81 243 . . .

• Exemplofor (int x = 0; x <= ROWS; x++){ print row // usa outro ciclo}

Page 17: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 6 - Iterações Capitulo 6 Iterações

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

17

Capitulo 6 - Iterações

Ciclos Aninhados (2)• Ciclo detro de um ciclo:for (int x = 0; x <= ROWS; x++){ for (int y = 0; y <= COLS; y++) { compute value print value } System.out.println(); }

• Número de ciclos: ROWS * COLS

Page 18: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 6 - Iterações Capitulo 6 Iterações

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

18

Capitulo 6 - IteraçõesPrograma Table.java

public class Table

{

public void print()

{

final int COLUMN_WIDTH = 10;

int p = 0;

for (int x = 1; x <= 10; x++)

{

// print table row

for (int y = 1; y <= 8; y++)

{

p = (int)Math.pow(x, y);

Page 19: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 6 - Iterações Capitulo 6 Iterações

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

19

Capitulo 6 - Iterações // convert value to string

String pstr = "" + p;

// pad with spaces

while (pstr.length() < COLUMN_WIDTH)

{

pstr = " " + pstr;

}

System.out.print(pstr);

}

System.out.println();

}

}

} // End Class

Nota: As regras de estilo no que toca aos comentários não foram seguidas apenas por falta de espaço.

Page 20: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 6 - Iterações Capitulo 6 Iterações

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

20

Capitulo 6 - Iterações

“Loop and a Half”• boolean done = false;

while (!done){

if (line == null)

{ done = true;

} else

{ process data

}}

Page 21: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 6 - Iterações Capitulo 6 Iterações

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

21

Capitulo 6 - Iterações

Sentinela (1)• Marcam o fim de um ciclo• Exemplo:3.52.61.20

• Ou melhor, usar uma sentinela não numérica como Q

Page 22: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 6 - Iterações Capitulo 6 Iterações

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

22

Capitulo 6 - Iterações

boolean done = false;while (!done){

if (line.equalsIgnoreCase(“Q”))

{ done = true;

} else

{ process data

}}

Sentinela (2)

Page 23: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 6 - Iterações Capitulo 6 Iterações

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

23

Capitulo 6 - Iterações

Separação de Palavras• Separa a String em palavras (as palavras são

delimitadas por espaços em branco)

• StringTokenizer tokenizer = new StringTokenizer();while (tokenizer.hasMoreTokens()){

String token = tokenizer.nextToken(); process token}

Page 24: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 6 - Iterações Capitulo 6 Iterações

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

24

Capitulo 6 - Iterações

Tipo de Dados : char

• char: recebe um único caracter• Exemplos: 'A', '\u00E9'• 'A‘ não é o mesmo que "A"• String s = . . .;for (int i = 0; i < s.length(); i++){

char ch = s.charAt(i); process ch;}

Page 25: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 6 - Iterações Capitulo 6 Iterações

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

25

Capitulo 6 - IteraçõesPrograma Reverse.java

public class Reverse

{

public String reverse(String s)

{

String r = "";

char ch;

for (int i = 0; i < s.length(); i++)

{

ch = s.charAt(i);

r = ch + r; // add ch in front

}

return r;

}

} // End Class

Page 26: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 6 - Iterações Capitulo 6 Iterações

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

26

Capitulo 6 - Iterações

Números Aleatórios e Simulações

• Gerar números aleatórios:Random generator = new Random();int n = generator.nextInt(CHOICES);double x = generator.nextDouble();

• Exemplo (gerar números entre 1 e 6)int d = 1 + generator.nextInt(6);

Page 27: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 6 - Iterações Capitulo 6 Iterações

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

27

Capitulo 6 - IteraçõesPrograma Dice.java

import java.util.Random;

public class Dice

{

public Dice()

{

generator_ = new Random();

}

public int cast()

{

return 1 + generator_.nextInt(6);

}

private Random generator_;

} // End Class