Pular para o conteúdo principal

Questão de Programação — C++ (mais mais) — FUNDATEC 2024

ProgramaçãoC++ (mais mais)
Código
qg164402
Banca
FUNDATEC
Órgão
IF Sul - MG
Ano
2024
Nível
Superior
Cargo
Professor do Ensino Básico, técnico e Tecnológico: MCH-02 - Informática
Analise o programa abaixo, o qual foi escrito na linguagem C++, e cujo objetivo é verificar se um número inteiro, informado pelo usuário, é ou não um número primo:Imagem associada para resolução da questãoQual linha do código acima contém um ou mais erros que NÃO permitirão a execução correta do programa?
  1. A3
  2. B6
  3. C8
  4. D9
  5. E14
Revelar gabarito e comentário

GabaritoC — 8

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Resolução

Gabarito: letra C — a conta chega a Linha 8 — alternativa C.

A ideia por trás

Um número primo é aquele que só pode ser dividido exatamente por 1 e por ele mesmo. Para testar se um número é primo, o jeito mais simples é tentar dividi-lo por todos os inteiros de 2 até a metade dele: se nenhum der resto zero, ele é primo. O programa usa exatamente essa ideia, com um laço que percorre os possíveis divisores.

O laço for em C++ tem três partes: a inicialização (onde a variável de controle começa), a condição (que é verificada antes de cada volta — se for verdadeira, o bloco roda; se for falsa, o laço termina) e o incremento (que muda a variável ao fim de cada volta). A condição é o que decide se o laço executa ou não: se ela já for falsa na primeira checagem, o bloco nunca roda.

Esta questão cobra justamente a leitura da condição do laço: ela está escrita de um jeito que parece razoável, mas que faz o laço não executar nenhuma vez. É preciso comparar a condição com o que o algoritmo precisa fazer.

O que a questão dá

  • código-fonte em C++ com laço for na linha 8

  • objetivo: verificar se um número inteiro é primo

O que queremos: a linha que contém o erro que impede a execução correta

Passo 1 — Analisar a condição do laço

O laço for na linha 8 tem a condição i > num/2. Para um número como 10, num/2 é 5. No início, i = 2, e 2 > 5 é falso. Como a condição é falsa já na primeira checagem, o laço não executa nenhuma vez. Isso significa que nenhum divisor é testado.

NÃO CAIA NESSA!

Confundir o operador: > em vez de <=. O correto seria i <= num/2.

Passo 2 — Comparar com o comportamento esperado

O algoritmo deveria testar divisores de 2 até a metade do número, ou seja, continuar enquanto i for menor ou igual a num/2. A condição escrita faz o oposto: ela só seria verdadeira se i fosse maior que a metade, o que nunca acontece no início. Por isso o laço nunca roda.

NÃO CAIA NESSA!

Achar que o laço está certo só porque a sintaxe está correta — o erro é lógico, não de sintaxe.

Resposta: Linha 8 — alternativa C

Link permanente: /questoes/qg164402