Questão de Sistemas Operacionais — Scripts em Unix e Linux — FGV 2024
Sistemas Operacionais›Scripts em Unix e Linux
Código
fg165650
Banca
FGV
Órgão
INPE
Ano
2024
Cargo
Tecno P1 ( )
Considere o seguinte Shell script escrito em Bash:
#!/usr/bin/env bash echo -e "Digite o valor de n: " read n for((i=2; i<=$n/2; i++)) do auxiliar=$(( n%i )) if [ $auxiliar -eq 0 ] then echo 0 exit 0 fi done echo 1
Com relação ao script acima, analise as afirmativas a seguir.
I. No caso de o usuário digitar 24 para o valor de n, o número a ser impresso na tela é 0.
II. No caso de o usuário digitar 23 para o valor de n, o número a ser impresso na tela é 1.
III. O script verifica se o valor de n é par ou ímpar.
Está correto o que se afirma em
AI, apenas.
BII, apenas.
CIII, apenas.
DI e II, apenas.
EI, II e III.
Revelar gabarito e comentário▾
GabaritoD — I e II, apenas.
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”.
Shell Script em Bash: análise de fluxo e lógica
Gabarito: letra D — corretos os itens I e II. O script testa se o número n é divisível por qualquer inteiro entre 2 e n/2; se encontrar um divisor, imprime 0 (composto), senão imprime 1 (primo). Para n=24, há divisores (ex.: 2), então imprime 0; para n=23, não há divisores no intervalo, então imprime 1. O item III está errado porque o script não verifica paridade, e sim primalidade.
O script é um clássico algoritmo de teste de primalidade por divisão tentativa. Ele lê um valor inteiro n e percorre os possíveis divisores i de 2 até n/2 (a condição i<=$n/2). Para cada i, calcula o resto da divisão de n por i com $(( n%i )). Se o resto for zero (-eq 0), significa que n é divisível por i — logo, n não é primo — e o script imprime 0 e encerra com exit 0. Se o laço terminar sem encontrar nenhum divisor, o script imprime 1, indicando que n é primo.
Vamos aplicar o algoritmo aos valores do enunciado:
n = 24: o laço começa com i=2. O resto de 24 ÷ 2 é 0, então a condição [ $auxiliar -eq 0 ] é verdadeira. O script imprime 0 e sai. Item I correto.
n = 23: o laço testa i de 2 até 11 (pois 23/2 = 11 na divisão inteira). Nenhum desses valores divide 23 exatamente (23 é primo). O laço termina sem encontrar divisor, e o script imprime 1. Item II correto.
O item III afirma que o script verifica se o número é par ou ímpar. Isso é falso: o script testa a existência de qualquer divisor no intervalo, não apenas o divisor 2. Um número ímpar composto (como 9 ou 15) também faria o script imprimir 0, pois possui divisores ímpares. A verificação de paridade seria feita apenas testando n % 2, o que não é o caso aqui.
A pegadinha da banca está em confundir o conceito de primalidade com o de paridade. O candidato que lê o script rapidamente pode associar o teste de divisibilidade a uma verificação de par/ímpar, mas o algoritmo é mais abrangente: ele detecta qualquer número composto, não apenas os pares.
Guarde a distinção: par/ímpar é uma classificação binária baseada apenas na divisibilidade por 2; primo/composto é uma classificação baseada na existência de qualquer divisor próprio. É exatamente essa fronteira que separa os itens corretos do incorreto.
1Lê n
2Laço i = 2 até n/2
3n % i == 0?
4Sim → imprime 0 (composto)
5Não → imprime 1 (primo)
LEVEL · soulevel.com.br
Item I — ✅ Correto
Para n=24, o laço começa com i=2. O resto de 24 ÷ 2 é 0, então a condição [ $auxiliar -eq 0 ] é verdadeira. O script imprime 0 e encerra com exit 0. O item está correto.
Item II — ✅ Correto
Para n=23, o laço testa i de 2 até 11 (divisão inteira de 23/2). Nenhum valor divide 23 exatamente, pois 23 é um número primo. O laço termina sem encontrar divisor, e o script executa echo 1. O item está correto.
Item III — ❌ Incorreto
O script não verifica se o número é par ou ímpar; ele verifica se o número é primo ou composto. A prova disso é que um número ímpar composto, como 9, também faria o script imprimir 0 (pois 9 é divisível por 3). A verificação de paridade seria apenas n % 2, não o laço completo de 2 até n/2.
Conclusão: corretos os itens I e II → letra D.
NÃO CAIA NESSA!
A banca troca o conceito de primalidade por paridade. O script testa se o número tem qualquer divisor no intervalo de 2 a n/2 — isso identifica números compostos, não apenas pares. Um número ímpar composto (9, 15, 21) também imprime 0. Fique atento: a presença do teste n % i para vários i indica teste de primalidade, não de paridade.
PEGA ESSA DICA!
Para resolver questões de script, simule a execução com os valores dados, passo a passo. Anote o valor de i em cada iteração e o resultado do teste condicional. Isso evita erros de interpretação e revela rapidamente o propósito real do algoritmo.