Mudanças entre as edições de "Pensamento Computacional - Comandos de repetição no Java: do while() e for()"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 90: Linha 90:
 
|-  
 
|-  
 
|[[imagem:FluxogramaComandoFor-Eraldo.jpg|300px]]
 
|[[imagem:FluxogramaComandoFor-Eraldo.jpg|300px]]
| style="width: 678.602px;" data-mce-style="width: 678.602px;"|<syntaxhighlight lang=c>
+
| style="width: 678.602px;" data-mce-style="width: 678.602px;"|<syntaxhighlight lang=java>
for( i=0; i<10; i++ ) {
+
public class EntradaDados {
  printf("Laço de número %d\n", i);
+
    public static void main(String[] args) {   
  if (i==5)
+
      int i;
      printf("Este é o laço 5\n");
+
 
 +
      for( i=0; i<10; i++ ) {
 +
          printf("Laço de número %d\n", i);
 +
          if (i==5)
 +
              printf("Este é o laço 5\n");
 +
      }   
 +
    }   
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>

Edição das 19h04min de 6 de outubro de 2023

Objetivos

Comando do while()

Em muitas situações é mais interessante que o controle de execução do loop seja realizado no final da estrutura de repetição, ou seja, as instruções do laço do loop serão realizadas pelo menos uma vez, independente da condição de repetição. Neste caso, aplica-se o comando do while().

Sintaxe e Semântica do 'comando do while()'

O comando 'do while' apresenta a seguinte sintaxe:

do
    instrução
while ( expressao )

onde a a instrução pode ser:

    instrução simples terminada em ';'
ou
    bloco de instruções com chaves

Inicialmente, a instrução/bloco é executada e então a expressão é avaliada. Se verdadeira, a instrução é executada novamente e a expressão avaliada novamente.



Exemplo 1 - Validação de Entrada de dados

Suponha que um programa deve ler um número inteiro mas que seja positivo. Neste caso, o dado deve ser lido e se não positivo uma nova leitura deverá ser realizada.

import java.util.Scanner;

public class EntradaDados {
    public static void main(String[] args) {
        Scanner teclado = new Scanner(System.in);
        int dadoInteiro;
        
        do {
            System.out.println("Entre com um valor inteiro e positivo");
            dadoInteiro = teclado.nextInt();
        } while( dadoInteiro <= 0 );

        System.out.println("Valor lido é " + dadoInteiro);
    }    
}

Deve ser observado que duas instruções estão sob controle do comando "do while" e, portanto, é necessário usar um bloco.

Ao executar o programa, o bloco é executado independente da condicão no while.

Exercício 1

No exemplo de entrada de dados, poderia ser necessário colocar uma mensagem de que foi fornecido um dado negativo ou zero. Acrescente um código para esta mensagem.

Comando for()

O comando for() permite uma forma mais elaborada de loop, com controle no início do bloco de repetição.

import java.util.Scanner;

public class EntradaDados {
    public static void main(String[] args) {     
       int i;
   
       for ( i=0; i<10; i=i+1 )
           System.out.println("Valor de i é " + i);      
    }    
}

A estrutura do comando é:

for(expressão_inicial;expressão_de_controle; expressão_de_final_de _bloco)
    instrução_simples;

ou

for(expressão_inicial;expressão_de_controle; expressão_de_final_de _bloco) {
    lista_de_instruções
}


FluxogramaComandoFor-Eraldo.jpg
public class EntradaDados {
    public static void main(String[] args) {     
       int i;
   
       for( i=0; i<10; i++ ) {
           printf("Laço de número %d\n", i);
           if (i==5)
               printf("Este é o laço 5\n");
       }     
    }    
}
Observe que a expressão i=0 é executada SEMPRE e uma única VEZ, no início do comando.

A expressão i<10 é o controle do loop. Se FALSA o loop é encerrado. Ela é executada após a expressão de inicialização e, na sequência, no início de cada loop. A expressão i++ é executada no final de cada loop.

Exemplo

Elaborar um programa que lê um número inteiro e imprime todos os números pares entre 1 e este número INCLUSIVE.

#include <stdio.h>

int main()
{
  int i, N;

  printf("Entre com o número\n");
  scanf ("%d", &N);

  for ( i=1; i<=N; i=i+1) {
     if (i%2==0)
       printf("número par ====> %d\n", i);
  }
  printf("FIM\n");

  return 0;
}