Buscar

Estruturas de Repetição, Operadores e Tabelas Hash

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

RESUMO DA AVALIAÇÃO
Verifique as marcações abaixo e confirme o envio de suas respostas ao final desta janela. Caso seja necessário alguma alteração, retorne para a avaliação e faça a correção antes do envio.
Para finalizar sua avaliação é necessário digitar a chave de envio.
Algoritmos, Programação e Estrutura de Dados
Questão 1) - 1,00 ponto(s)
Na linguagem Python, as estruturas ou laços de repetição são muito utilizadas quando se tem a necessidade de repetir uma mesma instrução mais de uma vez. Dentre essas estruturas, pode-se destacar o comando FOR. Esse comando faz uso de dois tipos de variáveis que são muito importantes para seu perfeito funcionamento, sendo elas as variáveis contadoras e as acumuladoras. As variáveis contadoras são aquelas nas quais cada interação do comando FOR é incrementada com base em algum critério. Já as variáveis acumuladoras são aquelas nas quais o seu valor é acumulado a cada iteração do comando FOR.
 
Assim sendo, ao realizar um teste de mesa que envolva uma variável acumuladora é de suma importância que seja
A)
utilizada uma variável contadora em paralelo.
B)
implementado um ambiente de testes.
C)
criada uma variável secundária para comparação.
D)
criado um diagrama de blocos para comparação do código.
 
E)
anotado o seu valor a cada interação.
Algoritmos, Programação e Estrutura de Dados
Questão 2) - 1,00 ponto(s)
No desenvolvimento de algoritmos, os operadores são símbolos que podem ser utilizados na escrita de expressões, sendo essenciais para o desenvolvimento de algoritmos em qualquer linguagem de programação. Vale lembrar que algumas linguagens possuem ordens de prioridade para execução dos operadores. Os operadores de atribuição possuem o papel de atribuir um determinado valor a uma variável. Já os operadores aritméticos consistem em operações matemáticas básicas, que podem ser aplicadas a variáveis numéricas.
 
Na avaliação de uma expressão aritmética, é importante lembrar que alguns operadores serão avaliados antes dos outros. Na linguagem Python, a ordem de prioridade começa
A)
nos operadores de potência (*), de módulo (%) e de resto da parte inteira (//).
B)
nos operadores de módulo (%), de potência (*) e de resto da parte inteira (//).
C)
nos operadores de potência (*), de resto da parte inteira (//) e de módulo (%).
D)
nos operadores de potência (*), de módulo (//) e de resto da parte inteira (%).
E)
nos operadores de resto da parte inteira (//), de módulo (%) e de potência (*).
Algoritmos, Programação e Estrutura de Dados
Questão 3) - 1,00 ponto(s)
A intensa produção de dados é um dos assuntos mais abordados por profissionais da área de Tecnologia da Informação. Com a facilidade e a agilidade no armazenamento de dados, espera-se que a recuperação deles ocorra de forma igualmente rápida. As tabelas hash, também chamadas de tabelas de dispersão ou de espalhamento, são uma estratégia de busca de dados bastante utilizada em grandes estruturas de dados, tendo como principal característica a sua eficiência na busca de dados. Entretanto, assim como outras estratégias de busca de dados, possui suas limitações e deficiências, de forma que podem ocorrer colisões, ou seja, mais de um valor pode ser atribuído ao mesmo índice da tabela, por meio da função hash, não retornando um único resultado.
 
ZANIN, Aline. Métodos de pesquisa e ordenação em estruturas de dados. Porto Alegre: SAGAH, 2020.
Diante disso, considere a situação apresentada a seguir.
 
Visando manter a qualidade técnica da equipe de desenvolvimento, Marli, que é desenvolvedora Sênior da empresa, decidiu criar um evento denominado “Dia de Aprender”. Todo mês, a equipe da Marli dedica um dia do expediente de trabalho para realizar treinamentos. Para este mês, Marli está preparando um treinamento sobre os tipos de métodos utilizados para realizar o espalhamento numa tabela hash.
 
Acerca dos métodos de espalhamento que serão apresentados por Marli, julgue os itens a seguir.
I. Marli poderá explicar aos colaboradores o método do desdobramento, que realiza a divisão da chave em diversos segmentos que são ligados por uma função, cujo valor não pode ser repetido, sendo que, a partir do resultado obtido dessa divisão, será concebida a chave.
 
II. Marli poderá mencionar o método da divisão. Esse método utiliza uma operação matemática que faz um cálculo denominado de resto de divisão. Para ser mais específico, esse valor é o resto de uma divisão exata entre dois números. Na matemática, esse valor é denominado de MOD, já nas linguagens de programação, esse valor é representado pelo %.
 
III. Poderá ser apresentado por Marli o método do meio do quadrado, que é baseado em uma multiplicação para fazer o hashing dos dados. Nele, multiplica-se o valor da chave por ela mesma e o resultado obtido dessa multiplicação deve ser armazenado. Posteriormente, esse resultado deve ser convertido para decimal e, na sequência, devem-se excluir as extremidades, uma por vez, até chegar no valor desejado e, por fim, converter, novamente, o valor para binário.
É correto o que se afirma em
A)
I, apenas.
B)
I e II, apenas.
C)
III, apenas.
D)
I, II e III.
E)
II e III, apenas.
Algoritmos, Programação e Estrutura de Dados
Questão 4) - 1,00 ponto(s)
A linguagem Python oferece maneiras bastante particulares de lidar com vetores de dados, possibilitando ao programador uma gama de maneiras distintas de realizar ações e funções em seus algoritmos. Diferentemente de outras linguagens, vetores em Python são chamados de “listas”. Uma lista é um conjunto linear de valores indexados por um número inteiro. Os Índices são iniciados em zero e atribuídos sequencialmente a partir deste. A lista pode conter quaisquer valores, incluindo valores de tipos mistos, e até outras listas. Para criar uma lista, usamos colchetes e vírgulas para enumerar os valores.
 
Assim, considerando que vetores em Python são listas de dados, é possível ainda atribuir uma lista a outra lista, além de realizar o cruzamento e a agregação de listas, formando assim, matrizes de dados.
 
REIS, Christian Robottom. Python na prática: um curso objetivo de programação em Python. Disponível em: http://www.gwyddion.com/~cprov/files/pnp.pdf. Acesso em: 31 ago. 2020 (adaptado).
 
Diante do exposto, analise o trecho de código a seguir. 
 
A respeito do trecho de código apresentado, avalie as asserções a seguir e a relação proposta entre elas.
 
I. O vetor a[] está sendo invocado como um objeto pelo elemento b, que passou a assumir o papel de lista, o que significa que valores atribuídos à estrutura b serão atribuídas ao vetor a[] a partir deste ponto do código.
 
PORQUE
 
II. Um recurso disponível em Python é o alias, que cria um “apelido” para uma lista (vetor) fazendo com que um elemento possa ser utilizado para manipular outros, como ocorreu no trecho apontado, em que a posição 1 do vetor a[] recebeu o valor 10 atribuído em b[].
 
A respeito dessas asserções, assinale a opção correta.
A)
A asserção I é uma proposição falsa, e a II é uma proposição verdadeira.
B)
As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa da I.
C)
As asserções I e II são proposições falsas.
D)
As asserções I e II são proposições verdadeiras, e a II é uma justificativa da I.
E)
A asserção I é uma proposição verdadeira, e a II é uma proposição falsa.
Algoritmos, Programação e Estrutura de Dados
Questão 5) - 1,00 ponto(s)
Um arranjo retangular de números reais, ou complexos, com begin mathsize 12px style m end style linhas e begin mathsize 12px style n end style colunas é chamado uma matriz de begin mathsize 12px style m end style por begin mathsize 12px style n end style, e é indicada geralmente por uma letra maiúscula, na forma
 
begin mathsize 12px style A equals open square brackets table row cell a subscript 11 end cell cell a subscript
12 end cell horizontal ellipsis cell a subscript 1 n end subscript end cell row cell a subscript 21 end cell cell a subscript 22 end cell horizontal ellipsis cell a subscript 2 n end subscript end cell row horizontal ellipsis horizontal ellipsis horizontal ellipsis horizontal ellipsis row cell a subscript m 1 end subscript end cell cell a subscript m 2 end subscript end cell horizontal ellipsis cell a subscript m n end subscript end cell end table close square brackets end style
 
As quantidades begin mathsize 12px style a subscript i j end subscript end style são chamadas de elementos da matriz begin mathsize 12px style A end style. Nós nos referiremos à begin mathsize 12px style a subscript i 1 end subscript comma space a subscript i 2 end subscript comma space... comma space a subscript i n end subscript end style como a i-ésima linha de begin mathsize 12px style A end style, e à begin mathsize 12px style a subscript 1 j end subscript comma space a subscript 2 j end subscript comma space... comma space a subscript m j end subscript end style como a j-ésima coluna de A. Se begin mathsize 12px style m equals n end style, a matriz é chamada matriz quadrada. Neste caso, begin mathsize 12px style n end style ou begin mathsize 12px style m end style é chamado ordem da matriz. Os elementos begin mathsize 12px style a subscript i i end subscript end style constituem a diagonal principal de uma matriz quadrada. A maior diagonal que cruza em ângulo reto com a diagonal principal é chamada diagonal secundária.
Por analogia com o vetor linha e o vetor coluna, definimos matriz linha (matriz begin mathsize 12px style 1 end style por begin mathsize 12px style n end style) e matriz coluna (matriz begin mathsize 12px style m end style por begin mathsize 12px style 1 end style). Como casos particulares desses dois tipos de matrizes, definimos a matriz coluna unitária, e indicamos por begin mathsize 12px style 1 end style a matriz em que todos os seus elementos são begin mathsize 12px style 1 end style independentemente de sua ordem. Analogamente, uma matriz linha com todos os seus elementos iguais a begin mathsize 12px style 1 end style será chamada matriz linha unitária, e será indicada por begin mathsize 12px style 1 asterisk times end style.
 
Instituto de Energias Energéticas e Nucleares. Vetores, matrizes e determinantes. Disponível em: https://www.ipen.br/biblioteca/iea/IEA_INF_7.pdf. Acesso: 31 ago. 2020.
 
 
Assim, em Python, para construir uma matriz quadrada begin mathsize 12px style 3 cross times 3 end style, com begin mathsize 12px style 3 end style linhas begin mathsize 12px style open parentheses l close parentheses end style e begin mathsize 12px style 3 end style colunas begin mathsize 12px style open parentheses c close parentheses end style, é possível utilizar o código a seguir.
 
 
Com base no código apresentado, e objetivando inserir a soma de todos os números pares digitados na matriz, definida por begin mathsize 12px style s p a r end style, julgue as afirmações a seguir.
 
I. Para fazer a soma de todos os números pares, é preciso declarar a variável begin mathsize 12px style s p a r equals 0 end style após a primeira linha.
 
II. Após a oitava linha, deve-se adicionar size 12px i size 12px f size 12px space size 12px M begin mathsize 12px style left square bracket l right square bracket end style size 12px space begin mathsize 12px style left square bracket c right square bracket end style size 12px percent sign size 12px 2 size 12px equals size 12px equals size 12px 0 size 12px colon
size 12px space size 12px space size 12px space size 12px space size 12px space size 12px space size 12px space size 12px space size 12px space size 12px space size 12px s size 12px p size 12px a size 12px r size 12px space size 12px plus size 12px equals size 12px M size 12px left square bracket size 12px l size 12px right square bracket size 12px space begin mathsize 12px style left square bracket c right square bracket end style.
 
III. Para que o resultado da soma dos valores pares seja visualizado, não é preciso adicionar nenhum termo, pois o begin mathsize 12px style p r i n t space left parenthesis right parenthesis end style (nona linha) irá explicitar o resultado. 
 
É correto o que se afirma em
A)
I, II e III.
B)
II e III, apenas.
C)
I e II, apenas.
D)
I, apenas.
E)
III, apenas.
Algoritmos, Programação e Estrutura de Dados
Questão 6) - 1,00 ponto(s)
Quando um algoritmo executa um conjunto de instruções por repetidas vezes, diz-se que este programa está realizando um processamento iterativo. Este recurso é aplicado, por exemplo, para processar um determinado conjunto de dados inseridos no algoritmo pelo usuário e obter um conjunto de dados diferentes a partir dos inseridos. Neste algoritmo, uma estrutura de repetição deve ser aplicada para realizar a iteração de uma instrução ou uma sequência de instruções. Para executar esta estrutura de repetição, seja por um número determinado ou indeterminado de vezes, é necessária uma expressão de controle, responsável por delimitar a condição (ou condições) para realização do comando.
 
O algoritmo a seguir, em pseudolinguagem, ilustra a aplicação de uma estrutura de repetição do tipo “enquanto”.
 
programa
{
funcao inicio()
{
inteiro contador = 1
real dado, media, total = 0.0 
 
enquanto(contador <= 10)
 {
 escreva("Digite o ", contador, "º número: ")
 leia(dado)
 total = total + dado 
 contador = contador + 1
 } 
media = total / 10
escreva( media)
 }
}
 
A respeito deste algoritmo, avalie as afirmações a seguir.
 
I. O algoritmo conta com uma função matemática de acumulação de dados, operacionalizada pela variável “total”, para somatória dos valores digitados pelo usuário.
 
II. A variável “contador” é utilizada como referência para controlar o início, o final e a quantidade de execuções da estrutura de repetição do algoritmo, mediante a análise, por parte da função de repetição, das condições inicial, atual e final da variável.
 
III. A variável “media” recebe o valor médio calculado pela estrutura de repetição para os dados inseridos pelo usuário, mostrando-o ao usuário ao final do programa.
 
É correto o que se afirma em
A)
II e III, apenas.
 
B)
I, II e III.
C)
II, apenas.
 
D)
I e III, apenas.
E)
I, apenas.
Algoritmos, Programação e Estrutura de Dados
Questão 7) - 1,00 ponto(s)
As variáveis são utilizadas com a finalidade de armazenar dados durante a execução de um programa. Na linguagem Python, para realizar esse armazenamento, existem diversos recursos para declarar variáveis, além de definir tipos de dados e seus respectivos escopos, que variam de acordo com o local e a forma como são tratados nos programas. Por meio desses recursos, o Python permite implementar programas robustos e organizados, de fácil manutenção. A linguagem Python possui poucos tipos de dados, que representam os conjuntos dos números inteiros e reais, verdadeiro ou falso, números complexos, cadeia de caracteres e coleções. Vale ressaltar ainda que o Python utiliza declarações implícitas para definir o tipo de dado das variáveis, o que quer dizer que o tipo é definido no momento de sua criação, quando determinado valor é atribuído ou quando ela é modificada.
 
Disponível em: https://www.w3schools.com/python/python_numbers.asp. Acesso em: 11 mar. 2020.
 
Analise a seguir um trecho de código onde algumas variáveis são declaradas e posteriormente os tipos delas são impressos. 
 
Com base nas informações apresentadas e no código onde algumas variáveis são criadas, avalie as informações sobre os tipos de dados da linguagem Python.
 
I. Na linha 14 é criada uma variável do tipo float, que armazena números de ponto flutuante.
 
II. Na linha 12
é criada uma variável do tipo varchar, que armazena uma sequência de caracteres.
 
III. Na linha 15 é criada uma variável do tipo complex, que armazena números complexos, sendo estes reais e imaginários.
 
IV. Na linha 13 é criada uma variável do tipo int, que armazena números inteiros, sem limite predefinido para o tamanho do número que será armazenado.
 
V. Nas linhas 10 e 11 são criadas variáveis do tipo int para posterior comparação através de uma variável do tipo bool, que armazena dados do tipo verdadeiro e falso, que significam, respectivamente, True e False, podendo ser visualizada entre as linhas 17 e 20.
 
É correto apenas que se afirma em
A)
II e IV.
B)
I e II.
C)
II, III, IV.
D)
I, III, IV e V.
E)
I, III e V.
Algoritmos, Programação e Estrutura de Dados
Questão 8) - 1,00 ponto(s)
Julgue os itens a seguir.
 
I. No algoritmo de ordenação por inserção, adiciona-se um item qualquer à estrutura de dados; depois, para cada item que ainda não esteja na estrutura, antes de adicioná-lo, comparar com cada item que já está nela (consequentemente já ordenada) até encontrar a posição a ser encaixada.
II. O Merge Sort é um algoritmo que segue uma técnica de dividir para conquistar na base de sua ideia principal. O raciocínio básico para que ele funcione é que ordenar uma estrutura significa ordenar várias subestruturas internas já ordenadas; caso essas estruturas não estejam ordenadas, basta ordená-las pelo mesmo método.
III. O Quicksort adota a estratégia de divisão e conquista. A estratégia consiste em rearranjar as chaves de modo que as chaves "menores" precedam as chaves "maiores". Em seguida, o Quicksort ordena as duas sublistas de chaves menores e maiores recursivamente até que a lista completa se encontre ordenada.
IV. Algoritmos de ordenação por inserção normalmente tem custo computacional menor que o Quicksort.
 
É CORRETO o que se afirma em
A)
I, II e III, apenas.
B)
II, III, IV, apenas.
C)
I, III e IV, apenas.
D)
I, II, III e IV.
E)
I e II, apenas.
Algoritmos, Programação e Estrutura de Dados
Questão 9) - 1,00 ponto(s)
Em uma algorítmo de busca binária é necessário que o array seja classificado. A primeira interação desse algoritmo testa o elemento no meio do array. Se isso corresponder à chave de pesquisa, o algoritmo termina. Supondo que o array seja classificado em ordem crescente, se a chave de pesquisa for menor que o elemento do meio, ela não poderá localizar nenhum elemento na segunda metade do array e o algoritmo continua com apenas a primeira metade. Se a chave de pesquisa for maior que o elemento no meio, ela não poderá localizar nenhum elemento na primeira metade do array e o algoritmo continua apenas com a segunda metade. Cada interação testa o valor do meio da parte restante do array. Se a chave de pesquisa não corresponder ao elemento, o algoritmo eliminará metade dos elementos restantes. O algoritmo termina localizando um elemento que corresponde à chave de pesquisa ou reduzindo o subarray ao tamanho zero.
DEITEL, P. ; DEITEL, H. Java: como programar. 10. ed. São Paulo: Pearson Education do Brasil, 2017
 
Assim sendo, um estudante de sistemas de informação, durante seus estudos, implementou o algoritmo de busca binária para testar o array de 17 elementos com uma chave de pesquisa 69, que pode ser visualizado abaixo. 
 
 
4 5 9 12 31 32 38 43 55 67 69 72 77 85 89 91 99
Após a execução do algoritmo, o estudante identificou que obteve êxito em seu desenvolvimento, podendo atender às especificações desse tipo de algoritmo.
 
Considerando esse contexto, avalie as asserções a seguir e a relação proposta entre elas.
 
I. O estudante identificou que uma das primeiras ações de seu algoritmo foi verificar se 55 é a chave de pesquisa.
PORQUE
 
II. O valor 55 é o elemento do meio do array, e como a chave é maior que esse elemento, a primeira parte do array é, então, ignorada pelo algoritmo.
 
A respeito dessas asserções, assinale a opção correta.
A)
A asserção I é uma proposição falsa, e a II é uma proposição verdadeira.
B)
As asserções I e II são proposições verdadeiras, e a II é uma justificativa da I.
C)
As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa da I.
D)
As asserções I e II são proposições falsas.
E)
A asserção I é uma proposição verdadeira, e a II é uma proposição falsa.
Algoritmos, Programação e Estrutura de Dados
Questão 10) - 1,00 ponto(s)
Na computação, duas das estruturas de dados mais conhecidas e comumente utilizadas são a FILA e a PILHA. Muitas vezes, é necessário desenvolver classes específicas para se trabalhar com essas estruturas. A fila implementa o conceito First-in, First-out, em português “Primeiro a entrar, Primeiro a sair”, ou seja, o primeiro elemento inserido na lista é também o primeiro a ser removido. Podemos pensar, por exemplo, em uma fila de banco: a primeira pessoa a entrar na fila será a primeira a ser atendida, logo, a primeira a sair da fila.
RODRIGUES, Joel. Queue e Stack: Trabalhando com os modelos FIFO e LIFO em .NET. DevMedia, Rio de Janeiro, 2012. Disponível em: https://www.devmedia.com.br/queue-e-stack-trabalhando-com-os-modelos-fifo-e-lifo-em-net/25579. Acesso em: 14 maio 2021 (adaptado).
 
Perante o exposto, analise a situação hipotética a seguir.
 
João está implementando um sistema de atendimento on-line que deve gerenciar uma Fila de Prioridades. Nesse sistema, serão concedidos três tipos de prioridades: Tipo A, Tipo B e Tipo C. Dessa forma, os usuários com prioridade do Tipo A devem ser atendidos antes dos usuários com prioridade do Tipo B; os usuários que tiverem prioridade do Tipo B devem ser atendidos antes dos usuários com prioridade do Tipo C. Diante disso, observe a ordem de acesso à plataforma a seguir.
 
08h00min: Ana Paula (Tipo C)
08h02min: Pedro (Tipo C)
08h07min: João (Tipo A)
08h09min: Lila (Tipo B)
08h12min: Miguel (Tipo C)
08h15min: Clara (Tipo A)
 
Considerando que os atendimentos começaram às 08h e que cada um dura exatamente 10 minutos, avalie as afirmações a seguir.
 
I. Quando os atendimentos começaram, havia somente Ana Paula na Fila de Prioridades, por isso, ela foi a primeira a ser atendida.
 
II. João foi o segundo usuário a ser atendido, com o atendimento realizado pontualmente às 08h10min.
 
III. Clara foi a terceira a ser atendida, com o atendimento iniciado às 08h20min e concluído às 08h30min.
 
É correto o que se afirma em
A)
I, apenas.
B)
I, II e III.
C)
II e III, apenas.
D)
III, apenas.
E)
I e II, apenas.

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando