Baixe o app para aproveitar ainda mais
Prévia do material em texto
ESTRUTURA DE DADOS (1) Preciso fazer uma relação de tudo o que levar em minha viagem de mochila pela Europa. A estrutura de dados mais adequada para armazenar tudo que preciso levar é ... Grafo Lista árvore Fila Pilha 2. Observe o trecho do programa em C++ abaixo e, após, entrar com os valores sugeridos para sua execução assinale a alternativa que representa a resposta final. cin >> a; cin >> b; cin >> c; cin >> d; cout << a; cout << b; cout << c; cout << d; cout << d; cout << c; cout << b; cout << a; Após a impressão dos valores pela ordem teremos uma fila e uma pilha. Após a impressão dos valores pela ordem teremos uma pilha e uma fila. Após a impressão dos valores pela ordem teremos duas pilhas. Após a impressão dos valores pela ordem teremos uma fila e um grafo. Após a impressão dos valores pela ordem teremos duas filas. 3. Os irmãos Silva irão viajar por vários países da Europa e por isso, traçaram no mapa o percurso que farão, de cidade a cidade. Qual a estrutura de dados mais adequada para modelar este problema ? Lista Fila Grafo Pilha Árvore 4. Preciso cadastrar todos os interessados em meu novo curso de programação. Qual a estrutura de dados mais adequada para modelar este problema, visto que não há qualquer preocupação com ordem de chegada ou saída de aluno da turma. Lista Fila Pilha Grafo Árvore 5. As estruturas de dados podem ser caracterizadas como sendo uma forma organizada de armazenar dados ou informações na memória, de modo a otimizar o acesso a estes. Muitas vezes existem algoritmos de manipulação de dados associados a estas estruturas. Verifique as seguintes sentenças: I-Filas são estruturas que recuperam os dados na ordem direta em que estes foram armazenados. II-As Pilhas são estruturas que recuperam os dados na ordem reversa em que estes foram armazenados. III-As Pilhas são estruturas que recuperam os dados na ordem direta em que estes foram armazenados. IV-As Filas são estruturas que recuperam os dados na ordem reversa em que estes foram armazenados. Marque a alternativa CORRETA: As alternativas II e IV estão corretas. Todas as alternativas estão corretas. As alternativas III e IV estão corretas. As alternativas I e III estão corretas. As alternativas I e II estão corretas 6. Das estruturas de dados a seguir aquela que NÃO é uma estrutura linear é : Grafo. Vetor. Lista. Pilha. Fila. Explicação: Lineares : lista, pilha, fila, deque. Com ou sem vetor, que é linear. Não lineares : árvore e grafo. 7. As estruturas de dados são utilizadas para manter dados ou informações organizados na memória, o que possibilita a otimização do uso destes dados. Porém, as estruturas guardam características especiais na manipulação destes dados, assim deve-se escolher a estrutura certa ou mais adequada para uma determinada aplicação. Portanto marque a opção que representa a melhor estrutura, quando se tem como requisitos principais o acesso aleatório aos dados e alocação destes de forma contínua na memória. Lista Encadeada Lista Sequencial Pilha Encadeada Fila Sequencial Pilha Sequencial 8. Para organizar as fotos de minha família com os ancestrais de várias gerações, minha filha usou uma estrutura de dados que é ..... Assinale a opção certa. árvore pilha lista grafo fila 1a Questão (Ref.:201808354233) Acerto: 1,0 / 1,0 Estão entre algumas das possíveis formas de estruturas de dados: Árvores binárias, pilhas, algoritmos Grafos, funções, fila Árvores binárias, pilhas, vetores cout, Funções, vetores Listas, vetores, cin Respondido em 28/10/2019 11:45:48 2a Questão (Ref.:201807820303) Acerto: 1,0 / 1,0 Qual estrutura de dados não linear que é utilizada na implementação de Redes de Computadores, na Computação Gráfica, em modelagem de circuitos digitais e etc. E que se caracteriza por apresentar um conjunto de nós e conexões entre eles. Pilhas Encadeadas Vetores Filas Encadeadas Listas Encadeadas. Grafos Respondido em 28/10/2019 11:51:56 3a Questão (Ref.:201807462755) Acerto: 1,0 / 1,0 Considere a seguinte função: void dobro(int x) { x = 2 * x; } Qual valor será impresso na tela quando o seguinte programa principal for executado? int main() { int n; n = 5; dobro(n); cout << n; return 0; } 0 20 Haverá um erro de compilação 10 5 Respondido em 28/10/2019 11:54:21 4a Questão (Ref.:201808106141) Acerto: 1,0 / 1,0 Sobre funções, é correto afirmar: São blocos de instruções que são executados quando são chamadas em alguma parte do programa. Obrigatoriamente devem possuir parâmetros. Não podem ser chamadas dentro de outras funções. Obrigatoriamente devem retornam algum valor. Não devem conter variáveis locais em seu código. Respondido em 28/10/2019 12:20:39 5a Questão (Ref.:201807845553) Acerto: 1,0 / 1,0 Pode-se definir uma estrutura heterogênea como sendo um conjunto de elementos, geralmente, agrupados sob uma lógica e associados por um nome. Esses elementos podem ser variáveis simples, matrizes ou ainda outras estruturas. Seja a definição de uma estrutura como: struct aluno { string nome; float nota; }; Suponha ainda que exista um vetor desta estrutura, definido como: aluno vet [100]; Marque a alternativa em que é atribuída de forma correta a nota 5.7 para o décimo primeiro elemento deste vetor. vet[10].aluno.nota=5.7 ; aluno.vet[10]=5.7; aluno.vet[10].nota=5.7; vet[10].nota=5.7; vet[10]=aluno.5.7; Respondido em 28/10/2019 11:56:07 6a Questão (Ref.:201807871342) Acerto: 1,0 / 1,0 Pode-se definir uma estrutura heterogênea como sendo um conjunto de elementos, geralmente, agrupados sob uma lógica e associados por um nome. Esses elementos podem ser variáveis simples, matrizes ou ainda outras estruturas. Seja a definição de uma estrutura como: struct aluno { string nome; float nota; }; Suponha ainda que exista um vetor desta estrutura, definido como: aluno vet [ 100]; Marque a alternativa em que é atribuída de forma correta a nota 5.7 para o décimo primeiro elemento deste vetor. vet[10]=aluno.5.7; aluno.vet[10]=5.7; aluno.vet[10].nota=5.7; vet[10].aluno.nota=5.7 ; vet[10].nota=5.7; Respondido em 28/10/2019 12:03:02 7a Questão (Ref.:201807231446) Acerto: 1,0 / 1,0 Em uma pesquisa sequencial a lista deve estar? ordenada somente do início até a metade da lista. desordenada somente da metade da lista até o final. sempre desordenada. ordenada ou desordenada. ordenada somente o primeiro da lista. Respondido em 28/10/2019 12:04:12 Gabarito Coment. 8a Questão (Ref.:201807232003) Acerto: 1,0 / 1,0 O processo de rearranjar um conjunto de dados em uma ordem crescente ou decrescente é chamado de ordenação. Existem várias técnicas de ordenação, entretanto a técnica que procura o menor valor entre todos os elementos do vetor e troca-o pelo primeiro elemento; para os n - 1 elementos restantes, determinação do elemento de menor valor e troca pelo segundo elemento e assim sucessivamente, é chamado de: Inserção Hash Seleção Binária Bolha Respondido em 28/10/2019 12:05:41 Gabarito Coment. 9a Questão (Ref.:201807879537) Acerto: 1,0 / 1,0 Considere uma lista com n livros, em que cada livro é modelado pela struct : struct Livro { string titulo, editora, autor;float preco; }; A função X abaixo void X (Livro v[ ], int &n, Livro L) { v[n] = L; n++; cout << "Operação realizada com sucesso."; } implementa a operação de : Substituição Busca Inserção Ordenação por inserção Inicialização Respondido em 28/10/2019 12:11:05 Gabarito Coment. 10a Questão (Ref.:201807231994) Acerto: 1,0 / 1,0 As estruturas de dados em programação são muito utilizadas para tornar o acesso aos dados mais eficiente e organizado. A estrutura de dados considerada mais simples e tem como característica apresentar apenas uma dimensão é: Registro Função Vetor Matriz Variável Respondido em 28/10/2019 12:13:08 Gabarito Coment. 1a Questão Em relação a estruturas de dados, avalie a correspondência existente entre as estruturas de dados Lineares e Não Lineares com suas respectivas coleções de dados. A correta associação entre os elementos das duas tabelas é: a1, b2, c1, d1. a1, b1, c2, d1 a2, b2, c1, d2. a1, b1, c2, d2. a2, b1, c2, d1. Respondido em 31/10/2019 19:11:24 Explicação: Por definição : pilha, fila, lista, vetor são estruturas lineares. Já árvore e grafos são estruturas de dados não lineares. Gabarito Coment. 2a Questão A forma correta para imprimir o valor do último elemento de um vetor v com n posições é: cout << v[ultimo]; cin >> v[-1]; cout << v[n-1]; cout << v[n]; cout << v[n+1]; Respondido em 31/10/2019 19:13:26 3a Questão Estão entre algumas das possíveis formas de se estruturar dados: Grafos, lista ordenada, algoritmos. Lista encadeada, vetores, algoritmos. Grafos, lista ordenada, vetores. Grafos, algoritmos, fila. Algoritmos, lista ordenada, vetores. Respondido em 31/10/2019 19:12:48 Gabarito Coment. 4a Questão Na maioria dos sistemas operacionais, os arquivos são organizados hierarquicamente em um esquema de diretórios (pastas) e sub-diretórios. Qual a estrutura mais adequada para representar este problema ? pilha lista árvore grafo fila Respondido em 31/10/2019 19:13:45 Gabarito Coment. 5a Questão Preciso fazer uma relação de tudo o que levar em minha viagem de mochila pela Europa. A estrutura de dados mais adequada para armazenar tudo que preciso levar é ... lista grafo fila árvore pilha Respondido em 31/10/2019 19:13:55 Explicação: Conforme gabarito e aula 1. 6a Questão Qual estrutura de dados é mais adequada para armazenar a estrutura do diretório do sistema de arquivos de um sistema operacional? Grafo Lista Fila Árvore Pilha Respondido em 31/10/2019 19:14:21 7a Questão Diferentes tipos de estrutura de dados são adequadas a diferentes tipos de aplicação e algumas são altamente especializadas, destinando-se a algumas tarefas específicas. Dessa forma a definição de Estrutura de Dados está expressa na alternativa: É um modo de utilização de dados nos programas de computador. São os nomes dados as variáveis na montagem de uma rotina. É um modo de deleção de dados em um computador. É um modo particular de armazenamento e organização de dados em um computador de modo que possam ser usados de modo eficiente. É um modo de distribuição e organização de dados em uma rede de computador de modo que possam ser usados de modo eficiente. Respondido em 31/10/2019 19:15:50 8a Questão Assinale a alternativa correta sobre tipos abstratos de dados: Um tipo abstrato de dados descreve, além do que se pode fazer com os dados, como as operações serão efetivamente implementadas. É fundamental que os tipos abstratos de dados proponham um conjunto eficiente de algoritmos para realização de suas operações. Um tipo abstrato de dados é composto por um modelo de dados e um conjunto de operadores definidos sobre esses dados. Um tipo abstrato de dados deve sempre ser representado por meio dos recursos específicos de uma linguagem de programação. Um tipo abstrato de dados é um modo particular de armazenamento e organização de dados em um computador de modo que possam ser usados eficientemente. FUNÇÕES 1. No programa abaixo, diga em que área de memória serão alocados os elementos de dados y e r, respectivamente. #include using namespace std; int x, y; float media( float a, float b ) { float tmp; tmp = (a + b ) / 2.0; return ( tmp ); } int main() { float r; cout<<"Informe 2 valores: "; cin>>x>> y; r = media( x, y ); cout<<"\nMedia = "<< r<<"\n"; system ("pause"); } ( ) área de pilha / área de registro ( ) área de dados globais / área de registro ( ) área de dados globais / área de pilha ( ) área de registro / área de dados globais ( ) área de registro / área de pilha 2. Considere as seguintes afirmativas : I) Os vetores em C++, quando passados como parâmetros de funções, são obrigatoriamente passados "por valor" e não "por referência". II) Variáveis globais são um recurso adequado para troca de informações entre funções distintas. III) Caso uma função necessite retornar mais de um valor ao programa que a chamou, deve fazê-lo usando parâmetros passados "por valor". As afirmativas corretas são: Apenas II Apenas III Apenas I e II Nenhuma está correta Apenas I 3. 1) O que será impresso pela função Eureka ? Assinale a opção correta. void Eureka() { for (int i = 1; i <= 10; i++) if (i % 2 == 0) cout << i << " "; else if (i % 7 == 0) return; } Nada é impresso, pois a função não compila. Para a função compilar, deveria ter int no lugar de void, já que há return na função. Nada é impresso, pois a função não compila. A função não deveria usar return, pois não está de acordo com o uso de void. 2 4 6 8 10 2 4 6 2 4 6 8 4. As variáveis em programação são utilizadas para armazenar um valor de determinado tipo em um espaço reservado na memória. Em algumas linguagens de programação podemos declarar, ou seja, reservar um espaço na memória, fora do escopo da função principal, e fora do escopo de qualquer outra função. Ao fazer a declaração desta forma estamos declarando uma variável do tipo: Inteiro Local Constante Global Real 5. Ao definirmos uma função, podemos afirmar: I Toda função tem parâmetros II Quando nada retorna, o tipo é void III Quando todos os parâmetros são do mesmo tipo, é suficiente usar o tipo uma vez e separar os nomes dos parâmetros por vírgulas IV Na passagem por valor, o endereço da variável da função chamadora é passado para a função chamada Após uma análise das afirmativas acima, escolha a opção correta. Somente II III e IV estão corretas Somente II está correta Somente II e IV estão corretas Somente I e II estão corretas Somente II e III estão corretas 6. Considere o trecho de um programa escrito em C++ : int func1 (long num) { int n, na=1; while (num / 10 != 0){ na += 1; num /= 10; } return na; } main() { cout << func1 (132041); } Marque a opção correta que mostra o que é impresso na tela. 2 6 3 4 1 7. Funções são semelhantes aos procedimentos, exceto que uma função sempre retorna um valor. Um exemplo de função seria o conjunto de instruções para calcular o fatorial de um número e após a função ser executada, ela deve retornaro fatorial do número pedido. Marque a opção que representa um protótipo de função válido. nome tipo(parametros); void float(int a, int b); tipo parametros(parametros); retorno nomeFuncao(parametros); tipo parametros(int a, int b); 8. Caso uma estrutura homogênea (vetor) seja passada como parâmetro para uma função, então: Essa passagem pode ser "por valor" ou "por referência" Haverá um erro de compilação, pois vetores não podem ser parâmetros de funções Essa passagem é "por referência" Todos os valores contidos no vetor são copiados para a função Essa passagem é "por valor" 5. Em programação podemos utilizar um recurso que modulariza o programa chamado função. As funções precisam ser ativadas para que possam ser executadas. Para isso, é necessário chamar a função pelo seu nome e enviar, quando necessário, os valores respectivos para os parâmetros de entrada. Ao enviar os valores para os parâmetros de entrada, o programa pode fazer uma cópia deste valor ou trabalhar em um endereço enviado. Quando se envia o endereço estamos ativando a função por meio de: Envio de inteiro. Ponteiros. Passagem por valor. Envio de valor. Registro. 4. Sobre funções, é correto afirmar: Obrigatoriamente devem possuir parâmetros. Não podem ser chamadas dentro de outras funções. São blocos de instruções que são executados quando são chamadas em alguma parte do programa. Não devem conter variáveis locais em seu código. Obrigatoriamente devem retornam algum valor. 3. Considere a seguinte função: void dobro(int x) { x = 2 * x; } Qual valor será impresso na tela quando o seguinte programa principal for executado? int main() { int n; n = 5; dobro(n); cout << n; return 0; } 10 20 5 0 Haverá um erro de compilação 2. Na passagem por ____________________ , o endereço da variável da função chamadora é passado para a função chamada e, dessa forma, o valor poderá ser alterado, ou não. referência número valor void caracter 1. Considere a função abaixo: int func (int a, int &b) { a = b - a; b = a * 2; a = b * 2; return a; } Considere também o seguinte trecho de código no main : int x=2, y=3, z; z = func (x,y); cout << x << "; " << y<< "; " << z; Após a execução do cout, seria impresso: 4; 2; 4 1; 3; 1 2; 2; 1 1; 2; 4 2; 2; 4 ESTRUTURAS HETEROGENEAS 1. Qual das seguintes estruturas de dados é classificada como heterogênea? Pilha Vetor Registro Loop Fila 2. Marque a afirmativa correta para a "Inserção em lista linear sequencial ordenada". Consiste em fazer uma busca em um vetor desordenado, dividindo o espaço de busca ao meio e verificando se o dado está no meio ou, antes do meio ou depois do meio. Consiste em fazer uma busca em um vetor já ordenado, dividindo o espaço de busca ao meio e verificando se o dado está no meio ou, antes do meio ou depois do meio. É o processo pelo qual um conjunto de dados é colocado em uma ordem crescente ou decrescente. Consiste em adicionar um valor no vetor, alterando a ordem existente e ajustando o total de elementos. Consiste em adicionar um valor no vetor, mantendo a ordem existente e ajustando o total de elementos. 3. Em C++, quando uma variável é declarada como uma struct, o acesso para atribuição e leitura dos membros (campos) deste registro se dá pelo operador : ∙ (ponto). -> (seta). * (asterisco). , (vírgula). & (e comercial ou eitza). 4. o programa de computador necessita preencher uma lista de alunos (nome e nota) até que a lista esteja cheia. Sabe-se que a lista tem capacidade para 25 alunos. Utilizando agregados heterogêneos, qual o trecho de código que exibe a melhor forma de solucionar este problema? for (int i = 0; i < 25; i++) { cin >> lista->nome; cin >> lista->nota; } for (int i = 0; i <= 25; i++) { cin >> lista[i].nome; cin >> lista[i].nota; } for (int i = 0; i < 25; i++) { cin >> lista[i].nome; cin >> lista[i].nota; } for (int i = 0; i < 25; i++) { cin >> lista[i]->nome; cin >> lista[i]->nota; } int i = 0; while( i < 25) { cin >> lista[i].nome; cin >> lista[i].cargo; i ++; } 5. Pode-se definir uma estrutura heterogênea como sendo um conjunto de elementos, geralmente, agrupados sob uma lógica e associados por um nome. Esses elementos podem ser variáveis simples, matrizes ou ainda outras estruturas. Seja a definição de uma estrutura como: struct aluno { string nome; float media; }; Suponha ainda que exista um vetor desta estrutura, definido como: aluno vet [ 10]; Marque a alternativa em que é atribuída de forma correta a media 6.0 para o quarto elemento deste vetor. aluno[3].media=6.0; vet[3].aluno=6.0; aluno[10]=6.0; vet[3].media=6.0; aluno[3].10=6.0; 6. Marque a opção correta, considerando struct Livro { int codigo; float preco; } liv; liv.preco = 30.70; Livro->liv.codigo = 12345; liv->preco = 30.70; Livro.codigo = 12345; Livro.liv.codigo = 12345; 7. Pode-se definir uma estrutura heterogênea como sendo um conjunto de elementos, geralmente, agrupados sob uma lógica e associados por um nome. Esses elementos podem ser variáveis simples, matrizes ou ainda outras estruturas. Seja a definição de uma estrutura como: struct aluno { string nome; float nota; }; Suponha ainda que exista um vetor desta estrutura, definido como: aluno vet [100]; Marque a alternativa em que é atribuída de forma correta a nota 5.7 para o décimo primeiro elemento deste vetor. aluno.vet[10].nota=5.7; aluno.vet[10]=5.7; vet[10].aluno.nota=5.7 ; vet[10]=aluno.5.7; vet[10].nota=5.7; 8. Com relação à struct, é correto afirmar que : A struct é sempre definida dentro da main. Cada elemento da struct é chamado componente. Não é possível criar um vetor de structs, pois o vetor trabalha apenas com dados do mesmo tipo. Cada elemento da struct é chamado campo e cada campo deve ser, obrigatoriamente, de um tipo de dados distinto de outro campo. Cada elemento da struct é denominado membro ou campo, sendo que a struct pode armazenar elementos de tipos diferentes ou não. 3. Os métodos de ordenação são muito utilizados em estruturas de dados para facilitar a busca e a recuperação posterior de itens de conjuntos ordenados. Existem vários métodos de ordenação, por este motivo, marque corretamente a alternativa que apresenta o código do método de seleção. int ordena(float v[], float valor, int n) { int ini = 0, fim = n-1, meio; while (ini >= fim){ meio = ini/2; if (v[meio] == valor) return meio; if (valor < v[meio]) fim = meio -1; else ini = meio+1; } void ordena (int v[], int n){ int i, j, aux; for (j = 1; j < n; j++) for (i=j; i > 0 && v[i-1]> v[i]; i--){ aux = v[i-1]; v[i-1] = v[i]; v[i] = aux; } } int ordena(float v[], float valor, int n){ for (int i = 0; i < n; i++) if (v[i] == valor) return i; return -1; } void ordena(int v[], int n){ int i, j, menor, aux; for (j = 0; j < n-1; j++) { for (i = j+1; i < n; i++) { if (v[i] < v[j]) { aux = v[j]; v[j] = v[i]; v[i] = aux; } } } } int ordena(float v[], float valor, int n) { int ini = 0, fim = n -1, meio; while (ini <= fim){ meio = (ini + fim)/2; if (v[meio] == valor) return meio; if (valor < v[meio]) fim = meio -1; else ini = meio+1; } return-1; } 1. Dadas as afirmativas abaixo, identifique as corretas e marque a alternativa verdadeira. I- Vetores e matrizes servem apenas para construir agregados de dados heterogêneos. II- Registros em C++ são tipos de dados compostos formados por mais de um tipo de dados. III- Na Linguagem C++, "struct" é uma palavra reservada que serve para definir registros. IV- Registros são tipos de dados heterogêneos. estão corretas apenas as afirmativas I, II e III. estão corretas apenas as afirmativas I, III e IV. estão corretas apenas as afirmativas I, II e IV. todas as afirmativas estão corretas. estão corretas apenas as afirmativas II, III e IV. AULA 4 1. if(vet[j-1] > vet[j] ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } if(vet[j-1] < vet[j] ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } if(vet[j] < vet[j-1] ) { aux=vet[j]; vet[j-1]= vet[j]; vet[j-1]=aux; } if(vet[j] < vet[j-1] ) { aux=vet[j]; vet[j]< vet[j-1]; vet[j-1]=aux; } if(vet[j] == vet[j-1] ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } 2. Entre os diversos algoritmos de pesquisa existentes, certamente os mais famosos são os da pesquisa sequencial e o da pesquisa binária. A busca ou pesquisa sequencial pode ser aplicada em vetores independente destes estarem ordenados, entretanto a busca binária só se aplica em vetores ordenados. Seja o vetor A= {10,35,41,55,69,70,98}, suponha que o número 70 foi pesquisado pelo algoritmo da busca sequencial e também pelo algoritmo da busca binária, ambos algoritmos realizam testes nos elementos do vetor até achar o que procuram ou definirem que o elemento não se encontra no vetor. Sendo assim marque a alternativa que expressa o número de testes realizados pela busca sequencial e o número de testes realizados pela busca binária, respectivamente, até encontrarem o 70. 5 e 5 7 e 1 6 e 4 6 e 1 6 e 2 3. Analisando o trecho de código a seguir: inicio=0; fim= tamanho - 1; meio=(inicio+fim)/2; while(procura != nomeVetor[meio] && inicio != fim) { if(procura > nomeVetor[meio]) inicio=meio+1; else fim=meio; meio=(inicio+fim)/2; } if(nomeVetor[meio]==procura) cout<<"\n....: "< < outroVetor[meio]<<endl; else cout<<"\nDado nao encontrado\n";</endl; Pode-se afirmar que: trata-se da implementação do algortimo de busca sequencial trata-se da implementação do algortimo de ordenação por seleção. trata-se da implementação do algortimo de ordenação por inserção. trata-se da implementação do algortimo de busca binária. trata-se da implementação do algortimo de ordenação bolha. 4. Marque a afirmativa correta para a "inserção incremental". É um tipo de ordenação por intercalação Consiste em adicionar um valor no vetor, mantendo a ordem existente e ajustando o total de elementos. É um tipo de sequenciação por intercalação. Os pivôs são escolhidos aleatoriamente. A técnica é boa quando os dados ficam uniformemente distribuídos entre os seus compartimentos. 5. Suponha uma listagem, contendo número de inscrição e pontuação (ordenada pelo número de inscrição) dos candidatos para o cargo de Analista de Sistemas de uma grande empresa pública. São 1024 candidatos inscritos e o sistema implementado para consulta do resultado, permite busca binária ou busca sequencial pelo número de inscrição. O número máximo de comparações executadas se fosse utilizada a busca binária e se fosse utilizada busca sequencial, respectivamente, seria de: 9 e 9 1024 e 512 10 e 1024 10 e 10 9 e 10 6. O resultado do concurso para o cargo de uma empresa está armazenado em um vetor, que contém em cada um de seus elementos o número de inscrição, o nome e a nota obtida pelo candidato. Este vetor está ordenado pelo número de inscrição. Para realização de uma consulta que, dado um número de inscrição, apresenta o nome e nota do candidato, um programador utilizou um algoritmo de busca que realiza sucessivas divisões no vetor, comparando o número de inscrição procurado com o número de inscrição do candidato posicionado no meio do vetor. Se o candidato posicionado do meio do vetor tiver o número de inscrição igual ao número de inscrição procurado, a busca termina com sucesso. Caso contrário, se candidato posicionado do meio do vetor tiver número de inscrição menor que o procurado, então a busca continua na metade posterior do vetor. E finalmente, se candidato posicionado do meio do vetor tiver número de inscrição maior que o procurado, a busca continua na metade anterior do vetor. O algoritmo utilizado pelo programador trata-se do método denominado busca: binária. linear. por comparação. por contagem. randômica. 7. Os algoritmos de busca são muito utilizados em estrutura de dados. Sendo assim, o algoritmo que realiza a busca em vetores e que exige acesso aleatório aos elementos do mesmo e que parte do pressuposto de que o vetor está ordenado e realiza sucessivas divisões do espaço de busca comparando o elemento que se deseja com o elemento do meio do vetor, é chamado de: Tabela Hash Pesquisa ordenada Pesquisa sequêncial Pesquisa binária Pesquisa de seleção 8. Este vetor foi ordenado pelo método: Ordenação por inserção (insertion sort). Ordenação por seleção (selection sort). Quicksort. Método da bolha (bubble sort). Mergesort. 7. Estude atentamente o código a segir: int deciframe(int v[ ], int tam, int e){ int i = 0, f = tam -1, m; while ( i <= f ){ m = ( i + f ) / 2; if ( v[m] == e ) { return m; } if ( e < v[m] ) { f = m - 1; } else { i = m + 1; } } return -1; } Sabendo que a chamada da mesma foi feita com os parâmetros recebendo os seguintes valores, o que ela retornaria? v[10] = {0, 2, 4, 6, 8, 10, 20, 100} tam = 8 e = 0 -2 -1 1 0 2 6. Qual característica NÃO podemos atribuir a PESQUISA BINÁRIA. Quando o valor pesquisado é maior do que a chave do MEIO da lista, devemos dispensar a metade que vem antes do meio da lista. São realizadas sucessivas divisões da lista ao meio. É eficiente quando se trata de listas ordenadas A lista pode estar desordenada. A lista precisa estar ordenada. 5. Sabendo-se que o método de seleção também é um método de ordenação que baseia seu algoritmo em trocas entre os elementos de um vetor, se submetermos a sequencia de inteiros armazenada em um vetor inicialmente na seguinte ordem : 13, 23, 3, 8, 1. Pode-se dizer que quando o menor elemento do vetor alcançar sua posição final, a ordenação apresentada no vetor é: 1,8,3,23,13 1,3,23,8,13 1,13,23,8,3 1,23,3,8,13 1,23,13,8,3 4. Em uma pesquisa sequencial a lista deve estar? sempre desordenada. ordenada somente o primeiro da lista. ordenada ou desordenada. ordenada somente do início até a metade da lista. desordenada somente da metade da lista até o final. 3. Caso seja empregada uma busca binária em uma lista sequencial ordenada com 2048 valores, qual seria o número máximo de comparações para encontrar um valor que esteja na lista? 12 11 10 9 8 2. Com a utilização das estruturas de dados e seus tipos, em algumas situações é imprescindível a criação de funções que façam determinada verificação ou ação nestas estruturas. Dessa forma, analise a função abaixo e marque corretamente a alternativa que descreve as funcionalidades desta. int funcao(float v[], float vl,int n) { for (int i = 0; i < n; i++) if (v[i] == vl) return i; return -1; } Retorna -1 se o valor de n foi encontrado. Retorna -1 se o valor de vl estiver dentro de v. Retorna a posição de v se o valor vl foi encontrado. Resulta em erro, se o valor de vl não estiver dentro de v. Retorna o valor de vl se o valor n foi encontrado. 1. O seguinte trecho de programa abaixo representa qual tipo de estrutura de ordenação? void ordenar(float v[], int n) // n é o no. de elementos em v { int i , // índice aux, // auxiliar para troca trocou = true, fim = n - 1; while (trocou) { trocou = false; // sinaliza que é falso que trocou for (i = 0; i < fim; i++) { if (v[i] > v[i+1]) { aux = v[i]; v[i] = v[i+1]; v[i+1] = aux; // sinaliza que é verdadeiro que trocou trocou = true; } // fim if } // fim for fim--; // decrementa o fim } // fim while } // fim da função Mergesort Bublesort Heapsort Quicksort Shellsort 8. O processo de rearranjar um conjunto de dados em uma ordem crescente ou decrescente é chamado de ordenação. Existem várias técnicas de ordenação, entretanto a técnica que procura o menor valor entre todos os elementos do vetor e troca-o pelo primeiro elemento; para os n - 1 elementos restantes, determinação do elemento de menor valor e troca pelo segundo elemento e assim sucessivamente, é chamado de: Seleção Binária Bolha Inserção Hash 7. Sobre o funcionamento da busca binária, é correto afirmar que dividindo seu vetor em duas metades. Se o item for maior que o item que está na metade do vetor procure na primeira metade, ou seja, a da direita. Se o item for igual ao item que está na metade do vetor, o item não foi encontrado. Se o item for menor que o item que está na metade do vetor, procure na segunda metade, ou seja, a da direita. Se o item for menor que o item que está na metade do vetor, o item foi encontrado. Se o item for igual ao item que está na metade do vetor, o item foi encontrado. 6. Seja a seguinte função de ordenação: void ordena( int n, int v[]) { int i, j, x; for (j = 1; j < n; ++j) { x = v[j]; for (i = j-1; i >= 0 && v[i] > x; --i) v[i+1] = v[i]; v[i+1] = x; } } Pode-se dizer que é uma função de ordenação: Que utiliza o método inserção e realiza uma ordenação crescente nos elementos do vetor v. Que utiliza o método seleção e realiza uma ordenação decrescente nos elementos do vetor v. Que utiliza o método inserção e realiza uma ordenação decrescente nos elementos do vetor v. Que utiliza o método bolha e realiza uma ordenação crescente nos elementos do vetor v. Que utiliza o método seleção e realiza uma ordenação crescente nos elementos do vetor v. 5. Analise o seguinte trecho de algoritmo de ordenação de dados, cujos elementos estão dispostos em um vetor de nome v com n elementos. ... { int i, j, aux; for (j = 1; j < n; j++) for (i=j; i > 0 && v[i-1]> v[i]; i--) { aux = v[i-1]; v[i-1] = v[i]; v[i] = aux; } } Assinale o método ao qual o trecho de algoritmo pertence. Bolha Inserção Seleção Quicksort Heapsort 4. Nos métodos de ordenação interna, quais são aqueles classificados como tipo método simples? Insert Sort, Bubble Sort e Quick Sort Insert Sort, Bubble Sort e Shell Sort Selection Sort, Insert Sort e Bubble Sort Selection Sort, Shell Sort e Bubble Sort Shell Sort, Quick Sort e Heap Sort 3. Considere a seguinte função busca escrita em linguagem C++ : bool busca(int vetor[ ], int n, int tam) { int ini=0, mid; while (ini <= tam) { cout << " x "; mid = (ini + tam)/2; if (vetor[mid] == n) return true; else if (n > vetor[mid]) ini = mid+1; else tam = mid-1; } return false; } Qual a quantidade total de impressões da letra x nas buscas pelos números n = 4, n = 2 e n = 0 no vetor [1,2,3,4,5,6,7,8], sendo tam = 7 ? int vetor[] = {1,2,3,4,5,6,7,8}; busca(vetor, 4, 7); busca(vetor, 2, 7); busca(vetor, 0, 7); 6 8 9 4 5 2. Marque a afirmativa correta para a "Ordenação em Listas Lineares Sequenciais". Consiste em adicionar um valor no vetor, alterando a ordem existente e ajustando o total de elementos. Consiste em adicionar um valor no vetor, mantendo a ordem existente e ajustando o total de elementos. Consiste em fazer uma busca em um vetor já ordenado, dividindo o espaço de busca ao meio e verificando se o dado está no meio ou, antes do meio ou depois do meio. Consiste em fazer uma busca em um vetor desordenado, dividindo o espaço de busca ao meio e verificando se o dado está no meio ou, antes do meio ou depois do meio. É o processo pelo qual um conjunto de dados é colocado em uma ordem crescente ou decrescente. 1. Qual a importância de se entender a "ordenação" de dados ? A ordenação é a base na qual, muitos programas são construídos. Entendendo a ordenação, tem-se conhecimento para manter outros problemas. A ordenação é a base na qual, muitos algoritmos são construídos. Entendendo a ordenação, tem-se conhecimento para manter outros problemas. A ordenação é a base na qual, muitos algoritmos são construídos. Entendendo a ordenação, tem-se conhecimento para resolver outros problemas. A ordenação é a base na qual, muitos sistemas são construídos. Entendendo a ordenação, tem-se conhecimento para resolver outros problemas. A ordenação é a base na qual, muitos sistemas são construídos. Entendendo a ordenação, tem-se conhecimento para manter outros problemas. 8. Estude atentamente o código a segir: int deciframe(int v[ ], int tam, int e){ int i = 0, f = tam -1, m; while ( i <= f ){ m = ( i + f ) / 2; if ( v[m] == e ) { return m; } if ( e < v[m] ) { f = m - 1; } else { i = m + 1; } } return -1; } Sabendo que a chamada da mesma foi feita com os parâmetros: v[10] = {0, 2, 4, 6, 8, 10, 20, 100} tam = 8 e = -6 É sabido que a mesma retornaria o valor -1, porque: Seria o retorno do while É a posição do elemento e no vetor v É o módulo do valor de e Seria o retorno do segundo if Porque ele não achou o elemento na coleção 7. Qual papel do for mais interno na função ordena abaixo ? void ordena( int n, int v[]) { int i, j, x; for (j = 1; j < n; ++j) { x = v[j]; for (i = j-1; i >= 0 && v[i] > x; --i) v[i+1] = v[i]; v[i+1] = x; } } Encontrar o maior valor de x que deve ser inserido em v[0..j-1]. Encontrar o menor valor v[j] que deve ser inserido em v[0..j-1]. Encontrar o elmento a ser eliminado do vetor Encontrar o valor de v[j] deve em v[0..j-1]. Encontrar o ponto onde v[j] deve ser inserido em v[0..j-1]. 6. "Algoritmo de ordenação por trocas que varre um vetor um certo número de vezes, comparando os elementos vizinhos dois a dois. A cada varredura, se o par de elementos está em ordem crescente, nada é feito, caso contrário os elementos do par são permutados". Esta definição está descrevendo o algoritmo de ordenação conhecido por : SelectionSort QuickSort MergeSort BubbleSort InsertionSort 5. Os métodos de ordenação são muito utilizados para facilitar a recuperação posterior de itens ordenados. Existem vários métodos de ordenação, por esse motivo, assinale corretamente a alternativa que mostra o nome do método que utiliza a estratégia de ordenação por trocas de vizinhos e é considerado o método mais simples. Hash Binária Inserção Seleção Bolha 4. Considere a função misterio eo trecho abaixo. void misterio(int v[ ], int n) { //n é o número de elementos de v int i, j, m, aux; for (j = 0; j < n-1; j++) { m = j; for (i = j+1; i < n; i++) { if (v[i] < v[m]) m = i; } aux = v[j]; v[j] = v[m]; v[m] = aux; } } Trecho na main : int v[4] = {40,30,10,20}; misterio(v, 4); Marque a opção correta. Como ficará o vetor após a execução da função misterio ? 10 20 40 30 10 20 30 40 5 10 20 30 10 30 40 20 10 30 20 40 3. Marque a afirmativa correta para a "Busca ou pesquisa binária". É o processo pelo qual um conjunto de dados é colocado em uma ordem crescente ou decrescente. Consiste em fazer uma busca em um vetor já ordenado, dividindo o espaço de busca ao meio e verificando se o dado está no meio ou, antes do meio ou depois do meio. Consiste em fazer uma busca em um vetor desordenado, dividindo o espaço de busca ao meio e verificando se o dado está no meio ou, antes do meio ou depois do meio. Consiste em adicionar um valor no vetor, mantendo a ordem existente e ajustando o total de elementos. Consiste em adicionar um valor no vetor, alterando a ordem existente e ajustando o total de elementos. 2. O resultado do concurso para o cargo de uma empresa está armazenado em um vetor, que contém em cada um de seus elementos o nome e a nota obtida pelo candidato. Deseja-se que este vetor seja ordenado pela nota, em ordem decrescente. Sendo o vetor pequeno (poucos elementos), o programador responsável por desenvolver este algoritmo, escolheu um método de ordenação que executa os seguintes passos: · Selecione candidato com maior nota entre todos e troque-o com o candidato que está na primeira posição do vetor; · Selecione o segundo maior e troque-o com o candidato que está na segunda posição; · Os passos descritos anteriormente são seguidos para a terceira nota, quarta nota e assim por diante até que reste apenas um candidato. O algoritmo utilizado pelo programador trata-se do método de ordenação denominado: Inserção Bolha Heapsort Seleção Quicksort 1. É um método de pesquisa ou busca, cujo algoritmo parte do pressuposto de que o vetor está ordenado e realiza sucessivas divisões do espaço de busca, comparando o elemento buscado (chave) com o elemento no meio do vetor. Se o elemento do meio do vetor for a chave, a busca termina com sucesso. Caso contrário, se o elemento do meio vier antes do elemento buscado, então a busca continua na metade posterior do vetor. E finalmente, se o elemento do meio vier depois da chave, a busca continua na metade anterior do vetor. A descrição apresentada trata-se do método denominado busca ...... binária. linear. por contagem. por comparação. randômica.
Compartilhar