Teoria

Introdução

Fala aí, aqui é o Guga do Responde Aí! Tudo bem com você?

Nós já tivemos uma introdução aos laços ou comandos de repetição, no tópico de hoje nós iremos conversar especificamente sobre o primeiro comando de repetição dos três presentes na linguagem C.

Sem perder mais tempo, vamos nessa!

Comando de repetição while

De forma bem direta ao ponto, o comando while irá repetir as instruções que se encontram dentro de sua estrutura apenas se uma determinada condição for verdadeira.

Nós também podemos fazer um paralelo com a tradução da nomeação do comando, por exemplo: “enquanto” determinada condição for verdadeira, as instruções presentes na estrutura serão executadas.

Vamos realizar um exemplo! Imagine que tenhamos que realizar a impressão de todos os números inteiros e positivos menores que 10 em ordem crescente, como ficaria o comando while?

O trecho de código a seguir exemplifica o problema descrito acima:

Onde i é a variável contadora que é inicializada em 0 e “enquanto” i for menor que 10, o programa irá realizar uma impressão do valor de i com a função scanf() seguido do incremento da variável i.

De maneira geral, a estrutura do comando de repetição while na linguagem C é exemplificada através do seguinte trecho de código:

Vamos fazer mais um exemplo! Suponha que tenhamos que ler 3 números inteiros do usuário e realizar a impressão deles na tela.

O trecho de código a seguir exemplifica o problema descrito acima:

Onde i é a variável contadora inicializada em 0 e x é a variável que irá armazenar o número inteiro, dessa forma “enquanto” i for menor que 3 o programa irá requisitar a entrada do número inteiro ao usuário com a função scanf() seguido da impressão desse mesmo número com a função printf(), além do incremento da variável i ao fim da execução das instruções.

Ficou fácil agora, né? Te encontro aqui na página do lado.

Não esquece de clicar nos exercícios, hein!?

Comando de repetição while

Exercícios Resolvidos

Exercício Resolvido #1

Explique qual é a função do comando de repetição while e defina a sua estrutura.

Passo 1

O comando de repetição while executa uma sequência de instruções enquanto uma condição for verdadeira, a repetição das instruções localizadas dentro de sua estrutura é comumente chamada de “loop”.

Além disso, essa estrutura na maioria das vezes está acompanhada de uma variável contadora que é atualizada a cada loop ao mesmo tempo que atua na condição do laço. O objetivo dessa variável é controlar a quantidade de loops realizados de forma a evitar o que chamamos de estado de loop infinito, que é um comando de repetição que nunca possuirá uma condição de execução falsa e executará instruções infinitamente ou até se esgotarem os recursos do computador.

Passo 2

A estrutura do comando de repetição while é dada pelo seguinte trecho de código na linguagem de programação C:

Resposta

Ei, a resposta está no passo a passo :)

Exercício Resolvido #2

Crie um algoritmo que, dado um número informado pelo usuário, imprima a tabuada dele de 1 a 10. Use o formato de apresentação (considerando que o usuário informou o número 5):

Passo 1

Em primeiro lugar, vamos definir o escopo do nosso programa.

Passo 2

Com o escopo definido, podemos declarar e inicializar as variáveis que serão úteis para o desenvolvimento e execução do programa.

Informações sobre as variáveis:

  • n armazenará o número base da tabuada;
  • resultado armazenará o resultado de cada operação de multiplicação realizada;
  • i será a variável contadora de um laço de repetição.

Passo 3

Com as variáveis declaradas e inicializadas, podemos requisitar o número base da tabuada para o usuário do programa.

Passo 4

Por fim, para realizarmos a impressão da tabuada podemos utilizar o comando de repetição while com a condição i menor que 11.

A lógica desse código consiste em imprimir a variável resultado, gerada a partir do produto entre o valor armazenado pela variável n (base da tabuada) e o valor armazenado pela variável contadora i (que vai de 1 a 10), a cada loop do laço de repetição.

Como a cada loop a variável i será incrementada em uma unidade (enquanto for menor que 11), temos a garantia que teremos a tabuada de 1 a 10 do número base n digitado pelo usuário.

Resposta

Ei, a resposta está no passo a passo :)

Exercício Resolvido #3

Faça um programa que leia 10 notas e imprima a média aritmética delas.

Passo 1

A primeira coisa que nós devemos fazer é definir o escopo do programa.

Passo 2

Com o escopo definido, podemos realizar a declaração das variáveis necessárias para o desenvolvimento do programa.

Passo 3

Para realizar o somatório das notas, nós podemos utilizar um comando de repetição while com a condição i menor que 10.

Onde a cada loop uma nota será lida, a variável somatorio incrementada com o valor da nota atual e a variável i incrementada em 1.

Passo 4

Por fim, basta realizarmos a divisão do valor armazenado pela variável somatorio por 10 e atribuirmos ele a variável media, essa por sua vez será impressa na tela com duas casas decimais e uma quebra de linha.

Resposta

Ei, a resposta está no passo a passo :)

Exercício Resolvido #4

Faça um programa que calcule o fatorial de um número.

Esse programa deve receber como entrada um número inteiro positivo e imprimir na tela o fatorial dele.

Passo 1

Antes de tudo, vamos definir o escopo do nosso programa!

Passo 2

Vamos agora declarar as variáveis necessárias para o desenvolvimento do programa.

Informações sobre as variáveis:

  • n armazenará o número que servirá como base para o cálculo do fatorial;
  • fat armazenará o valor do fatorial;
  • i será a variável contadora de um laço de repetição.

Passo 3

Com as variáveis devidamente declaradas e inicializadas, está na hora de requisitarmos a entrada do número ao usuário.

Passo 4

Tendo conhecimento do número inserido como entrada pelo usuário podemos utilizar o comando de repetição while.

A lógica para o cálculo do fatorial está em atribuir o valor de n a variável contadora i, utilizando a condição i maior ou igual a 0 para a execução do comando de repetição while. A cada loop a variável fat receberá o produto entre o valor atual armazenado por ela e i, em seguida i terá seu valor reduzido em 1.

Isso fará com que o valor 1 seja multiplicado por n, o resultado dessa multiplicação novamente multiplicado por n – 1, o resultado da última multiplicação multiplicado por n – 2 e assim por diante até a condição de execução do comando de repetição ser falsa.

Passo 5

Por fim, basta realizarmos a impressão do fatorial do número inserido anteriormente pelo usuário do programa.

Resposta

Ei, a resposta está no passo a passo :)

Exercício Resolvido #5

Escreva um programa em C que lê 15 valores reais, encontra o maior e o menor deles e mostra o resultado.

Passo 1

Vamos para mais um exercício!

Como sempre, a primeira coisa que devemos fazer é definir o escopo do nosso programa.

Passo 2

Com o escopo definido, podemos pensar e declarar as variáveis que nos auxiliarão no desenvolvimento desse programa.

Informações:

  • numeros é o vetor que armazenará os valores reais inseridos pelo usuário;
  • maior e menor são as variáveis que armazenarão o maior e o menor número, respectivamente;
  • i será a variável contadora de um laço de repetição.

Passo 3

Com todas as variáveis declaradas, podemos requisitar a entrada dos 15 valores reais ao usuário. Dessa forma, utilizaremos o comando de repetição while para preencher o vetor numeros.

Passo 4

Com o vetor numeros preenchido, devemos realizar a identificação do maior e menor número. Para isso, iniciando pelo menor número, como não sabemos de fato qual é consideraremos a primeira posição do vetor numeros como aquela que contém o menor valor e inicializaremos a variável contadora i com 1 para iniciar a verificação a partir da segunda posição do vetor.

Como a variável menor está armazenando uma suposição, devemos novamente utilizar o comando de repetição while para percorrer todas as posições do vetor verificando se o valor da posição em questão é menor que o valor armazenado pela variável menor. Caso seja, menor recebe esse valor e a verificação continua a até o fim do vetor.

No final da execução do laço de repetição, temos a garantia de que a variável menor está de fato armazenando o menor valor dentre os 15 presentes no vetor. Esse tipo de busca é denominada linear, pois compara todas as posições do vetor.

Vale lembrar que ao final de cada loop a variável contadora i é incrementada em uma unidade.

Passo 5

Agora nós temos que encontrar o maior número, para ser sincero faremos praticamente a mesma coisa que fizemos no passo anterior.

Então, focando nas diferenças, para armazenar o maior valor utilizaremos a variável maior assim como faremos uma verificação de maior entre a posição de processamento do vetor números durante a execução do comando de repetição e o valor armazenado naquele momento pela variável maior.

Para exemplificar as coisas e entendermos melhor as mudanças, dá uma olhada em como ficou a verificação pelo maior número:

Passo 6

Por fim, nós só temos que realizar a impressão do valor armazenado pelas variáveis maior e menor:

Vale lembrar que para melhorar a visualização da saída podemos realizar a impressão dos valores com 2 casas decimais e adicionando quebras de linha.

Resposta

Ei, a resposta está no passo a passo :)

Exercício Resolvido #6

Um determinado material radioativo perde metade de sua massa a cada 50 segundos. Dada a massa inicial, em gramas, fazer um programa em C que calcule o tempo necessário para que essa massa se torne menor que 0,5 grama. O programa em C deve escrever a massa inicial, a massa final e o tempo calculado em horas, minutos e segundos.

Passo 1

Não vamos esquecer de definir o escopo do nosso programa, hein!?

Passo 2

Dentro do escopo do programa, precisamos declarar as variáveis que serão essenciais para o desenvolvimento e execução do mesmo.

Informações sobre as variáveis:

  • meiaVida armazenará a quantidade de meias-vidas necessárias para que a massa do material seja menor que 0,5 gramas;
  • gramas armazenará a quantidade de gramas presente no material;
  • segundos, minutos e horas armazenarão o tempo necessário, em suas respectivas unidades, para que a massa do material seja menor que 0,5 gramas.

Passo 3

Com as variáveis devidamente declaradas e inicializadas, podemos requisitar para o usuário a quantidade de gramas inicial do material.

Passo 4

Tendo conhecimento da quantidade de gramas inicial, podemos utilizar o comando de repetição while para realizar consecutivas divisões por 2 até que o valor presente na variável gramas seja menor que 0,5 gramas.

Dessa forma, garantimos que a cada loop a variável meiaVida receberá o incremento de uma unidade, uma vez que o material receberá uma redução de metade de sua massa a cada iteração.

Passo 5

Tendo conhecimento da quantidade de meias-vidas necessárias, automaticamente sabemos o tempo em segundos, já que o enunciado nos diz que a meia-vida do material é de 50 segundos.

Com isso, conseguimos realizar a atribuição do valor em segundos para a variável segundos, e, posteriormente, calcular o valor em minutos e horas com uma simples conversão de valores (divisão por 60).

Passo 6

Por fim, basta realizarmos a impressão do tempo nas três diferentes unidades calculadas.

Vale ressaltar que essas impressões foram realizadas com duas casas decimais e com a adição de quebra de linha em cada uma delas.

Resposta

Ei, a resposta está no passo a passo :)

Exercício Resolvido #7

Desenvolver um programa que leia um número não determinado de valores, calcule e escreva a média aritmética deles, a quantidade de valores positivos, a quantidade de valores negativos e o percentual de valores negativos e positivos.

Passo 1

Para começar, vamos definir o escopo desse programa.

Passo 2

Com o escopo definido, nós podemos agora declarar e inicializar as variáveis que serão úteis para o desenvolvimento e execução.

Informações sobre as variáveis:

  • total armazenará a quantidade de números digitados pelo usuário;
  • positivos armazenará a quantidade de números positivos digitados pelo usuário;
  • negativos armazenará a quantidade de números negativos digitados pelo usuário;
  • n armazenará o número digitado pelo usuário após cada requisição de entrada;
  • somatorio, media armazenarão a soma de todos os números digitados pelo usuário e a média aritmética deles, respectivamente.

Passo 3

Com as variáveis devidamente declaradas e inicializadas, podemos utilizar o comando de repetição while para realizar todas as instruções de requisição de dados e os cálculos necessários.

O primeiro conceito que devemos analisar para entender a lógica do programa, é a condição do comando while, sendo ela 1. Ao colocar uma constante positiva como condição de um laço de repetição, estamos garantindo que o programa sempre entrará nessa estrutura, pois 1 sempre será verdadeiro.

Mas isso não vai causar um loop infinito, Guga? Calma, jovem Padawan.

Assim que o programa começar a executar a estrutura de repetição, será requisitada a entrada de um dado para o usuário. Após isso, o programa irá verificar se o número digitado é 0, caso seja, a instrução break será computada e fará com que a execução saia imediatamente da estrutura de repetição, porém, se for um número diferente de 0, o programa verificará se esse número é positivo ou negativo aumentando o valor armazenado pela variável positivo ou negativo, respectivamente, em uma unidade. Seguindo com a execução, a variável somatorio receberá o incremento do número e a variável total a adição de mais uma unidade em seu valor.

Dessa forma, nunca teremos loops infinitos, pois quem determinará a saída do laço de repetição é o próprio usuário através da entrada do número 0.

Passo 4

Por fim, basta realizarmos o cálculo da média e imprimirmos na tela todas as informações que o enunciado pede, são elas: média, quantidade de números positivos e sua porcentagem e quantidade de números negativos e sua porcentagem.

Vale lembrar que no cálculo da porcentagem, por queremos um valor real através da divisão de duas variáveis inteiras, devemos realizar o cast (conversão) para float, pois a linguagem C ao realizar divisões inteiras considera apenas o valor inteiro gerado (por se tratar de porcentagem, teríamos sempre o valor 0). Além disso, as impressões foram feitas com duas casas decimais e com quebra de linha em cada uma delas.

Resposta

Ei, a resposta está no passo a passo :)

Exercício Resolvido #8

Faça um programa que dado um número inteiro positivo digitado pelo usuário imprima o próximo número primo.

Passo 1

Como sempre, a primeira coisa que nós devemos fazer é definir o escopo do programa.

Passo 2

Com o escopo definido, nós podemos agora declarar e inicializar todas aquelas variáveis que serão úteis.

Informações sobre as variáveis:

  • n armazenará o número digitado pelo usuário;
  • i variável contadora que será incrementada até armazenar o valor do próximo número primo;
  • j variável contadora que será reinicializada a cada loop para testar a divisibilidade de i em um intervalo;
  • marcador armazenará se o número é ou não divisível por outro número em um intervalo.

Passo 3

Com as variáveis declaradas e inicializadas, nós podemos requisitar a entrada de um número ao usuário do programa.

Passo 4

Para de fato identificarmos o próximo número primo, nós utilizaremos comandos de repetição while aninhados.

Tendo em i o valor do próximo número (n + 1), o primeiro laço de repetição tem o papel de incrementar unitariamente valores em i até que um deles seja primo. Porém, a verificação de número primo ocorre somente no segundo laço de repetição, que tem o objetivo de testar a divisibilidade do número fornecido pelo primeiro laço em um intervalo que vai de 2 até i – 1, uma vez que todo número primo é divisível por 1 e por ele mesmo.

Apesar da lógica estar bem definida, existem algumas questões mais técnicas como a utilização da variável marcador que controla a execução dos laços junto com as variáveis contadoras i e j.

A função de marcador consiste em armazenar verdadeiro sempre que um divisor é encontrado (excluindo o número 1 e o próprio i testado naquele momento). Sendo verdadeira, o primeiro laço sabe que deve testar um novo número através do comando if, incrementando a variável contadora i, caso contrário, não foi encontrado nenhum divisor de i no intervalo de 2 até i - 1, logo encontramos o próximo número primo e o laço é encerrado com um comando break.

Ah, não podemos esquecer que para saber se um número é divisível por outro basta analisarmos se o resto da divisão é igual a 0, foi justamente esse método que utilizamos no código através de um comando if.

Passo 5

Ufa... Depois de tudo isso, basta imprimirmos o próximo número primo!

Resposta

Ei, a resposta está no passo a passo :)