SóProvas


ID
1429186
Banca
CESGRANRIO
Órgão
IBGE
Ano
2013
Provas
Disciplina
Algoritmos e Estrutura de Dados
Assuntos

Considere o seguinte trecho de programa em pseudocódigo:

                            Inicio
                                     IniciaPilha(P);
                                     num=0
                                     total=0
                                     Enquanto (num <> -1)
                                                  Le_teclado(num)
                                                  Se (Vazia(P) ou Topo(P)<num)
                                                              Push(P,num)
                                                  Senao
                                                              total <- total+Pop(P)
                                                   Fim_se
                                     Fim_Enquanto
                            Fim

Se o programa for executado com uma sequência de entrada (fornecida pelo teclado) igual a 3, 5, 6, 8, 10, 7, 9, 6, 1, -1 (começando pelo 3), ao final da execução, a pilha conterá (da base para o topo) os valores

Alternativas
Comentários
  • Na estrutura de dados Pilha o método push insere sempre no topo da pilha, e o método pop remove sempre do topo da pilha.

    num=3;Pilha=(3);  topoDaPilha =3; total=0.

    num=5;Pilha=(3,5); topoDaPilha=5; total=0

    num=6;Pilha=(3,5,6); topoDaPilha=6; total=0

    num=8;Pilha=(3,5,6,8); topoDaPilha=8; total=0

    num=10;Pilha=(3,5,6,8,10); topoDaPilha=10; total=0

    num=7;Pilha=(3,5,6,8); topoDaPilha=8; total=10

    num=9;Pilha=(3,5,6,8,9); topoDaPilha=9; total=10

    num=6;Pilha=(3,5,6,8); topoDaPilha=8; total=19

    num=1;Pilha=(3,5,6); topoDaPilha=6; total=27

    num=-1;Pilha=(3,5); topoDaPilha=6; total=33

    depois como num = -1 não vai entrar no loop e vai finalizar o programa


  • Não entendi o porquê dessa resposta. Como é uma estrutura "While() {} Loop", ou seja, "Enquanto...Faça", a condição no início do bloco é avaliada antes de entrar no bloco. É diferente do "Do {} Until ()", ou seja, "Faça...Até", em que a condição só é avaliada após o bloco ser executado. 

    No caso da questão, não tem resposta, pois o programa terminaria com o valor total de 27 e a pilha teria os números 3, 5 e 6.
    A meu ver, passível de anulação.
  • Pode parecer confuso, mas a questão está correta. Aparentemente a condição não deveria ser executada no último loop com o valor de entrada -1. Porém devemos notar que a leitura do valor pela função Le_teclado(num) ocorre dentro do loop. Isso significa que, quando o valor -1 foi verificado no início do bloco Enquanto.. faca todo o algoritmo já havia sido executado e só então o loop encerra. 

  • Força Guerreiro!!!!!!