Baixe o app para aproveitar ainda mais
Prévia do material em texto
Prova Algoritmos e Programação Estruturada: Programação Estruturada para Dev 1 - Um mecanismo utilizado para organizar nossa informação e prover operações convenientes e eficientes para acessá-la e manipulá-la é conhecido como estrutura de dados. Diversos tipos de estruturas de dados têm sido propostas e o conhecimento das características dessas estruturas é um fator importante para a escolha da estrutura que melhor se encaixa na solução de um determinado problema. Neste sentido, o almoxarife de um órgão pediu ao técnico de informática que elaborasse um sistema de estoque que, para cada saída de material, considerasse o material que há mais tempo houvera dado entrada no almoxarifado. O técnico deve desenvolver um algoritmo para tratar com uma estrutura de dados de qual tipo? Assinale a alternativa correta. Resposta: Fila. 2 - A pilha é uma das estruturas de dados mais simples, apesar de estar entre as mais importantes, uma vez que são utilizadas em diversos tipos de aplicações, desde aplicações de escritório até sistemas operacionais e compiladores. Levando em consideração a estrutura de dados do tipo “Pilha”, analise as afirmativas a seguir: I. O elemento a ser removido da pilha é o que está há menos tempo na estrutura de dados. II. O elemento a ser removido da pilha é o que está há mais tempo na estrutura de dados. III. O elemento a ser inserido é colocado na base da pilha. Considerando o contexto apresentado, é correto o que se afirma em: Resposta: I, apenas. I. O elemento a ser removido da pilha é o que está há menos tempo na estrutura de dados. CORRETA, pois o protocolo da pilha garante que o último a entrar é o primeiro a sair (Last in, first out). Assim sendo, o elemento que está a menos tempo na estrutura será o primeiro a ser removido. II. O elemento a ser removido da pilha é o que está há mais tempo na estrutura de dados. INCORRETA, pois contradiz o que foi dito em I. III. O elemento a ser inserido é colocado na base da pilha. INCORRETA, pois os elementos são inseridos no topo da pilha, não em sua base. 3 - Nas linguagens de programação funcional, diz-se que é possível evitar estouros de pilha usando "recursão de cauda". A diferença entre recursiva normal e de cauda é justamente aonde a chamada recursiva é chamada. Caso seja chamada na "cauda" da função, é uma chamada de cauda recursiva. A "cauda" da função é sua última chamada. É a última computação / cálculo feito pela função, e logo depois dela, nenhum tratamento é feito antes de retornar seu valor. Neste contexto, analise as figuras 16(a) e 16(b). Figura 16 – (a) recursão normal e (b) recursão de cauda recursividades Considerando as imagens apresentadas julgue as afirmações que se seguem. I - Na figura 16(a), cada chamada recursiva aumenta porque o programa só pode calcular o resultado da primeira função chamada, para depois calcular o resultado das que a chamaram. Assim, a pilha estoura. II - Na figura 16(b), cada passo de chamadas nem aumenta nem diminui. A partir do momento que a função recursiva é chamada, todas são chamadas no final, sem precisar de mais cálculos. III - Quando um compilador pronto para isso vê uma chamada recursiva na cauda, ele automaticamente a transforma em um laço durante as otimizações. Desta forma não perde as vantagens, nem a elegância da programação funcional, mas também não corre o risco de passar por um estouro de pilha. É correto apenas o que se afirma em: Resposta: I - FALSA - Na figura 16(a), cada chamada recursiva aumenta porque o programa só pode calcular o resultado da primeira função chamada, para depois calcular o resultado das que a chamaram. Assim, a pilha estoura. O CORRETO É: Na figura 16(a), A CADA chamada recursiva, O NÚMERO DE FUNÇÕES aumenta porque o programa só pode calcular o resultado da ÚLTIMA função chamada, para depois calcular o resultado das que a chamaram. Assim, a pilha estoura. II - FALSA - Na figura 16(b), cada passo de chamadas nem aumenta nem diminui. A partir do momento que a função recursiva é chamada, todas são chamadas no final, sem precisar de mais cálculos. O CORRETO É: Na figura 16(b), A CADA PASSO, A QUANTIDADE de chamadas nem aumenta nem diminui. A partir do momento que a função recursiva é chamada, APENAS ELA é chamada no final, sem precisar de mais cálculos. III - VERDADEIRA - Quando um compilador pronto para isso vê uma chamada recursiva na cauda, ele automaticamente a transforma em um laço durante as otimizações. Desta forma não perde as vantagens, nem a elegância da programação funcional, mas também não corre o risco de passar por um estouro de pilha. 4 - Podemos implementar estruturas de dados de pelo menos duas formas: utilizando vetores ou utilizando estruturas ligadas (ou encadeadas). Estruturas de dados ligadas consistem em uma sequência de elementos, denominados nós. Cada nó possui uma informação a ser armazenada na estrutura de dados e a referência para um ou mais nós da sequência. Quando os nós de uma ED possuem ponteiros para o nó anterior e para o próximo nó da sequência, ela é denominada de Resposta: lista duplamente encadeada. 5 - De acordo com Mizrahi (2008) as funções dividem grandes tarefas de programação em tarefas menores, permitindo aos programadores reprogramarem a partir de códigos que já foram produzidos, facilitando e acelerando o trabalho de programação. Observe o programa que demonstra o uso de uma função na linguagem C: #include <stdio.h>#define pi 3.1415float raio ( ){ float r, area; printf("Digite o raio: "); scanf("%f",&r); area = pi * r * r; }int main(){ float result; result = raio (); printf("Area do circulo = %.2f \n",result); return 0;} O programa demonstrado não compila pois possui um erro, escolha a opção correta que mostra o erro do programa. Resposta: O que causa o erro do programa é a falta do return na função raio ( ), o correto seria adicionar a seguinte linha: return area; isso fará com que o valor seja repassado para a variável result. 6 - O trecho de programa a seguir calcula a média entre duas temperaturas distintas: #include<stdio.h> float t1, t2; float calcularMedia(){ return (t1 + t2)/2; } int main(){ printf("\n Digite as duas temperaturas: "); scanf("%f %f",&t1,&t2); printf("\n A temperatura media = %.2f",calcularMedia()); return 0; } O trecho de programa é um exemplo prático da utilização do: Resposta: O trecho de programa é um exemplo prático da utilização do escopo global de uma variável. Para definir uma variável global é preciso criá-la fora da função. Dessa forma será visível por todas as funções do programa. 7 - Conforme Drozdek (2016), em uma Fila Circular, o conceito de _________________ e se baseia quando o último elemento da fila está na última posição do vetor, e é adjacente à primeira. Assim, são os ______________, e não os elementos da fila que se movem em direção ao início do vetor, como podemos observar na Figura-1 a seguir. Assinale a questão verdadeira que completa as lacunas da frase: Resposta: circularidade - ponteiros 8 - Diferentes estruturas elementares de dados implementam diferentes protocolos de manipulação de elementos. Esses protocolos ditam como os elementos de uma estrutura de dados podem ser inseridos, removidos e consultados. Sabendo disso, assinale a alternativa que representa corretamente o nome das estruturas que implementam os protocolos FIFO e LIFO, respectivamente. Resposta: Fila e Pilha. 9 - Uma fila é uma estrutura de dados dinâmica que admite remoção de elementos e inserção de novos objetos. Mais especificamente, uma Fila é uma estrutura sujeita à seguinte regra de operação: sempre que houver uma remoção, o elemento removido é o que está na estrutura há mais tempo (TENENBAUM, 2007). Considerando a utilização de uma Fila, alguns problemas podem surgir com sua utilização, como por exemplo: I. Utilizando-se um vetor, teremos o problema de possuir um armazenamento de tamanho fixo e limitado, enquanto que a Fila pode crescer com a necessidade de uso do sistema, e para resolver essa problemática, teríamos que limitar o tamanho máximoda Fila ao tamanho do vetor. II. Outra situação que pode ocorrer é adicionar um elemento em uma Fila cheia ou remover um elemento de uma Fila vazia. Em ambos os casos seria impossível realizar as operações. Como solução, é importante sempre implementar as funções para verificar se a Fila está cheia (fila_cheia(F)) e para verificar se a Fila está vazia (fila_vazia(F)). III. Podem surgir problemas relacionados aos controles de início e fim de Fila, onde não é possível identificar as posições em que se encontram. Como solução, é preciso incluir duas variáveis (início e fim) para armazenar a posição do início e do fim da Fila, e sempre atualizar esses valores conforme a Fila aumenta ou diminui. A seguir assinale a alternativa correta. Resposta: A frase corretamente preenchida é: As afirmativas I, II e III estão corretas. Utilizando-se um vetor, teremos o problema de possuir um armazenamento de tamanho fixo e limitado, enquanto que a Fila pode crescer com a necessidade de uso do sistema, e para resolver essa problemática, teríamos que limitar o tamanho máximo da Fila ao tamanho do vetor. Outra situação que pode ocorrer é adicionar um elemento em uma Fila cheia ou remover um elemento de uma Fila vazia. Em ambos os casos seria impossível realizar as operações. Como solução, é importante sempre implementar as funções para verificar se a Fila está cheia (fila_cheia(F)) e para verificar se a Fila está vazia (fila_vazia(F)). Podem surgir problemas relacionados aos controles de início e fim de Fila, onde não é possível identificar as posições em que se encontram. Como solução, é preciso incluir duas variáveis (início e fim) para armazenar a posição do início e do fim da Fila, e sempre atualizar esses valores conforme a Fila aumenta ou diminui. 10 - Nas listas, quando precisávamos criar um novo elemento, poderíamos inseri-lo ou removê-lo de qualquer posição da lista. Segundo Drozdek (2016), a Estrutura de Dados de Fila possui operações similares as da estrutura de Pilha para gerenciamento de uma Fila. Com base na estrutura de filas, avalie as seguintes asserções e a relação proposta entre elas: I. Um novo elemento da Fila somente pode ser inserido na última posição (fim da Fila); um elemento só pode ser removido da primeira posição (início da Fila). PORQUE II. Um novo elemento da Pilha somente pode ser inserido no topo da Pilha; um elemento da Pilha apenas pode ser removido se estiver no final da Pilha. A seguir assinale a alternativa correta. Resposta: A asserção I é uma proposição verdadeira e a II é uma proposição falsa.
Compartilhar