FC ConcursosFC Concursos

Questão FC369515

Analise o código abaixo descrito em PL/SQL do Oracle. DECLARE s PLS_INTEGER := 0; i PLS_INTEGER := 0; j PLS_INTEGER; BEGIN <<outer_loop>> LOOP i := i + 1; j := 0; <<inner_loop>> LO

Linguagem SQL

FGV · 2024

Analise o código abaixo descrito em PL/SQL do Oracle.

 

DECLARE

s PLS_INTEGER := 0;

i PLS_INTEGER := 0;

j PLS_INTEGER;

BEGIN

<<outer_loop>>

LOOP

i := i + 1;

j := 0;

<<inner_loop>>

LOOP

j := j + 1;

s := s + i * j;

EXIT inner_loop WHEN (j > 5);

EXIT outer_loop WHEN ((i * j) > 15);

END LOOP inner_loop;

END LOOP outer_loop;

DBMS_OUTPUT.PUT_LINE

(O resultado é: ' || TO_CHAR(s));

END;

/

 

O conteúdo impresso é

  1. O resultado é: 24.
  2. O resultado é: 37.
  3. O resultado é: 75.
  4. O resultado é: 166.
Mostrar resposta e comentário

Gabarito

D

Comentário do professor

O bloco itera com um outer_loop que incrementa i e um inner_loop que incrementa j, fazendo s := s + i*j a cada iteração. As saídas são verificadas em sequência: primeiro EXIT inner_loop WHEN (j > 5), depois EXIT outer_loop WHEN ((i*j) > 15). Isso significa que, quando j fica maior que 5, o inner loop é terminado imediatamente e a condição de saída do outer não é avaliada nessa iteração.

Na prática: para cada i = 1,2,3 somam-se todos os produtos i·j com j = 1..6, porque o teste j>5 só ocorre após j=6; assim obtém-se \(21,\,42,\,63\) incrementalmente (s = 21, 63, 126). Em i = 4, ao chegar em j = 4 temos \(i*j = 16 > 15\), então o comando EXIT outer_loop é executado dentro do inner loop, encerrando ambos os loops após adicionar \(4+8+12+16 = 40\).

Logo, o acumulado final é \(126 + 40 = 166\), imprimindo: O resultado é: 166.

Conteúdo do catálogo FC Concursos · Atualizado em

Continue aprendendo