Buscar

Exercicios Estrutura de dados 1 - 10

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 67 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 67 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 67 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Estão entre algumas das possíveis formas de se estruturar dados:
	
	Grafos, algoritmos, fila.
	
	Algoritmos, lista ordenada, vetores.
	
	Grafos, lista ordenada, algoritmos.
	 
	Grafos, lista ordenada, vetores.
	
	Lista encadeada, vetores, algoritmos.
É um exemplo de TAD Não Linear:
	
	
	Filas
	
	Filas de Prioridade
	 
	Grafos
	
	Pilhas
	
	Listas
Os irmãos Silva irão viajar por vários países da Europa e por isso, traçaram no mapa o percurso que farão, de cidade a cidade. Qual a estrutura de dados mais adequada para modelar este problema ?
	
	
	
	             Pilha
	
	Fila
	
	 Lista
	
	              Árvore
	 
	Grafo
Para organizar as fotos de minha família com os ancestrais de várias gerações, minha filha usou uma estrutura de dados que é .....  Assinale a opção certa.
		
	 
	árvore
	
	Grafo
	
	Lista
	
	Pilha
	
	Fila
	Leia com atenção as afirmativas abaixo e assinale a resposta correta.
I A estrutura de dados que melhor representa os diretórios ou pastas de arquivos do computador é a árvore.
II A estrutura de dados FILA é não linear assim como o Grafo.
III O termo folha em uma estrutura de dados é usado para um nó sem filhos e que tem grau 0,
IV O grau de uma árvore é definido pelo número de subárvores de um nó.
V O grafo é uma estrutura de dados que tem limitação para o número de vértices.
VI Uma das aplicações da estrutura de dados grafo é a Computação Gráfica.
		
	
	I, II, III e VI são afirmativas verdadeiras
	 
	I, III, IV e VI são afirmativas verdadeiras
	
	I, II e V são afirmativas verdadeiras
	
	II, IV, V e VI são afirmativas verdadeiras
	
	II, IV e V são afirmativas verdadeiras
	As estruturas de dados podem ser caracterizadas como sendo uma forma organizada de armazenar dados ou informações na memória, de modo a otimizar o acesso a estes. Muitas vezes existem algoritmos de manipulação de dados associados a estas estruturas.
Verifique as seguintes sentenças:
I-Filas são estruturas que recuperam os dados na ordem direta em que estes foram armazenados.
II-As Pilhas são estruturas que recuperam os dados na ordem reversa em que estes foram armazenados.
III-As Pilhas são estruturas que recuperam os dados na ordem direta em que estes foram armazenados.
IV-As Filas são estruturas que recuperam os dados na ordem reversa em que estes foram armazenados.
Marque a alternativa CORRETA:
		
	
	As alternativas I e III estão corretas.
	
	Todas as alternativas estão corretas.
	 
	As alternativas I e II estão corretas
	
	As alternativas III e IV estão corretas.
	
	As alternativas II e IV estão corretas.
	
	
	As estruturas de dados são utilizadas para manter dados ou informações organizados na memória, o que possibilita a otimização do uso destes dados. Porém, as estruturas guardam características especiais na manipulação destes dados, assim deve-se escolher a estrutura certa ou mais adequada para uma determinada aplicação. Portanto marque a opção que representa a melhor estrutura, quando se tem como requisitos principais o acesso aleatório aos dados e alocação destes de forma contínua na memória.
		
	
	Lista Encadeada
	
	Fila Sequencial
	 
	Lista Sequencial
	
	Pilha Encadeada
	
	Pilha Sequencial
	Assinale a alternativa correta sobre tipos abstratos de dados:
		
	 
	Um tipo abstrato de dados é composto por um modelo de dados e um conjunto de operadores definidos sobre esses dados.
	
	Um tipo abstrato de dados é um modo particular de armazenamento e organização de dados em um computador de modo que possam ser usados eficientemente.
	
	Um tipo abstrato de dados deve sempre ser representado por meio dos recursos específicos de uma linguagem de programação.
	
	É fundamental que os tipos abstratos de dados proponham um conjunto eficiente de algoritmos para realização de suas operações.
	
	Um tipo abstrato de dados descreve, além do que se pode fazer com os dados, como as operações serão efetivamente implementadas.
		#include  < iostream  >
 using namespace std;
void SOMA(float a, int b)  {
  float result  =  a+b;
  cout << "A soma de " << a << " com " << b << " é: " << result;
}
int main()
{
int a;
float b;
a = 10; b = 12.3;
SOMA(b,a);
}
A função SOMA acima possui as seguintes características :
	
	
	
	Retorna valor e não  possui parâmetros.
	
	
	Retorna valor e possui parâmetros.
	
	
	Não retorna valor e possui parâmetros.
	
	
	Não retorna valor e não   possui parâmetros.
	
	
	Retorna valor.
		Considere os trechos abaixo:
int valor = 100;
void eureka (int &z)   {
    int temp = 25;
     z--;
     temp = temp - 10;
     valor = valor - temp;
     cout << "Auxiliar = " << temp << endl;
}
int main()  {
     int R = 1000;
     eureka(R);
     cout << "Result = " <<  R << "  Valor  = " << valor << endl;
}
Assinale a opção correta.
	
	
	
	Será impresso
Auxiliar = 15
Result = 1000 Valor = 85
sendo que z é um parâmetro passado por referência
	
	
	Será impresso
Auxiliar = 15
Result = 999  Valor = 85
sendo que z é um  parâmetro passado por referência
 
 
	
	
	Será impresso
Auxiliar = 15
Result = 1000  Valor = 100
sendo que z é um  parâmetro passado por referência
 
 
	
	
	Será impresso
Auxiliar = 15
Result = 999  Valor = 85
sendo que z é um  parâmetro passado por valor
 
 
	
	
	Será impresso
Auxiliar = 15
Result = 1000  Valor = 85
sendo que z é um  parâmetro passado por valor
		Uma função possui um valor de retorno inteiro, recebe por valor um inteiro como primeiro parâmetro e por referência um inteiro como segundo parâmetro. Qual das respostas abaixo poderia representar o protótipo dessa função:
	
	
	
	int func (&int, int);
	
	
	void func (int &a, int &b);
	
	
	int func (int a, int &b);
	
	
	int func (int &a, int b);
	
	
	void func (int a, int &b);
		Em programação podemos utilizar um recurso que modulariza o programa chamado função. As funções precisam ser ativadas para que possam ser executadas. Para isso, é necessário chamar a função pelo seu nome e enviar, quando necessário, os valores respectivos para os parâmetros de entrada. Ao enviar os valores para os parâmetros de entrada, o programa pode fazer uma cópia deste valor ou trabalhar em um endereço enviado. Quando se envia o endereço estamos ativando a função por meio de:
	
	
	
	Envio de inteiro.
	
	
	Passagem por valor.
	
	
	Ponteiros.
	
	
	Envio de valor.
	
	
	Registro.
		Considere o trecho de um programa escrito em C++ : 
int func1 (long num) {
    int n, na=1;
    while (num / 10 != 0){
          na += 1;
          num /= 10;
    }
    return na;
}
main() {
     cout << func1 (132041);
}
Marque a opção correta que mostra o que é impresso na tela.
	
	
	
	4
	
	
	3
	
	
	1
	
	
	6
	
	
	2
		Considere a seguinte função: void dobro(int x) { x = 2 * x; } Qual valor será impresso na tela quando o seguinte programa principal for executado? int main() { int n; n = 5; dobro(n); cout << n; return 0; }
	
	
	
	10
	
	
	20
	
	
	0
	
	
	Haverá um erro de compilação
	
	
	5
		Na passagem por ____________________ , o endereço da variável da função chamadora é passado para a função chamada e, dessa forma, o valor poderá ser alterado, ou não.
	
	
	
	referência
	
	
	caracter
	
	
	void
	
	
	número
	
	
	valor
		Considere a função a seguir e a chamada da mesma efetuada no programa principal abaixo. Indique a opção que contem o que será impresso.
int executar (int x, int &y) {
    x = y * 2;
    y = ++x;
    return x + y;
}
int main () {
int a=2, b=2, c=2;
c = executar (a, b);
cout << a << ", " << b << ", " << c;
}
	
	
	
	2, 2, 9
	
	
	3, 5, 8
	
	
	3, 2, 8
	
	
	4, 5, 9
	
	
	2, 5, 10
	Os métodos de ordenação são muito utilizados em estruturas de dados para facilitar a busca e a recuperação posterior de itens de conjuntos ordenados. Existem vários métodos de ordenação, por este motivo, marque corretamente a alternativa que apresenta o código do método de seleção.
		
	
	void ordena (int v[], int n){
       int i, j, aux;
       for (j = 1; j < n; j++)for (i=j; i > 0 && v[i-1]> v[i]; i--){
              aux = v[i-1];
              v[i-1] = v[i];
              v[i] = aux; 
            }
}
	
	int ordena(float v[], float valor, int n){
   for (int i = 0; i < n; i++)
     if (v[i] == valor)
       return i;
   return -1;
}
	
	int ordena(float v[], float valor, int n) {
 int ini = 0, fim = n-1, meio;
   while (ini >= fim){
     meio = ini/2;
     if (v[meio] == valor)
       return meio; 
     if (valor < v[meio])
       fim = meio -1;
     else
       ini = meio+1;
}
	 
	void ordena(int v[], int n){
int i, j, menor, aux;
for (j = 0; j < n-1; j++) {
    for (i = j+1; i < n; i++) {
         if (v[i] < v[j]) {
             aux = v[j];
             v[j] = v[i];
             v[i] = aux;
        }
    }
}
}
	
	int ordena(float v[], float valor, int n) { 
     int ini = 0, fim = n -1, meio;
    while (ini <= fim){
        meio = (ini + fim)/2;
        if (v[meio] == valor)
              return meio;
        if (valor < v[meio])
             fim = meio -1;
        else
             ini = meio+1;
    }
    return -1;
}
	Pode-se definir uma estrutura heterogênea como sendo um conjunto de elementos, geralmente, agrupados sob uma lógica e associados por um nome.
Esses elementos podem ser variáveis simples, matrizes ou ainda outras estruturas. Seja a definição de uma estrutura como:
struct aluno {
string nome;
float nota;
};
Suponha ainda que exista um vetor desta estrutura, definido como:
aluno vet [100];
Marque a alternativa em que é atribuída de forma correta a nota 5.7 para o décimo primeiro elemento deste vetor.
		
	
	aluno.vet[10].nota=5.7;
	 
	vet[10].nota=5.7;
	
	aluno.vet[10]=5.7;
	
	vet[10].aluno.nota=5.7 ;
	
	vet[10]=aluno.5.7;
	Marque a afirmativa correta para a "Inserção em lista linear sequencial ordenada".
		
	
	Consiste em adicionar um valor no vetor, alterando a ordem existente e ajustando o total de elementos.
	
	É o processo pelo qual um conjunto de dados é colocado em uma ordem crescente ou decrescente.
	 
	Consiste em adicionar um valor no vetor, mantendo a ordem existente e ajustando o total de elementos.
	
	Consiste em fazer uma busca em um vetor já ordenado, dividindo o espaço de busca ao meio e verificando se o dado está no meio ou, antes do meio ou depois do meio.
	
	Consiste em fazer uma busca em um vetor desordenado, dividindo o espaço de busca ao meio e verificando se o dado está no meio ou, antes do meio ou depois do meio.
	
	
	Pode-se definir uma estrutura heterogênea como sendo um conjunto de elementos, geralmente, agrupados sob uma lógica e associados por um nome.
Esses elementos podem ser variáveis simples, matrizes ou ainda outras estruturas. Seja a definição de uma estrutura como:
 
 struct  aluno {
              string nome;
              float   nota;
};
 
Suponha ainda que exista um vetor desta estrutura, definido como:
 aluno vet [ 100];
 
Marque a alternativa em que é atribuída de forma correta a nota 5.7 para o décimo primeiro elemento deste vetor.
		
	
	vet[10].aluno.nota=5.7 ;
	
	aluno.vet[10]=5.7;
	 
	vet[10].nota=5.7;
	
	aluno.vet[10].nota=5.7;
	
	vet[10]=aluno.5.7;
	
	
	Pode-se definir uma estrutura heterogênea como sendo um conjunto de elementos, geralmente, agrupados sob uma lógica e associados por um nome. Esses elementos podem ser variáveis simples, matrizes ou ainda outras estruturas. Seja a definição de uma estrutura como: struct aluno { string nome; float media; }; Suponha ainda que exista um vetor desta estrutura, definido como: aluno vet [ 10]; Marque a alternativa em que é atribuída de forma correta a media 6.0 para o quarto elemento deste vetor.
		
	
	aluno[3].media=6.0;
	 
	vet[3].media=6.0;
	
	aluno[3].10=6.0;
	
	aluno[10]=6.0;
	
	vet[3].aluno=6.0;
	Marque a opção correta, considerando
struct Livro {
int codigo;
float preco;
} liv;
		
	
	liv->preco = 30.70;
	 
	liv.preco = 30.70;
	
	Livro->liv.codigo = 12345;
	
	Livro.liv.codigo = 12345;
	
	Livro.codigo = 12345;
	Qual das seguintes estruturas de dados é classificada como heterogênea?
		
	
	Loop
	 
	Registro
	
	Vetor
	
	Pilha
	
	Fila
	Em C++, quando uma variável é declarada como uma struct, o acesso para atribuição e leitura dos membros (campos) deste registro se dá pelo operador :
		
	
	, (vírgula).
	
	-> (seta).
	 
	∙ (ponto).
	
	& (e comercial ou eitza).
	
	* (asterisco).
	
	
		Os algoritmos de busca são muito utilizados em estrutura de dados. Sendo assim, o algoritmo que realiza a busca em vetores e que exige acesso aleatório aos elementos do mesmo e que parte do pressuposto de que o vetor está ordenado e realiza sucessivas divisões do espaço de busca comparando o elemento que se deseja com o elemento do meio do vetor, é chamado de:
	
	
	
	Pesquisa ordenada
	
	
	Pesquisa binária
	
	
	Pesquisa de seleção
	
	
	Pesquisa sequêncial
	
	
	Tabela Hash
	
	
	 
		
	
		2.
		Os métodos de ordenação são muito utilizados para facilitar a recuperação posterior de itens ordenados. Existem vários métodos de ordenação, por esse motivo, assinale corretamente a alternativa que mostra o nome do método que utiliza a estratégia de ordenação por trocas de vizinhos e é considerado o método mais simples.
	
	
	
	Bolha
	
	
	Hash
	
	
	Inserção
	
	
	Seleção
	
	
	Binária
	
	
	 
	
	
		3.
		Para consultarmos uma estrutura de dados, normalmente, empregamos um tipo de pesquisa de dados. O trecho de programa a seguir refere-se a uma pesquisa por um elemento único (sua primeira ocorrência), em um conjunto de elementos de dados armazenado em uma estrutura de acesso indexado e aleatório. Selecione a opção correspondente ao algoritmo utilizado, no programa, para a referida pesquisa:
int busca(float v[], float valor, int n) {
int ini = 0, fim = n -1, meio;
while (ini <= fim) {
meio = (ini + fim)/2;
if (v[meio] == valor)  return meio;
if (valor < v[meio]) fim = meio -1;
  else ini = meio+1;
}
return -1;
}
	
	
	
	pesquisa indexada
	
	
	pesquisa de cadeias
	
	
	pesquisa cadeias indexada
	
	
	pesquisa binária
	
	
	pesquisa sequencial
	
	
	 
	
	
		4.
		Qual papel do for mais interno na função ordena abaixo ?
void ordena( int n, int v[])
{
   int i, j, x;
   for (j = 1; j < n; ++j) {
      x = v[j];
      for (i = j-1; i >= 0 && v[i] > x; --i)
         v[i+1] = v[i];
      v[i+1] = x;
   }
}
	
	
	
	Encontrar o maior valor de x que deve ser inserido em v[0..j-1].
	
	
	Encontrar o ponto onde v[j] deve ser inserido em v[0..j-1].
	
	
	Encontrar o elmento a ser eliminado do vetor
	
	
	Encontrar o valor de v[j] deve em v[0..j-1].
	
	
	Encontrar o menor valor v[j] que deve ser inserido em v[0..j-1].
	
	
	 
	
	
		5.
		Qual a importância de se entender a "ordenação" de dados ?
	
	
	
	A ordenação é a base na qual, muitos sistemas são construídos. Entendendo a ordenação, tem-se conhecimento para manter outros problemas.
	
	
	A ordenação é a base na qual, muitos algoritmos são construídos. Entendendo a ordenação, tem-se conhecimento para manter outros problemas.
	
	
	A ordenação é a base na qual, muitos sistemas são construídos. Entendendo a ordenação, tem-se conhecimento para resolver outros problemas.
	
	
	A ordenação é a base na qual, muitos algoritmos são construídos. Entendendo a ordenação, tem-se conhecimento para resolver outros problemas.
	
	
	A ordenação é a base na qual, muitos programas são construídos. Entendendo a ordenação, tem-se conhecimento para manter outros problemas.
	
	
	 
	
	
		6.
		Considere a seguinte função busca escrita em linguagem C++ :
bool busca(int vetor[ ], int n, int tam)
{
    int ini=0, mid;
    while (ini <= tam)
    {
         cout << " x ";
         mid = (ini + tam)/2;
         if (vetor[mid] == n)
             return true;
         else if (n > vetor[mid])
             ini = mid+1;
         else
             tam = mid-1;
    }
    return false;
}
Qual a quantidade total de impressões da letra x nas buscas pelos números n = 4, n = 2 e n= 0 no vetor [1,2,3,4,5,6,7,8], sendo tam = 7 ?
int vetor[] = {1,2,3,4,5,6,7,8};
busca(vetor, 4, 7);
busca(vetor, 2, 7);
busca(vetor, 0, 7);
	
	
	
	4
	
	
	5
	
	
	6
	
	
	8
	
	
	9
	
	
	
	 
		
	
		7.
		Existem vários algoritmos de busca em estruturas de dados, um destes realiza a busca em vetores, e requer acesso aleatório aos elementos desta estrutura e parte do pressuposto de que os dados do vetor estejam ordenados e utiliza a técnica de divisão e conquista comparando o elemento desejado com o elemento do meio do vetor. Esta técnica ainda verifica se o elemento do meio do vetor for o desejado, a busca termina. Caso contrário, se o elemento do meio vier antes do elemento buscado, então a busca continua na metade posterior do vetor. E se o elemento do meio vier depois da chave, a busca continua na metade anterior do vetor. O algoritmo que utiliza esta metodologia é:
	
	
	
	Pesquisa sequencial
	
	
	Pesquisa binária
	
	
	Inserção
	
	
	Bolha
	
	
	Seleção
	
	
	 
	
	
		8.
		Sobre o funcionamento da busca binária, é correto afirmar que dividindo seu vetor em duas metades.
	
	
	
	Se o item for maior que o item que está na metade do vetor procure na primeira metade, ou seja, a da direita.
	
	
	Se o item for igual ao item que está na metade do vetor, o item não foi encontrado.
	
	
	Se o item for igual ao item que está na metade do vetor, o item foi encontrado.
	
	
	Se o item for menor que o item que está na metade do vetor, o item foi encontrado.
	
	
	Se o item for menor que o item que está na metade do vetor, procure na segunda metade, ou seja, a da direita.
	
	
	
		1.
		São métodos ou algoritmos conhecidos de ordenação de dados por troca:
	
	
	
	ordenação shell e hashing.
	
	
	quicksort e hashing.
	
	
	busca por ordenação e ordenação shell.
	
	
	hashing e bubble sort.
	
	
	bubble sort e quicksort.
	
Explicação:
Bubble sort é o algoritmo mais simples, mas o menos eficientes. Neste algoritmo cada elemento da posição i será comparado com o elemento da posição i + 1, ou seja, um elemento da posição 2 será comparado com o elemento da posição 3. Caso o elemento da posição 2 for maior que o da posição 3, eles trocam de lugar e assim sucessivamente. Por causa dessa forma de execução, o vetor terá que ser percorrido quantas vezes que for necessária, tornando o algoritmo ineficiente para listas muito grandes.
 
O Quicksort é o algoritmo mais eficiente na ordenação por comparação. Nele se escolhe um elemento chamado de pivô, a partir disto é organizada a lista para que todos os números anteriores a ele sejam menores que ele, e todos os números posteriores a ele sejam maiores que ele. Ao final desse processo o número pivô já está em sua posição final. Os dois grupos desordenados recursivamente sofreram o mesmo processo até que a lista esteja ordenada.
 
	
	
	
	 
		
	
		2.
		Considere uma lista sequencial L com n fichas de professores, sendo que cada ficha de professor é modelada pela struct :
struct professor {
int matricula;
char titulo[30];
};
e a lista L é assim declarada : professor L[n];
Assinale o trecho que corretamente exibe todas as matrículas e titulações de todos os n professores de L .
	
	
	
	for (int i = 0; i < n; i++)
cout << L.matricula[i] << " " << L.titulo[i] << endl;
	
	
	for (int i = 0; i < n; i++)
cout << L[i] << endl;
	
	
	for (int i = 0; i < n; i++)
cout << L[i].matricula << " " << L[i].titulo << endl;
	
	
	for (int i = 0; i < n; i++)
cout << L.matricula << " " << L.titulo << endl;
	
	
	for (int i = 0; i < n; i++)
cout << L[i].matricula << " " << L[i].titulo[30] << endl;
	
Explicação:
Como L é um vetor de n elementos do tipo professor. Então, para percorrer o vetor de índice i temos que fazer L[i] seguido do ponto seguido do campo, que pode ser matricula ou titulo.
Assiim, a opção correta é 
for (int i = 0; i < n; i++)
   cout << L[i].matricula << " " << L[i].titulo << endl;
	
	
	
	 
		
	
		3.
		Estude atentamente o código a segir:
int deciframe(int v[ ], int tam, int e){
int i = 0, f = tam -1, m;
while ( i <= f ){
m = ( i + f ) / 2;
if ( v[m] == e ) { return m; }
if ( e < v[m] ) { f = m - 1; }
else { i = m + 1; }
}
return -1;
}
Sabendo que a chamada da mesma foi feita com os parâmetros recebendo os seguintes valores, o que ela retornaria?
v[10] = {0, 2, 4, 6, 8, 10, 20, 100}
tam = 8
e = -6
	
	
	
	0
	
	
	3
	
	
	-1
	
	
	6
	
	
	4
	
Explicação:
Analisando
int deciframe(int v[ ], int tam, int e)  { 
int i = 0, f = tam -1, m; 
while ( i <= f ){ 
   m = ( i + f ) / 2; 
   if ( v[m] == e ) { return m; } 
   if ( e < v[m] )
      { f = m - 1; } 
   else
      { i = m + 1; } 
} 
return -1; 
} 
Sabendo que a chamada da mesma foi feita com os parâmetros recebendo os seguintes valores, o que ela retornaria? 
v[10] = {0, 2, 4, 6, 8, 10, 20, 100} 
tam = 8 
e = -6
Está procurando pelo valor e = -6. Como se sabe pelo estudo da busca binária e olhando o código dado, temos que -6 não existe na lista então a função irá retornar -1 (vide última linha da função). SE a busca tivesse sucesso, o teste do 1o. if no while seria verdadeiro e então o índice m de v seria retornado. Mas não é o caso, pois -6 não foi encontrado.
	
	
	
	 
		
	
		4.
		As estruturas de dados são utilizadas para manter dados ou informações organizados na memória, o que possibilita a otimização do uso destes dados. Porém, as estruturas guardam características especiais na manipulação destes dados, assim deve-se escolher a estrutura certa ou mais adequada para uma determinada aplicação. Portanto marque a opção que representa a melhor estrutura, quando se tem como requisitos principais o acesso aleatório aos dados e alocação destes de forma contínua na memória.
	
	
	
	Lista Sequencial
	
	
	Lista Encadeada
	
	
	Pilha Encadeada
	
	
	Fila Sequencial
	
	
	Pilha Sequencial
	
	Gabarito
Coment.
	
	
	
	 
		
	
		5.
		
	
	
	
	for (int i = 0; i < n; i++)
   cout << L[i] << endl;
	
	
	for (int i = 0; i < n; i++)
   cout << L.matricula[i] << "  "  << L.nome[i] << endl;
	
	
	for (int i = 0; i < n; i++)
   cout << L[i].matricula << "  "  << L[i].nome << endl;
	
	
	for (int i = 0; i < n; i++)
   cout << L[i].matricula << "  "  << L[i].nome[30] << endl;
	
	
	for (int i = 0; i < n; i++)
   cout << L.matricula << "  "  << L.nome << endl;
	
	Gabarito
Coment.
	
	
	
	 
		
	
		6.
		Considere as seguintes afirmações sobre Listas Sequenciais:
I  - São estruturas lineares que utilizam as primeiras posições de um vetor para armazenar os dados de interesse.
II - São compostas pelo conjunto dos dados que se deseja armazenar e por uma variável inteira que indica a quantidade de dados armazenados.
III - Os dados são sempre inseridos ou removidos no final da lista, tomando-se o cuidado de atualizar a quantidade de dados da mesma.
IV - A lista pode admitir ou não admitir que haja dados repetidos (listas podem ser com ou sem repetição).
Marque a opção que contém apenas todas  as afirmações verdadeiras:
	
	
	
	I, II, III, IV
	
	
	I, II
	
	
	I, III, IV
	
	
	I, II, III
	
	
	I, II, IV
	
Explicação:
Analisando cada afirmativa :
 
I  - São estruturas lineares que utilizam as primeiras posições de um vetor para armazenar os dados de interesse.
Verdadeiro.  As inserções vão ocorrendo do início do vetor (índice zero) em direção ao fim.
II - São compostas pelo conjunto dos dados que se deseja armazenar e por uma variável inteira que indica a quantidade de dados
armazenados.
Verdadeiro. Armazenam-se os dados  e controla-se a quantidade de dados na lista.
III - Os dados são sempre inseridos ou removidos no final da lista, tomando-se o cuidado de atualizar a quantidade de dados 
da mesma.
Falso. A inserção pode ser no início,  no meio ou no final da lista. Na verdade, pode ocorrer inserção e remoção em qualquer  posição.
IV - A lista pode admitir ou não admitir que haja dados repetidos (listas podem ser com ou sem repetição).
Verdadeiro.  Uma listapode ou não ter dados repetidos.
Resposta certa : As afirmativas I, II, IV estão certas
	
	
	
	 
		
	
		7.
		Considere uma lista com n  livros, em que cada livro é modelado pela struct :
 
struct Livro {
                            string titulo,  editora, autor;
                            float preco;
};
 
A função X abaixo
 
void X (Livro v[ ], int &n, Livro L)
{
     v[n] = L;
     n++;
    cout << "Operação realizada com sucesso.";
}
 
implementa a operação de :
	
	
	
	Ordenação por inserção
	
	
	Inicialização
	
	
	Inserção
	
	
	Substituição
	
	
	Busca
	
	Gabarito
Coment.
	
	
	
	 
		
	
		8.
		Considere as seguintes afirmações: I. Só podemos ter uma matriz de no máximo duas dimensões. Exemplo: C[100][100]. II. Ao declararmos um vetor int A[10], se escrevemos A[2] acessamos o segundo elemento do vetor. III. Uma string declarada como char B[30] armazena no máximo 30 caracteres. Escolha a alternativa correta:
	
	
	
	Está correta apenas a afirmativa I.
	
	
	Nenhuma afirmação está correta.
	
	
	Estão corretas apenas as afirmativas I e III.
	
	
	Estão corretas apenas as afirmativas I e II.
	
	
	Está correta apenas a afirmativa II.
	
	
	
		1.
		Marque a opção que representa uma característica CORRETA a respeito da estrutura de dados pilha.
	
	
	
	Não é possível criar uma pilha utilizando vetores.
	
	
	O último item inserido é o último item a ser retirado.
	
	
	O primeiro item inserido é o primeiro a ser retirado.
	
	
	O último item inserido é o primeiro item a ser retirado.
	
	
	Os acessos aos itens ocorrem de forma aleatória.
	
Explicação:
A estrutura de dados Pilha faz uso da lógica LIFO (last-in first-out), isto é, o último elemento a entrar é o primeiro a sair.
Essa estrutura pode ser usada com alocação estática (com vetor)  e com alocação dinâmica (listas encadeadas).
Sempre que pedir para explicar essa estrutura, não deixe de falar sobre a lógica usada.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		2.
		Para uma aplicação em que deseja-se recuperar a ordem reversa de armazenamento dos dados em um vetor, a estrutura de dados mais apropriada a ser utilizada na implementação da aplicação é:
	
	
	
	Lista
	
	
	Árvore
	
	
	Grafo
	
	
	Fila
	
	
	Pilha
	
Explicação:
Pilha é uma estrutura de dados linear que segue a lógica LIFO, em que o último a entrar será o primeiro a sair. Portanto, trabalha com a ordem reversa.
Fila : segue a lógica FIFO. Trabalha na ordem direta.
Lista : insere-se e retira-se de qualquer posição.
Árvore e grafo : estrutura de dados não lineares.
	
	
	
	 
		
	
		3.
		Um jogo de memória fornece sequências de números e o jogador deve dizer qual a sequência inversa para cada nova sequência fornecida pelo jogo. Qual a estrutura de dados mais adequada para modelar esse jogo ?
	
	
	
	fila
	
	
	pilha
	
	
	árvore
	
	
	lista
	
	
	grafo
	
	Gabarito
Coment.
	
	
	
	 
		
	
		4.
		Sobre as pilhas, marque a alternativa correta:
	
	
	
	Pilhas são menos restritivas do que Listas, pois esta última impõe mais restrições às operações de inserção/remoção do que as primeiras.
	
	
	Pilhas não podem ser implementadas usando vetores, pois não será possível reproduzir a inserção e remoção pela mesma extremidade.
	
	
	Pilhas são estruturas de dados do tipo FIFO e permitem que os dados sejam manipulados diretamente no meio da estrutura.
	
	
	A operação de desempilhar um item de uma pilha e logo em seguida empilha-lo em outra pilha mantem a mesma ordem dos dados da primeira pilha na segunda pilha.
	
	
	A característica principal que define uma Pilha diz respeito às operações de inserção e remoção, que devem ser realizadas exclusivamente na mesma extremidade.
	
Explicação:
Analisando cada item.
	
	Pilhas são estruturas de dados do tipo FIFO e permitem que os dados sejam manipulados diretamente no meio da estrutura.
	Falso. Pilha segue a lógica LIFO e as operações de inserção e remoção ocorrem apenas em uma extremidade, o topo da pilha 
	
	A operação de desempilhar um item de uma pilha e logo em seguida empilhá-lo em outra pilha mantém a mesma ordem dos dados da primeira pilha na segunda pilha.
	FAlso. Por exemplo, o elemento do topo da primeira pilha, será o 1o. elemento empilhado na 2a. pilha.  
	
	Pilhas não podem ser implementadas usando vetores, pois não será possível reproduzir a inserção e remoção pela mesma extremidade.
	Falso. É possível usar vetor ou lista encadeada para implementar pilha.
	
	Pilhas são menos restritivas do que Listas, pois esta última impõe mais restrições às operações de inserção/remoção do que as primeiras.
	FAlso. Em uma lista podemos inserir ou retirar de  qualquer posição. Em pilha, não.
	
	A característica principal que define uma Pilha diz respeito às operações de inserção e remoção, que devem ser realizadas exclusivamente na mesma extremidade.
	Vedadeiro.
	 
	
	
	
	 
		
	
		5.
		Um programador recebeu a tarefa de construir um programa que receba uma cadeia de caracteres e verifique se esta cadeia de caracteres é um PALÍNDROME, sabendo-se que um PALÍNDROME apresenta a mesma sequência de caracteres da esquerda pra direita, quanto da direita para esquerda, marque a opção que possui a estrutura de dados mais adequada a este programa.
	
	
	
	Árvores
	
	
	Grafos
	
	
	Lista Sequencial
	
	
	Pilha Sequencial
	
	
	Fila Sequencial
	
	Gabarito
Coment.
	
	
	
	 
		
	
		6.
		   Ao treinar macacos, foi realizado um jogo para avaliar sua  memória. O cientista fornecia sequências de cartas com figuras geométricas e o macaco devia reproduzir a sequência inversa usando figuras geométricas reais.  Qual a estrutura de dados mais adequada para modelar esse jogo ?
	
	
	
	árvore
	
	
	grafo
	
	
	fila
	
	
	pilha
	
	
	lista
	
Explicação:
O problema mostra um relacionamento linear e uma ordem específica de inserção e remoção, que segue a lógica LIFO (último a entrar será o primeiro a sair).
	
	pilha
	Correto.  O último a entrar na pilha será o útimo a sair da mesma.
	
	fila
	Falso.  SEgue a lógica FIFO, onde o primeiro a entrar será o primeiro a sair.
	
	árvore
	Falso. É uma esrutura de dados não linear.
	
	lista
	Falso. Podemos inserir e retirar de qualquer posição.
	
	grafo
	
	
FAlso. Estrutura de dados não linear.
	
	
	
	 
		
	
		7.
		Um dos conceitos muito úteis na ciência da computação é a estrutura de dados chamada pilha. Uma pilha é um conjunto________ de itens, no qual novos itens podem ser inseridos no(a) ________ e itens podem ser retirados do(a)________ da pilha, por meio das operações________ e _________, respectivamente. Assinale a alternativa que completa corretamente as lacunas.
	
	
	
	ordenado - final - início - up - down
	
	
	ordenado - topo - topo - empilhar ou push  -  desempilhar ou pop
	
	
	desordenado - base - topo - down - up
	
	
	ordenado - topo - topo - pop ou desempilhar  - push ou empilhar 
	
	
	desordenado - topo - base - push ou empilhar  - pop ou desempilhar 
	
Explicação:
Por definição, pilha é uma estrutura de dados ordenada em que as inserções e remoções seguem a lógica LIFO, em que o útimo a entrar na pilha será o primeiro a sair da mesma.  Insere-se no topo  (empilhar ou push) e retira-se do topo (desempilhar ou pop) . 
	
	
	
	 
		
	
		8.
		Considere que, em uma estrutura de dados p do tipo pilha, inicialmente vazia, sejam executados os seguintes comandos:
push(p,10)
push(p,5)
push(p,3)
push(p,40)
pop(p)
push(p,11)
push(p,4)
push(p,7)
pop(p)
pop(p)
Após a execução dos comandos, o elemento no topo da pilha p e a soma dos elementos armazenados na pilha p, são, respectivamente :
	
	
	
	4 e 80
	
	
	11 e 29
	
	
	11 e 80
	
	
	7 e 40
	
	
	7 e 29
		
		Um conjunto ordenado de itens a partir do qual podem ser eliminados itens em uma extremidade e no qual podem ser inseridos itens na outra extremidade é denominado de
	
	
	
	pilha.
	
	
	lista simples.árvore.
	
	
	fila.
	
	
	lista encadeada.
	
Explicação:
Por definição, fila é uma lista ordenada que segue a lógica FIFO, ou seja, o primeiro a entrar será o primeiro a sair. Assim, insere-se no fim e retira-se do início da fila.
	
	
	
	 
		
	
		2.
		Marque a afirmativa que represente uma Lista Circular Simplesmente Encadeada:
	
	
	
	Além do campo relativo ao dado, cada nó possui dois ponteiros,
	
	
	Cada ponteiro possui um só endereço que referencia o "primeiro" nó da lista.
	
	
	Cada nó possui um só ponteiro que referencia o próximo nó da lista.
	
	
	O ponteiro do "primeiro" nó não é NULL, mas sim aponta de volta para o "último" nó da lista, formando um ciclo.
	
	
	O ponteiro do "último" nó não é NULL, mas sim aponta de volta para o "primeiro" nó da lista.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		3.
		      As filas sequenciais são estruturas de dados utilizadas em diversas aplicações, tais como fila de processo, fila de impressão, sistemas de senha etc. Entretanto, nas aplicações onde há muita movimentação de dados, inserções e remoções de dados na fila, surgem espaços ociosos que podem levar ao fenômeno chamado de esgotamento de memória. Para sanar este problema pode-se substituir a fila sequencial por:
	
	
	
	pilha sequencial
	
	
	fila circular
	
	
	pilha circular
	
	
	lista circular
	
	
	lista sequencial
	
	Gabarito
Coment.
	
	
	
	 
		
	
		4.
		IFMT - Técnico em Técnologia da Informação - 2013
   Considere a função insere(x: inteiro), que recebe como parâmetro um número inteiro e o insere em uma Fila, e  ainda, a função remove(), que retira um valor de uma Fila.
   Dada a Fila [3-4-6-8-10], executam-se os comandos na ordem: insere(1), insere(2), remove().
   Após a execução desses comandos, qual será a Fila resultante?
	
	
	
	[3-4-6-8-10-1]
	
	
	[2-3-4-6-8-10]
	
	
	[3-4-6-8-10]
	
	
	[2-1-3-4-6-8]
	
	
	[4-6-8-10-1-2]
	
Explicação:
Dada a Fila [3-4-6-8-10], executam-se os comandos na ordem: insere(1), insere(2), remove().  ?
Temos 3-4-6-8-10 e com a 1a. insere teremos 3-4-6-8-10 - 1
Com a segunda insere teremos 3-4-6-8-10- 1-2
E quando remover um valor, sairá o 1o. da fila. Então, a fila ficará assim : 4-6-8-10- 1-2
	
	
	
	 
		
	
		5.
		   Considere uma fila simples F  de inteiros,  do tipo Fila definido abaixo. Tal fila deverá armazenar códigos de agentes de uma firma de espionagem, desde que haja espaço para um novo agente.  Assinale a opção que corretamente desenfileira o código de um agente, sabendo que a fila F foi inicializada de acordo com o trecho de código abaixo.
struct Fila {     in t v[100], inicio, fim; } ;
Fila F;
F. inicio = 0;
F.fim = -1;
 
 
	
	
	
	 
void desenfileirar(Fila F)  {
   cout << "Removido o agente " <<     F.v[F.inicio];
   F.inicio--;
 }
 
	
	
	 
void desenfileirar(Fila  F)  {
       if (F.inicio > F.fim)
            cout << "Não há agentes para retirar. " << endl;
     else  {
          cout << "Removido o agente " <<     F.v[F.inicio];
         F.inicio++;
    }
}
	
	
	 
void desenfileirar(Fila &F)  {
        if (F.fim == -1 && F.inicio == 0)
            cout << "Não há agentes para retirar. " << endl;
       else  {
            cout << "Removido o agente " <<     F.v[F.inicio];
             F.inicio++;
       }
}
 
	
	
	void desenfileirar(Fila &F)  {
        if (F.inicio > F.fim)
            cout <<  "Não há agentes para retirar. " << endl;
       else  {
             cout <<  "Removido o agente "  <<     F.v[F.inicio];
             F.inicio++;
       }
}
	
	
	 
void desenfileirar(Fila &F)  {
       if (F.inicio > F.fim)
            cout << "Não há agentes para retirar. " << endl;
     else  {
         cout << "Removido o agente " <<     F.v[F.inicio];
     }
}
	
	Gabarito
Coment.
	
	
	
	 
		
	
		6.
		Um aluno do EAD estava estudando para a prova de Estrutura quando viu o trecho do programa abaixo em uma apostila.
                      
Como não estava com seu micro, começou a analisar a função entra(...), ficando atento a alguns membros da struct.
Quando finalizou, virou a página da apostila e viu a resposta. Então, ficou muito feliz por ter identificado a estrutura
Assinale a alternativa onde está presente a resposta correta.
	
	
	
	Lista simplesmente encadeada
	
	
	Pilha
	
	
	Fila Circular
	
	
	Fila
	
	
	Lista Linear
	
	Gabarito
Coment.
	
	
	
	 
		
	
		7.
		Ao inserirmos em uma estrutura de dados do tipo fila sequencial os seguintes elementos: A, B, C, D, exatamente nesta ordem. E em seguida realizarmos duas operações consecutivas de remoção na fila e imediatamente inserirmos dois novos elementos o X e o W. Podedmos afirmar que se realizarmos uma nova operação de remoção, o elemento que será removido desta fila sera o:
	
	
	
	C
	
	
	X
	
	
	W
	
	
	A
	
	
	D
	
	Gabarito
Coment.
	
	
	Gabarito
Coment.
	
	
	Gabarito
Coment.
	
	
	
	 
		
	
		8.
		Considere uma fila simples F  de inteiros,  do tipo Fila definido abaixo. Tal fila deverá armazenar códigos de agentes de uma firma de espionagem, desde que haja espaço para um novo agente.  Assinale a opção que corretamente enfileira o código de um agente, sabendo que a fila F foi inicializada de acordo com o trecho de código abaixo.
struct Fila {     in t v[100], inicio, fim; } ;
Fila F;
F. inicio = 0;
F.fim = -1;
 
 
	
	
	
	void enfileirar(Fila F, int codigo)  {
       if (F.fim == 100)
            cout << "Não há espaço na firma para mais agentes. " << endl;
     else  {
         F.fim++;
        F.v[F.fim] = codigo;
   }
}
 
	
	
	void enfileirar(Fila F, int codigo)  {
     F.fim++;
    F.v[F.fim] = codigo;
}
 
	
	
	void enfileirar(Fila &F, int codigo)  {
       if (F.fim == 99)
            cout << "Não há espaço na firma para mais agentes. " << endl;
      else  {
         F.fim++;
        F.v[F.fim] = codigo;
    }
}
 
	
	
	void enfileirar(Fila &F, int codigo)  {
       if (F.fim == 99)
            cout <<  "Não há espaço na firma para mais agentes. " << endl;
      else
           F.fim++;
    F.v[F.fim] = codigo;
}
 
 
	
	
	 
void enfileirar(Fila &F, int codigo)  {
    F.v[F.fim] = codigo;
     F.fim++;
}
		Marque a afirmativa que represente uma concatenação em listas.
	
	
	
	Alterar a ordem dos dados da lista do final para o início, atualizando a lista.
	
	
	Juntar duas listas, colocando uma lista no final de outra, obtendo, ao final, uma só lista resultante.
	
	
	Organizar os dados da lista em ordem crescente ou decrescente.
	
	
	Consiste em dividir a lista em duas outras listas. A quantidade de nós que cada lista terá, depende da necessidade.
	
	
	Intercalar a ordem dos dados da lista do final para o início, atualizando a lista.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		2.
		Em algumas situações, principalmente na utilização de listas, há a necessidade de posicionar o ponteiro em determinado local da lista. Dessa forma, analisando o trecho de código abaixo, que mostra uma função, assinale a alternativa correta que descreve o objetivo desta. Sabe-se que o sinal de asterisco (*) sinaliza um ponteiro.
void funcao (Nodo **P){
 if ( *P != NULL ){
  while ( (*P) -> Anterior != NULL )
   *P= (*P) -> Anterior;
 }
}
	
	
	
	Posicionar o ponteiro no meio da lista
	
	
	Colocar o valor NULL em todos os ponteiros
	
	
	Posicionar o ponteiro onde houver o valor NULL
	
	
	Posicionar o ponteiro no início da lista
	
	
	Posicionar o ponteiro no final da lista
	
	Gabarito
Coment.
	
	
	
	 
		
	
		3.
		Considere a função em C++ que manipula  uma lista simplesmente encadeada :
void imprime (Lista  *l)   {
   Lista* p;
   for (p = l;   p != NULL;   p = p->prox)
         cout  <<"Info  =  "  <<  p->info;
}
sendo 
struct Lista {
                            int info;
                            struct Lista *prox;
};
 
	
	
	
	Função de busca
	
	
	Função que verifica se lista está vazia
	
	
	Função para liberar a lista
	
	
	Função que percorre os elementos da listaFunção que retira um elemento da lista
	
Explicação:
Veja que existe um loop em que o ponteiro é inicializado e a cada rodada do for,  imprime o dado da lista e passa a apontar para o próximo nó da lista. Logo, a função percorre a lista.
 >> Não poderia ser verificar lista vazia porque para isso teríamos que testar se o ponteiro é NULL.
>> Não pode ser busca, pois seria  preciso testar cada elemento da lista. Se encontrasse deveria retornar o endereço do nó, caso contrário deveria retornar NULL.
>> Para retirar elemento teríamos que usar delete, para liberar memória, entre outros. Logo, não pode ser.
>> PAra liberar a lista teríamos que repetidamente usar delete, em um loop. Não pode ser.
	
	
	
	 
		
	
		4.
		Qual das instruções abaixo é correta para declarar um ponteiro para inteiro?
	
	
	
	int *pti;
	
	
	&i;
	
	
	int_pti pti;
	
	
	*int pti;
	
	
	*pti;
	
Explicação:
Por definição, para declarar um ponteiro  temos o seguinte :
     asterisco < nome da variável ponteiro> seguido de ponto e vírgula.
Logo :  int *pti;
 
	
	
	
	 
		
	
		5.
		Qual o valor de x no final do programa? int main() { int x, *p, y; x = 3; p = &x; y = *p; y = 7; (*p)++; (*p) += y; return(0); }
	
	
	
	7
	
	
	Nenhuma das anteriores. O programa possui um erro de sintaxe.
	
	
	-4
	
	
	3
	
	
	11
	
Explicação:
Considerando o trecho do programa dado, vamos analisar passo a passo.
int x, *p, y;
x = 3;
p = &x;        //p aponta para x, que vale 3
y = *p;        //y recebe  o conteúdo da área apontada por p, que é 3. Logo, y recebe 3.
y = 7;        //Agora y recebe 7
(*p)++;       //A área apontada por p é incrementada. Ou seja, x é incrementado, passando a valer 4
(*p) += y;     //Equivale a *p = *p + y;   Logo, *p recebe 4 + 7, pois *p é x.  Então, *p, que é x recebe 11.
Portanto, a resposta certa é 11.
	
	
	
	 
		
	
		6.
		    Tei Ping , famosa  cabeleireira das estrelas,  possui uma lista não ordenada de clientes em que registra apenas o nome, endereço e o telefone de cada cliente. Como não se pode pré-definir um limite para o tamanho da lista, como se pode implementar a inserção de um novo cliente na lista ? Sabe-se  que cada  cliente é do tipo Cliente  e a lista é do tipo List assim definidos :
 
struct Cliente {
     long int matricula;
      string nome, endereco e tel;
};
struct List {
                           Cliente  p;
                           struct List *link;
                  };
	
	
	
	List * insereCliente(List *i)  {
      List *novo = new List;
     Cliente c;
      novo->p =  c;
      novo->link = i;
     return novo;
}
	
	
	List  insereCliente(List *i, Cliente c)
{
      List  novo[];
      novo[0].p = c;
      novo[0].link = i;
     return novo;
}
	
	
	List * insereCliente(List  *i, Cliente c){
      List *novo ;
      novo->p = c;
      novo->link = i;
     return novo;
}
	
	
	 List * insereCliente(List *i, Cliente c)
{
      List *novo = new List;
      novo.p = c;
      novo.link = i;
     return novo;
}
	
	
	List * insereCliente(List *i, Cliente c)
{
      List *novo = new List;
      novo->p = c;
      novo->link =i;
     return novo;
}
	
Explicação:
Analisando a resposta certa :
List * insereCliente(List *i, Cliente c)
{
      List *novo = new List;    //aloca memória para novo nó
      novo->p = c;    //acessa o campo p da área apontada por novo e atribui o cliente c ao campo p
      novo->link =i;   //faz o link do novo nó apontar para onde i está apontando
     return novo;    //retorna o endereço do novo nó
}
Logo, esta função insere um novo nó no início de uma lista simplesmente encadeada e retorna o ponteiro para o início da lista resultante.
Analisando as demais opções, que estão erradas :
2o. item .... Opção errada : faltou alocar memória
3o. item .... Opção errada : Cliente c não está definido.
4o. item .... Opção errada :  Usa ponto quando deveria ser o operador seta
5o. item .... Opção errada : Muitos erros... Usa vetor sem definir tamanho e trabalha com  o elemento de índice zero de novo, acessando os campos com ponto.
	
	
	
	 
		
	
		7.
		E C++, quando um ponteiro é declarado para uma struct, o acesso aos campos deste registro (struct) se dá pelo operador :
	
	
	
	& (e comercial ou eitza).
	
	
	-> (seta).
	
	
	, (vírgula).
	
	
	* (asterisco).
	
	
	∙ (ponto).
	
Explicação:
Por definição, o operador é o seta, pois se tem, no caso, ponteiro para struct. 
	
	
	
	 
		
	
		8.
		Montei uma biblioteca popular que aceita doações sem limites. Marque a opção que especifica o tipo de lista e o tipo de alocação de memória mais adequados para este problema.
	
	
	
	pilha dinâmica e alocação dinâmica de memória
	
	
	lista encadeada e alocação dinâmica de memória
	
	
	fila dinâmica e alocação dinâmica de memória
	
	
	fila encadeada e alocação dinâmica de memória
	
	
	lista sequencial e alocação dinâmica de memória
		A pilha é uma estrutura de dados que permite a inserção/ remoção de itens dinamicamente seguindo a norma de último a entrar, primeiro a sair. Suponha que para uma estrutura de dados, tipo pilha, são definidos os comandos:
- PUSH (p, n): Empilha um número "n" em uma estrutura de dados do tipo pilha "p";
- POP (p): Desempilha o elemento do topo da pilha.
Considere que, em uma estrutura de dados tipo pilha p, inicialmente vazia, sejam executados os seguintes comandos:
PUSH (p, 10)
PUSH (p, 5)
PUSH (p, 3)
PUSH (p, 40)
POP (p)
PUSH (p, 11)
PUSH (p, 4)
PUSH (p, 7)
POP (p)
POP (p)
Após a execução dos comandos, o elemento no topo da pilha "p" e a soma dos elementos armazenados na pilha "p" são, respectivamente,
	
	
	
	4 e 80.
	
	
	11 e 29.
	
	
	11 e 80.
	
	
	7 e 40.
	
	
	7 e 29.
	
Explicação:
Passo a Passo:
entra 10 // 10
entra 5 // 5 / 10
entra 3 // 3 / 5/ 10
entra 40 // 40 / 5 /10
retira 40 // 3 / 5 /10
entra 11 // 11 / 3 / 5 /10
entra 4 // 4 /11 / 3 / 5 /10
entra 7 // 7 / 4 / 11 / 3 / 5 /10
retira 7 // 4 / 11 / 3 / 5 /10
retira 4 // 11 / 3 / 5 / 10
Resultado da pilha: 11 / 3 / 5 / 10
Topo: 11
Somatorio da pilha é: 29
	
	
	
	 
		
	
		2.
		Sobre as estruturas de dados existentes podemos afirmar que:
	
	
	
	A estrutura do tipo LIFO sempre realiza a remoção do elemento mais antigo inserido.
	
	
	Encadeamento estático e dinâmico apresentam o mesmo funcionamento de alocação na estrutura do tipo PILHA.
	
	
	Na estrutura das Pilhas a manipulação dos dados sempre se dá no topo.
	
	
	Na estrutura do tipo LIFO, as informações são inseridas no início e removidas do final.
	
	
	Na estrutura do tipo FIFO, as informações são inseridas no início e removidas do final.
	
Explicação:
	
	Na estrutura do tipo FIFO, as informações são inseridas no início e removidas do final.
	Falso.  Fila segue a lógica FIFO, ou seja, o primeiro a entrar será o primeiro a sair. Logo, insere no fim e retira do início da fila.
	
	Na estrutura do tipo LIFO, as informações são inseridas no início e removidas do final.
	Falso.  Pilha segue a lógica LIFO, o último a entrar será o primeiro a sair.  Insere-se no topo   e retira-se do topo , ou seja, da mesma extremidade.
	
	Na estrutura das Pilhas a manipulação dos dados sempre se dá no topo.
	Verdade. SEgue-se a lógica LIFO.
	
	Encadeamento estático e dinâmico apresentam o mesmo funcionamento de alocação na estrutura do tipo PILHA.
	Falso.  No encadeamento estático a alocação é contígua e ocorre antes da execução.  No encadeamento dinâmico a alocação de memória ocorre em tempo de execução e o armazenamento é encadeado.
	
	A estrutura do tipo LIFO sempre realiza a remoção do elemento mais antigo inserido.
 
	
	
Falso.  A remoção se dá no último inserido, ou seja, o mais novo inserido na pilha.
 
 
	
	
	
	 
		
	
		3.
		Estava um aluno estudando Lista Simplesmente Encadeada quando encontrou  em um site a definição da struct nodo e de uma função cujo nome você deverá escolher para substituir XXX nas opções abaixo depois que analisar a função, assumindo queteste foi realizado, permitindo  que a operação fosse realizada.
 
 struct nodo
{
  int info;
  struct nodo *prox;
};
nodo* XXX(nodo *ptr, int valor)
{
  nodo *temp = new nodo;
  ...
  temp->info = valor;   
  temp->prox = ptr;
  return temp;        
}
	
	
	
	BuscaNaLista
	
	
	RemoveNo
	
	
	InsereNoFim
	
	
	InsereNoFrente
	
	
	ListaNo
	
	Gabarito
Coment.
	
	
	
	 
		
	
		4.
		Em termos da estrutura de dados do tipo FILA  (fila encadeada com alocação dinâmica), a sequência de ações
             insere(10), insere(3), insere(5), insere(8), remove(), remove(), insere(20),
promoveria a configuração da estrutura:
	
	
	
	20 5 8
	
	
	10 3 5 8 20
	
	
	10 3 20
	
	
	5 8
	
	
	5 8 20
	
Explicação:
 insere(10), insere(3), insere(5), insere(8), remove(), remove(), insere(20),
10-> 3 -> 5 -> 8 após inserir 10,3,5 e 8. Inserção no fim
Depois do 1o. remove, temos 3->5->8
Depois do 2o. remove temos 5 -> 8
Ao ocorrer o último insere temos  : 5 -> 8 - > 20, sendo que 5 esta no início e 20 no fim
	
	
	
	 
		
	
		5.
		Tínhamos declarado um ponteiro de nome ptr e precisávamos construir uma estrutura de repetição que pudesse repetir enquanto o ponteiro não fosse nulo. Observe os trechos abaixo e assinale qual a afirmativa correta.
I if (ptr !=NULL)
II if( !ptr )
III if(ptr)
IV while (ptr !=NULL)
V while (ptr)
	
	
	
	IV e V estão corretas.
	
	
	I e IV estão corretas
	
	
	III e V estão corretas
	
	
	III está correta
	
	
	I e II estão corretas.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		6.
		Seja o seguinte exemplo de nodo de uma lista de encadeada:
 
struct nodo{
                     float valor;
                     string produto;
                     nodo * proximo;
           };
Sabendo-se que nesta lista o último nó ou nodo possui o campo próximo nulo (null), marque a alternativa que representa corretamente a operação de busca do último nodo, a partir de um ponteiro pt apontado para o primeiro nodo da lista.
	
	
	
	while(próximo)pt=próximo;
	
	
	while(pt->próximo != null)pt=pt->próximo->proximo;
	
	
	while(pt->próximo)pt=pt->próximo;
	
	
	while(pt != null)pt=pt->próximo;
	
	
	while(pt->próximo->proximo)pt=pt->próximo;
	
Explicação:
O código será:
while(pt->próximo)pt=pt->próximo;
	
	
	
	 
		
	
		7.
		Para converter de decimal para binário usamos a estrutura de dados pilha. Assinale a opção que, corretamente, indica as ações corretas para empilhar o resto da divisão gerado no processo de conversão, considerando uma lista simplesmente encadeada. Considere o tipo definido abaixo :
struct no {
int dado;
struct no *link;
};
	
	
	
	Basta alocar memória com new, armazenar o resto da divisão do número por 2 no campo dado do novo nó e aterrar o link do novo nó.
	
	
	Não é necessário alocar memória com new. Basta criar uma struct do tipo no, armazenar o resto da divisão número por 2 no campo dado e aterrar o campo link.
	
	
	É preciso alocar memória com new, armazenar o resto da divisão do número por 2 no campo dado do novo nó, apontar o link do novo nó para o início da lista e enfim, retornar o ponteiro para o novo nó.
	
	
	Basta alocar memória com new e armazenar o resto da divisão do número por 2 no campo dado do novo nó .
	
	
	É preciso armazenar o resto da divisão do número por 2 no campo dado do primeiro nó da lista e retornar o ponteiro para este nó.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		8.
		Sabendo que uma fila encadeada possui seus nós definidos pela :
struct no {
int x;
no *prox;
};
Marque a alternativa que representa corretamente a criação ou alocação do nó na sintaxe do C++ para utilização na fila.
	
	
	
	p *no=new no;
	
	
	p *no -> new no;
	
	
	no *p=new no;
	
	
	no *p -> new no;
	
	
	no p -> new no;
		Um tipo de estrutura de dados é declarada em C como:
typedef struct no *apontador;
       struct no{
       int valor;
       apontador esq, dir;
}
onde esq e dir representam ligações para os dados da esquerda e direita, respectivamente. Qual das seguintes alternativas é uma implementação correta da operação que inverte as posições dos dados da esquerda e da direita uma estrutura p, onde t é um apontador auxiliar.
	
	
	
	t=p->dir;
p->esq = p->dir;
p->dir = t;
	
	
	t=p->dir;
p->dir = p->esq;
p->esq = t;
	
	
	t=p;
p->esq = p->dir;
p->dir = p->esq;
	
	
	p->esq = p->dir;
t = p->esq;
p->dir = t;
	
	
	p->dir=t;
p->esq = p->dir;
p->dir = t;
	
Explicação:
O código pedido é:
t=p->dir;
p->dir = p->esq;
p->esq = t;
	
	
	
	 
		
	
		2.
		Em uma lista duplamente encadeada, seus nodos são compostos por campos cujos tipos podem ser de diferentes naturezas, entretanto dois de seus campos devem ser ponteiros para o mesmo tipo do nodo, são estes os ponteiros ant e prox, que apontam, respectivamente, para o nodo anterior e para o próximo nodo. Esta característica permite que a estrutura seja percorrida em ambos os sentidos. Assim analisando as operações a seguir:
p->ant->prox=p->prox;
p->prox->ant=p->ant;
Sendo p um ponteiro que aponta para um dos nodos da lista, pode-se afirmar que:
	
	
	
	As operações possibilitam o percurso do ponteiro p da esquerda para direita.
	
	
	As operações removem o nodo apontado pelo ponteiro p.
	
	
	As operações possibilitam a busca de um nodo apontado pelo ponteiro p.
	
	
	As operações possibilitam o percurso do ponteiro p da direita para esquerda.
	
	
	As operações inserem novo nodo, após o nodo apontado pelo ponteiro p.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		3.
		Uma estrutura de dados em lista duplamente encadeada permite na cadeia movimentos para
	
	
	
	frente e para trás, apenas.
	
	
	cima e para baixo ou para frente e para trás.
	
	
	cima e para baixo, apenas.
	
	
	frente, apenas.
	
	
	trás, apenas.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		4.
		São listas que, além de cada elemento indicar o elemento seguinte, também indicam aquele que o antecede, ou melhor, cada elemento é ligado a seu sucessor e a seu predecessor, possibilitando um caminhamento no sentido início-fim ou no sentido oposto (fim-início). O texto acima, sobre Estrutura de Dados, descreve  :
	
	
	
	Grafo
	
	
	Listas simplesmente encadeadas
	
	
	Árvore
	
	
	Listas Circulares
	
	
	Listas Duplamente Encadeadas
	
Explicação:
O enunciado é a descrição de listas duplamente encadeadas, que terão 2 ponteiros em cada nó, um apontando para o nó anterior e outro apontando para o nó posterior.
	
	
	
	 
		
	
		5.
		Com relação à lista duplamente encadeada, é correto afirmar que :
	
	
	
	Não pode ser vazia.
	
	
	Consome  menos memória do que uma lista simplesmente encadeada, se tivermos uma mesma aplicação.
	
	
	A lista pode ser  percorrida com igual facilidade para a direita ou para a esquerda, pois existem dois ponteiros.
	
	
	Não pode haver remoções no meio da lista.
	
	
	          A lista precisa ter sempre um ponteiro apontando para o 1º. nó
	
	Gabarito
Coment.
	
	
	
	 
		
	
		6.
		Geralmente em algumas situações é necessário fazer a desalocação do espaço utilizado na memória. Porém, isso depende de como a reserva de uma quantidade de espaço de memória é feita, pois em alguns casos, o próprio compilador faz a desalocação. Quando o compilador não faz esta desalocação a memória foi reservada utilizando______.
	
	
	
	Declaração de função
	
	
	Alocação dinâmica de memória
	
	
	Declaração de matriz
	
	
	Alocação estática de memória
	
	
	Declaração de vetor
	
Explicação:
Se for necessário liberar a memória ocupada por essas variáveis, é preciso recorrer à função free.
A função free desaloca a porção de memória alocada por malloc.
A instrução free (ptr) avisa ao sistema que o bloco de bytes apontado por ptr está disponível para reciclagem.
	
	
	
	 
		
	
		7.
		As listas encadeadas podem ser elaboradas de duas formas utilizando uma técnica de encadeamento simplesmente ou encadeamento duplo. O que difere uma listasimplesmente encadeada de uma lista duplamente encadeada?
	
	
	
	Em uma lista duplamente encadeada, cada nó aponta para um nó enquanto a lista simplesmente encadeada aponta para mais de um nó.
	
	
	Em uma lista simplesmente encadeada cada nó aponta para nó seguinte e para o nó anterior.
	
	
	Em uma lista duplamente encadeada cada nó aponta para nó seguinte.
	
	
	Em uma lista duplamente encadeada cada nó aponta para nó seguinte e para o primeiro nó da fila.
	
	
	Em uma lista simplesmente encadeada cada nó aponta para um único nó enquanto a lista duplamente encadeada aponta para mais de um nó.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		8.
		 Suponha uma listagem mantida com informações sobre um equipamento a ser adquirido por uma empresa. A listagem possui as informações sobre de 10 fornecedores, descritas a seguir:
próximo: um ponteiro para o próximo fornecedor da listagem;
nome: nome, identificando o fornecedor;
valor: preço do equipamento no fornecedor;
anterior: um ponteiro para o fornecedor anterior da listagem.
Sendo o fornecedor "Z" o quinto elemento desta listagem e "X" e "Y" dois outros fornecedores que não pertencem à listagem, com seus respectivos ponteiros "pZ", "pX" e "pY", considere o trecho de código abaixo.
pY->proximo = pX;
pX->anterior = pY;
pX->proximo = pZ->proximo;
pZ->proximo->anterior = pX;
pZ->proximo = pY;
pY->anterior = pZ;
Este trecho de código é usado para inserir na listagem os fornecedores:
	
	
	
	Y, logo após o Z, e X, logo após o Y.
	
	
	X, antes do Z, e Y, logo após o Z.
	
	
	Y, antes do Z, e X, logo após o Z.
	
	
	X, logo após o Z, e Y, logo após o X.
	
	
	Y, antes do Z, e X, antes do Y.
	Estão entre algumas das possíveis formas de estruturas de dados:
		
	
	cout, Funções, vetores
	
	Grafos, funções, fila
	 
	Listas, vetores, cin
	
	Árvores binárias, pilhas, algoritmos
	 
	Árvores binárias, pilhas, vetores
	Respondido em 15/05/2020 23:28:20
	
		2a
          Questão
	Acerto: 0,0  / 1,0
	
	Considere o trecho de um programa escrito em C++.
 int func1 (int n1, int n2) {
     int aux = n1 % n2;
     while ( aux != 0) {
         n1 = n2;
         n2 = aux;
         aux = n1 % n2;
     }
     return n2;
}
int main() {
    cout << func1 (27, 18);
}
Marque a opção correta que mostra o que é impresso na tela.
		
	 
	9
	
	18
	 
	6
	
	27
	
	3
	Respondido em 15/05/2020 23:31:05
	
		3a
          Questão
	Acerto: 1,0  / 1,0
	
	Com relação à struct,  é correto afirmar que :
		
	
	Cada elemento da struct  é chamado componente.
	
	Não é possível criar um vetor de structs, pois o vetor trabalha apenas com dados do mesmo tipo.
	
	A struct é sempre definida dentro da main.
	
	Cada elemento da struct é chamado campo e cada campo deve ser, obrigatoriamente, de um tipo de dados distinto de outro campo.
	 
	Cada elemento da struct é denominado membro ou campo, sendo que a struct pode armazenar elementos de tipos diferentes ou não.
	Respondido em 15/05/2020 23:32:37
	
	
	Gabarito
Coment.
	
	
		4a
          Questão
	Acerto: 1,0  / 1,0
	
	Com a utilização das estruturas de dados e seus tipos, em algumas situações é imprescindível a criação de funções que façam determinada verificação ou ação nestas estruturas. Dessa forma, analise a função abaixo e marque corretamente a alternativa que descreve as funcionalidades desta.
int funcao(float v[], float vl, int n)
{
   for (int i = 0; i < n; i++)
     if (v[i] == vl)
       return i;
   return -1;
}
		
	
	Retorna -1 se o valor de n foi encontrado.
	
	Retorna o valor de vl se o valor n foi encontrado.
	 
	Retorna a posição de v se o valor vl foi encontrado.
	
	Resulta em erro, se o valor de vl não estiver dentro de v.
	
	Retorna -1 se o valor de vl estiver dentro de v.
	Respondido em 15/05/2020 23:36:17
	
	
	Gabarito
Coment.
	
	
		5a
          Questão
	Acerto: 1,0  / 1,0
	
	Considere as seguintes afirmações: I. Só podemos ter uma matriz de no máximo duas dimensões. Exemplo: C[100][100]. II. Ao declararmos um vetor int A[10], se escrevemos A[2] acessamos o segundo elemento do vetor. III. Uma string declarada como char B[30] armazena no máximo 30 caracteres. Escolha a alternativa correta:
		
	
	Está correta apenas a afirmativa II.
	 
	Nenhuma afirmação está correta.
	
	Estão corretas apenas as afirmativas I e II.
	
	Está correta apenas a afirmativa I.
	
	Estão corretas apenas as afirmativas I e III.
	Respondido em 15/05/2020 23:36:44
	
		6a
          Questão
	Acerto: 1,0  / 1,0
	
	A técnica LIFO, utilizada em programação estruturada, é fundamentada no conceito de:
		
	
	Array.
	
	Fila.
	
	Ponteiro.
	 
	Pilha.
	
	Loop.
	Respondido em 15/05/2020 23:37:55
	
	
	Gabarito
Coment.
	
	
		7a
          Questão
	Acerto: 1,0  / 1,0
	
	Um órgão público adotou dois sistemas de senhas para atender os cidadãos na ordem de chegada. O sistema I atende os não idosos. O sistema II atende os idosos. Nessa situação:
		
	
	o sistema I, adota o esquema FIFO de organização de dados e o II, o esquema LIFO.
	 
	tanto o sistema I, quanto o II, adotam o esquema FIFO de organização de dados.
	
	tanto o sistema I, quanto o II, adotam o esquema vetor de organização de dados.
	
	tanto o sistema I, quanto o II, adotam o esquema LIFO de organização de dados.
	
	o sistema I, adota o esquema LIFO de organização de dados e o II, o esquema FIFO.
	Respondido em 15/05/2020 23:39:46
	
		8a
          Questão
	Acerto: 1,0  / 1,0
	
	Na área de estrutura de dados, em determinados casos, é necessário utilizar um tipo de dado onde seu valor serve como referência direta a outro valor alocado em outro espaço de memória. Este tipo de dado se chama:
		
	 
	Ponteiro
	
	Variável
	
	Matriz
	
	Endereço
	
	Vetor
	Respondido em 15/05/2020 23:41:59
	
	
	Gabarito
Coment.
	
	
		9a
          Questão
	Acerto: 1,0  / 1,0
	
	A pilha é uma estrutura de dados que permite a inserção/ remoção de itens dinamicamente seguindo a norma de último a entrar, primeiro a sair. Suponha que para uma estrutura de dados, tipo pilha, são definidos os comandos:
- PUSH (p, n): Empilha um número "n" em uma estrutura de dados do tipo pilha "p";
- POP (p): Desempilha o elemento do topo da pilha.
Considere que, em uma estrutura de dados tipo pilha p, inicialmente vazia, sejam executados os seguintes comandos:
PUSH (p, 10)
PUSH (p, 5)
PUSH (p, 3)
PUSH (p, 40)
POP (p)
PUSH (p, 11)
PUSH (p, 4)
PUSH (p, 7)
POP (p)
POP (p)
Após a execução dos comandos, o elemento no topo da pilha "p" e a soma dos elementos armazenados na pilha "p" são, respectivamente,
		
	
	7 e 40.
	 
	11 e 29.
	
	11 e 80.
	
	4 e 80.
	
	7 e 29.
	Respondido em 15/05/2020 23:43:03
	
		10a
          Questão
	Acerto: 0,0  / 1,0
	
	   Considere uma lista duplamente encadeada não circular em que
 
struct nodupla {
                                      int dado;
                                      struct nodupla  *dlink;    // aponta  p/ o nó à direita
                                      struct nodupla *elink;     // aponta  p/ o nó à esquerda
               };
 
sendo  nodupla *p;   //ponteiro para o início da lista
 
   A opção que corretamente mostra as instruções para inserir um valor no início da lista apontada por p   é   :
		
	
	 
    nodupla *novo;
 
    novo = new nodupla;
    novo->dado = valor;
    novo->dlink = p;
    novo->elink = NULL;
 p->elink = novo;
    p = novo;
 
	 
	n 
   
   nodupla *novo;
 
    novo = new nodupla;
    novo->dado = valor;
    novo->dlink = p;
    if (p != NULL)
        p->elink = novo;
    p = novo;
	 
	   nodupla *novo;
 
   novo = new nodupla;
   novo->dado = valor;
   novo->dlink = p;
   novo->elink = NULL;
   if (p != NULL)
          p->elink = novo;
   p = novo;
	
	 
n  nodupla *novo;
 
    novo = new nodupla;
    novo->dado = valor;
    novo->elink = NULL;
    if (p != NULL)
       p->elink = novo;
    p = novo;
 
 
	
	   
   nodupla *novo;
 
   novo = new nodupla;
   novo.dado = valor;
   novo.dlink= p;
   novo.elink = NULL;
   if (p != NULL)
       p.elink = novo;
   p = novo;
	Observe o trecho do programa em C++ abaixo e, após, entrar com os valores sugeridos para sua execução assinale a alternativa que representa a resposta final.
cin >> a;
cin >> b;
cin >> c;
cin >> d;
cout << a;
cout << b;
cout << c;
cout << d;
cout << d;
cout << c;
cout << b;
cout << a;
		
	
	Após a impressão dos valores pela ordem teremos duas pilhas.
	
	Após a impressão dos valores pela ordem teremos duas filas.
	 
	Após a impressão dos valores pela ordem teremos uma fila e uma pilha.
	
	Após a impressão dos valores pela ordem teremos uma pilha e uma fila.
	
	Após a impressão dos valores pela ordem teremos uma fila e um grafo.
	Respondido em 15/05/2020 23:50:07
	
		2a
          Questão
	Acerto: 0,0  / 1,0
	
	Considere o trecho de um programa escrito em C++.
void func1 (bool x, int ini, int fim) {
    for ( int y=ini; y != fim ; y++) {
        x = !x;
        if (x)
            cout << y << endl;
        else
            cout << -y << endl;
    }
}
int main() {
    func1(false, 1, 7);
}
Marque a opção correta que mostra o que é impresso na tela.
		
	
	1, 2, 3, 4, 5, 6
	 
	-1, -2, -3, -4, -5, -6
	 
	1, -2, 3, -4, 5, -6
	
	-1, 2, -3, 4, -5, 6
	
	1, -2, -3, -4, -5, -6
	Respondido em 15/05/2020 23:51:20
	
		3a
          Questão
	Acerto: 1,0  / 1,0
	
	Em C++, quando uma variável é declarada como uma struct, o acesso para atribuição e leitura dos membros (campos) deste registro se dá pelo operador :
		
	 
	∙ (ponto).
	
	-> (seta).
	
	& (e comercial ou eitza).
	
	* (asterisco).
	
	, (vírgula).
	Respondido em 15/05/2020 23:51:57
	
		4a
          Questão
	Acerto: 1,0  / 1,0
	
	Considere a seguinte função busca escrita em linguagem C++ :
bool busca(int vetor[ ], int n, int tam)
{
    int ini=0, mid;
    while (ini <= tam)
    {
         cout << " x ";
         mid = (ini + tam)/2;
         if (vetor[mid] == n)
             return true;
         else if (n > vetor[mid])
             ini = mid+1;
         else
             tam = mid-1;
    }
    return false;
}
Qual a quantidade total de impressões da letra x nas buscas pelos números n = 4, n = 2 e n = 0 no vetor [1,2,3,4,5,6,7,8], sendo tam = 7 ?
int vetor[] = {1,2,3,4,5,6,7,8};
busca(vetor, 4, 7);
busca(vetor, 2, 7);
busca(vetor, 0, 7);
		
	 
	6
	
	8
	
	5
	
	9
	
	4
	Respondido em 15/05/2020 23:52:49
	
		5a
          Questão
	Acerto: 0,0  / 1,0
	
	Considere uma lista sequencial L com n fichas de professores, sendo que cada ficha de professor é modelada pela struct :
struct professor {
int matricula;
char titulo[30];
};
e a lista L é assim declarada : professor L[n];
Assinale o trecho que corretamente exibe todas as matrículas e titulações de todos os n professores de L .
		
	 
	for (int i = 0; i < n; i++)
cout << L[i].matricula << " " << L[i].titulo << endl;
	
	for (int i = 0; i < n; i++)
cout << L[i] << endl;
	 
	for (int i = 0; i < n; i++)
cout << L.matricula[i] << " " << L.titulo[i] << endl;
	
	for (int i = 0; i < n; i++)
cout << L.matricula << " " << L.titulo << endl;
	
	for (int i = 0; i < n; i++)
cout << L[i].matricula << " " << L[i].titulo[30] << endl;
	Respondido em 15/05/2020 23:54:01
	
		6a
          Questão
	Acerto: 1,0  / 1,0
	
	A estrutura de dados linear que obedece o seguinte critério: o último elemento inserido será o primeiro elemento a ser retirado (LIFO) é:
		
	
	fila.
	
	árvore binária.
	
	lista circular.
	 
	pilha.
	
	árvore AVL.
	Respondido em 15/05/2020 23:55:41
	
	
	Gabarito
Coment.
	
	
		7a
          Questão
	Acerto: 0,0  / 1,0
	
	O que acontece quando se deseja inserir um elemento em uma FILA que já está cheia?
		
	
	Enqueue.
	
	A inserção é feita sem problema.
	 
	Underflow.
	
	Dequeue.
	 
	Overflow.
	Respondido em 16/05/2020 00:00:19
	
	
	Gabarito
Coment.
	
	
		8a
          Questão
	Acerto: 1,0  / 1,0
	
	Na Alocação dinâmica, temos alguma regras a considerar. Leia atentamente as afirmativas abaixo e assinale a correta.
I Alocou com new, desaloca com free
II Alocou com new[], desaloca com delete
III Alocou com new[], desaloca com delete[]
IV Alocou com new[], desaloca com free[]
V Alocou com new, desaloca com delete
		
	
	I e III estão corretas
	 
	III e V estão corretas
	
	I e IV estão corretas
	
	I, II, III e V estão corretas
	
	II e V estão corretas
	Respondido em 16/05/2020 00:01:47
	
		9a
          Questão
	Acerto: 1,0  / 1,0
	
	Sabendo que uma fila encadeada possui seus nós definidos pela :
struct no {
int x;
no *prox;
};
Marque a alternativa que representa corretamente a criação ou alocação do nó na sintaxe do C++ para utilização na fila.
		
	 
	no *p=new no;
	
	no p -> new no;
	
	p *no=new no;
	
	p *no -> new no;
	
	no *p -> new no;
	Respondido em 16/05/2020 00:02:34
	
	
	Gabarito
Coment.
	
	
		10a
          Questão
	Acerto: 0,0  / 1,0
	
	Observe a struct, definida globalmente, e um trecho de uma função que manipula uma Lista Duplamente Encadeada.
struct listaDE
{
 int info;
 struct listaDE* ant;
 struct listaDE* prox;
};
...
listaDE* novo = new listaDE;
novo->info = valor;
novo->prox = LISTA;
novo->ant = NULL; 
Assinale a alternativa que apresenta o protótipo dessa função
		
	
	listaDE *remove(listaDE *LISTA, int valor);
	 
	void exibeIpF(listaDE *LISTA);
	 
	listaDE *insereInicio(listaDE *LISTA, int valor); 
	
	listaDE *insereFim(listaDE *LISTA, int valor);
	
	listaDE *busca (listaDE *LISTA, int valor);
		Das estruturas de dados a seguir aquela que NÃO é uma estrutura linear é :
	
	
	
	Vetor.
	
	
	Fila.
	
	
	Grafo.
	
	
	Pilha.
	
	
	Lista.
		Estão entre algumas das possíveis formas de se estruturar dados:
	
	
	
	Grafos, lista ordenada, algoritmos.
	
	
	Algoritmos, lista ordenada, vetores.
	
	
	Lista encadeada, vetores, algoritmos.
	
	
	Grafos, lista ordenada, vetores.
	
	
	Grafos, algoritmos, fila.
		   Os irmãos Silva irão viajar por vários países da Europa e por isso, traçaram no mapa o percurso que farão, de cidade a cidade.  Qual a estrutura de dados mais adequada para modelar este problema ?
	
	
	
	 Lista
	
	
	Grafo
	
	
	              Árvore
	
	
	Fila
	
	
	             Pilha
		Qual estrutura de dados é mais adequada para armazenar a estrutura do diretório do sistema de arquivos de um sistema operacional?
	
	
	
	Árvore
	
	
	Grafo
	
	
	Fila
	
	
	Pilha
	
	
	Lista
		É um exemplo de TAD Não Linear:
	
	
	
	Filas de Prioridade
	
	
	Grafos
	
	
	Pilhas
	
	
	Listas
	
	
	Filas
		As estruturas de dados são utilizadas para manter dados ou informações organizados na memória, o que possibilita a otimização do uso destes dados. Porém, as estruturas guardam características especiais na manipulação destes dados, assim deve-se escolher a estrutura certa ou mais adequada para uma determinada aplicação. Portanto marque a opção que representa a melhor estrutura, quando se tem como requisitos principais o acesso aleatório aos dados e alocação destes de forma contínua na memória.
	
	
	
	Pilha Sequencial
	
	
	Pilha Encadeada
	
	
	Fila Sequencial
	
	
	Lista Encadeada
	
	
	Lista Sequencial
		O que é estrutura de dados?
	
	
	
	É uma sequência finita de instruções bem definidas e não ambíguas, cada uma das quais devendo ser executadas mecânica ou eletronicamente em um intervalo de tempo finito e com uma quantidade de esforço finita.
	
	
	É uma forma determinada de armazenamento de dados em um banco de dados.
	
	
	É um conjunto de técnicas de programação.
	
	
	É um conjunto de comandos para uma tarefa específica referenciada por um nome no algoritmo principal, retornando um determinado valor no seu próprio nome.
	
	
	É um modo particular de armazenamento e organização de dados em um computador de modo que possam ser usados eficientemente.
		Podemos dizer que estrutura de dados é:
	
	
	
	O que permite o armazenamento e a recuperaçãode dados independentemente de seu conteúdo.
	
	
	A entrada, que satisfaz a quaisquer restrições impostas pelo problema, necessária para se calcular uma solução do problema.
	
	
	O meio para armazenar e organizar dados com o objetivo de facilitar o acesso e as modificações.
	
	
	É a saída, que satisfaz a quaisquer restrições impostas pelo problema, necessária para se calcular uma solução do problema.
	
	
	Uma sequência de passos computacionais que transforma uma entrada em uma saída previamente determinada.
	
	A declaração de variáveis na programação é o ato de reservar um espaço na memória para poder armazenar valores de um determinado tipo. Essas variáveis podem ser classificadas como variáveis locais e globais. Sendo assim, qual das situações abaixo representa melhor o conceito das variáveis globais.
	
	
	
	Se modificarmos o valor da variável 'Y' na função "soma", e depois imprimirmos na tela esta variável em outra função, onde tambem está declarada a variável 'Y', será acusado um erro de compilação.
	
	
	Se dentro de uma função "mostra" declararmos uma variável 'R' com um determinado valor poderemos imprimir esta variável em qualquer outra função do programa mostrando o valor atribuído na função "mostra".
	
	
	Ao modificar o valor da variável 'X' na função "modifica" seu valor modificado poderá ser apresentado em qualquer outra função do programa.
	
	
	Em duas funções diferentes temos duas variáveis também diferentes com o mesmo nome apresentando o mesmo valor.
	
	
	Em uma função "resul" tem-se uma variável ali declarada por 'T' que recebe o valor inteiro 5. Ao tentar chamar esta variável em outra função é mencionado um warning.
		Considere o trecho de um programa escrito em C++ : 
int func1 (int n1, int n2) {
    int soma=0;
    for (    ; n1 < n2 ; n1 +=  2) {
         soma +=  n1;
     }
    return soma;
}
main() {
    cout << func1(1.20);
}
Marque a opção correta que mostra o que é impresso na tela.
	
	
	
	90
	
	
	102
	
	
	104
	
	
	100
	
	
	80
		Considere os trechos abaixo:
int valor = 100;
void eureka (int &z)   {
    int temp = 25;
     z--;
     temp = temp - 10;
     valor = valor - temp;
     cout << "Auxiliar = " << temp << endl;
}
int main()  {
     int R = 1000;
     eureka(R);
     cout << "Result = " <<  R << "  Valor  = " << valor << endl;
}
Assinale a opção correta.
	
	
	
	Será impresso
Auxiliar = 15
Result = 999  Valor = 85
sendo que z é um  parâmetro passado por referência
 
 
		Para compararmos vetores de char, usaremos a função _____________________ . Para copiarmos o conteúdo de um vetor de char nas posições ocupadas por outro vetor de char, usaremos a função ______________________ .
	
	
	
	strcmp(); e strcpy();
	
	
	strcmp(); e strcat();
	
	
	strcmp(); e strlen() ;
	
	
	strcmp(); e strcmpi ();
	
	
	strcat(); e strcpy() ;
		Assinale a opção certa.
 Quando não se escreve o protótipo de uma função ...
	
	
	
	O programa não funcionará de forma alguma.
	
	
	A definição da função deverá ser escrita, obrigatoriamente, após o programa principal.
	
	
	A chamada da função não poderá ser feita em qualquer hipótese.
	
	
	A chamada da função poderá ser feita em qualquer hipótese.
	
	
	É preciso definir a função antes do programa principal.
		Diga, para o trecho do programa abaixo, qual a opção que representa a saída em tela.  Considere que o programa será compilado sem erros e irá executar também sem problemas .
void troca (int x, int y){
   int tmp;
   tmp = y;
   y = x;
   x = tmp;
}
int main( ) {
   int a = 13, b = 10;
   troca( a, b );
   cout<<"Valores: "<< a<<"\t"<< b<<< endl;
   system("pause");
}
	
	
	
	Valores: 10 10
	
	
	Valores: 13 10
	
	
	Valores: 10 13
	
	
	Valores: 31 01
	
	
	Valores: 13 13
		"Algoritmo de ordenação por trocas  que varre um vetor um certo número de vezes, comparando os elementos vizinhos dois a dois. A cada varredura, se o par de elementos está em ordem crescente, nada é feito, caso contrário os elementos do par são permutados". Esta definição está descrevendo o algoritmo de ordenação conhecido por :
	
	
	
	QuickSort
	
	
	SelectionSort
	
	
	MergeSort
	
	
	InsertionSort
	
	
	BubbleSort
		Analisando o trecho de código a seguir:
inicio=0;
fim= tamanho - 1;
meio=(inicio+fim)/2;
while(procura != nomeVetor[meio] && inicio != fim)
{
  if(procura > nomeVetor[meio])            
   inicio=meio+1;
  else
   fim=meio;
  meio=(inicio+fim)/2;   
}
if(nomeVetor[meio]==procura)
 cout<<"\n....: "< < outroVetor[meio]<<endl;
else
 cout<<"\nDado nao encontrado\n";</endl;
Pode-se afirmar que:
	
	
	
	trata-se da implementação do algortimo de ordenação bolha.
	
	
	trata-se da implementação do algortimo de ordenação por seleção.
	
	
	trata-se da implementação do algortimo de busca binária.
	
	
	trata-se da implementação do algortimo de busca sequencial
	
	
	trata-se da implementação do algortimo de ordenação por inserção.
		Este vetor foi ordenado pelo método:
	
	
	
	Mergesort.  
	
	
	Ordenação por inserção (insertion sort). 
	
	
	Ordenação por seleção (selection sort).  
	
	
	Quicksort.  
	
	
	Método da bolha (bubble sort).  
		Sabendo-se que o método de seleção também é um método de ordenação que baseia seu algoritmo em trocas entre os elementos de um vetor, se submetermos a sequencia de inteiros armazenada em um vetor inicialmente na seguinte ordem : 13, 23, 3, 8, 1. Pode-se dizer que quando o menor elemento do vetor alcançar sua posição final, a ordenação apresentada no vetor é:
	
	
	
	1,23,13,8,3
	
	
	1,8,3,23,13
	
	
	1,23,3,8,13
	
	
	1,13,23,8,3
	
	
	1,3,23,8,13
		Entre os diversos algoritmos de pesquisa existentes, certamente os mais famosos são os da pesquisa sequencial e o da pesquisa binária. A busca ou pesquisa sequencial pode ser aplicada em vetores independente destes estarem ordenados, entretanto a busca binária só se aplica em vetores ordenados.
Seja o vetor A= {10,35,41,55,69,70,98}, suponha que o número 70 foi pesquisado pelo algoritmo da busca sequencial e também pelo algoritmo da busca binária, ambos algoritmos realizam testes nos elementos do vetor até achar o que procuram ou definirem que o elemento não se encontra no vetor. Sendo assim marque a alternativa que expressa o número de testes realizados pela busca sequencial e o número de testes realizados pela busca binária, respectivamente, até encontrarem o 70.
	
	
	
	6 e 4
	
	
	6 e 2
	
	
	6 e 1
	
	
	7 e 1
	
	
	5 e 5
	
	if(vet[j] == vet[j-1] )
    { 
         aux=vet[j];
         vet[j]= vet[j-1];
         vet[j-1]=aux;      
     }
	
	
	if(vet[j-1] > vet[j] )
    { 
         aux=vet[j];
         vet[j]= vet[j-1];
         vet[j-1]=aux;      
     }
	
	
	if(vet[j] < vet[j-1] )
    { 
         aux=vet[j];
         vet[j-1]= vet[j];
         vet[j-1]=aux;      
     }
	
	
	if(vet[j] < vet[j-1] )
    { 
         aux=vet[j];
         vet[j]< vet[j-1];
         vet[j-1]=aux;      
     }
	
	
	if(vet[j-1] < vet[j] )
    { 
         aux=vet[j];
         vet[j]= vet[j-1];
         vet[j-1]=aux;      
     }
	for (int i = 0; i < n; i++)
   cout << L.matricula[i] << "  "  << L.nome[i] << endl;
	
	
	for (int i = 0; i < n; i++)
   cout << L[i].matricula << "  "  << L[i].nome << endl;
	
	
	for (int i = 0; i < n; i++)
   cout << L[i].matricula << "  "  << L[i].nome[30] << endl;
	
	
	for (int i = 0; i < n; i++)
   cout << L.matricula << "  "  << L.nome << endl;
	
	
	for (int i = 0; i < n; i++)
   cout << L[i] << endl;
		__________________________ é uma lista linear em que a alocação de memória pode ser estática, e que a forma de armazenamento é contígua ou sequencial na memória. Usamos este tipo de lista quando se tem em mente um tamanho pré-definido, ou seja, quando se sabe até onde a lista pode crescer.
	
	
	
	Lista Linear Sequencial
	
	
	Lista Não Linear
	
	
	Lista Linear Não Sequencial
	
	
	Lista Linear de Alocação de Memória
	
	
	Lista Linear Não Alocada
		Considere as seguintes afirmações sobre Listas Sequenciais:
I  - São estruturas

Outros materiais