Prévia do material em texto
1
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.
2
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.
3
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.
4
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.
5
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.
6
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
int fatNaoRecursivo(int n){
if(n#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.
8
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.
9
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 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.
10
Questão 5
Correta
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.
11
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:
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.
12
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
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.
13
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 #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
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 #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; }
14
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.
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.
15
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 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:
.
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.
18
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
19
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".
20
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:
21
• 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.
22
Questão 1
Correta
Questão com problema?
Para criar uma função utiliza-se a seguinte sintaxe:
()
{
( )
}
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. A. Identificará a função.
II.
B. Indica qual o tipo de valor a função
retornará.
III.
C. Toda função terá o nome
acompanhado por eles.
IV.
D. Se for void é opcional, porém,
quando não for void é obrigatório.
V.
E. Só justifica criar se tiver um
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. - Indica qual o tipo de valor a função
retornará. - Identificará a função. - Toda função terá o
nome acompanhado por eles. - Só justifica criar se tiver um conjunto de
comandos para realizar. - Se for void é opcional, porém, quando não for void é
obrigatório.
23
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 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.
24
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
int fatNaoRecursivo(int n){
if(ne não há erros
de compilação.
25
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 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.
26
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.
27
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.
28
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: Qas 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".
31
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.
32
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 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
O * é para o ponteiro e o & é para a passagem de parâmetros por referência.
33
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.
Sua resposta
Fila e Pilha.
34
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.
35
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:
Sua resposta
1 – E; 2 – A; 3 – D; 4 – B; 5 – C.
36
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:
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.
37
Questão 6
Sem resposta
Analise o trecho de programa a seguir: #include #include 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 ponteirointeiro 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:
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.
38
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:
Sua resposta
armazenadas / uma pilha / operação de desfazer / restaurado / contrária à realizada.
39
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.
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.
40
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.
41
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 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
Apenas as afirmativas II, III e IV estão corretas.
42
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.
43
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.
Sua resposta
1 - 4 - 3 - 2
44
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.
Sua resposta
As afirmativas I, II e III estão corretas.
45
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.
46
Questão 5
Respondida
Analise o trecho de programa a seguir:
#include
#include
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:
Sua resposta
As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa da I.
47
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:
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.
48
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.
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.
49
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çãopara 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.
50
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.
51
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.