laços de repetição

39
Tecnologia em Sistemas para Internet - IFMS Aula Extra – Laços de Repetição Tópicos em Programação Prof.º Msc. Sidney Roberto de Sousa

Upload: sidney-roberto

Post on 29-Jun-2015

6.265 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Laços de Repetição

Tecnologia em Sistemas para Internet - IFMS

Aula Extra – Laços de Repetição

Tópicos em ProgramaçãoProf.º Msc. Sidney Roberto de Sousa

Page 2: Laços de Repetição

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

Page 3: Laços de Repetição

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!

Page 4: Laços de Repetição

Tec. em Sistemas para Internet - IFMS 4

Solução

System.out.println(“1 2 3 4”);

Page 5: Laços de Repetição

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”...)

Page 6: Laços de Repetição

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?

Page 7: Laços de Repetição

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!

Page 8: Laços de Repetição

Tec. em Sistemas para Internet - IFMS 8

Solução utilizando o laço while

Classe ExemploWhile

(abaixo no blog)

Page 9: Laços de Repetição

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++;

}

Page 10: Laços de Repetição

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...

Page 11: Laços de Repetição

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...

Page 12: Laços de Repetição

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.

Page 13: Laços de Repetição

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...

Page 14: Laços de Repetição

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.

Page 15: Laços de Repetição

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

Page 16: Laços de Repetição

Tec. em Sistemas para Internet - IFMS 16

Solução utilizando o laço do while

Classe ExemploDoWhile

(abaixo no blog)

Page 17: Laços de Repetição

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);

Page 18: Laços de Repetição

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...

Page 19: Laços de Repetição

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...

Page 20: Laços de Repetição

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.

Page 21: Laços de Repetição

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...

Page 22: Laços de Repetição

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.

Page 23: Laços de Repetição

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.

Page 24: Laços de Repetição

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

Page 25: Laços de Repetição

Tec. em Sistemas para Internet - IFMS 25

Solução utilizando o laço for

Classe ExemploFor

(abaixo no blog)

Page 26: Laços de Repetição

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 + " ");

}

Page 27: Laços de Repetição

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...

Page 28: Laços de Repetição

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...

Page 29: Laços de Repetição

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..

Page 30: Laços de Repetição

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...

Page 31: Laços de Repetiçã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.

Page 32: Laços de Repetição

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.

Page 33: Laços de Repetiçã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.

Page 34: Laços de Repetição

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.

Page 35: Laços de Repetição

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.

Page 36: Laços de Repetiçã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.

Page 37: Laços de Repetiçã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.

Page 38: Laços de Repetição

Tec. em Sistemas para Internet - IFMS 38

Exemplo laço for

Para um exemplo mais complexo, veja a classe ExemploFor2

(abaixo no blog)

Page 39: Laços de Repetição

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:

[email protected]