Tecnologia em Sistemas para Internet - IFMS
Aula Extra – Laços de Repetição
Tópicos em Programação
Prof.º 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:
sidney.sousa@ifms.edu.br

Laços de Repetição

  • 1.
    Tecnologia em Sistemaspara Internet - IFMS Aula Extra – Laços de Repetição Tópicos em Programação Prof.º Msc. Sidney Roberto de Sousa
  • 2.
    Tec. em Sistemaspara 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
  • 3.
    Tec. em Sistemaspara 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!
  • 4.
    Tec. em Sistemaspara Internet - IFMS 4 Solução System.out.println(“1 2 3 4”);
  • 5.
    Tec. em Sistemaspara 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”...)
  • 6.
    Tec. em Sistemaspara 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?
  • 7.
    Tec. em Sistemaspara 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!
  • 8.
    Tec. em Sistemaspara Internet - IFMS 8 Solução utilizando o laço while Classe ExemploWhile (abaixo no blog)
  • 9.
    Tec. em Sistemaspara Internet - IFMS 9 Analisando a solução com o laço while int contador = 1; while (contador <= n) {     System.out.print(contador + " ");     contador++; }
  • 10.
    Tec. em Sistemaspara Internet - IFMS 10 Analisando a solução com o laço while int contador = 1; while (contador <= n) {     System.out.print(contador + " ");     contador++; } Enquanto...
  • 11.
    Tec. em Sistemaspara 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...
  • 12.
    Tec. em Sistemaspara 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.
  • 13.
    Tec. em Sistemaspara 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...
  • 14.
    Tec. em Sistemaspara 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.
  • 15.
    Tec. em Sistemaspara 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
  • 16.
    Tec. em Sistemaspara Internet - IFMS 16 Solução utilizando o laço do while Classe ExemploDoWhile (abaixo no blog)
  • 17.
    Tec. em Sistemaspara 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);
  • 18.
    Tec. em Sistemaspara 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...
  • 19.
    Tec. em Sistemaspara 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...
  • 20.
    Tec. em Sistemaspara 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.
  • 21.
    Tec. em Sistemaspara 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...
  • 22.
    Tec. em Sistemaspara 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.
  • 23.
    Tec. em Sistemaspara 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.
  • 24.
    Tec. em Sistemaspara 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
  • 25.
    Tec. em Sistemaspara Internet - IFMS 25 Solução utilizando o laço for Classe ExemploFor (abaixo no blog)
  • 26.
    Tec. em Sistemaspara Internet - IFMS 26 Analisando a solução com o laço for for(int contador = 1; contador <= n; contador++) {     System.out.print(contador + " "); }
  • 27.
    Tec. em Sistemaspara Internet - IFMS 27 Analisando a solução com o laço for for(int contador = 1; contador <= n; contador++) {     System.out.print(contador + " "); } Para...
  • 28.
    Tec. em Sistemaspara 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...
  • 29.
    Tec. em Sistemaspara 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..
  • 30.
    Tec. em Sistemaspara 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...
  • 31.
    Tec. em Sistemaspara 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.
  • 32.
    Tec. em Sistemaspara 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.
  • 33.
    Tec. em Sistemaspara 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.
  • 34.
    Tec. em Sistemaspara 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.
  • 35.
    Tec. em Sistemaspara 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.
  • 36.
    Tec. em Sistemaspara 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.
  • 37.
    Tec. em Sistemaspara 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.
  • 38.
    Tec. em Sistemaspara Internet - IFMS 38 Exemplo laço for Para um exemplo mais complexo, veja a classe ExemploFor2 (abaixo no blog)
  • 39.
    Tec. em Sistemaspara Internet - IFMS 39 That's all, folks! Quaisquer dúvidas, chore fale comigo em sala de aula ou me mande um e-mail: sidney.sousa@ifms.edu.br