Escolar Documentos
Profissional Documentos
Cultura Documentos
Incorreta
Questão com problema?
A recursividade é uma técnica programação usada para tornar o código mais elegante,
organizado, o que pode facilitar a manutenção. Essa técnica, em muitos casos, pode ser
usada para substituir uma estrutura de repetição iterativa, por exemplo, uma que use o
comando for. Uma função recursiva pode substituir uma estrutura de repetição, porém
nem sempre é viável, visto os recursos computacionais necessários para a execução da
recursividade. Uma função recursiva funciona como um laço de repetição, o qual, será
interrompido somente quando o caso base for satisfeito.
#include <stdio.h>
int fatNaoRecursivo(int n){
if(n<2) return 1;
int f=1;
int i;
for(i=2; i<=n; i++) f*=i;
return f;
}
int fatRecursivo(int n){
if(n<2) return 1;
return fatRecursivo(n-1)*n;
}
int main()
{ printf("%d\n",fatNaoRecursivo(6));
printf("%d\n",fatRecursivo(6));
return 0;
}
Analisando o programa proposto, assinale a alternativa correta.
Sua resposta
Incorreta
É mais vantagem utilizar a função sem recursividade para o cálculo do Fatorial, as
funções que utilizam recursividades são muito mais lentas dos que as funções normais.
Solução esperada
O programa demonstra o uso de duas funções, uma com recursividade e a outra não, as
duas funções funcionam, a diferença está na quantidade de linha entre as duas técnicas.
e não há erros de compilação.
Comentário
#include<stdio.h>
int x = 10;
int main(){
int x = -1; int b;
{
extern int x; b = x;
}
printf("\n Valor de x = %d",x);
printf("\n Valor de b (x global) = %d",b);
return 0;
}
I - Na linguagem C, para acessar o valor de uma variável global dentro de uma função
que possui uma variável local com mesmo nome, deve-se usar a instrução externa.
PORQUE
II - Utilizar variáveis globais e locais com mesmo nome na linguagem C necessita criar
uma nova variável chamada “b”, com um bloco de instruções, que atribui à nova
variável o valor “externo” de x.
Solução esperada
Comentário
#include<stdio.h>
#include<stdlib.h>
int* alocar(){
return malloc(200);
}
int main(){
int *memoria;
memoria = alocar();
if(memoria != NULL){
printf("Endereco de memoria alocada = %x",memoria);
}
else{
printf("Memoria nao alocada");
}
return 0;
}
I - Foi criado um ponteiro inteiro e, após a função ser chamada, seu resultado foi
armazenado no ponteiro chamado memoria.
PORQUE
Solução esperada
Comentário
As asserções I e II são proposições verdadeiras, mas a asserção II não é uma
justificativa da asserção I. I - VERDADEIRA - Foi criado um ponteiro inteiro e, após a
função ser chamada, seu resultado foi armazenado no ponteiro chamado memoria. II -
VERDADEIRA - Se o valor do ponteiro memoria é diferente de NULL, então sabe-se
que a alocação foi feita com sucesso e imprime o endereço da primeira posição, caso
contrário, o usuário é informado que a memória não foi alocada.
Questão 4
Incorreta
Questão com problema?
Segundo Manzano (2015) o escopo de uma variável é a relação de alcance que se tem
com o local onde certo recurso se encontra definido, de modo que possa ser visualizado
pelas várias partes do código de um programa.
PORQUE
II. As variáveis locais são aquelas declaradas no início ou dentro de uma função. São
visíveis no programa inteiro, ou seja, podem ser utilizadas por todo o programa. Não há
diferenças efetivas no desempenho do programa entre usar variáveis globais e locais,
deste modo é aconselhável deixar sempre as variáveis como globais.
Solução esperada
Comentário
Questão 5
Incorreta
Questão com problema?
Um programa de computador pode acelerar o resultado de muitos problemas
matemáticos e este é o caso da sequência de Fibonacci. A sequência de Fibonacci é uma
sucessão de números que aparecem em muitos fenômenos da natureza. Descrita no final
do século 12 pelo italiano Leonardo Fibonacci, ela é infinita e começa com 0 e 1. Os
números seguintes são sempre a soma dos dois números anteriores. Portanto, depois de
0 e 1, vêm 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
IV. - Um programa recursivo exige mais espaço de memória e é, na grande maioria dos
casos, mais lento do que uma função normal.
É correto o que se afirma em:
Sua resposta
Incorreta
II e III.
Solução esperada
III e IV.
Comentário
Questão 1
Incorreta
Questão com problema?
A estrutura de Fila é do tipo FIFO (First in, First out), ou seja, o primeiro elemento que
entra na fila é o primeiro elemento a ser removido, assim, todo primeiro elemento que
entra na fila por uma extremidade, saíra primeiro pela outra extremidade. Um aluno
afirmou que a estrutura de Fila é muito similar a uma fila de espera de um caixa
eletrônico em um banco ou até mesmo uma fila para passar as compras em um mercado.
Considerando o contexto apresentado, avalie as seguintes asserções e a relação proposta
entre elas.
PORQUE
Solução esperada
Comentário
Resposta incorreta! Uma 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)). Assim, as asserções I e II são proposições verdadeiras, e a II é o
motivo que justificativa da implementação da I.
Questão 2
Incorreta
Questão com problema?
Segundo Celes et al. (2004), para inserir um elemento na lista ligada, é necessário alocar
o espaço na memória, de forma dinâmica, para armazenar o elemento e ligá-lo à lista
existente. Inserir um novo elemento no início da lista é a forma mais simples de
inserção em uma lista ligada. É possível implementar a função para adicionar um novo
elemento em mais dois pontos da lista. A figura 1 a seguir, mostra uma possibilidade de
inserção de elemento: Figura 1 – Inserção de
elemento: Fonte:
elaborada pelo autor.
Solução esperada
no meio da lista.
Comentário
Solução esperada
Comentário
Uma situação eu 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)). Uma
Fila Circular utiliza menos instruções a serem executadas, podendo ser mais adequada e
eficiente na utilização de programação. Assim, com base em Filas Circulares, avalie as
seguintes asserções e a relação proposta entre elas:
PORQUE
II. As Filas não apresentam uma solução completa, sendo que, mesmo chegando ao final
do vetor poderemos ter a Fila cheia mesmo não estando ocupada, uma vez que
elementos podem ter sido removidos.
Solução esperada
Comentário
Resposta incorreta! Segundo Silva (2007), as Filas não apresentam uma solução
completa, sendo que, mesmo chegando ao final do vetor poderemos ter a Fila cheia
mesmo não estando cheia, uma vez que elementos podem ter sido removidos e para
isso, podemos utilizar as Filas Circulares como solução para esta situação. Assim, a
resposta correta é: as asserções I e II são proposições verdadeiras, e a II é uma
justificativa da I.
Questão 5
Incorreta
Questão com problema?
Podemos remover um elemento da lista ligada, porém é necessário ter certos cuidados.
De acordo com Celes (2004), a função para remover um elemento é mais trabalhosa e
complexa, e precisa de informações como parâmetros para remoção, o valor do
elemento e a lista.
I. Caso o primeiro elemento da lista seja o elemento a ser retirado, devemos atualizar o
valor da lista com o ponteiro para o segundo elemento e assim, liberar o espaço alocado
do elemento retirado.
PORQUE
II. Se o elemento a ser retirado da lista pela função estiver no meio da lista, o elemento
anterior deve apontar para o elemento seguinte do qual será removido e, após isso,
liberarmos a alocação do elemento removido.
Agora assinale a alternativa correta.
Sua resposta
Incorreta
As afirmativas I e II são falsas.
Solução esperada
Comentário