Prévia do material em texto
Questão 1/10 - Estrutura de Dados
Uma função que implementa parte do algoritmo merge sort pode ser vista abaixo. Todo o resto do algoritmo foi omitido para
que analisemos somente este método. O algoritmo completo pode ser visto no material PDF da Aula 2.
No código, inicio e fim são variáveis inteiras que correspondem a posições no vetor de dados, parteinteira significa truncar em
zero casas decimais o respectivo cálculo da linha 6 e intercala refere-se a uma função que realiza a ordenação neste método.
1. Função mergesort(X, inicio, fim)
2. Var
3. Meio: inteiro
4. Inicio
5. Se (inicio < fim) então
6. Meio <- parteinteira((inicio + fim) / 2)
7. mergesort(X, inicio, meio)
8. mergesort(X, meio + 1, fim)
9. Intercala(X, inicio, fim, meio)
10. Fimse
11. funfunção
A assumindo que a dimensão do vetor de dados X é 10, e que a primeira chamada da função mergesort foi realizada com os
seguintes parâmetros: Função mergesort(X, 0, 9).
Acerca deste algoritmo, assinale a alternativa INCORRETA:
Nota: 10.0
A Na segunda instância aberta da função mergesort na memória do programa, a variável inicio vale zero e a variável meio vale 2.
B Na primeira instância aberta da função mergesort na memória do programa, a variável meio corresponde ao valor 4.
C Na segunda instância aberta da função mergesort na memória do programa, a variável inicio vale zero e a variável fim vale 2.
Você acertou!
Fim vale 4.
D Na terceira instância aberta da função mergesort na memória do programa, a variável inicio vale zero e a variável fim vale 2.
E Na primeira instância aberta da função mergesort na memória do programa, a variável inicio vale zero e a variável fim vale 9.
Questão 2/10 - Estrutura de Dados
Uma implementação do algoritmo de ordenação do tipo bubble sort pode ser visto abaixo. As partes que envolvem impressão
de dados na tela e leitura de dados foram omitidas para um melhor entendimento do que é necessário na questão.
X[TAMANHOVETOR], i, j, aux: inteiro
para i de 1 até TAMANHOVETOR faça
para j de 0 até (TAMANHOVETOR - 2) faça
se (X[j] > X[j + 1]) então
aux <- X[j]
X[j] <- X[j + 1]
X[j + 1] <- aux
fimse
fimpara
fimpara
Acerca deste algoritmo, assinale a alternativa CORRETA:
Nota: 10.0
A O algoritmo apresentado no exercício realizado a ordenação de dados numéricos, inteiros, em ordem decrescente.
Ordenação é crescente.
B As linhas de código que correspondem a troca dos valores usando uma variável auxiliar poderiam ser também escritas da seguinte maneira:
aux <- X[j+1]
X[j+1] <- X[j]
X[j] <- aux
Você acertou!
AULA 2 – TEMA 2. CORRETO.
C Se precisarmos ordenar dados não numéricos, como caracteres, precisaremos repensar em toda a lógica do bubble sort, não sendo possível adaptar o código facilmente.
Basta adaptarmos a linha da condicional para funcionar com outro tipo de dado.
D Não é possível implementar o bubble sort com laços de repetição do tipo enquanto.
É possível implementar com qualquer tipo de laço, para, enquanto ou repita.
E A complexidade deste algoritmo, para o pior caso, é O(logn).
Complexidade O(n²).
Questão 3/10 - Estrutura de Dados
Filas apresentam características de inserção e remoção na estrutura de dados seguindo a regra do primeiro que entra é o
primeiro que sai. Observe o código da fila abaixo construída utilizando listas encadeadas. O código realiza a inserção de um
novo elemento nesta fila.
1. NovoElemento->dado = numero
2. se (Head == NULO) então
3. Head = NovoElemento
4. Senão
5. ElementoVarredura = Head
6. enquanto (ElementoVarredura->prox <> NULO)
7. ElementoVarredura = ElementoVarredura->prox
8. Fimenquanto
9. ElementoVarredura->prox = NovoElemento
10. NovoElemento->prox = NULO
11. Fimse
Considerando que NovoElemento é um novo elemento que será inserido nesta fila, ElementoVarredura é uma variável que
servirá para localizar o local de inserção, Head é o elemento que está no início da fila, assinale a alternativa CORRETA
acerca de filas implementadas com listas encadeadas:
Nota: 10.0
A O último elemento da lista encadeada deverá conter um ponteiro nulo, conforme indicado na linha 9.
Na linha 10.
B As linhas 6, 7 e 8 indicam nos dizem que, para realizar a inserção, precisamos varrer até localizarmos o último elemento, o qual não poderá conter um ponteiro nulo.
O último conterá um ponteiro nulo.
C Se o head estiver nulo, significa que podemos inserir um elemento após o head, mesmo que ele esteja nulo
Head nulo significa inserir no local do próprio head.
D A varredura pela posição de inserção inicia no primeiro elemento da lista, conforme indicado na linha 5.
Você acertou!
Correto.
E Não seria possível substituir o laço de repetição enquanto por uma para-faça devido a condição de parada aplicada.
É sempre possível substituir um laço de repetição por outro, basta fazer as devidas adaptações.
Questão 4/10 - Estrutura de Dados
No primeiro assunto de nossa disciplina investigamos o que são estruturas de dados e como podemos classificá-las em tipos.
Acerca deste assunto, assinale a alternativa INCORRETA:
Nota: 10.0
A Um dado que pode ser decomposto em partes mais simples, é considerado um dado estruturado e, portanto, uma estrutura de dados.
B Os tipos de dados manipulados por um algoritmo podem ser classificados em duas categorias distintas: os atômicos, que são dados indivisíveis, e os dados compostos,
que podem ser divisíveis em mais partes menores.
C Podemos classificar uma estrutura de dados como sendo do tipo homogênea (como registros) ou do tipo heterogênea (como vetores e matrizes).
Você acertou!
AULA 1 – TEMA 1. Podemos classificar uma estrutura de dados como sendo do tipo heterogênea (como registros) ou do tipo homogênea (como vetores e matrizes).
D Uma estrutura homogênea é aquela cujo tipo dos dados nela armazenados são de um único tipo, como inteiro, real, caractere ou lógico
E Uma estrutura contendo dados do tipo caractere e do tipo real pode ser considerada uma estrutura de dados heterogênea.
Questão 5/10 - Estrutura de Dados
O algoritmo abaixo foi desenvolvido empregando uma lógica iterativa:
Função Calcula (n: inteiro, x: inteiro): inteiro
y: inteiro
para i de 0 até n faça
se (x < 0) então
para i de 0 até n faça
y = y + 1
fimpara
senão
para i de 0 até x faça
y = y + 1
fimpara
fimse
fimpara
retorne y
Fimfunção
Acerca ao algoritmo acima, e trabalhando com os conceitos de complexidade assintótica e recursividade, assinale a
alternativa CORRETA:
Nota: 0.0
A A função contém três laços de repetição, sendo que todos os três laços podem acabar sendo executados cada vez que esta função por chamada.
Como o valor de x recebido como parâmetro nunca muda dentro da mesma chamada da função, teremos somente 2 laços sendo executados por vez devido a condicional composta.
B A complexidade da função, para o pior caso será O(n³).
Como temos somente 2 laços aninhados, a complexidade será O(n²).
C A função não realiza chamadas de si mesma, portanto pode ser considerada uma função recursiva.
Uma função recursiva é a que realizada chamadas de si mesma.
D Caso exista a possibilidade de implementação deste algoritmo usando uma função recursiva, e sem uso de laços de repetição, a complexidade em tempo de execução da
implementação irá melhorar.
AULA 1 – TEMA 3, 4 E 5. Sim, pois implementando com recursividade teremos uma complexidade atrelada a um crescimento logarítmico.
E Caso substituíssemos todos os laços de repetição do tipo para, por laços do tipo enquanto, o desempenho do algoritmo em tempo de execução irá melhorar
significativamente,uma vez que o laço enquanto tem um custo inferior ao do para.
O custo de todos os três tipos de laços de repetição é o mesmo na análise de complexidade e, virtualmente não faz diferença qual você utiliza.
Questão 6/10 - Estrutura de Dados
Uma função que implementa parte do algoritmo quick sort pode ser vista abaixo. Todo o resto do algoritmo foi omitido para
que analisemos somente este método. O algoritmo completo pode ser visto no material PDF da Aula 2.
No código, a função chamada de particao refere-se à função que localiza um pivô no vetor de dados e faz as respectivas
trocas dos valores, ordenando seguindo algum critério.
No código, vet é o vetor de dados, e troca é a função que realiza uma troca entre dois valores destoantes utilizando uma
variável auxiliar.
1. int particao(int vet[], int p, int u)
2. {
3. int pivo, pivo_pos, i, j;
4. pivo_pos = (p + u) / 2;
5. pivo = vet[pivo_pos];
6.
7. i = p - 1;
8. j = u + 1;
9. while (i < j)
10. {
11. do
12. {
13. j--;
14. } while (vet[j] > pivo);
15.
16. do
17. {
18. i++;
19. } while (vet[i] < pivo);
20.
21. if (i < j)
22. troca(vet, i, j);
23. }
24. return j;
25. }
Acerca deste algoritmo, assinale a alternativa INCORRETA:
Nota: 10.0
A A variável pivo_pos localiza a posição a qual conterá o valor de referência para comparações com todos os outros valores do vetor.
B Na linha 11 até a linha 14 comparamos o pivô com todos os valores ao lado direito do mesmo. Caso um valor seja menor que o pivô, ele deve ser colocado para uma
posição anterior a do pivô, ou no máximo, no local do pivô.
C Na linha 16 até a linha 19 comparamos o pivô com todos os valores ao lado esquerdo do mesmo. Caso um valor seja maior que o pivô, ele deve ser colocado para uma
posição posterior a do pivô, ou no máximo, no local do pivô.
D A troca (linha 21 e 22) pode acontecer entre um valor do lado esquerdo e do lado direito, ou entre o próprio pivô e um dos valores destoantes de cada um dos lados.
E Na linha 4 acessamos a posição do pivô no vetor e na linha 5 acessamos a posição correspondente do vetor conforme calculado na linha 4.
Você acertou!
Primeiro localizamos a posição (linha 4) e depois o valor daquela posição (linha 5).
Questão 7/10 - Estrutura de Dados
No terceiro assunto da disciplina estudamos a estrutura de dados do tipo lista encadeada. O código abaixo representa a
inserção em uma lista encadeada.
1. NovoElemento->dado = numero
2. se (Head == NULO) então
3. Head = NovoElemento
4. Head->prox = NULO
5. Senão
6. NovoElemento->prox = Head
7. Head = NovoElemento
8. fimse
Considerando que NovoElemento é um novo elemento que será inserido nesta lista e Head caracteriza o primeiro elemento
da lista. Assinale a alternativa CORRETA sobre este algoritmo.
Nota: 10.0
A O algoritmo apresentado representa uma inserção no final de uma lista encadeada simples, pois um laço faz a varredura até localizar o final da lista e insere o novo
elemento.
Não existe laço que varre até o final da lista.
B O algoritmo apresentado representa uma inserção no início de uma lista encadeada dupla, pois a linha 6 mostra o novo elemento apontando para o Head.
A lista não é do tipo simples.
C O algoritmo apresentado representa uma inserção no início de uma lista encadeada simples, pois a linha 6 mostra o novo elemento apontando para o Head.
Você acertou!
CORRETO – AULA 3 – TEMA 2.
D O algoritmo apresentado representa uma inserção no final de uma lista encadeada dupla, pois um laço faz a varredura até localizar o final da lista e insere o novo
elemento.
Não existe laço que varre até o final da lista e alista é simples.
E Baseado no algoritmo apresentado, podemos afirmar que este código pertence ao de uma lista encadeada simples e circular.
Não podemos afirmar que a lista é circular, pois só saberemos caso víssemos o código de inserção no final da lista.
Questão 8/10 - Estrutura de Dados
No terceiro assunto da disciplina estudamos a estrutura de dados do tipo lista encadeada. O código abaixo representa a
inserção em uma posição específica da lista encadeada simples.
1. NovoElemento->dado = numero
2. se (posicao == 0) então
3. Head = NovoElemento
4. Head->prox = NULO
5. Senão
6. ElementoVarredura = Head
7. para i de 0 até posicao faça
8. ElementoVarredura = ElementoVarredura->prox
9. Fimpara
10. ElementoAuxiliar = ElementoVarredura->prox
11. ElementoVarredura->prox = NovoElemento
12. NovoElemento->prox = ElementoAuxiliar
13. Fimse
Considerando que NovoElemento é um novo elemento que será inserido nesta lista, ElementoVarredura é uma variável que
servirá para localizar o local de inserção, ElementoAuxiliar é uma variável temporária para auxiliar na inserção do dado, Head
caracteriza o primeiro elemento da lista e prox é o ponteiro para o próximo elemento da lista. Assinale a alternativa
INCORRETA sobre este algoritmo.
Nota: 10.0
A Nas linhas 7 a 9 temos o laço de repetição que localiza a posição em que o elemento será inserido.
B Na linha 8, a variável ElementoVarredura salta de elemento em elemento da lista, sempre utilizando como referencia o ponteiro para o próximo elemento.
C Nas linhas 10, 11 e 12 fazemos uma troca entre 2 valores da lista encadeada utilizando uma variável auxiliar.
Você acertou!
Errado, pois não temos uma troca, mas sim a inserção do novo elemento.
D Na linha 10 uma variável auxiliar armazena temporariamente o elemento subsequente ao da posição desejada para inserção.
E Na linha 12, o novo elemento, agora já inserido na respectiva posição da lista, aponta para o elemento armazenado na variável auxiliar, que corresponde ao elemento
subsequente ao da posição inserida.
Questão 9/10 - Estrutura de Dados
No terceiro assunto de nossa disciplina estudamos uma nova estrutura de dados denominada de LISTA ENCADEADA. Um
tipo de lista encadeada é a chamada de LISTA ENCADEADA DUPLA, ou LISTA DUPLAMENTE ENCADEADA.
Acerca de listas encadeadas simples, assinale a alternativa CORRETA:
Nota: 10.0
A Uma lista encadeada dupla só permite a inserção no início desta lista.
Permite em qualquer posição.
B Uma lista encadeada dupla conterá, em cada elemento, dois ponteiros de endereços. Um endereço corresponderá ao primeiro elemento da lista e o outro endereço ao
último elemento da lista.
Um endereço é do elemento imediatamente subsequente e do anterior, e não do primeiro e último.
C Uma lista encadeada dupla circular conterá em seu último elemento, o endereço do primeiro elemento da lista. E conterá no seu primeiro elemento, o endereço do último
elemento da lista. Fechando dois círculos.
Você acertou!
CORRETO.
D Os dados de uma lisa dupla podem ser acessados mais rapidamente que uma simples, devido ao emprego de um ponteiro a mais.
Os ponteiros nada impactam no tempo de acesso da lista.
E Uma lista encadeada dupla ocupa o dobro de memória do programa em relação a uma lista simples, pois precisa armazenar duas vezes os dados de cada elemento.
O fato de existir um ponteiro a mais não impacta significativamente a ponto de dobra o uso de memória.
Questão 10/10 - Estrutura de Dados
Assuma um vetor de dimensão 10 com dados numéricos e inteiros colocados na seguinte ordem:
| 05 | 07 | 08 | 14 | 24 | 29 | 56 | 77 | 78 | 88 |
Suponha que você deseja implementar um algoritmo de busca para localizar algum dado neste vetor já ordenado de maneira
crescente. Você resolve testar a busca sequencial e a busca binária.
Acerca destes algoritmos e analisando o vetor acima, assinale a alternativa CORRETA:
Nota: 10.0
A No algoritmo de busca sequencial, o valor 24 seria localizado na 6ª tentativa, se fizermos uma varredura da esquerda para a direita.
Na 5ª tentativa.
B No algoritmo de busca binária, o valor 24 seria localizadona 3ª tentativa.
Na 1ª tentativa.
C No algoritmo de busca sequencial, o valor 77 seria localizado mais rapidamente que se comparado com a busca binária.
Binária se sairia mais rápida.
D No algoritmo de busca sequencial, o valor 07 seria localizado mais rapidamente que se comparado com a busca binária.
Você acertou!
CORRETO. Levará menos iterações.
E Em nenhum cenário de busca o algoritmo sequencial irá localizar o valor antes da busca binária.
É possível que sim, a sequencial ache antes. Dependerá o valor buscado e onde ele se localizado no vetor.