Questão de Programação — C++ (mais mais) — FUNDATEC 2024
Programação›C++ (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:Qual linha do código acima contém um ou mais erros que NÃO permitirão a execução correta do programa?
A3
B6
C8
D9
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.