sexta-feira, 6 de fevereiro de 2015

0.0.0.9 - Comandos de repetição

Gramática do Java e programação 4

Objetivo desta aula:

Apresentar os comandos de repetição.

links citados durante a aula

Especificação da linguagem Java

Tutorial sobre while e do..while

Tutorial sobre for

Introdução

Estes comandos fazem um teste e repetem o bloco de comando enquanto o teste resultar verdadeiro.

A sintaxe de while é:

   while (<expr>) {
    // bloco de código a repetir enquanto <expr> seja verdadeiro  
   }
  

A sintaxe de do..while é:

   do {
    // bloco de código a repetir enquanto <expr> seja verdadeiro  
   } while (<expr>);
  

As duas construções são quase idênticas. Como a execução é sequencial, o primeiro testa e executa, logo, se o teste na primeira construção resultar false - ele não executa nenhuma vez. Na segunda executa e depois testa, logo, executará ao menos uma vez.

Em geral <expr> contém ao menos uma variável que tem seu valor mudado dentro do bloco de código.

Exemplos

   System.out.println ("Iniciando loop");
   int i=0;
   while (i<10) {
    System.outlprintln (i);
    i++;  // operação de pós-incremento equivale a i=i+1;
   }
  

   System.out.println ("Iniciando loop");
   int i=0;
   do {
    System.out.println (i);
    i++;
   } while (i<10);
  

O passo do incremento pode ser qualquer, inclusive pode ser um decremento, a condição não precisa ser uma contagem, por exemplo:

   System.out.println ("Iniciando loop");
   double num=5521;
   do {
    int r=num%2;
    num=num/2;
    System.out.print (r);
   } while (num>0);
  

O comando for

   for (<exprInit>;<exprTeste>;<exprInc>) {
    // bloco de código a repetir
   }
  

Equivale a:

   <exprInit>;
   while (<exprTeste>) {
    // bloco de código a repetir
    <exprInc>;
   }
  

Comandos aninhados

Todos esses comandos podem ser usados dentro dos blocos de código que são repetidos, resultando em blocos aninhados. Por exemplo:

   class Conta {
    public static void main (String[] args) {
     int d0, d1;
     for (d1=0;d1<10;d1++) {  // quantas vezes esta linha é executada?
      for (d0=0;d0<10;d0++) {
       System.out.println (d1 + " " + d0); // quantas vezes esta linha é executada?
      }
     }
    }
   }
  

Exercicios

Imagine um tabuleiro de batalha naval onde as coordenadas (linha e coluna) sejam dados como d0 e d1 conforme o código em "comandos aninhados". O tabuleiro é 10x10. O código acima percorre o tabuleiro todo? Qual é a direção do percurso? Escreva o código para percorrer o tabuleiro em zigue-zague na horizontal e na vertical.

Escreva o código com mesmo funcionamento usando while e do..while

A soma dos termos da sequência harmônica alternante (-1)^(i+1)/i para i indo de 1 a infinito resulta em ln(2), aproximadamente 0.7. Escreva o código que calcula essa série até o termo i=100. Note que a conta tem que ser feita usando tipo double.

A soma dos termos da sequência (-1)^i/(2*i+1) para i indo de 1 a infinito resulta em pi/4, aproximadamente 0.8. Escreva o código que calcula essa série até o termo i=100. Note que a conta tem que ser feita usando tipo double.

Observações: série é o nome dado à soma dos termos de uma sequência. Se precisar de mais informação, comece pela Wikipedia.

Nenhum comentário:

Postar um comentário