Seção 5.4 — break avançado e while dentro de while
O break pode ser combinado com if/elif para criar lógicas mais complexas. Um exemplo clássico é calcular quantas cédulas (R$ 50, R$ 20, R$ 10, R$ 5 e R$ 1) são necessárias para pagar um determinado valor:
O programa subtrai repetidamente o valor da cédula atual de apagar contando quantas vezes cabe (cédulas). Quando não cabe mais, imprime a quantidade e passa para a cédula menor. O break é ativado quando não há mais nada a pagar (apagar == 0).
💡 Execute o programa com os valores: 501, 745, 384, 2, 7 e 1 para verificar se os resultados estão corretos (Exercício 5.16).
Podemos combinar vários while de forma a obter resultados mais interessantes. Imagine imprimir as tabuadas de multiplicação de 1 a 10. Podemos fazer isso com um while dentro de outro:
O while externo controla a tabuada (de 1 a 10). O while interno imprime os 10 termos de cada tabuada. Note que número é reinicializado com 1 a cada nova tabuada — por isso fica dentro do bloco externo, mas antes do while interno.
Vejamos o mesmo problema sem usar repetições aninhadas, com apenas um while:
Quando número chega a 11, ele é reinicializado para 1 e tabuada avança. Essa solução usa apenas um laço, mas é menos intuitiva que a versão aninhada.
💡 Repetições aninhadas são naturais quando o problema tem duas dimensões: por exemplo, linhas e colunas de uma tabela. O while interno executa completamente a cada iteração do while externo.
Escreva um programa para controlar uma pequena máquina registradora. Solicite ao usuário que digite o código do produto e a quantidade comprada. Utilize a tabela abaixo para obter o preço:
| Código | Preço |
|---|---|
| 1 | R$ 0,50 |
| 2 | R$ 1,00 |
| 3 | R$ 4,00 |
| 5 | R$ 7,00 |
| 9 | R$ 8,00 |
Exiba o total das compras depois que o usuário digitar 0. Qualquer outro código deve gerar a mensagem de erro "Código inválido".
Execute o programa da Listagem 5.14 para os seguintes valores: 501, 745, 384, 2, 7 e 1. Verifique se os resultados estão corretos.
O que acontece se digitarmos 0 (zero) no valor a pagar do programa da Listagem 5.14?
Modifique o programa da Listagem 5.14 para também trabalhar com notas de R$ 100.
Modifique o programa para aceitar valores decimais, ou seja, também contar moedas de R$ 0,01, R$ 0,02, R$ 0,05, R$ 0,10 e R$ 0,50.
O que acontece se digitarmos 0,01 no programa anterior? Caso ele não funcione, altere-o de forma a corrigir o problema.
Reescreva o programa da Listagem 5.14 de forma a continuar executando até que o valor digitado seja 0. Utilize repetições aninhadas.
Escreva um programa que exiba uma lista de opções (menu): adição, subtração, divisão, multiplicação e sair. Imprima a tabuada da operação escolhida. Repita até que a opção saída seja escolhida.
Escreva um programa que leia um número e verifique se é ou não um número primo. Para isso, calcule o resto da divisão do número por 2 e depois por todos os números ímpares até o número lido. Se o resto de uma dessas divisões for igual a zero, o número não é primo. Observe que 0 e 1 não são primos e que 2 é o único número primo que é par.
Modifique o programa anterior de forma a ler um número n. Imprima os n primeiros números primos.
Escreva um programa que calcule a raiz quadrada de um número usando o método de Newton. Sendo n o número, considere a base b = 2. Calcule p usando a fórmula p = (b + (n / b)) / 2. A cada passo, faça b = p e recalcule. Pare quando a diferença absoluta entre n e o quadrado de p for menor que 0,0001.
Escreva um programa que calcule o resto da divisão inteira entre dois números. Utilize apenas as operações de soma e subtração para calcular o resultado.
Escreva um programa que verifique se um número é palíndromo. Um número é palíndromo se continua o mesmo caso seus dígitos sejam invertidos. Exemplos: 454, 10501.