Pular para o conteúdo principal

Questão de Programação — Linguagens de programação — FGV 2024

ProgramaçãoLinguagens de programação
Código
fg086418
Banca
FGV
Órgão
INPE
Ano
2024
Nível
Superior
Cargo
Tecnologista Pleno I - Processamento de Alto Desempenho – PAD (HPC)
Certo programador deseja escrever em uma única linha de comandos um código em Bash que verifica se o valor digitado como entrada é negativo. Caso seja verdade, o código continua em execução, e solicita nova entrada, até que um valor maior ou igual a zero seja digitado.Nesse caso, é impresso na tela do terminal o número zero e a execução é encerrada. Considere que apenas números inteiros são dados como entrada.Assinale a opção que apresenta o comando em Bash que executa o desejado.
  1. Awhile read n; do if [ n -lt 0 ]; then y=1; else y=0 && break; fi; done; echo y
  2. Bwhile read $n; do if [ $n -lt 0 ]; then $y=1; else $y=0 && break; fi; done; echo $y
  3. Cwhile read n; do if [ $n -lt 0 ]; then y=1; else y=0 && break; fi; done; echo $y
  4. Dwhile read $n; do if ( $n -lt 0 ); then y=1; else y=0 && break; fi; done; echo $y
  5. Ewhile read n; do if ( n -lt 0 ); then y=1; else y=0 && break; fi; done; echo y
Revelar gabarito e comentário

GabaritoC — while read n; do if [ $n -lt 0 ]; then y=1; else y=0 && break; fi; done; echo $y

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”.

Bash: laço de repetição com leitura e teste

Gabarito: letra C. O código deve ler números até que um valor não negativo seja digitado, então imprimir "0" e encerrar. A alternativa C é a única que utiliza corretamente a sintaxe do Bash: read n (sem $) para armazenar a entrada, [ $n -lt 0 ] (com $ na variável e colchetes) para o teste condicional, e echo $y (com $) para exibir o valor da variável.

Análise das alternativas:

Alternativa A — ❌ Incorreta

  • [ n -lt 0 ] usa n literal, não o valor lido. O correto é [ $n -lt 0 ].

  • echo y imprime o caractere "y", não o valor da variável y (que seria echo $y).

Alternativa B — ❌ Incorreta

  • read $n é inválido: read espera o nome da variável, não seu valor (expansão $n é executada antes do read, quebrando o comando).

  • $y=1 tenta executar o valor de y como comando, não faz atribuição.

Alternativa C — ✅ Correta

  • read n lê corretamente a entrada para a variável n.

  • [ $n -lt 0 ] testa se o valor de n é menor que zero.

  • Dentro do if: se negativo, y=1; caso contrário, y=0 e break.

  • Ao final, echo $y imprime "0" (valor de y). Atende perfeitamente ao enunciado.

Alternativa D — ❌ Incorreta

  • read $n → mesmo erro da B.

  • ( $n -lt 0 ) usa parênteses em vez de colchetes. Em Bash, ( ... ) cria um subshell, não é o teste condicional correto; o adequado é [ $n -lt 0 ] ou (( $n < 0 )).

Alternativa E — ❌ Incorreta

  • ( n -lt 0 ) → mesmo erro de sintaxe (parênteses ausentes de $).

  • echo y → imprime literal, não a variável.

NÃO CAIA NESSA!

A banca testa o domínio da sintaxe de variáveis no Bash: em read não se usa $, mas ao referenciar a variável é obrigatório $. Além disso, o teste aritmético exige colchetes [ ... ] (ou [[ ... ]] / (( ... ))), e o echo deve usar $ para expandir a variável. Confundir esses pontos leva aos erros das demais opções.

Gabarito: letra C

Link permanente: /questoes/fg086418