Mobile App Development · Dart/Flutter

11 · While — Exercícios

Cinco exercícios com while e do-while: contagem, acumulador, jogo de adivinhação, cálculo de potência e leitura repetida de entrada.

Exercício

01_Ex_Contagem_Regressiva.dart

Faz uma contagem regressiva de 10 até 0 usando while: a condição contador >= 0 é testada antes de cada iteração, e o contador é decrementado no corpo do laço.

void main() {
  var contador = 10;

  while (contador >= 0) {
    print(contador);
    contador--;
  }
}

Saída esperada

10
9
8
7
6
5
4
3
2
1
0

Como executar

dart run 11-While/02_Exercicios/codigo_fonte/01_Ex_Contagem_Regressiva.dart

Exercício

02_Ex_Soma_Dos_Multiplos_de_Tres.dart

Percorre os números de 1 a 100 com while, acumulando em soma apenas os múltiplos de 3 (testados com %).

void main() {
  var numero = 1;
  var soma = 0;

  while (numero <= 100) {
    if (numero % 3 == 0) {
      soma += numero;
    }
    numero++;
  }

  print('Soma dos multiplos de 3 entre 1 e 100: $soma');
}

Saída esperada

Soma dos multiplos de 3 entre 1 e 100: 1683

Como executar

dart run 11-While/02_Exercicios/codigo_fonte/02_Ex_Soma_Dos_Multiplos_de_Tres.dart

Exercício

03_Ex_Adivinhe_o_Numero.dart

Clássico jogo de adivinhação: sorteia um número secreto entre 1 e 100 com Random() e repete em while (true) até o jogador acertar, usando continue para entradas inválidas e break para encerrar ao acertar. Como usa número aleatório e stdin, a saída não é determinística.

import 'dart:io';
import 'dart:math';

void main() {
  final secreto = Random().nextInt(100) + 1;
  var tentativas = 0;

  while (true) {
    stdout.write('Digite um numero entre 1 e 100: ');
    final entrada = stdin.readLineSync() ?? '';
    final chute = int.tryParse(entrada);
    tentativas++;

    if (chute == null) {
      print('Entrada invalida.');
      continue;
    }

    if (chute == secreto) {
      print('Parabens! Voce acertou em $tentativas tentativas.');
      break;
    }

    print(
      chute < secreto ? 'Tente um numero maior.' : 'Tente um numero menor.',
    );
  }
}

Saída esperada

Não é determinística: o número secreto é sorteado a cada execução e a saída depende dos chutes digitados. Exemplo de execução, se o secreto sorteado for 42:

Digite um numero entre 1 e 100: 50
Tente um numero menor.
Digite um numero entre 1 e 100: 42
Parabens! Voce acertou em 2 tentativas.

Como executar

dart run 11-While/02_Exercicios/codigo_fonte/03_Ex_Adivinhe_o_Numero.dart

Exercício

DesafioPratico.dart

Lê um valor-limite digitado pelo usuário e usa while para encontrar a primeira potência de 2 maior que esse limite, dobrando potencia a cada iteração. Depende de stdin, então a saída varia conforme o valor digitado.

import 'dart:io';

void main() {
  stdout.write('Digite um valor limite: ');
  final entrada = stdin.readLineSync() ?? '';
  final limite = int.tryParse(entrada);

  if (limite == null || limite < 1) {
    print('Entrada invalida.');
    return;
  }

  var expoente = 0;
  var potencia = 1;

  while (potencia <= limite) {
    expoente++;
    potencia *= 2;
  }

  print('A primeira potencia de 2 maior que $limite e 2^$expoente = $potencia');
}

Saída esperada

Depende do valor digitado. Exemplo, se o usuário digitar 20:

Digite um valor limite: 20
A primeira potencia de 2 maior que 20 e 2^5 = 32

Como executar

dart run 11-While/02_Exercicios/codigo_fonte/DesafioPratico.dart

Exercício

Exercicio_doWhile.dart

Usa do-while para repetir a leitura de uma linha até o usuário digitar sair — como o corpo executa antes da condição ser testada, a pergunta é feita pelo menos uma vez. Depende de stdin, então a saída varia conforme o número de linhas digitadas.

import 'dart:io';

void main() {
  String entrada;

  do {
    stdout.write("Digite 'sair' para encerrar: ");
    entrada = (stdin.readLineSync() ?? '').trim().toLowerCase();
    print('Voce digitou: $entrada');
  } while (entrada != 'sair');

  print('Programa encerrado.');
}

Saída esperada

Depende do que for digitado. Exemplo, se o usuário digitar oi e depois sair:

Digite 'sair' para encerrar: oi
Voce digitou: oi
Digite 'sair' para encerrar: sair
Voce digitou: sair
Programa encerrado.

Como executar

dart run 11-While/02_Exercicios/codigo_fonte/Exercicio_doWhile.dart