Capítulo 40 Loop while
A instrução while
em R é uma estrutura de controle de fluxo que
permite executar repetidamente um bloco de código enquanto uma condição
específica for verdadeira. Esse tipo de loop é especialmente útil quando
o número de iterações não é conhecido antecipadamente e depende de uma
condição lógica ser atendida.
condição: Uma expressão lógica que é avaliada antes de cada iteração do loop. Enquanto essa condição for
TRUE
, o bloco de código dentro do while será executado.Bloco de código: As instruções que são repetidas enquanto a condição for verdadeira.
Funcionamento do Loop While
Avaliação da Condição: Antes de cada execução do bloco de código, a condição é avaliada.
Execução do Bloco de Código: Se a condição for
TRUE
, o bloco de código dentro dowhile
é executado.Reavaliação: Após a execução do bloco de código, a condição é reavaliada. Se a condição continuar a ser
TRUE
, o ciclo repete-se. Se a condição se tornarFALSE
, o loop termina e o controlo do programa continua com a próxima instrução após owhile
.
Exemplo 1: Somando números até um limite. O exemplo seguinte calcula a soma de todos os números de 1 a 10.
limite <- 10
soma <- 0
contador <- 1
while (contador <= limite) {
soma <- soma + contador
contador <- contador + 1
}
print(paste("A soma dos números de 1 a", limite, "é:", soma))
## [1] "A soma dos números de 1 a 10 é: 55"
Neste exemplo:
- O loop while continua enquanto
contador <= limite
. - Em cada iteração, o valor de
contador
é adicionado a soma, econtador
é incrementado em 1. - Quando
contador
excedelimite
, o loop termina.
Exemplo 2: Escrever a tabuada de um número inteiro. O programa abaixo imprime a tabuada de um número fornecido pelo utilizador.
n <- as.numeric(readline("Digite um número inteiro: "))
print(paste("Tabuada do",n, ":"))
i <- 1
while (i <= 10){
print(paste(n,"x",i, "=", n*i))
i + 1
}
Explique por que o programa acima não termina. Qual é o erro no nosso
código? O loop no código original não terminava porque a linha i + 1
não atualizava a variável i
. A expressão i + 1
calcula o novo valor,
mas não o atribui de volta a i
. O código correto usa i <- i + 1
para
atualizar a variável i
a cada iteração.
Exemplo 3: Uso do break para interromper um loop. O próximo exemplo
demonstra como usar a instrução break
para sair de um loop
antecipadamente.
limite <- 10
soma <- 0
contador <- 1
while (contador <= limite) {
soma <- soma + contador
print(contador)
if (contador == 3){
break # Interrompe o loop quando contador é igual a 3
}
contador <- contador + 1
}
## [1] 1
## [1] 2
## [1] 3
- break: A instrução
break
é usada para sair imediatamente do loop, independentemente de a condição de while ainda serTRUE
.
Considerações Importantes sobre o Uso do while()
Condição de Paragem: É fundamental garantir que a condição do
while
eventualmente se torneFALSE
para evitar loops infinitos que podem bloquear o programa.Incremento/Decremento: A variável que controla a condição deve ser atualizada corretamente dentro do loop. Falhas em fazer isso corretamente também podem causar loops infinitos.
Desempenho: Loops
while
podem ser menos eficientes do que operações vetorizadas em R. Para grandes conjuntos de dados, considere usar funções vetorizadas comoapply
,lapply
,sapply
, etc., para melhorar o desempenho.
40.1 Exercícios
1. Escreva um programa em R que solicite ao utilizador um número inteiro \(n\). O programa deve imprimir todos os números inteiros de 0 até \(n\), um número por linha.
2. Crie um programa em R que solicite ao utilizador um número inteiro, calcule o seu quadrado e exiba o resultado. Em seguida, pergunte ao utilizador se ele deseja continuar ou terminar o programa. O loop deve continuar até que o utilizador escolha terminar.
3. Desenvolva um programa em R que peça ao utilizador um número inteiro \(n\) e calcule a soma dos primeiros \(n\) inteiros (de 1 até \(n\)). O resultado deve ser exibido no console.
4. Escreva um programa em R que solicite ao utilizador um número inteiro \(n\) e conte quantos números pares existem no intervalo de 0 até \(n\). O resultado deve ser impresso no console.
5. Use um loop while
para somar números inteiros positivos até que
um número negativo seja inserido.
Crie um programa em R que leia números inteiros inseridos pelo utilizador e some-os. O loop deve continuar até que o utilizador insira um número negativo, momento em que o programa deve parar e exibir a soma dos números positivos inseridos.
6. Use um loop while para implementar uma contagem regressiva.
Implemente um programa em R que solicite ao utilizador um número inteiro positivo e, em seguida, execute uma contagem regressiva até zero, imprimindo cada número no console.
7. Escreva um programa em R que solicite ao utilizador um número inteiro negativo e, em seguida, conte progressivamente até zero, imprimindo cada número no console.
8. Desenvolva um programa em R que peça ao utilizador para inserir um número. Se o número for positivo, o programa deve contar regressivamente até zero. Se o número for negativo, o programa deve contar progressivamente até zero. Cada número deve ser impresso no console.
9. Crie um programa em R que solicite ao utilizador um número
inteiro não negativo e calcule seu fatorial usando um loop while
.
Lembre-se que \(0! = 1\) e que \(4! = 4\times 3\times 2\times = 24\).
10. Escreva um programa em R que leia um número inteiro positivo e
calcule a soma de seus dígitos usando um loop while
. Por exemplo, para
o número 23, o programa deve calcular \(2+3 = 5\).
11. Desenvolva um programa em R que gere e imprima os números da sequência de Fibonacci até atingir um valor máximo especificado pelo utilizador. A sequência de Fibonacci começa com 1, 1 e cada número subsequente é a soma dos dois anteriores \((1, 1, 2, 3, 5, 8, 13 \ldots)\).