Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 6 -...
Transcript of Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 6 -...
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/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;}
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;
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.
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
5
Capitulo 6 - Iterações
Floxograma de um ciclo while
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
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;
}
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;
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.
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
10
Capitulo 6 - Iterações
Floxograma de umciclo for
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);
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
12
Capitulo 6 - Iterações
Floxograma de um ciclo do
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
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 <= ?
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)
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}
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
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);
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.
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
}}
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
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)
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}
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;}
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
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);
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