Baixe o app para aproveitar ainda mais
Prévia do material em texto
ESTRUTURA DE DADOS CCT0753_A8_201801076693_V5 Lupa Calc. Vídeo PPT MP3 Aluno: SÉRGIO RICARDO SIMÃO Matrícula: 201801076693 Disciplina: CCT0753 - ESTRUTURA DE DADOS Período Acad.: 2018.3 EAD (GT) / EX 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. Sobre listas encadeadas, é INCORRETO afirmar que: pilhas e filas são versões limitadas de listas encadeadas, pois as inserções e remoções não ocorrem em qualquer parte. são acessadas pelo primeiro nodo da lista; o final da lista faz uma referência para NULL; a memória é alocada dinamicamente; possuem tamanho fixo; Explicação: Uma lista encadeada não tem tamanho fixo, pois usa-se alocação e desalocação dinâmica de memória. As demais afirmativas estão corretas. 2. q Considere int *p, *q, *r; int x = 10, y = 20; Após seguir cada instrução na ordem dada a seguir : p = &x; q = &y; *p = *p + *q; (*q)++; r = q; q = p; identifique a opção que fornece correta e respectivamente, os valores de *p, *q , *r , x e y : 30 30 21 10 20 30 21 21 10 20 30 30 21 30 21 30 20 20 10 20 30 20 0 30 21 Explicação: Fazendo passo a passo temos : int *p, *q, *r; int x = 10, y = 20; p = &x; //p aponta para x, que vale 10 q = &y; // q aponta para y que recebeu 20 *p = *p + *q; //a área apontada por p, que é x, vai receber 10 + 20, que dá 30. Logo, *p e x valem 30. (*q)++; //A área apontada por q é incrementada. Ou sejam, y ou *q recebem 21 r = q; //r aponta para y q = p; // q aponta para onde p aponta, ou seja, q aponta para x Logo : *p , que é x, vale 30 *q, que é igual a *p, que é x, vale 30 *r é y, que vale 21 x vale 30 y vale 21 Logo, a resposta certa é 30 30 21 30 21 3. Seja uma lista encadeada cujos nodos são formados pelo seguinte tipo de dado: struct empregado{ long int matricula; float salario; empregado *proximo; }; Suponha que o ponteiro pont tenha o endereço de um nodo da lista, o qual se deseja atribuir um novo valor para o campo salario. Marque a alternativa que corretamente altera o valor do campo salario para 5000.00. pont.empregado->salario=5000.00; pont.empregado.salario=5000.00 pont.salario=5000.00; pont->empregado->salario=5000.00; salario=5000.00; Explicação: Criar a entrada: salario=5000.00; 4. O espaço necessário para a representação dos dados pode ser alocado à medida que se torne necessário, através da alocação dinâmica. Uma estrutura armazenada através de encadeamento apresenta seus nodos alocados em posições aleatórias na memória, e não lado a lado. Dessa forma, existem várias vantagens no uso de representar os dados por encadeamento. Marque a alternativa correta que apresenta estas vantagens. Proteção de memória, transferência de dados, estruturas simples. Previsão de espaço físico, estruturas complexas, procedimentos menos intuitivos. Compartilhamento de memória, maleabilidade e facilidade para inserção e remoção de componentes. Transferência de dados, gerenciamento de memória e procedimentos menos intuitivos. Acesso, representação, compartilhamento de memória. Explicação: FALSO . Previsão de espaço físico, estruturas complexas, procedimentos menos intuitivos. FALSO Acesso, representação, compartilhamento de memória. FALSO Proteção de memória, transferência de dados, estruturas simples. FALSO Transferência de dados, gerenciamento de memória e procedimentos menos intuitivos. VERDADEIRO Compartilhamento de memória, maleabilidade e facilidade para inserção e remoção de componentes. Gabarito Coment. 5. A linguagem C++ oferece quatro meios de criação de tipos de dados: matrizes, estruturas ou structs, uniões e classes. As estruturas, que passaremos a chamar simplesmente de structs, são tipos de variáveis que agrupam dados geralmente desiguais, enquanto matrizes são variáveis que agrupam dados similares. Devido a esta característica as structs são utilizadas para modelar nodos (nós) de estruturas dinâmicas. Portanto podemos afirmar que: As estruturas dinâmicas são assim chamadas, pois não podem fazer alocação de memória em tempo de execução, mas mesmo assim conseguem ter seus tamanhos alterados de acordo com a demanda. As estruturas dinâmicas são assim chamadas, pois podem fazer alocação de memória em tempo de execução e terem seus tamanhos alterados de acordo com a demanda. As estruturas dinâmicas são assim chamadas, pois podem fazer alocação de memória em tempo de compilação e entretanto seus tamanhos só são alterados na codificação de acordo com a demanda. As estruturas dinâmicas são assim chamadas, pois podem fazer alocação de memória em tanto em tempo de execução quanto em tempo de compilação, mas não podem ter seus tamanhos alterados de acordo com a demanda. As estruturas dinâmicas são assim chamadas, pois podem fazer alocação de memória em tempo de compilação e terem seus tamanhos alterados de acordo com a demanda. 6. E C++, quando um ponteiro é declarado para uma struct, o acesso aos campos deste registro (struct) se dá pelo operador : ∙ (ponto). & (e comercial ou eitza). * (asterisco). , (vírgula). -> (seta). Explicação: Por definição, o operador é o seta, pois se tem, no caso, ponteiro para struct. 7. Tei Ping , famosa cabeleireira das estrelas, possui uma lista não ordenada de clientes em que registra apenas o nome, endereço e o telefone de cada cliente. Como não se pode pré- definir um limite para o tamanho da lista, como se pode implementar a inserção de um novo cliente na lista ? Sabe-se que cada cliente é do tipo Cliente e a lista é do tipo List assim definidos : struct Cliente { long int matricula; string nome, endereco e tel; }; struct List { Cliente p; struct List *link; }; List insereCliente(List *i, Cliente c) { List novo[]; novo[0].p = c; novo[0].link = i; return novo; } List * insereCliente(List *i, Cliente c) { List *novo = new List; novo.p = c; novo.link = i; return novo; } List * insereCliente(List *i) { List *novo = new List; Cliente c; novo->p = c; novo->link = i; return novo; } List * insereCliente(List *i, Cliente c) { List *novo = new List; novo->p = c; novo->link =i; return novo;} List * insereCliente(List *i, Cliente c){ List *novo ; novo->p = c; novo->link = i; return novo; } Explicação: Analisando a resposta certa : List * insereCliente(List *i, Cliente c) { List *novo = new List; //aloca memória para novo nó novo->p = c; //acessa o campo p da área apontada por novo e atribui o cliente c ao campo p novo->link =i; //faz o link do novo nó apontar para onde i está apontando return novo; //retorna o endereço do novo nó } Logo, esta função insere um novo nó no início de uma lista simplesmente encadeada e retorna o ponteiro para o início da lista resultante. Analisando as demais opções, que estão erradas : 2o. item .... Opção errada : faltou alocar memória 3o. item .... Opção errada : Cliente c não está definido. 4o. item .... Opção errada : Usa ponto quando deveria ser o operador seta 5o. item .... Opção errada : Muitos erros... Usa vetor sem definir tamanho e trabalha com o elemento de índice zero de novo, acessando os campos com ponto. 8. Sobre listas simplesmente encadeadas, é INCORRETO afirmar que : possuem tamanho fixo são acessadas através de um ponteiro para o primeiro nó da lista o ponteiro do último nó é NULL os nós da lista são alocados dinamicamente. podem implementar pilha e fila dinâmicas Explicação: Por definição, uma lista encadeada não tem tamanho pré-definido, pois os nós da lista são alocados em tempo de execução, de acordo com a demanda. Legenda: Questão não respondida Questão não gravada Questão gravada Exercício inciado em 20/11/2018 12:39:59.
Compartilhar