Baixe o app para aproveitar ainda mais
Prévia do material em texto
* Algumas perguntas ainda não avaliadas AV1 Entrega 29 out em 23:59 Pontos 40 Perguntas 10 Disponível 23 out em 0:00 - 29 out em 23:59 Limite de tempo 120 Minutos Instruções Histórico de tentativas Tentativa Tempo Pontuação MAIS RECENTE Tentativa 1 39 minutos 27 de 40 * Pontuação deste teste: 27 de 40 * Enviado 29 out em 11:48 Esta tentativa levou 39 minutos. Leia com atenção as orientações abaixo antes de iniciar esta avaliação: Será permitida uma tentativa para realizar esta prova. Programe-se para realizar sua avaliação com tranquilidade, pois você terá 120 minutos cronometrados para conclusão e envio das respostas. Ao iniciar a avaliação o cronômetro não para, independentemente de a plataforma estar aberta ou não; Após este prazo, a avaliação sera automaticamente finalizada. Durante a realização da prova: Será exibido uma questão por vez, podendo “Avançar” ou “Voltar” quando necessário, dentro do período da tentativa; A tentativa somente será contabilizada após clicar no botão “Enviar”, mas finalizados os 120 minutos do cronômetro, a prova será finalizada automaticamente pelo sistema. Boa prova! 3 / 3 ptsPergunta 1 Vetores são estruturas de dados muito interessantes pois permitem a ligação entre várias variáveis do mesmo tipo que podem ser referenciadas por um mesmo identificador, seguido por um índice que, em linguagem C, sempre se inicia com 0. O código apresentado a seguir https://newtonpaiva.instructure.com/courses/18574/quizzes/40321/history?version=1 mostra o preenchimento de um vetor feito em uma estrutura de repetição, índice por índice, até o que vetor esteja completamente preenchido, observe-o com atenção para responder à questão que vem a seguir: for(i=0;i<=30;i++) { vetor1[i]=i; } Sabendo que todas as variáveis em C devem ser declaradas, inclusive os vetores, utilize o conhecimento que tem sobre essas estruturas para marcar a alternativa que mostra a declaração correta do vetor que é utilizado no código. int vetor1[30]. int vetor1[31]. Correto!Correto! char vetor1[31]. float vetor1[31]. float vetor1[30]. Feedback: Através dos valores de i na repetição (de 0 a 30) pode-se perceber que o vetor tem 31 posições, o tipo é definido pelo valor que ele recebe (i) que sendo também o índice do vetor é sempre inteiro. A explicação sobre isso pode ser vista no capítulo 2 do Livro Texto da unidade I, sobre vetores. 3 / 3 ptsPergunta 2 Analise o seguinte código escrito em linguagem C. #include <stdio.h> #include <stdlib.h> int main () { int i, sequencial[20], aleatorio[20]; for(i=0;i<=19;i++) { sequencial[i]=i; aleatorio[i]=rand(); } } Neste contexto, julgue as afirmações a seguir. I – O laço de repetição for apresentará erro de execução, pois seu índice se inicia e zero(0). II – Os elementos dos vetores são impressos em tela. III – O código inicializa dois vetores de 20 posições. Está(ão) correta(s) a(s) afirmativa(s): I e III, somente. III, somente. Correto!Correto! II, somente. I e II, somente. I, somente. Feedback: - Na linguagem C/C++ os índices dos vetores começam em zero, assim, não ocorrerá erro de execução no laço for. - O código apenas inicializa os vetores, não imprimindo-os em tela. - O código inicializa dois vetores de vinte posições. 3 / 3 ptsPergunta 3 Analise o case a seguir: Um programa funcionava de forma correta há algum tempo e, ao utilizar uma variável declarada como float, para receber o resultado do cálculo de uma média, começou a não apresentar o resultado corretamente. O programador, ao analisar o código, verificou que todos os cálculos foram realizados de forma correta e que as variáveis comuns estavam declaradas corretamente. Considerando que foram utilizados, sem muito cuidado, ponteiros na implementação, o que pode ter acontecido para gerar o erro? Ter sido feita a atribuição com tipos incompatíveis. A variável não foi declarada de forma correta. Ter gerado um erro em tempo de projeto causado pelo ponteiro, que não pode receber endereços para valores reais. Ter utilizado a variável da média apontando para alguma variável “ponteiro”. Ter sido utilizado de forma incorreta algum ponteiro, que acessou indevidamente a área de memória ocupada pela variável de média. Correto!Correto! Feedback: O uso de ponteiros sem muito cuidado pode acarretar no acesso indevido à memória. Considerando a situação apresentada, há uma grande chance de ser um problema com algum ponteiro. 3 / 3 ptsPergunta 4 Para responder a essa questão, observe o seguinte trecho de código: int *ptrX,*ptrY,x,y; x=18; y=5; ptrY=&y; ptrX=&x; *ptrX=*ptrY+x; ptrX=ptrY; Qual valor estará na variável x ao terminar a execução? 5 18 13 10 23 Correto!Correto! Feedback: Através do operador indireto (*), a soma de *ptrY (valor de y) com o valor da variável x (18 + 5 = 23) é armazenado em *ptrX (o valor é colocado indiretamente na variável x). 3 / 3 ptsPergunta 5 É conhecido que as listas podem ter variações entre estática, dinâmica, homogênea, heterogênea, ordenada ou não ordenada. Sabe-se também que as características relativas aos tipos de dados e à forma de alocação de memória podem ser identificadas por meio da forma de declaração da lista, enquanto as características de ordenação de uma lista só poderão ser identificadas com uma análise das funções implementadas pelo algoritmo. Observando a declaração do nodo a seguir, é possível identificar a qual tipo de lista ele pertence. struct nodo { int idade; float altura; char sexo; nodo *proximo; }; Marque a alternativa que tenha as características corretas para a lista declarada: Lista estática heterogênea. Lista estática homogênea. Lista encadeada dinâmica heterogênea. Correto!Correto! Lista encadeada dinâmica homogênea. Lista duplamente encadeada dinâmica heterogênea. 3 / 3 ptsPergunta 6 As listas estáticas, baseadas em vetores e dinâmicas, criadas com base em structs com ponteiros para a ligação entre os nodos, embora implementem as mesmas funções, têm algumas diferenças quanto ao uso de memória e às possibilidades de acesso. Com base nesse contexto e em seus conhecimentos sobre listas, analise as afirmativas abaixo: I. Na aplicação de lista encadeada dinâmica, a função de esvaziar lista não libera os espaços correspondentes na memória, só os retira da lista. II. Listas simplesmente encadeadas só podem ser acessadas em um sentido. III. Quando um nodo é apontado para a primeira posição da lista encadeada, ele se torna o primeiro elemento da lista. É correto o que se afirma em: II, apenas. II e III, apenas. Correto!Correto! I, apenas. I e III, apenas. I, II e III. Feedback: Quando a lista é esvaziada, as posições são liberadas na memória através do operador delete. 3 / 3 ptsPergunta 7 As funções para manipulação e navegação em uma lista possuem características específicas que possibilitam a distinção entre elas e mesmo a identificação de características da lista. Avalie o código abaixo e responda a questão a seguir: nodo *novo=new nodo(); novo->num=val; if(inicio==NULL) { inicio=novo; fim=novo; novo->proximo=NULL; novo->anterior=NULL; }else { novo->proximo=inicio; inicio->anterior=novo; novo->anterior=NULL; inicio=novo; } O código é a lógica completa de uma das funções de uma lista. Marque abaixo qual função é e de qual tipo de lista.Função retirar elemento da lista duplamente encadeada não ordenada. Função inserir elemento no fim da lista duplamente encadeada ordenada. Função inserir elemento no início da lista duplamente encadeada não ordenada. Correto!Correto! Função inserir elemento no início da lista duplamente encadeada ordenada. Função retirar elemento da lista duplamente encadeada ordenada. Feedback: O código é de inserção, pois cria o novo nodo e insere o valor. A inserção é feita no início devido à movimentação dos ponteiros. Como a inserção não é feita na ordem, trata-se de uma lista não ordenada. 3 / 3 ptsPergunta 8 Listas são estruturas que armazenam vários valores, podendo ser limitado o número de valores ou não limitado. Os valores também podem ser de um ou de vários tipos, enquanto a navegação entre os elementos pode ser só em um sentido ou nos dois sentidos. A inserção de nodos pode ser feita em ordem ou fora de ordem. Essas características que identificam o tipo de lista que se está utilizando. As afirmativas a seguir apresentam algumas características de listas com suas explicações. Avalie o que é exposto e responda à questão a seguir: I – Uma lista duplamente encadeada ordenada pode ser acessada nos dois sentidos. II – A lista que tem mais de um tipo em cada nodo é considerada heterogênea. III – Uma lista simplesmente encadeada pode ser homogênea ou heterogênea. É correto o que se afirma em: II e III, apenas. II, apenas. I e II, apenas. I, apenas. I, II e III. Correto!Correto! Feedback: A característica principal da lista duplamente encadeada é o fato de poder ser acessada nos dois sentidos. Qualquer estrutura de dados que tenha mais de um tipo de dados diferente é heterogênea, e as listas simplesmente encadeadas também podem ser homogêneas ou heterogêneas. 3 / 3 ptsPergunta 9 Uma empresa de atendimento ao cliente deseja criar um software para o controle da fila de espera. O software deve ser capaz de receber novas pessoas que chegam para serem atendidas e de controlar quem chegou antes e que, por isso, devem ser atendidas primeiro. Considerando o problema a ser resolvido pelo programa, a pilha seria uma estrutura de dados ideal para resolvê-lo? Marque a alternativa que apresenta a resposta correta. Sim, pois faria o controle da fila de acordo com a estratégia FIFO. Sim, mas teria que ser utilizada sem a estratégia de acesso. Não, pois a disciplina de acesso da pilha não permite que ela funcione da forma como o programa precisa. Correto!Correto! Não, pois, embora a pilha funcione da maneira correta para controlar a fila por ordem de chegada, ela não deve ser utilizada para isso. Sim, pois faria o controle da fila de acordo com a estratégia FILO. Feedback: Na pilha, a regra de acesso FILO deve ser respeitada, ou seja, o último que chegou deve ser o primeiro a sair, ao contrário de uma fila onde o primeiro a chegar deve ser o primeiro a ser atendido. Não avaliado ainda / 13 ptsPergunta 10 Sua Resposta: Compare e exemplifique as principais estruturas de dados lineares. 1. **Array (Vetor)**: - **Descrição**: Um array é uma coleção fixa de elementos do mesmo tipo armazenados em locais de memória contíguos. - **Exemplo**: ```c int array[5] = {1, 2, 3, 4, 5}; ``` 2. **Lista Ligada (Linked List)**: - **Descrição**: Uma sequência de nós, onde cada nó contém um valor e um ponteiro para o próximo nó. - **Exemplo**: ```c struct Node { int data; struct Node* next; }; ``` 3. **Pilha (Stack)**: - **Descrição**: Uma estrutura de dados baseada no princípio LIFO (Last In, First Out), onde o último elemento inserido é o primeiro a ser removido. - **Exemplo**: ```c #include <stdio.h> #define MAX_SIZE 5 int stack[MAX_SIZE]; int top = -1; void push(int item) { if (top < MAX_SIZE - 1) { stack[++top] = item; } } int pop() { if (top >= 0) { return stack[top--]; } return -1; } ``` 4. **Fila (Queue)**: - **Descrição**: Uma estrutura de dados baseada no princípio FIFO (First In, First Out), onde o primeiro elemento inserido é o primeiro a ser removido. - **Exemplo**: ```c #include <stdio.h> #define MAX_SIZE 5 int queue[MAX_SIZE]; int front = 0, rear = -1; void enqueue(int item) { if (rear < MAX_SIZE - 1) { queue[++rear] = item; } } int dequeue() { if (front <= rear) { return queue[front++]; } return -1; } ``` Esta pergunta é abrangente e permite que os voces demonstrem seu conhecimento sobre os principais conceitos de estrutura de dados. Voces alunos devem abordar os seguintes tópicos vistos em cada unidade de estudo. Pontuação do teste: 27 de 40
Compartilhar