Considere que um Técnico Programador escreveu um programa pa...

Próximas questões
Com base no mesmo assunto
Q869143 Algoritmos e Estrutura de Dados
Considere que um Técnico Programador escreveu um programa para ler um número inteiro de 6 dígitos. Após ler o número e se certificar que o mesmo possuía 6 dígitos, os dígitos foram separados. Em seguida, cada um dos dígitos d1, d2, d3, d4, d5 e d6 foram inseridos em uma estrutura de dados. Depois foram retirados um a um da estrutura, multiplicados pelo valor posicional correto e somados, obtendo-se o número invertido. Caso o número de entrada fosse 123456 o resultado seria 654321. A estrutura de dados utilizada foi
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

A alternativa correta é C - pilha.

Para resolver essa questão, é necessário compreender o funcionamento das estruturas de dados e suas características. Vamos analisar como cada estrutura de dados funciona e por que a pilha é a escolha correta.

Pilha:

Uma pilha é uma estrutura de dados que segue o princípio LIFO (Last In, First Out), ou seja, o último elemento que entra é o primeiro a sair. Isso significa que, ao inserirmos os dígitos na pilha e depois removê-los um a um, obteremos os dígitos na ordem inversa à que foram inseridos. No contexto da questão, ao ler um número de 6 dígitos e inseri-los na pilha, ao removê-los, obteremos o número invertido. Por exemplo, se inserirmos os dígitos do número 123456 na pilha, ao removê-los, obteremos 654321. Portanto, a alternativa C é a correta.

Fila Circular:

Uma fila circular é uma variação da fila tradicional onde o último elemento se conecta ao primeiro, formando um círculo. No entanto, filas seguem o princípio FIFO (First In, First Out), ou seja, o primeiro elemento a ser inserido é o primeiro a ser removido. Se utilizássemos uma fila para essa operação, os dígitos seriam retirados na mesma ordem em que foram inseridos, não permitindo a inversão do número. Portanto, a alternativa A está incorreta.

Fila não circular:

Semelhante à fila circular, uma fila não circular também segue o princípio FIFO. Isso significa que os elementos são removidos na mesma ordem em que foram inseridos. Novamente, isso não permitirá a inversão do número. Por isso, a alternativa B está incorreta.

Lista linear do tipo FIFO:

Uma lista linear do tipo FIFO também opera sob o princípio FIFO, assim como as filas. Isso significa que a ordem dos elementos será mantida ao serem removidos da lista. Portanto, não é possível obter o número invertido usando essa estrutura. Sendo assim, a alternativa D está incorreta.

Árvore binária:

Uma árvore binária de altura específica (neste caso, log26 - 1) é uma estrutura de dados mais complexa, usada principalmente para operações de busca e ordenação eficiente. No entanto, ela não é adequada para a inversão direta da ordem dos dígitos como exigido na questão. Portanto, a alternativa E está incorreta.

Em resumo, a estrutura de dados que permite a inversão direta dos dígitos ao remover os elementos na ordem inversa à de inserção é a pilha. Por isso, a alternativa C é a correta.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

Uma pilha é uma estrutura de dados que admite remoção de elementos e inserção de novos objetos.  Mais especificamente, uma  pilha (= stack é uma estrutura sujeita à seguinte regra de operação:  sempre que houver uma remoção, o elemento removido é o que está na estrutura há menos tempo.

Em outras palavras, o primeiro objeto a ser inserido na pilha é o último a ser removido. Essa política é conhecida pela sigla LIFO (= Last-In-First-Out).

Fonte: https://www.ime.usp.br/~pf/algoritmos/aulas/pilha.html 

Inserindo na pilha os digitos de um número e retirando em seguida vou ter o numero invertido, mas não entendi para que serve essa parte:

" multiplicados pelo valor posicional correto e somados "

O algoritmo faz uso de uma pilha (stack) sim, mas não basta retirar os valores a partir do topo da pilha pois o resultado esperado é um número inteiro e não uma string (de dígitos) invertida. É uma questão complexa! Vou colocar o algoritmo (Java) para que possamos entender melhor isso.

 

// Java program to reverse the number

// using a stack

import java.util.Stack;

 

public class GFG

{

    // Stack to maintain order of digits

    static Stack st= new Stack<>();

 

    // Function to push digits into stack

    static void push_digits(int number)

    {

        while(number != 0)

        {

            st.push(number % 10);

            number = number / 10;

        }

    }

 

    // Function to reverse the number

    static int reverse_number(int number)

    {

        // Function call to push number's

        // digits to stack

        push_digits(number);

        int reverse = 0;

        int i = 1;

 

        // Popping the digits and forming

        // the reversed number

        while (!st.isEmpty())

        {

            reverse = reverse + (st.peek() * i);

            st.pop();

            i = i * 10;

        }

 

        // Return the reversed number formed

        return reverse;

    }

 

    // Driver program to test above function

    public static void main(String[] args)

    {

        int number = 39997;

        System.out.println(reverse_number(number));

    }

}

 

A parte da questão que diz: "multiplicados pelo valor posicional correto e somados, obtendo-se o número invertido" é vista no algoritmo dentro do while:  reverse = reverse + (st.peek() * i);

Pilha = LIFO -> Last in, first out (último a entrar, primeiro a sair)

Fila = FIFO -> Fisrt in, first out (primeiro a entrar, primeiro a sair)

Vamos utilizar um número com apenas 03 dígitos para simplificar

Para se inverter o um número, primeiramente armazena-se este em uma pilha: ex: 123456 armazenado dígito a dígito fica 1,2,3

Como na pilha o último a entrar é o primeiro a sair, a ordem de retirada será 3,2,1

Multiplicar pelo valor posicional significa multiplicar o dígito das centenas por 100, das dezenas por 10 e das unidades por 1:

3*100+2*10+1*1 = 321

Portanto a estrutura deve ser uma pilha, alternativa C

 

 

 

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo