laços de repetição
TRANSCRIPT
Tecnologia em Sistemas para Internet - IFMS
Aula Extra – Laços de Repetição
Tópicos em ProgramaçãoProf.º Msc. Sidney Roberto de Sousa
Tec. em Sistemas para Internet - IFMS 2
O que veremos nesta aula?
● Porquê utilizar laços de repetição?● O laço de repetição while● O laço de repetição do while● O laço de repetição for
Tec. em Sistemas para Internet - IFMS 3
Problema
● Imagine que devemos resolver o seguinte problema:
Escreva um programa para imprimir na tela a sequência de 1 até 4 em uma mesma linha.
● Parece simples!
Tec. em Sistemas para Internet - IFMS 4
Solução
System.out.println(“1 2 3 4”);
Tec. em Sistemas para Internet - IFMS 5
Problema
● Agora, vamos redefinir o nosso problema:
Escreva um programa que leia do usuário um valor inteiro positivo n e imprima na tela a sequência de 1 até n em uma mesma linha.
● Vamos tentar resolver este problema utilizando a mesma “estratégia” da solução anterior (que eu batizei de solução “não muito inteligente”...)
Tec. em Sistemas para Internet - IFMS 6
Solução “não muito inteligente”
System.out.println("Digite um numero inteiro positivo:");
Scanner leitor = new Scanner(System.in);
int n = leitor.nextInt();
// Garantindo que o valor de n seja positivo...
if (n < 0) {
n = n * -1;
} else if (n == 0) {
n = 1;
}
// E lá vamos nós...
if (n == 1) {
System.out.println("1");
} else if (n == 2) {
System.out.println("1 2");
} else if (n == 3) {
System.out.println("1 2 3");
} else if (n == 4) {
System.out.println("1 2 3 4");
} else if (n == 5) {
System.out.println("1 2 3 4 5");
} else if (n == 6) {
System.out.println("1 2 3 4 5 6");
}
// .. continua... até quando?
Tec. em Sistemas para Internet - IFMS 7
Analisando a solução anterior
● Bem, como dito, a solução anterior não é muito inteligente:
– Sabemos qual número o usuário irá digitar?– Quantas condições lógicas são necessárias para solucionar o
problema para qualquer número positivo que o usuário digitar?● Precisamos escrever um código que seja capaz de imprimir todos os
números da sequência, porém utilizando um número fixo e mínimo de linhas de código
● Para tanto, precisamos de alguma forma escrever um código que repita a impressão dos números de forma categórica e estratégica
● Solução inteligente: utilizar um laço de repetição!
Tec. em Sistemas para Internet - IFMS 8
Solução utilizando o laço while
Classe ExemploWhile
(abaixo no blog)
Tec. em Sistemas para Internet - IFMS 9
Analisando a solução com o laço while
int contador = 1;
while (contador <= n) {
System.out.print(contador + " ");
contador++;
}
Tec. em Sistemas para Internet - IFMS 10
Analisando a solução com o laço while
int contador = 1;
while (contador <= n) {
System.out.print(contador + " ");
contador++;
}
Enquanto...
Tec. em Sistemas para Internet - IFMS 11
Analisando a solução com o laço while
int contador = 1;
while (contador <= n) {
System.out.print(contador + " ");
contador++;
}
Enquanto o valor da variável contador for menor ou igual ao valor da variável n...
Tec. em Sistemas para Internet - IFMS 12
Analisando a solução com o laço while
int contador = 1;
while (contador <= n) {
System.out.print(contador + " ");
contador++;
}
Enquanto o valor da variável contador for menor ou igual ao valor da variável n, repita a execução do código localizado entre as chaves.
Tec. em Sistemas para Internet - IFMS 13
Analisando a solução com o laço while
int contador = 1;
while (contador <= n) {
System.out.print(contador + " ");
contador++;
}
A variável contador é inicializada com o valor 1, que é o primeiro valor que o nosso programa deve imprimir...
Tec. em Sistemas para Internet - IFMS 14
Analisando a solução com o laço while
int contador = 1;
while (contador <= n) {
System.out.print(contador + " ");
contador++;
}
A cada iteração, o valor da variável contador é impresso. Logo em seguida, o valor da variável contador é incrementado em uma unidade. Assim, na próxima iteração, o valor a ser impresso é uma unidade maior que o valor atual.
Tec. em Sistemas para Internet - IFMS 15
Sobre o laço while...
● O laço while só é executado se e somente se a sua condição lógica de manutenção for satisfeita
● Assim, para que um laço while execute ao menos uma iteração, a sua condição lógica de manutenção deve ser satisfeita ao menos uma vez
Tec. em Sistemas para Internet - IFMS 16
Solução utilizando o laço do while
Classe ExemploDoWhile
(abaixo no blog)
Tec. em Sistemas para Internet - IFMS 17
Analisando a solução com o laço do while
int contador = 0;
do {
contador++;
System.out.print(contador + " ");
} while (contador < n);
Tec. em Sistemas para Internet - IFMS 18
Analisando a solução com o laço do while
int contador = 0;
do {
contador++;
System.out.print(contador + " ");
} while (contador < n);
Repita...
Tec. em Sistemas para Internet - IFMS 19
Analisando a solução com o laço do while
int contador = 0;
do {
contador++;
System.out.print(contador + " ");
} while (contador < n);
Repita a execução do trecho de código localizado entre as chaves...
Tec. em Sistemas para Internet - IFMS 20
Analisando a solução com o laço do while
int contador = 0;
do {
contador++;
System.out.print(contador + " ");
} while (contador < n);
Repita a execução do trecho de código localizado entre as chaves enquanto o valor da variável contador for menor que o valor da variável n.
Tec. em Sistemas para Internet - IFMS 21
Analisando a solução com o laço do while
int contador = 0;
do {
contador++;
System.out.print(contador + " ");
} while (contador < n);
A variável contador é inicializada com o valor 0. Este não é o valor correto do primeiro valor a ser impresso, porém...
Tec. em Sistemas para Internet - IFMS 22
Analisando a solução com o laço do while
int contador = 0;
do {
contador++;
System.out.print(contador + " ");
} while (contador < n);
… no início de cada iteração, o valor da variável contador é incrementado em uma unidade. Logo em seguida, o valor correto é impresso na tela.
Tec. em Sistemas para Internet - IFMS 23
Analisando a solução com o laço do while
int contador = 0;
do {
contador++;
System.out.print(contador + " ");
} while (contador < n);
O laço é executado até que o valor da variável contador seja menor que o valor da variável n. Isto parece um tanto anti-intuitivo no início mas, se você analisar o código acima, você verá que esta condição se deve ao fato de que o incremento do valor da variável contador é realizado antes de que este seja impresso na tela.
Tec. em Sistemas para Internet - IFMS 24
Sobre o laço do while...
● O laço do while sempre executa ao menos uma iteração
● Assim, para que um laço do while execute após a primeira iteração, a sua condição lógica de manutenção deve ser satisfeita ao menos uma vez
Tec. em Sistemas para Internet - IFMS 25
Solução utilizando o laço for
Classe ExemploFor
(abaixo no blog)
Tec. em Sistemas para Internet - IFMS 26
Analisando a solução com o laço for
for(int contador = 1; contador <= n; contador++) {
System.out.print(contador + " ");
}
Tec. em Sistemas para Internet - IFMS 27
Analisando a solução com o laço for
for(int contador = 1; contador <= n; contador++) {
System.out.print(contador + " ");
}
Para...
Tec. em Sistemas para Internet - IFMS 28
Analisando a solução com o laço for
for(int contador = 1; contador <= n; contador++) {
System.out.print(contador + " ");
}
Para o valor de contador partindo de 1...
Tec. em Sistemas para Internet - IFMS 29
Analisando a solução com o laço for
for(int contador = 1; contador <= n; i++) {
System.out.print(contador + " ");
}
Para o valor de contador partindo de 1 até atingir o valor de n..
Tec. em Sistemas para Internet - IFMS 30
Analisando a solução com o laço for
for(int contador = 1; contador <= n; contador++) {
System.out.print(contador + " ");
}
Para o valor de contador partindo de 1 até atingir o valor de n, incrementando o valor de contador em uma unidade a cada iteração...
Tec. em Sistemas para Internet - IFMS 31
Analisando a solução com o laço for
for(int contador = 1; contador <= n; contador++) {
System.out.print(contador + " ");
}
Para o valor de contador partindo de 1 até atingir o valor de n, incrementando o valor de contador em uma unidade a cada iteração, repita o trecho de código entre as chaves.
Tec. em Sistemas para Internet - IFMS 32
Analisando a solução com o laço for
for(int contador = 1; contador <= n; contador++) {
System.out.print(contador + " ");
}
O primeiro argumento de um laço for contém as inicializações desejadas para o laço. No caso, a variável contador é inicializada com o valor 1. Esta inicialização é executada somente uma vez, antes mesmo da execução da primeira iteração do laço.
Tec. em Sistemas para Internet - IFMS 33
Analisando a solução com o laço for
for(int contador = 1; contador <= n; contador++) {
System.out.print(contador + " ");
}
O segundo argumento de um laço for é a condição lógica de manutenção do laço. Ou seja, é o teste lógico realizado antes de cada iteração para avaliar se a iteração deve ser executada ou se o laço deve parar de executar iterações. No caso, o laço executará enquanto o valor da variável contador for menor ou igual ao valor da variável n.
Tec. em Sistemas para Internet - IFMS 34
Analisando a solução com o laço for
for(int contador = 1; contador <= n; contador++) {
System.out.print(contador + " ");
}
O terceiro e último argumento de um laço for contém o código a ser executado no final de cada iteração. No caso, após o valor da variável contador ser exibido, ele é incrementado em uma unidade.
Tec. em Sistemas para Internet - IFMS 35
Ordem de execução
for(int contador = 1; contador <= n; contador++) {
System.out.print(contador + " ");
}
Executado somente uma vez, antes do laço for começar a executar a primeira iteração.
Tec. em Sistemas para Internet - IFMS 36
Ordem de execução
for(int contador = 1; contador <= n; contador++) {
System.out.print(contador + " ");
}
Executado sempre, antes da execução de cada iteração.
Tec. em Sistemas para Internet - IFMS 37
Ordem de execução
for(int contador = 1; contador <= n; contador++) {
System.out.print(contador + " ");
}
Executado sempre, após a execução de cada iteração.
Tec. em Sistemas para Internet - IFMS 38
Exemplo laço for
Para um exemplo mais complexo, veja a classe ExemploFor2
(abaixo no blog)
Tec. em Sistemas para Internet - IFMS 39
That's all, folks!
Quaisquer dúvidas, chore fale comigo em sala de aula ou me mande um e-mail: