Prévia do material em texto
ESTRUTURA DE DADOS 1a aula Lupa Vídeo PPT MP3 Exercício: CCT0753_EX_A1_201802216995_V1 18/02/2019 (Finaliz.) Aluno(a): JOAO PAULO MACHADO GUERRA 2019.1 EAD Disciplina: CCT0753 - ESTRUTURA DE DADOS 201802216995 1a Questão 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. lista árvore grafo pilha fila Explicação: Conforme gabarito e aula 1. 2a Questão Estão entre algumas das possíveis formas de estruturas de dados: Listas, vetores, cin cout, Funções, vetores Árvores binárias, pilhas, vetores Árvores binárias, pilhas, algoritmos Grafos, funções, fila Explicação: Árvores binárias, pilhas, vetores Verdadeiro. Grafos, funções, fila Falso. Funções não são estruturas de dados. Funções são módulos dos programas. Árvores binárias, pilhas, algoritmos FAlso. Algoritmos não são estrutura de dados. Listas, vetores, cin Falso. cin não é estrutura de dados. É usado para fazer entrada de dados. cout, Funções, vetores Falso. Funções e cout não são estrutura de dados. 3a Questão Qual estrutura de dados é mais adequada para armazenar a estrutura do diretório do sistema de arquivos de um sistema operacional? Pilha Grafo Fila Lista Árvore Explicação: A estrutura de diretórios mostra hierarquia e um relacionamento não linear. Por isso, a resposta certa é árvore. Lista, pilha e fila são estruturas de dados linear. Grafo é não linear, mas não é hierárquica. 4a 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, b1, c2, d1 a1, b2, c1, d1. a2, b2, c1, d2. a2, b1, c2, d1. a1, b1, c2, d2. 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. 5a Questão A forma correta para imprimir o valor do último elemento de um vetor v com n posições é: cout << v[n+1]; cout << v[ultimo]; cin >> v[-1]; cout << v[n]; cout << v[n-1]; 6a Questão Estão entre algumas das possíveis formas de se estruturar dados: Algoritmos, lista ordenada, vetores. Grafos, lista ordenada, algoritmos. Lista encadeada, vetores, algoritmos. Grafos, algoritmos, fila. Grafos, lista ordenada, vetores. Explicação: FAlso. Algoritmos não são estrutura de dados Grafos, algoritmos, fila. . FAlso. Algoritmos não são estrutura de dados. Grafos, lista ordenada, algoritmos. Correto. Grafos, lista ordenada, vetores. FAlso. Algoritmos não são estrutura de dados. Algoritmos, lista ordenada, vetores. FAlso. Algoritmos não são estrutura de dados. Lista encadeada, vetores, algoritmos. Gabarito Coment. 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 deleção de dados em um computador. São os nomes dados as variáveis na montagem de uma rotina. É um modo de utilização de dados nos programas de 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. Explicação: Analisando cada item : É um modo particular de armazenamento e organização de dados em um computador de modo que possam ser usados de modo eficiente. Correta. É um modo de distribuição e organização de dados em uma rede de computador de modo que possam ser usados de modo eficiente. FAlso. Não há distribuição de dados ou organização de dados em uma rede via estrutura de dados. É um modo de utilização de dados nos programas de computador. FAlso. Não se diz como se utiliza dados. Variáveis armazenam dados, por exemplo e em atribuições ou em expressões também utilizamos dados. São os nomes dados as variáveis na montagem de uma rotina. FAlso. Nomes de variáveis são identificadores. É um modo de deleção de dados em um computador. Falso. Para "deletar" um dado não temos que usar estrutura de dados. Gabarito Coment. 8a Questão Assinale a alternativa correta sobre tipos abstratos de dados: 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. 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 descreve, além do que se pode fazer com os dados, como as operações serão efetivamente implementadas. Um tipo abstrato de dados é composto por um modelo de dados e um conjunto de operadores definidos sobre esses dados. É fundamental que os tipos abstratos de dados proponham um conjunto eficiente de algoritmos para realização de suas operações. Explicação: Um tipo abstrato de dados é composto por um modelo de dados e um conjunto de operadores definidos sobre esses dados. Verdadeiro. Por definição de TAD (tipo abstrato de dados). 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. Falso. Quando se pensa em TAD não há vínculos com implementação. Um tipo abstrato de dados descreve, além do que se pode fazer com os dados, como as operações serão efetivamente implementadas. FAlso. Não se pensa em implementação quando se trabalha com TAD. É fundamental que os tipos abstratos de dados proponham um conjunto eficiente de algoritmos para realização de suas operações. FAlso. Não se pensa em implementação ou eficiência quando se trabalha com TAD. Se pensa na semântica das operações. Um tipo abstrato de dados deve sempre ser representado por meio dos recursos específicos de uma linguagem de programação. Falso : Não se pensa em programa ou na linguagem de programação, pois o TAD não está vinculado à implementação. ESTRUTURA DE DADOS 1a aula Lupa Vídeo PPT MP3 1a 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 ? árvore lista fila pilha grafo Gabarito Coment. 2a Questão Qual estrutura de dados não linear que é utilizada na implementação de Redesde 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 3a Questão 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 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 III e IV estão corretas. As alternativas II e IV estão corretas. Todas as alternativas estão corretas. As alternativas I e III estão corretas. As alternativas I e II estão corretas Gabarito Coment. 4a Questão Sobre estrutura de dados, identifique o que está correto afirmar. I. Pilha é uma estrutura de dados com acesso restrito aos seus elementos, uma vez que eles são colocados e retirados por um único lado e são ordenados pelo princípio LIFO (last in first out). Assim, sempre que um elemento é adicionado ou retirado seu topo é alterado. II. Pilha é o tipo de estrutura usada, por exemplo, na avaliação de expressões numéricas, na recursividade e pelos compiladores, na passagem de parâmetros para as funções. III. Registro é uma estrutura básica que permite guardar coleções de dados de diferentes tipos, sendo normalmente utilizado quando um objeto tem diferentes atributos, isto é, contém campos de diferentes tipos. IV. Lista pode conter um número qualquer de elementos, expandindo-se ou contraindo-se conforme o elementos são inseridos ou retirados. Nesse tipo de estrutura, os acessos tanto podem ser feitos sequencialmente como diretamente. V. Fila, assim como a pilha , é uma versão especial de lista, e como tal, seus elementos são ordenados pelo princípio LIFO (last in first out). I, III e V. I, III, IV e V. II, IV e V. I, II e III. II, III, IV e V. Gabarito Coment. 5a Questão É um exemplo de TAD Não Linear: Filas Filas de Prioridade Grafos Listas Pilhas Explicação: Um grafo é um tipo de dados abstrato não linear 6a Questão Analise as afirmativas abaixo e selecione a alternativa correta. I Algumas aplicações da estrutura de dados grafo são: Diagrama de Entidade Relacionamento e Redes de computadores. II Árvore e lista duplamente encadeada são estruturas não lineares. III A Fila é uma estrutura não linear e a inserção de um elemento acontece ao final. IV A Lista é uma das estruturas de dados mais simples, mas não se pode ordená-la. V O uso de ponteiros é fundamental para construção de listas encadeadas. I e V são verdadeiras I , II e IV são verdadeiras III e V são verdadeiras II E IV são verdadeiras II e V são verdadeiras Gabarito Coment. 7a Questão Podemos dizer que estrutura de dados é: É a saída, que satisfaz a quaisquer restrições impostas pelo problema, necessária para se calcular uma solução do problema. A entrada, que satisfaz a quaisquer restrições impostas pelo problema, necessária para se calcular uma solução do problema. O meio para armazenar e organizar dados com o objetivo de facilitar o acesso e as modificações. Uma sequência de passos computacionais que transforma uma entrada em uma saída previamente determinada. O que permite o armazenamento e a recuperação de dados independentemente de seu conteúdo. Gabarito Coment. 8a Questão A que estrutura pertence a definição: " Uma estrutura não linear que é um conjunto de nós e suas conexões entre eles e não há limitação de vértices. Muito utilizada para representação de percursos em mapas." filas encadeadas structs listas encadeadas grafos pilhas encadeadas Parte superior do formulário ESTRUTURA DE DADOS CCT0753_A2_201802216995_V1 Lupa Calc. Vídeo PPT MP3 Prezado (a) Aluno(a), Você fará agora seu TESTE DE CONHECIMENTO! Lembre-se que este exercício é opcional, mas não valerá ponto para sua avaliação. O mesmo será composto de questões de múltipla escolha. Após responde cada questão, você terá acesso ao gabarito comentado e/ou à explicação da mesma. Aproveite para se familiarizar com este modelo de questões que será usado na sua AV e AVS. 1. O programa não executa corretamente, pois os protótipos estão fora da ordem em que as funções são descritas. O programa não executa corretamente pois as funções devem ser descritas antes da função main(), para que o compilador consiga reconhecê-las. O programa não executa corretamente, pois o protótipo da função media( ) não apresenta a identificação dos parâmetros, mas apenas os tipos dos mesmos. O programa executa perfeitamente independente da ordem das funções já que existem os seus protótipos. O programa executa perfeitamente, mas não mostra o valor da media já que esta função não foi chamada na função main( ). Gabarito Coment. 2. Nas linguagens C e C++, ao se declarar qualquer função, a especificação de tipo de dados que antecede o nome desta função define o tipo das variáveis que serão utilizadas dentro da função. o protótipo da função. o tipo do dado do valor retornado da função para quem a chamou. o escopo das variáveis do programa. o tipo dos dados dos parâmetros que são passados à função quando da sua chamada. Explicação: Por definição, antes do nome da função colocamos o tipo de dados retornado. Por exemplo, int, double, char ... Quando a função nada retorna colocamos void. 3. Qual será a saída para o seguinte trecho de código? void FUNC1() { int B = -100; cout << "Valor de B dentro da função FUNC1: " << B; } void FUNC2() { int B = -200; cout << "Valor de B dentro da função FUNC2: " << B; } int main() { int B = 10; cout << "Valor de B: " << B; B = 20; FUNC1(); cout << "Valor de B: " << B; B = 30; FUNC2(); cout << "Valor de B: " << B; } Valor de B: 10 Valor de B dentro da função FUNC1: -100 Valor de B: 10 Valor de B dentro da função FUNC2: -200 Valor de B: 30 Valor de B: 10 Valor de B dentro da função FUNC1: -100 Valor de B: 20 Valor de B dentro da função FUNC2: -200 Valor de B: 30 Valor de B: 10 Valor de B dentro da função FUNC1: -200 Valor de B: 20 Valor de B dentro da função FUNC2: -200 Valor de B: 30 Valor de B: 10 Valor de B dentro da função FUNC1: -100 Valor de B: 20 Valor de B dentro da função FUNC2: -200 Valor de B: 20 Valor de B: 10 Valor de B dentro da função FUNC1: -100 Valor de B: 20 Valor de B dentro da função FUNC2: -400 Valor de B: 30Explicação: A execução começa pela main. Na main, B recebe 10. E daí é impresso : Valor de B : 10 DEpois, B muda e recebe 20. Em seguida, é chamada a função FUNC1. Dentro desta função, existe um outro B que recebe -100. Então, é impresso : Valor de B dentro da função FUNC1: -100 A função termina e voltamos para a main, onde existe um outro cout que imprime o valor de B, que na main vale 20. Então, será impresso na tela : Valor de B : 20 Em seguida, ainda na main, B recebe 30 e logo depois, FUNC2 é chamada. Executando FUNC2 temos que um B, local à função, recebe -200 e logo em seguida é impresso : Valor de B dentro da função FUNC2 : -200 Terminando a execução de FUNC2, voltamos para a main onde é impresso o valor do B (local à main) : Valor de B : 30 Logo, a opção correta é a que diz : Valor de B : 10 Valor de B dentro da função FUNC1: -100 Valor de B : 20 Valor de B dentro da função FUNC2 : -200 Valor de B : 30 4 e 9 4 e 12 2 e 13 9 e 16 2 e 9 Explicação: Executando o programa, passo a passo, temos : Na main, a recebe 2 e b recebe 3. Note que a e b são variáveis globais. Daí, ainda na main, a função dobro é chamada. Ao executar dobro, temos que o valor 2 é passado e x (local à dobro) recebe 2 * 2, que dá 4. Ao terminar a função dobro, volta-se para a main, mas o valor de a passado não mudou, continuando 2. Após a execução de dobro, a função triplo é chamada na main e é passado o valor de b, que é 3. Iniciando a execução da função triplo, temos que y recebe 3 e a função retorna 3 * 3, que é 9. Voltando para a main, temos que b recebe o valor retornado pela função, que é 9. Até este ponto, temos que a vale 2 e b mudou para 9. Em seguida, a função altera é chamada e são passados 2 e 9, respectivamente, para x e y. Executando a função altera, temos que x recebe 2+2, que dá 4 e y recebe 4+9, que dá 13. Como x é passado por valor e y por referência, temos que a mudará e b mudará (ambas na main). Então, voltando para main temos que a vale 2 e que b vale 13. Assim, será impresso na tela 2 e 13 5. Considere o trecho de um programa escrito em C++. void func1 (bool x, int ini, int fim) { for ( int y=ini; y != fim ; y++) { x = !x; if (x) cout << y << endl; else cout << -y << endl; } } int main() { func1(false, 1, 7); } Marque a opção correta que mostra o que é impresso na tela. -1, 2, -3, 4, -5, 6 1, -2, -3, -4, -5, -6 -1, -2, -3, -4, -5, -6 1, -2, 3, -4, 5, -6 1, 2, 3, 4, 5, 6 Explicação: Fazendo um teste de mesa temos que será impresso a seguinte sequência : 1 -2 3 -4 5 -6, um embaixo do outro. Parte de um teste de mesa : x ini fim y false 1 7 1 true 2 false E continua x, ini, fim e y recebendo valores Tela : 1 -2 3 -4 5 -6 6. Blocos únicos de códigos que realizam diversas tarefas distintas são de difícil manutenção. Portanto, utiliza-se a técnica da modularização de programas, a fim de facilitar a implementação e a manutenção dos programas. Esta técnica tem como principal elemento: As funções Os Vetores As Estruturas de Dados Os Grafos As Filas 7. Sobre funções, é correto afirmar: Não podem ser chamadas dentro de outras funções. Não devem conter variáveis locais em seu código. Obrigatoriamente devem retornam algum valor. Obrigatoriamente devem possuir parâmetros. São blocos de instruções que são executados quando são chamadas em alguma parte do programa. Explicação: Uma função é um bloco de instruções que pode ser chamada a partir de outra função, que pode ter ou não parâmetros, que pode ou não retornar valor, que pode ter ou não variáveis locais. 8. Diga, para o trecho do programa abaixo, qual a opção que representa a saída em tela. Considere que o programa será compilado sem erros, e irá executar também sem problemas. void troca (int x, int *y){ int tmp; tmp = *y; *y = x; x = tmp; } int main() { int a = 13, b = 10; troca( a, &b ); cout<<"Valores: "<< a<<"\t"<< b<< endl; system("pause"); } Valores: 13 10 Valores: 31 01 Valores: 10 10 Valores: 13 13 Valores: 10 13 Explicação: A execução começa pela main. São passados o valor de a, que é 13 e o endereço de b, que vale 10. Em seguida, é chamada a função troca e são passados o valor de a e o endereço de b. Executando a função troca, x recebe 13 e *y recebe 10. Mas ocorre a troca, usando tmp como auxiliar. Então x recebe 10 e *y recebe 13. Ao terminar a execução da função, voltamos para a main e temos a sem mudanças e b com a mudança ocorrida na função. Note que x é um parâmetro passado por valor e y é um parÂmetro passado por referência. Portanto, a ficou 13 e b ficou 13. Logo, será impresso : Valores: 13 13 Legenda: Questão não respondida Questão não gravada Questão gravada Exercício inciado em 18/02/2019 21:20:03. 4. O que será mostrado na tela pelo programa abaixo ? #include < iostream > using namespace std; int a,b; void dobro(int x){ //x passado por valor x=2*x; } int triplo(int y){ //y passado por valor return 3*y; } void altera(int x, int &y) { //x passado por valor e y passado por referencia x=x+a; y=x+b; } int main (){ a=2; b=3; dobro(a); b=triplo(b); altera(a,b); cout<< a << " e " << b << endl; } Parte inferior do formulário