Pular para o conteúdo principal

Questão de Sistemas Operacionais — Scripts em Unix e Linux — FGV 2024

Sistemas OperacionaisScripts 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

  1. AI, apenas.
  2. BII, apenas.
  3. CIII, apenas.
  4. DI e II, apenas.
  5. 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.

  1. 1Lê n
  2. 2Laço i = 2 até n/2
  3. 3n % i == 0?
  4. 4Sim → imprime 0 (composto)
  5. 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.

Gabarito: letra D

Link permanente: /questoes/fg165650