Exercícios Resolvidos de Loops infinitos, loops aninhados e os comandos break e continue

Ver Teoria

Enunciado

Receba um número N U M qualquer do usuário. Imprima todos os números primos existentes entre 0 e N U M

Passo 1

Vamos lá pessoal. Essa questão é massa!

Pra encontrar um número primo basta a gente criar um loop e testar todas as divisões possíveis. Se o número for divisível apenas por 1 e por ele mesmo, então o número é primo.

Mas a gente precisa encontrar vários números primos! Então vamos criar outro loop, mais externo, pra poder repetir o processo de teste para todos os números.

Passo 2

Vamos começar declarando as variáveis. Vamos precisar de uma variável para conter o número inteiro digitado pelo usuário, chamada N U M . E outras duas variáveis inteiras chamadas n u m e i serão usadas nos nossos loops.

Também vamos criar uma variável lógica chamada p r i m o que será inicializada com o valor t r u e . Dessa forma, todo número é considerado primo até que se prove o contrário!

Então, vamos declarar essas variáveis no código:

Passo 3

Antes de escrever o laço precisamos receber o número do usuário. Usamos o c o u t para pedir o número e, com o c i n , armazenamos o valor na variável correta.

Passo 4

Agora vamos criar nosso primeiro loop usando o f o r . Nesse loop vamos testar todos os números de 2 até N U M , para descobrir quais são primos. Por definição 1 não é primo, então o laço deve começar em n u m = 2 . Então, a cada iteração, a variável n u m assume um desses valores (de 2 até N U M ) e é testada. Dentro do parênteses ali à direita do f o r , é indicado o valor inicial da variável ( n u m = 2 ) , o ponto de parada do loop ( n u m ≤ N U M ) e o comando n u m + + que adiciona 1 à variável a cada iteração. Esses 2 informações devem ficar separadas por ponto e vírgula.

Agora vamos criar um segundo loop, para verificar se o número n u m é ou não é primo. Pra isso iniciamos nosso laço em i = 2 , pois não faz sentido testar a divisão por 1 . E esse laço ira ser incrementado de um em um até i < n u m , pois não faz sentido testar a divisão por si mesmo. Um número não primo é divisível por outros números além de 1 e ele mesmo, por isso testamos entre 2 e n u m - 1 .

Pra testar se n u m é divisível por i vamos usar uma estrutura i f . Se o n u m for divisível por i então ele não é primo, e o valor lógico da variável p r i m o deve ser mudado para f a l s e e nesse caso não será preciso continuar os testes, então usamos o comando b r e a k para interromper o loop interno.

Uma vez que o loop interno é concluído, ou seja, já sabemos se um determinado número é primo, precisamos imprimir essa mensagem. Precisamos imprimir todos os números que são primos. Então utilizamos outro comando i f que, caso o número testado seja primo, então vamos imprimir o número seguido de um espaço em branco. Esse i f fica dentro do loop externo, ou seja, logo que verificamos que um número é primo, já imprimimos seu valor, antes de analisar o próximo. E como não usamos o comando e n d l (que pula linha), todos os números primos são impressos na mesma linha, por isso é necessário prever um espaço.

Depois de imprimir um número primo, é hora de analisar o próximo. Mas antes, ainda dentro do loop externo, vamos precisar resetar a variável p r i m o pro valor t r u e . Isso garante que a próxima iteração do laço ira funcionar corretamente.

Passo 5

Vamos dar uma olhada no resultado final pra testar. Vamos rodar o programa e inserir um valor qualquer. Eu vou usar 100

Resposta