Você está na página 1de 52

Algoritmos e Programação Estruturada: Programação Estruturada para

Dev

Questão 1
Correta
Questão com problema?
Uma pilha é uma estrutura de dados do tipo LIFO (Last in, First out), ou seja, na qual o último
elemento a entrar é o primeiro a sair. Assim, nos elementos que ainda permanecem, o que está no
topo da pilha será o primeiro a ser removido. Conforme Tenenbaum, Langsam e Augenstein
(2007), uma pilha possui uma estrutura que pode ser declarada contendo dois objetos: um
ponteiro, que irá armazenar o endereçamento inicial da pilha; e um valor inteiro, que irá indicar a
posição do topo da pilha.
Considerando a pilha apresentada no texto, para sua utilização primeiramente é necessário:
Sua resposta
Correta
criar a declaração da estrutura da pilha, criar a pilha com a alocação dinâmica e criar as funções
para inserir e remover dela.

Questão 2
Incorreta
Questão com problema?
Observe a figura abaixo referente as operações em uma Pilha:

I. Na figura podemos observar uma sequência de operações para inserir um novo elemento na
Pilha com a função pop( ),
PORQUE

II. Com a função push( ) é realizada a remoção do elemento da Pilha.


Analise com cuidado as duas proposições, verifique se cada uma é verdadeira ou falsa, e marque
a alternativa correta:
Sua resposta
Incorreta
As asserções I e II são proposições verdadeiras, e a II é uma justificativa da I.

Solução esperada

As asserções I e II são proposições falsas.

Questão 3
Correta
Questão com problema?
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 contexto, analise o trecho a seguir, completando as lacunas.

A ____________ é uma estrutura do tipo ____________, na qual os elementos são inseridos,


consultados e removidos apenas na extremidade inicial da estrutura, conhecida como
____________.
Assinale a alternativa que preenche corretamente as lacunas.
Sua resposta
Correta
pilha / LIFO / topo.
Questão 4
Correta
Questão com problema?
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áximo da 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.
Sua resposta
Correta
As afirmativas I, II e III estão corretas.
Questão 5
Correta
Questão com problema?
Para a remoção de um elemento de uma pilha, é necessário que ela seja realizada somente pelo
topo da pilha, usando a função pop(). A implementação do trecho de código para a remoção de
elementos do topo da pilha pode ser declarada como no modelo a seguir, utilizando a
função pop_pilha( ):

float pop_pilha(struct Pilha *p){


float aux = p -> proxElem [p -> topo];
p -> topo--;
return aux;
}

Baseado na implementação do trecho do texto, avalie as afirmações a seguir:


I - No trecho apresentado, a função pop_pilha( ) remove a struct da pilha.

• II - A variável aux declarada recebe o elemento que está no topo.

III - Na linha 3 no código o valor do topo é decrementado.


É correto apenas o que se afirma em:
Sua resposta
Correta
II e III.

Questão 1
Correta
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.

Considerando o contexto, avalie o programa a seguir, observando as duas funções criadas sobre
a recursividade.

#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
Correta
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.

Questão 2
Correta
Questão com problema?
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.
Sua resposta
Correta
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.

Questão 3
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, ...

Observe a função para o cálculo da sequência de Fibonacci e que usa o recurso de recursividade.

int fibonacci (int n)


{ int s1, s2 ;
if (n == 0) return 1;
else if (n == 1) return 1;
else {
s1 = fibonacci(n-1);
s2 = fibonacci(n-2);
return s1 + s2;
}
}

Neste contexto,avalie as afirmativas a seguir:


I - A recursividade é indicada quando um problema é menor, pois desta forma o programa ficará
ainda mais veloz.

II - Devemos evitar o uso de recursividade quando um problema é muito repetitivo, o ideal é


chamar funções menores e que podem fazer o mesmo serviço.

III - A recursividade é indicada quando um problema é maior e pode ser dividido em instâncias
menores do mesmo problema, porém considerando a utilização dos recursos computacionais que
cada método empregará.

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.

Questão 4
Correta
Questão com problema?
Conforme Mizrahi (2008) o escopo de uma variável é definido pelas regiões (blocos) onde a
variável pode ser utilizada e é nesta hora que surge o conceitos das variáveis globais e variáveis
locais. Variáveis globais são aquelas declaradas no início de um algoritmo. São visíveis, ou seja,
podem ser utilizadas no algoritmo principal e por todos as funções. As variáveis locais são
aquelas declaradas no início de uma função. São visíveis, ou seja, podem ser utilizadas somente
pela função onde foram declaradas.

Observe o programa a seguir:

#include <stdio.h>int fat (int


n){ int res = 1; while (n >
1) { res = res * n; n--
; } return res;}int main (
){ int n, res; printf("Entre
com o valor de n:
"); scanf("%d", &n); res =
fat(n+1) /
(n+1); printf("Fatorial de
%d = %d\n", n, res ); return
0;}
Considerando o programa apresentado, avalie as afirmativas a seguir:

I. O programa apresentado está errado pois a variável res foi declarada duas vezes, causando
um erro de compilação.

II. A função fat está escrita antes da função main ( ) porém, o programa começa sempre pela
função main ( ) independentemente da quantidade de funções que possam ter antes do main ( ).

III. Para a função fat, o parâmetro n funciona como uma variável local (ou seja, válida dentro
da função apenas), juntamente com a variável res.

IV. A função fat possui a variável n e a variável n recebe seu valor no instante da chamada da
função dentro da função main ( ).
É correto o que se afirma em:
Sua resposta
Correta
Apenas as afirmativas II, III e IV estão corretas.

Questão 5
Correta
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.

A figura a seguir demonstra o escopo das variáveis de um programa:


Com base no contexto apresentado, avalie as seguintes asserções e a relação proposta entre elas:

I. A utilização de variáveis globais permite otimizar a alocação de memória, pois em vários casos
o desenvolvedor não precisará criar variáveis locais. Por outro lado, essa técnica de programação
deve ser usada com cautela, pois variáveis locais são criadas e destruídas ao fim da função,
enquanto as globais permanecem na memória durante todo o tempo de execução.

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.

Analise atentamente as asserções e assinale a alternativa correta.


Sua resposta
Correta
A asserção I é uma proposição verdadeira, e a II é uma proposição falsa.

Questão 1
Respondida

Talvez seja necessário saber quais elementos fazem parte de uma lista em determinado
momento de um sistema. Para tal, é necessário percorrer toda a lista ligada para
verificá-los. A lista ligada pode ser impressa com todos os seus elementos e é possível
utilizar o trecho de código a seguir: void imprimir (Lista* l) { Lista* p;
printf(“Elementos:\n”); Por ser uma função que percorrerá toda a lista e de impressão
em tela, é possível declará-la como VOID, uma função que não retornará valor para a
função principal. for (p = l; p != NULL; p = p -> prox) { printf(“ %d -> “, p -> info); }
} Baseado no trecho de comando FOR, avalie as seguintes asserções e a relação
proposta entre elas: I. Neste trecho, uma condição de repetição FOR percorre a lista e
envia todos os elementos encontrados nela para a memória.

PORQUE II. Na função principal, declara-se apenas a chamada da função imprimir(),


passando como parâmetro a lista na qual deseja-se imprimir.

A respeito dessas asserções, assinale a alternativa correta:

• As asserções I e II são proposições verdadeiras, e a II é uma justificativa da I.

• As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa da


I.
• A asserção I é uma proposição verdadeira, e a II é uma proposição falsa.

• A asserção I é uma proposição falsa, e a II é uma proposição verdadeira.

• As asserções I e II são proposições falsas.

Sua resposta
As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa da I.

A asserção I é uma proposição falsa, e a asserção II é uma proposição verdadeira. I - FALSA -


Neste trecho, uma condição de repetição FOR percorre a lista e IMPRIME todos os elementos
encontrados nela. II - VERDADEIRA - Na função principal, declara-se apenas a chamada da
função imprimir(), passando como parâmetro a lista na qual deseja-se imprimir.

Questão 2
Respondida

Com uma lista ligada criada, pode-se implementar o uso de funções para a remoção de
elementos da lista. Segundo Celes (2004), a função para remover um elemento é mais
trabalhosa e complexa, e precisa de informações como parâmetros de remoção, o valor
do elemento e a lista. Assim, deve-se atualizar o valor da lista sem o elemento
removido. Com base no conceito de remoção de elementos, analise julgue as
afirmações que se seguem. I - Caso o primeiro elemento da lista seja o elemento a ser
retirado, deve-se manter o valor da lista com o ponteiro para o primeiro elemento, já
que o espaço alocado permanece no local.
• II - Se o elemento a ser retirado da lista pela função estiver no meio desta, o elemento
anterior deverá apontar para o elemento seguinte do qual será removido e, depois
disso, liberar a alocação do elemento removido.
III -Pode-se utilizar vários trechos de código em uma função para realizar as
operações de remoção da lista, sendo do início ou de outra posição desta.
É correto apenas o que
• I.

• II.

• III.

• II e III.

• I e III.

Sua resposta
II e III.

Com base no conceito de remoção de elementos, as asserções a seguir devem ser analisadas
assim: I - FALSA - Caso o primeiro elemento da lista seja o elemento a ser retirado, deve-
se ATUALIZAR o valor da lista com o ponteiro para o SEGUNDO ELEMENTO, LIBERANDO
O ESPAÇO ALOCADO DO ELEMENTO RETIRADO. II - VERDADEIRA - Se o elemento a
ser retirado da lista pela função estiver no meio desta, o elemento anterior deverá apontar para o
elemento seguinte do qual será removido e, depois disso, liberar a alocação do elemento
removido. III - FALSA - Pode-se utilizar UM ÚNICO TRECHO de código em uma função para
realizar as operações de remoção da lista, sendo do início ou de outra posição desta.

Questão 3
Respondida

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.

• O programa está errado pois não foi utilizado um ponto e vírgula após o int main
( ) e o programa deverá ficar da seguinte forma: int main ( ); .

• O erro do programa é o tipo de retorno da função, deveria ser utilizado o


tipo int, ficando da seguinte forma: int raio ( ); .
• O problema do programa é que o nome da função é raio, como é um cálculo
não podemos chamar uma função com o nome do cálculo que será
executado.
• O erro do programa está no return 0, quando há função no programa
devemos obrigatoriamente utilizar o return 1.

• 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.

Sua 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.

A frase corretamente preenchida é: 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.O programa deve ser criado da seguinte
maneira: #include <stdio.h> #define pi 3.1415 float raio () { float r, area; printf("Digite o
raio: "); scanf("%f",&r); area = pi * r * r; return area; //OBRIGATÓRIO } int main (
) { float result; result = raio ( ); printf("Area do circulo = %.2f \n",result); return 0; }
Questão 4
Respondida

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. Tendo como referência a remoção de elementos de lista, avalie as
seguintes asserções e a relação proposta entre elas: 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.

• As afirmativas I e II são falsas.

• A afirmativa I é verdadeira e afirmativa II é falsa.

• A afirmativa I é falsa e afirmativa II é verdadeira.

• As afirmativas I e II são verdadeiras e a II é uma justificativa da I.

• As afirmativas I e II são verdadeiras, mas a II não é uma justificativa da I.

Sua resposta
As afirmativas I e II são verdadeiras e a II é uma justificativa da I.

Resolução: As duas afirmativas são verdadeiras e a segunda complementa a primeira. O


primeiro elemento da lista seja o elemento a ser retirado, deve atualizar o valor da lista com o
ponteiro para o segundo elemento e assim, liberar o espaço alocado do elemento retirado. 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.
Questão 6
Sem resposta

Uma estrutura de dados do tipo "pilha" representa um conjunto dinâmico cujos


elementos são inseridos e retirados de acordo com o seguinte protocolo: o último
elemento que entra no conjunto é o primeiro que sai. Este protocolo é amplamente
conhecido como LIFO, do inglês Last in, First out (último a entrar, primeiro a sair). É
possível inserir um elemento na pilha a qualquer momento, mas somente o elemento
inserido mais recentemente pode ser removido a qualquer momento. Considere a pilha
"p", bem como a função "func". Pilha "p": 4 <- topo 3 0 1 1 Função: void func(struct
Pilha* p) {
assert(p != NULL); struct Pilha* aux = criar();
int x = 0;

while(vazia(p) == false) {
empilhar(aux, desempilhar(p));
} while(vazia(aux) == false) {
int elemento = desempilhar(aux);
x += elemento;
empilhar(p, elemento);
}

empilhar(p, x); liberar(aux);


}
Assinale a alternativa que apresenta corretamente o elemento que estará no topo da
pilha "p", após a execução da função "func" sobre essa pilha.

• 0.

• 9.

• 5.
• 4.

• A função contém erro e, portanto, não pode ser compilada e executada.

Sua resposta
4.

Alternativa correta: 9 Considerando a função "func" a seguir: 01. void func(struct Pilha* p) {
02. assert(p != NULL); 03. struct Pilha* aux = criar();
04. int x = 0;
05.
06. while(vazia(p) == false) {
07. empilhar(aux, desempilhar(p));
08. } 09. while(vazia(aux) == false) {
10. int elemento = desempilhar(aux);
11. x += elemento;
12. empilhar(p, elemento);
13. }
14.
15. empilhar(p, x); 16. liberar(aux);
17. } A função "func" é responsável por somar todos os elementos contidos em uma pilha e,
posteriormente, empilhar o resultado nesta pilha. Contudo, para que isso seja feito sem alterar a
ordem dos elementos da pilha "p", inicialmente os elementos devem ser inseridos em uma pilha
auxiliar "aux" (linhas 6 a 8). Logo após, os elementos são removidos da pilha "aux" e
devolvidos para a pilha "p" (linhas 9 a 13). Durante esse processo, os elementos da pilha são
somados e o valor da soma é armazenado na variável "x" (linha 11). Por fim, o valor de "x" é
empilhado na pilha "p" (linha 15). Dessa forma, o topo sempre conterá a soma de todos os
elementos da pilha. Considerando a pilha "p" a seguir, o resultado a ser colocado no topo será
9. Pilha "p": 4 <- topo 3 0 1 1

Questão 8
Sem resposta

Leia o trecho de programa a seguir: #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; } De acordo com o trecho de programa, analise as asserções
a seguir: 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.

A respeito dessas asserções, assinale a alternativa correta:

• As asserções I e II são proposições verdadeiras, e a II é uma justificativa da I.

• As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa da


I.

• A asserção I é uma proposição verdadeira, e a II é uma proposição falsa.

• A asserção I é uma proposição falsa, e a II é uma proposição verdadeira.

• As asserções I e II são proposições falsas.

Sua resposta
As asserções I e II são proposições verdadeiras, e a II é uma justificativa da I.

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 - 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
extern. II - VERDADEIRA - 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.
Questão 9
Sem resposta

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. Considerando as
informações apresentadas, analise as afirmativas a seguir: I. Em uma pilha, os
elementos são inseridos no início e removidos do início, por isso esta estrutura de
dados é conhecida como FIFO (First in, First out). II. A operação “remover do início”
pode ser facilmente realizada nas estruturas de dados lista e fila, computacionalmente
falando. Esta operação pode ser realizada em ambas as estruturas com uma quantidade
constante de passos, independentemente da quantidade de elementos. III. A função
"free()", pertencente à biblioteca “stdlib.h”, é utilizada para liberar o espaço reservado da
memória, quando a mesma não for mais necessária.
Considerando o contexto apresentado, é correto o que se afirma em:

• I, apenas.

• I e II, apenas.

• II e III, apenas.

• III, apenas.

• I, II e III.

Sua resposta
III, apenas.

Alternativa correta: II e III, apenas. I. Em uma pilha, os elementos são inseridos no início e
removidos do início, por isso esta estrutura de dados é conhecida como FIFO (First in, First
out). INCORRETA, pois em uma pilha, os elementos são inseridos no início e removidos
do topo, por isso esta estrutura de dados é conhecida como LIFO (Last in, First out). II. A
operação “remover do início” pode ser facilmente realizada nas estruturas de dados lista e fila,
computacionalmente falando. Esta operação pode ser realizada em ambas as estruturas com uma
quantidade constante de passos, independentemente da quantidade de elementos. CORRETA,
pois tanto no caso da fila quanto da lista, é possível acessar o primeiro elemento de forma direta,
por meio do ponteiro "inicio", facilitando assim a remoção desse elemento. III. A função
"free()", pertencente à biblioteca “stdlib.h”, é utilizada para liberar o espaço reservado da
memória, quando a mesma não for mais necessária. CORRETA, pois a função "free()" deve ser
utilizada sempre que se deseja desalocar um espaço de memória anteriormente reservado com a
função "malloc".

Questão 10
Sem resposta

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 Considerand
o 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:

• III.

• II e III.

• II.

• I e II.

• I.
Sua resposta
III.

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.

Questão 1
Correta
Questão com problema?
Para criar uma função utiliza-se a seguinte sintaxe:

<tipo de retorno> <nome> (<parâmetros>)


{
<comandos da função>
<retorno> ( )
}

Para cada declaração da função existem parâmetros que são obrigatórios e outros que são
opcionais. Neste contexto, relacione a Coluna A que contém as sintaxe com a Coluna B que
contém as funções.

Coluna A (Sintaxe) Coluna B (Função)

I. <tipo de retorno> A. Identificará a função.

B. Indica qual o tipo de valor a função


II. <nome>
retornará.
III. <parênteses C. Toda função terá o nome
depois do nome> acompanhado por eles.

IV. <comandos da D. Se for void é opcional, porém,


função> quando não for void é obrigatório.

E. Só justifica criar se tiver um


V. <retorno>
conjunto de comandos para realizar.
Assinale a alternativa que contém a associação correta entre as colunas:
Sua resposta
Correta
I-B / II-A / III-C / IV-E / V-D.

Comentário

I-B / II-A / III-C / IV-E / V-D. <tipo de retorno> - Indica qual o tipo de valor a função
retornará. <nome> - Identificará a função. <parênteses depois do nome> - Toda função terá o
nome acompanhado por eles. <comandos da função> - Só justifica criar se tiver um conjunto de
comandos para realizar. <retorno> - Se for void é opcional, porém, quando não for void é
obrigatório.

Questão 2
Correta
Questão com problema?
Conforme Mizrahi (2008) o escopo de uma variável é definido pelas regiões (blocos) onde a
variável pode ser utilizada e é nesta hora que surge o conceitos das variáveis globais e variáveis
locais. Variáveis globais são aquelas declaradas no início de um algoritmo. São visíveis, ou seja,
podem ser utilizadas no algoritmo principal e por todos as funções. As variáveis locais são
aquelas declaradas no início de uma função. São visíveis, ou seja, podem ser utilizadas somente
pela função onde foram declaradas.

Observe o programa a seguir:

#include <stdio.h>int fat (int


n){ int res = 1; while (n >
1) { res = res * n; n--
; } return res;}int main (
){ int n, res; printf("Entre
com o valor de n:
"); scanf("%d", &n); res =
fat(n+1) /
(n+1); printf("Fatorial de
%d = %d\n", n, res ); return
0;}

Considerando o programa apresentado, avalie as afirmativas a seguir:

I. O programa apresentado está errado pois a variável res foi declarada duas vezes, causando
um erro de compilação.

II. A função fat está escrita antes da função main ( ) porém, o programa começa sempre pela
função main ( ) independentemente da quantidade de funções que possam ter antes do main ( ).

III. Para a função fat, o parâmetro n funciona como uma variável local (ou seja, válida dentro
da função apenas), juntamente com a variável res.

IV. A função fat possui a variável n e a variável n recebe seu valor no instante da chamada da
função dentro da função main ( ).
É correto o que se afirma em:
Sua resposta
Correta
Apenas as afirmativas II, III e IV estão corretas.

Comentário

A frase corretamente preenchida é: Apenas as afirmativas II, III e IV estão corretas. A


função main e fat possuem ambas variáveis com o nome res, e que main possui uma variável
chamada n, que é o nome do parâmetro da função fat. Apesar do mesmo nome, elas são
variáveis diferentes. Para a função fat, o parâmetro n funciona como uma variável local (ou
seja, válida dentro da função apenas), juntamente com a variável res. A diferença é que o
parâmetro n recebe seu valor no instante da chamada. O programa sempre inicia sua execução
pela função main.

Questão 3
Correta
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.

Considerando o contexto, avalie o programa a seguir, observando as duas funções criadas sobre
a recursividade.

#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
Correta
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

A frase corretamente preenchida é: 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. O programa apresenta a diferença entre uma função com recursividade e
uma função sem recursividade, podemos observar que existe uma grande diminuição na
quantidade de linhas utilizadas para programar.
Questão 4
Correta
Questão com problema?
Conforme Soffner (2013) a utilização funções com de passagem de parâmetros por referência
está diretamente ligada aos conceitos de ponteiro e endereço de memória. A ideia da técnica é
análoga a passagem por valores, ou seja, a função será definida de modo a receber certos
parâmetros e “quem” faz a chamada do método deve informar esses argumentos. Entretanto, o
comportamento e o resultado são diferentes. Na passagem por referência não será criada uma
cópia dos argumentos passados, na verdade, será passado o endereço da variável e função irá
trabalhar diretamente com os valores ali armazenados.

Observe o programa a seguir:

#include <stdio.h>int testar (int* n1, int* n2){ *n1


= -1; *n2 = -2; printf("\n\n Valores dentro da
função testar(): "); printf("\n n1 = %d e n2 =
%d",*n1,*n2); return 0;}int main ( ){int n1 =
10;int n2 = 20;printf("\n\n Valores antes de
chamar a função: ");printf("\n n1 = %d e n2 =
%d",n1,n2);testar(&n1, &n2);printf("\n\n Valores
depois de chamar a função: ");printf("\n n1 = %d
e n2 = %d",n1,n2);return 0;}
Analisando o contexto e o programa apresentado, assinale a alternativa correta quanto ao uso dos
sinais * (asterisco) e & (e comercial):
Sua resposta
Correta
O * é para o ponteiro e o & é para a passagem de parâmetros por referência.

Comentário

A frase corretamente preenchida é: O * é para o ponteiro e o & é para a passagem de parâmetros


por referência. Com o uso do & a passagem por referência, os valores das variáveis são
alterados. Usamos asterisco para o ponteiro acessar o conteúdo guardado dentro do endereço que
ele aponta.
Questão 5
Correta
Questão com problema?
Conforme Salvetti e Barbosa (1998) as variáveis e constantes, são espaços reservados na
memória RAM (Random Access Memory - Memória de Acesso Aleatório) do computador para
guardar informações que serão utilizadas durante o código do programa. Podem ter valores de
diversos tamanhos e tipos, tais como números inteiros, números reais, caracteres, frases, enfim,
diversas coisas.
Fonte:SALVETTI, D. D., BARBOSA, L. M. Algoritmos. São Paulo: Makron Books, 1998.

Com base no contexto apresentado, avalie as seguintes asserções e a relação proposta entre elas:

I. Para usar de forma mais otimizada a memória RAM do computador, existe uma alternativa
chamada recursividade em cauda. Nesse tipo de técnica a recursividade funcionará como uma
função iterativa.

PORQUE

II. Uma função é caracterizada como recursiva em cauda quando a chamada a si mesmo é a
última operação a ser feita no corpo da função. Nesse tipo de função, o caso base costuma ser
passado como parâmetro, o que resultará em um comportamento diferente.

Analise atentamente as asserções e assinale a alternativa correta.


Sua resposta
Correta
As asserções I e II são proposições verdadeiras, e a II é uma justificativa da I.

Comentário

A frase corretamente preenchida é: As asserções I e II são proposições verdadeiras, mas a II é


uma justificativa da I. Para otimizar a memória, utilizamos a recursividade em cauda. Nesse tipo
de técnica a recursividade funcionará como uma função iterativa. Porque, uma função é
caracterizada como recursiva em cauda quando a chamada a si mesmo é a última operação a ser
feita no corpo da função. Nesse tipo de função, o caso base costuma ser passado como
parâmetro, o que resultará em um comportamento diferente.
Questão 1
Correta
Questão com problema?
As listas ligadas são estruturas de dados conhecidas por serem flexíveis quanto às suas operações
e seu tamanho é dinâmico. Toda lista é composta por nós, e o nó é um conjunto de informações
que permitem apontar para o próximo elemento.
Considere a organização das pessoas na fila do banco, porém seu funcionamento coerente
depende do comportamento da lista ligada, então aplique o conceito de inserção em listas ligadas
para assinalar a alternativa correta:
Sua resposta
Correta
As listas permitem inserção de elementos em qualquer posição.

Comentário

As listas permitem inserção de elementos em qualquer posição, basta que os ponteiros sejam
atualizados para isto.

Questão 2
Correta
Questão com problema?
A pilha representa um conjunto dinâmico cujos elementos são inseridos e retirados de
acordo com o seguinte protocolo: o último elemento que entra no conjunto é o primeiro
que sai. Este protocolo é amplamente conhecido como LIFO, do inglês Last in, First
out (último a entrar, primeiro a sair).
Em uma pilha, a inserção dos elementos X, K, L, M, J, R, P, Q, na respectiva ordem e a remoção
de quatro elementos, resulta no topo da pilha com o dado
Sua resposta
Correta
M.

Comentário

Alternativa correta: M Deve-se atentar para a ordem de inserção dos elementos, bem como para
o protocolo da pilha (último a entrar, primeiro a sair). A seguir, são apresentados os efeitos das
operações mencionadas sobre uma pilha inicialmente vazia: Inserção dos elementos: Q <-
topo P R J M L K X Remoção de quatro elementos: M <- topo L K X
Questão 3
Correta
Questão com problema?
A lista representa um conjunto dinâmico cujos elementos podem ser inseridos e retirados de
qualquer parte da estrutura. Dentre as principais operações que devem estar presentes em uma
ED do tipo fila estão: inserir, remover e obter.

Chamamos de "assinatura de uma função", a primeira linha da declaração de uma função, na qual
podemos identificar o seu tipo de retorno, seu nome (identificador) e sua lista de parâmetros.
Com base no que foi apresentado, assinale a alternativa que representa corretamente a assinatura
da função "obter" de uma lista.
Sua resposta
Correta
int obter(struct Lista* li, int pos)

Comentário

Alternativa correta: int obter(struct Lista* li, int pos) void obter(struct Lista*
li). INCORRETA, pois a função deveria receber a posição do elemento a ser obtido da lista.
Além disso, seu tipo de retorno deveria ser "int", uma vez que o elemento obtido deve ser
retornado pela função. int obter(struct Lista* li). INCORRETA, pois a função deveria receber a
posição do elemento a ser obtido da lista. void obter(struct Lista* li, int pos). INCORRETA,
pois o tipo de retorno deveria ser "int", uma vez que o elemento obtido deve ser retornado pela
função. int obter(struct Lista* li, int pos). CORRETA, pois a função recebe a lista a partir da
qual o elemento deve ser obtido. Além disso, seu tipo de retorno é "int", uma vez que o elemento
obtido deve ser retornado pela função. Por fim, recebe a posição do elemento a ser obtido da
lista. int obter(struct Lista* li). INCORRETA, pois a função deveria receber a posição do
elemento a ser obtido da lista. int obter(int pos). INCORRETA, pois a função deveria receber a
lista a partir da qual o elemento deve ser obtido.
Questão 4
Correta
Questão com problema?
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.

Considerando as informações apresentadas, analise as afirmativas a seguir:

I. Em uma pilha, os elementos são inseridos no início e removidos do início, por isso esta
estrutura de dados é conhecida como FIFO (First in, First out).
II. A operação “remover do início” pode ser facilmente realizada nas estruturas de dados lista e
fila, computacionalmente falando. Esta operação pode ser realizada em ambas as estruturas com
uma quantidade constante de passos, independentemente da quantidade de elementos.
III. A função "free()", pertencente à biblioteca “stdlib.h”, é utilizada para liberar o espaço
reservado da memória, quando a mesma não for mais necessária.
Considerando o contexto apresentado, é correto o que se afirma em:
Sua resposta
Correta
II e III, apenas.

Comentário

Alternativa correta: II e III, apenas. I. Em uma pilha, os elementos são inseridos no início e
removidos do início, por isso esta estrutura de dados é conhecida como FIFO (First in, First
out). INCORRETA, pois em uma pilha, os elementos são inseridos no início e removidos
do topo, por isso esta estrutura de dados é conhecida como LIFO (Last in, First out). II. A
operação “remover do início” pode ser facilmente realizada nas estruturas de dados lista e fila,
computacionalmente falando. Esta operação pode ser realizada em ambas as estruturas com uma
quantidade constante de passos, independentemente da quantidade de elementos. CORRETA,
pois tanto no caso da fila quanto da lista, é possível acessar o primeiro elemento de forma direta,
por meio do ponteiro "inicio", facilitando assim a remoção desse elemento. III. A função
"free()", pertencente à biblioteca “stdlib.h”, é utilizada para liberar o espaço reservado da
memória, quando a mesma não for mais necessária. CORRETA, pois a função "free()" deve ser
utilizada sempre que se deseja desalocar um espaço de memória anteriormente reservado com a
função "malloc".
Questão 5
Correta
Questão com problema?
A professora de uma escola teve a ideia de pedir que os alunos que apresentassem uma breve
palestra sobre alguns assuntos da atualidade. Para isso, ela dividiu a turma em grupos e pediu que
eles mesmos escolhessem os assuntos com os quais gostariam de trabalhar. Contudo, para que
não houvesse dois ou mais grupos com o mesmo assunto, ela definiu o seguinte protocolo: o
grupo que primeiro se cadastrar no fórum virtual da disciplina, será o primeiro a escolher
o assunto da sua palestra. O segundo a realizar o cadastro, será o segundo a escolher o assunto,
não podendo escolher o assunto já definido para o primeiro grupo, e assim sucessivamente.
Considerando o contexto anterior, assinale a alternativa que apresenta corretamente o tipo
de estrutura de dados cujo protocolo de manipulação dos elementos é idêntico ao adotado pela
professora.
Sua resposta
Correta
Fila.

Comentário

Alternativa correta: Fila. Fila. CORRETA, pois a fila representa um conjunto dinâmico,
cujos elementos são inseridos e retirados de acordo com o seguinte protocolo: o
primeiro elemento que entra no conjunto é o primeiro que sai. Este protocolo é
amplamente conhecido como FIFO, do inglês First in, First out (primeiro a entrar,
primeiro a sair). Aplicando esse conceito ao problema em questão, o primeiro grupo a
se cadastrar no fórum da disciplina, será o primeiro a escolher o assunto da palestra.
Pilha. INCORRETA, pois em uma pilha, o último elemento a ser inserido é o primeiro a
sair. Assim, é como se o último grupo a se cadastrar fosse o primeiro a escolher o
assunto da palesta. Lista simples e Lista dupla. INCORRETAS, pois essas duas
estruturas de dados permitem a manipulação de elementos em qualquer ordem. Assim,
é como se um grupo aleatoriamente escolhesse o assunto da palestra em primeiro
lugar. Pilha dupla. INCORRETA, pois a "Pilha dupla" não é uma estrutura de dados
conhecida.
Questão 1
Respondida

Conforme Soffner (2013) a utilização funções com de passagem de parâmetros por


referência está diretamente ligada aos conceitos de ponteiro e endereço de memória. A
ideia da técnica é análoga a passagem por valores, ou seja, a função será definida de
modo a receber certos parâmetros e “quem” faz a chamada do método deve informar
esses argumentos. Entretanto, o comportamento e o resultado são diferentes. Na
passagem por referência não será criada uma cópia dos argumentos passados, na
verdade, será passado o endereço da variável e função irá trabalhar diretamente com os
valores ali armazenados. Observe o programa a seguir:
#include <stdio.h>int testar (int* n1, int* n2){ *n1 = -
1; *n2 = -2; printf("\n\n Valores dentro da função
testar(): "); printf("\n n1 = %d e n2 =
%d",*n1,*n2); return 0;}int main ( ){int n1 = 10;int
n2 = 20;printf("\n\n Valores antes de chamar a
função: ");printf("\n n1 = %d e n2 =
%d",n1,n2);testar(&n1, &n2);printf("\n\n Valores
depois de chamar a função: ");printf("\n n1 = %d e
n2 = %d",n1,n2);return 0;}
Analisando o contexto e o programa apresentado, assinale a alternativa correta quanto
ao uso dos sinais * (asterisco) e & (e comercial):

• O * é para a passagem de parâmetros por valor e o & é para a passagem de


parâmetros por referência.

• O * é para o ponteiro e o & é para a passagem de parâmetros por referência.


• O * é para o vetor e o & é para o ponteiro.
• O * é para o ponteiro e o & é para a variável local.

• O * é para variável local e o & é para a variável global.


Sua resposta
O * é para o ponteiro e o & é para a passagem de parâmetros por referência.

Questão 2
Respondida

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.

• Fila e Lista.

• Lista e Fila.

• Pilha e Fila.

• Pilha e Lista.

• Fila e Pilha.

Sua resposta
Fila e Pilha.
Questão 3
Respondida

Com uma lista ligada criada, pode-se implementar o uso de funções para a remoção de
elementos da lista. Segundo Celes (2004), a função para remover um elemento é mais
trabalhosa e complexa, e precisa de informações como parâmetros de remoção, o valor
do elemento e a lista. Assim, deve-se atualizar o valor da lista sem o elemento
removido. Com base no conceito de remoção de elementos, analise julgue as
afirmações que se seguem. I - Caso o primeiro elemento da lista seja o elemento a ser
retirado, deve-se manter o valor da lista com o ponteiro para o primeiro elemento, já
que o espaço alocado permanece no local.
• II - Se o elemento a ser retirado da lista pela função estiver no meio desta, o elemento
anterior deverá apontar para o elemento seguinte do qual será removido e, depois
disso, liberar a alocação do elemento removido.
III -Pode-se utilizar vários trechos de código em uma função para realizar as
operações de remoção da lista, sendo do início ou de outra posição desta.
É correto apenas o que

• I.

• II.

• III.

• II e III.

• I e III.

Sua resposta
II.
Questão 4
Respondida

Uma Fila é um conjunto ordenado de itens, na qual itens podem ser extraídos de sua
extremidade inicial e novos itens podem ser inseridos na sua extremidade final. Observe
a imagem a

seguir. Associe
as colunas que descrevem as principais operações com Filas:
• 1. Inicializar
• 2. Empilhar
• 3. Desempilhar
• 4. Frente
• 5. Vazia A. Insere um elemento no fundo (cauda) da fila. B. Retorna o elemento que
está na frente (cabeça) da fila. C. Indica se a fila está vazia. D. Retira um elemento que
está na frente (cabeça) da fila. E. Cria uma fila vazia.
Analise os itens de cada coluna e após escolha a alternativa verdadeira que corresponde
a associação correta entre os itens:

• 1 – C; 2 – A; 3 – B; 4 – D; 5 – E.

• 1 – E; 2 – A; 3 – D; 4 – B; 5 – C.

• 1 – E; 2 – D; 3 – A; 4 – C; 5 – B.

• 1 – C; 2 – A; 3 – D; 4 – B; 5 – E.

• 1 – E; 2 – A; 3 – C; 4 – B; 5 – D.
Sua resposta
1 – E; 2 – A; 3 – D; 4 – B; 5 – C.

Questão 5
Respondida

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. Uma Fila Circular utiliza menos
instruções a serem executadas, podendo ser mais adequada e eficiente na utilização de
programação. Diferentemente da estrutura de Fila, a Fila Circular possui a seguinte
definição, em sua implementação, quanto a variáveis:
• I. Um vetor para os elementos;
• II. Um valor inteiro para o tamanho da Fila;
III. Um valor inteiro para o início da Fila; IV. Um valor inteiro para o fim da Fila.
Analise atentamente as afirmativas e escolha a opção correta sobre a estrutura de Fila
Circular:

• Somente a afirmativa IV estão corretas.

• Somente as afirmativas I e II estão corretas.

• Somente as afirmativas II e III estão corretas.

• Somente as afirmativas I, III e IV estão corretas.

• As afirmativas I, II, III e IV estão corretas.


Sua resposta
Somente as afirmativas I, III e IV estão corretas.

As afirmativas I, II, III e IV estão corretas. As afirmativas apresentam a definição, em sua


implementação,da Fila Circular.

Questão 6
Sem resposta

Analise o trecho de programa a seguir: #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; } Agora, avalie as seguintes asserções e a relação proposta
entre elas. I - Foi criado um ponteiro inteiro e, após a função ser chamada, seu
resultado foi armazenado no ponteiro chamado memoria.

PORQUE II - 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.

A respeito dessas asserções, assinale a alternativa correta:

• As asserções I e II são proposições verdadeiras, e a II é uma justificativa da I.

• As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa da


I.

• A asserção I é uma proposição verdadeira, e a II é uma proposição falsa.


• A asserção I é uma proposição falsa, e a II é uma proposição verdadeira.

• As asserções I e II são proposições falsas.

Sua resposta
As asserções I e II são proposições verdadeiras, e a II é uma justificativa da I.

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 7
Sem resposta

Um dos problemas mais comuns para solucionar com pilhas são os labirintos. Estes são
desafios criados como problematização de estrutura de dados. As pilhas podem ser
aplicadas também no uso de algoritmos de Backtracking, que consiste em criar
marcações para onde o algoritmo pode retornar. Em um labirinto, por exemplo, para
encontrar um caminho correto, pode-se andar pelo labirinto até encontrar uma divisão
nesse caminho. Assim, adiciona-se a posição onde a divisão ocorre, junto ao caminho
escolhido na pilha, e segue-se por ele. Caso o caminho escolhido não possua uma saída,
é removido o ponto anterior da pilha, voltando ao último ponto em que o labirinto se
dividiu, e recomeça-se por um outro caminho ainda não escolhido, adicionando na pilha
o novo caminho. O algoritmo de Backtracking pode ser aplicado também como
operação de desfazer. Baseado no algoritmo de Backtracking, complete as lacunas da
asserção a seguir: Considerando o contexto apresentado, complete as lacunas a seguir:
Para implementar a operação de Backtracking, as ações são ____________ em ____________
e, caso a ____________ seja realizada, o estado anterior do sistema pode ser ____________,
ou a ação ____________ pode ser executada.
Assinale a alternativa que completa corretamente as lacunas:

• armazenadas / uma pilha / operação de refazer / restaurado / realizada.

• aplicadas / uma pilha / operação de desfazer / eliminado / contrária à realizada.

• armazenadas / uma pilha / operação de desfazer / restaurado / contrária à


realizada.

• armazenadas / várias pilhas / operação de desfazer / eliminado / realizada.

• aplicadas / uma pilha / operação de refazer / restaurado / contrária à realizada.

Sua resposta
armazenadas / uma pilha / operação de desfazer / restaurado / contrária à realizada.

Questão 8
Sem resposta

A fila representa um conjunto dinâmico, cujos elementos são inseridos e retirados de


acordo com o seguinte protocolo: o primeiro elemento que entra no conjunto é o
primeiro que sai. Este protocolo é amplamente conhecido como FIFO, do inglês First in,
First out (primeiro a entrar, primeiro a sair). Ou seja, é possível inserir um elemento na fila
a qualquer momento, mas somente o elemento que está na fila há mais tempo pode ser
removido a qualquer momento. Dentre as principais operações que devem estar presentes
em uma Estrutura de Dados do tipo fila estão: enfileirar, desenfileirar e inicio. Chamamos
de "assinatura de uma função", a primeira linha da declaração de uma função, na qual
podemos identificar o seu tipo de retorno, seu nome (identificador) e sua lista de
parâmetros.
Com base no que foi apresentado, assinale a alternativa que representa corretamente a
assinatura da função "enfileirar" de uma fila.

• void enfileirar(struct Fila* f)

• int enfileirar(struct Fila* f)

• void enfileirar(struct Fila* f, int item)

• void enfileirar(int item)

• void enfileirar(struct Fila* f, int item, int pos)

Sua resposta
int enfileirar(struct Fila* f)

Alternativa correta: void enfileirar(struct Fila* f, int item) void enfileirar(struct Fila*
f). INCORRETA, pois falta informar o item a ser enfileirado. int enfileirar(struct Fila*
f), INCORRETA, pois falta informar o item a ser enfileirado. Além disso, a função enfileirar
não retorna qualquer valor, portanto, seu tipo de retorno deveria ser "void". void enfileirar(struct
Fila* f, int item). CORRETA, pois informa corretamente a fila em que o elemento será inserido,
o item a ser inserido e como a função não retorna qualquer valor, seu tipo de retorno é
"void". void enfileirar(int item). INCORRETA, pois não informa a fila em que o elemento será
inserido. void enfileirar(struct Fila* f, int item, int pos). INCORRETA, pois há um parâmetro
desnecessário na assinatura da função, a saber "pos". Um vez que, em uma fila, os elementos são
inseridos apenas no final, não há necessidade de se informar a posição em que o elemento deve
ser inserido.
Questão 9
Sem resposta

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:

• I, apenas.

• I e III, apenas.

• II, apenas.

• II e III, apenas.

• III, apenas.

Sua resposta
I, apenas.
Questão 10
Sem resposta

Conforme Mizrahi (2008) o escopo de uma variável é definido pelas regiões (blocos)
onde a variável pode ser utilizada e é nesta hora que surge o conceitos das variáveis
globais e variáveis locais. Variáveis globais são aquelas declaradas no início de um
algoritmo. São visíveis, ou seja, podem ser utilizadas no algoritmo principal e por todos
as funções. As variáveis locais são aquelas declaradas no início de uma função. São
visíveis, ou seja, podem ser utilizadas somente pela função onde foram
declaradas. Observe o programa a seguir:
#include <stdio.h>int fat (int
n){ int res = 1; while (n >
1) { res = res * n; n--
; } return res;}int main ( ){ int
n, res; printf("Entre com o valor
de n: "); scanf("%d", &n); res
= fat(n+1) /
(n+1); printf("Fatorial de %d =
%d\n", n, res ); return 0;}
Considerando o programa apresentado, avalie as afirmativas a seguir: I. O programa
apresentado está errado pois a variável res foi declarada duas vezes, causando um erro
de compilação. II. A função fat está escrita antes da função main ( ) porém, o programa
começa sempre pela função main ( ) independentemente da quantidade de funções que
possam ter antes do main ( ). III. Para a função fat, o parâmetro n funciona como uma
variável local (ou seja, válida dentro da função apenas), juntamente com a variável res.
IV. A função fat possui a variável n e a variável n recebe seu valor no instante da
chamada da função dentro da função main ( ).
É correto o que se afirma em:

• Apenas as afirmativas II, III e IV estão corretas.

• Apenas as afirmativas I, III e IV estão corretas.

• Apenas as afirmativas I, II e III estão corretas.


• Apenas as afirmativas I, II e IV estão corretas.

• As afirmativas I, II, III e IV estão corretas.

Sua resposta
Apenas as afirmativas II, III e IV estão corretas.

Questão 1
Respondida
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.

Tendo como referência a remoção de elementos de lista, avalie as seguintes asserções e a relação
proposta entre elas:

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.

• As afirmativas I e II são falsas.

• A afirmativa I é verdadeira e afirmativa II é falsa.

• A afirmativa I é falsa e afirmativa II é verdadeira.

• As afirmativas I e II são verdadeiras e a II é uma justificativa da I.


• As afirmativas I e II são verdadeiras, mas a II não é uma justificativa da I.

Sua resposta
As afirmativas I e II são verdadeiras e a II é uma justificativa da I.

Questão 2
Respondida
Uma lista ligada ou lista encadeada é uma forma de estruturar dados para o seu armazenamento,
ou seja, é determinar a forma de inseri-los ou removê-los, sendo necessário organizá-los em
células e inserir um ponteiro que aponte para o primeiro elemento e outro que aponte para o seu
fim.

De acordo com Salvetti (1998, p.147) a busca consiste em verificar se um valor dado ocorre ou
não na lista. Na Figura-1 podemos visualizar a função de busca em uma lista.

Figura-1 - Lista de Busca

Fonte: Werlich, 2017.

Com base nas funcionalidades de busca de uma lista ligada, apresentada na Figura-1, avalie a
sequência de busca proposta a seguir:

• 1. Recebe a informação referente ao elemento a pesquisar

• 2. Retorna NULL, caso o elemento não seja encontrado na lista.


• 3. Retorna o ponteiro do nó da lista que representa o elemento.

• 4. Percorre a lista até encontrar o elemento ou chegar ao fim da lista.


A seguir assinale a alternativa que apresenta a ordem correta dos procedimentos realizados pela
função.

• 1-2-3-4

• 1-4-3-2

• 4-2-3-1

• 2-4-3-1

• 3-2-1-4

Sua resposta
1-4-3-2

Questão 3
Respondida
Lista duplamente encadeada: Segundo ORTH (2002) afirma que Listas Duplamente Encadeadas
possuem além de seus campos, mais dois nós (ou nodos). Um nó aponta para o próximo
elemento da lista e outro para o último elemento da lista. Observe a Figura-1 a seguir.

Figura-1 - Lista Duplamente Encadeada

Fonte: Werlich, 2017.


Com relação a Lista Ligada Duplamente Encadeada, avalie as seguintes afirmativas:

I.Cada elemento tem um ponteiro para o próximo elemento e um ponteiro para o elemento
anterior.

• II.Dado um elemento, é possível acessar o próximo elemento e o elemento anterior.

III. Dado um ponteiro para o último elemento da lista, é possível percorrer a lista em ordem
inversa.
A seguir assinale a alternativa correta.

• Somente a afirmativa I está correta.

• Somente a afirmativa II está correta.

• Somente as afirmativas I e III estão corretas.

• Somente as afirmativas II e III estão corretas.

• As afirmativas I, II e III estão corretas.

Sua resposta
As afirmativas I, II e III estão corretas.

Questão 4
Respondida

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:
I. Utiliza-se as Filas Circulares como solução para várias situações.

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.

A seguir assinale a alternativa correta.

• as asserções I e II são proposições verdadeiras, mas a II não é uma justificativa da I.

• a asserção I é uma proposição verdadeira, e a II é uma proposição falsa


• a asserção I é uma proposição falsa, e a II é uma proposição verdadeira.
• as asserções I e II são proposições falsas.
• as asserções I e II são proposições verdadeiras e a II é uma justificativa da I.

Sua resposta
as asserções I e II são proposições verdadeiras e a II é uma justificativa da I.

Questão 5
Respondida
Analise o trecho de programa a seguir:

#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;
}

Agora, avalie as seguintes asserções e a relação proposta entre elas.

I - Foi criado um ponteiro inteiro e, após a função ser chamada, seu resultado foi armazenado no
ponteiro chamado memoria.

PORQUE

II - 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.

A respeito dessas asserções, assinale a alternativa correta:

• As asserções I e II são proposições verdadeiras, e a II é uma justificativa da I.

• As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa da I.

• A asserção I é uma proposição verdadeira, e a II é uma proposição falsa.

• A asserção I é uma proposição falsa, e a II é uma proposição verdadeira.

• As asserções I e II são proposições falsas.

Sua resposta
As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa da I.
Questão 6
Sem resposta
Conforme Tenenbaum et al. (2007, p. 225), uma lista é uma estrutura de dados dinâmica. O
número de nós de uma lista pode variar consideravelmente à medida que são inseridos e
removidos elementos. A natureza dinâmica de uma lista pode ser comparada à natureza estática
de um vetor cujo tamanho permanece constante.
Ao criar uma lista ligada, conforme a estrutura apresentada no parágrafo anterior, a lista é criada
sem nenhum valor, ou seja, é vazia. 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.
Pode-se inserir um elemento em uma lista em três situações diferentes. Ao inserir uma
informação na lista ligada, é imprescindível que:

• seja atualizado o valor do ponteiro dessa lista, assim a lista ligada deve apontar ao novo
elemento da lista.

• seja atualizado o valor do nó dessa lista, assim a lista ligada deve apontar ao novo
elemento da lista.

• seja atualizado o valor da lista ligada, assim ela deve apontar ao novo elemento da lista.

• seja atualizado o valor do ponteiro dessa lista, assim a lista ligada deve apontar ao último
elemento da lista.

• seja atualizado o valor do nó dessa lista, assim a lista ligada deve apontar ao último
elemento da lista.

Sua resposta
seja atualizado o valor do nó dessa lista, assim a lista ligada deve apontar ao novo elemento da
lista.

Conforme conceito de inserção de elementos, a resposta certa é: Pode-se inserir um elemento


em uma lista em três situações diferentes. Ao inserir uma informação na lista ligada, é
imprescindível que seja atualizado o valor do ponteiro dessa lista, assim a lista ligada deve
apontar ao novo elemento da lista.
Questão 7
Sem resposta

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.

I. Um função que podemos implementar na Fila, é a de verificação se a Fila está vazia ou não.
No trecho de remoção de um elemento da Fila, já realizamos a chamada a esta função, e ela pode
ser implementada com o trecho de código a seguir: int fila_vazia (Fila* f) { return (f -> n ==
0); }

PORQUE

II. É impossível remover um elemento de uma Fila vazia.

Agora assinale a alternativa correta.

• as asserções I e II são proposições verdadeiras, mas a II não é o motivo que justificativa


da implementação da I.
• a asserção I é uma proposição verdadeira, e a II é uma proposição falsa.
• a asserção I é uma proposição falsa, e a II é uma proposição verdadeira.
• as asserções I e II são proposições falsas.
• as asserções I e II são proposições verdadeiras e a II é o motivo que justificativa da
implementação da I.

Sua resposta
a asserção I é uma proposição verdadeira, e a II é uma proposição falsa.

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 8
Sem resposta

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.

A inserção do elemento mostrado na imagem anterior se da

• no início da lista.

• no final da lista.

• primeiro da lista.

• no nulo da lista.

• no meio da lista.

Sua resposta
no meio da lista.
Questão 9
Sem resposta
Uma pilha é uma estrutura de dados do tipo LIFO (Last in, First out), ou seja, na qual o último
elemento a entrar é o primeiro a sair. Assim, nos elementos que ainda permanecem, o que está no
topo da pilha será o primeiro a ser removido.

Neste contexto, julgue as afirmações que se seguem.

I. Uma estrutura de pilha, devem ser implementadas duas operações básicas: empilhar um novo
elemento e desempilhar um elemento.

• II. A operação de empilhar um novo elemento tem a função de inserir um elemento na pilha,
sendo definida na programação em C++ como push_pilha( ).

III. A operação de desempilhar tem a função de remover um elemento do topo da pilha,


sendo utilizada na programação em C++ como pop_pilha( ).
É correto apenas o que se afirma em:

• I.

• II.

• III.

• I e II.

• I, II e III.

Sua resposta
I, II e III.
Questão 10
Sem resposta
As listas ligadas são estruturas de dados conhecidas por serem flexíveis quanto às suas operações
e seu tamanho é dinâmico. Toda lista é composta por nós, e o nó é um conjunto de informações
que permitem apontar para o próximo elemento.
Considere a organização das pessoas na fila do banco, porém seu funcionamento coerente
depende do comportamento da lista ligada, então aplique o conceito de inserção em listas ligadas
para assinalar a alternativa correta:

• As listas só permitem inserção de elementos em seu início.

• As listas só permitem inserção de elementos em seu fim.

• As listas só permitem inserção de elementos em seu início ou seu fim.

• As listas não permitem sobreposição ao inserir elementos.

• As listas permitem inserção de elementos em qualquer posição.

Sua resposta
As listas permitem inserção de elementos em qualquer posição.

Você também pode gostar