Buscar

ED - exercicios

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 45 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 45 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 45 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

1a Questão
	
	
	
	
	É um exemplo de TAD Não Linear:
		
	 
	Filas
	
	Filas de Prioridade
	 
	Grafos
	
	Pilhas
	
	Listas
	
Explicação: Um grafo é um tipo de dados abstrato não linear
	
	
	 2a Questão
	
	
	
	
	Qual estrutura de dados não linear que é utilizada na implementação de Redes de Computadores, na Computação Gráfica, em modelagem de circuitos digitais e etc. E que se caracteriza por apresentar um conjunto de nós e conexões entre eles.
		
	 
	Grafos
	
	Filas Encadeadas
	
	Listas Encadeadas.
	
	Vetores
	
	Pilhas Encadeadas
	
	
	 3a Questão
	
	
	
	
	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 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 III e IV estão corretas.
	
	As alternativas II e IV estão corretas.
	
	As alternativas I e III estão corretas.
	 
	As alternativas I e II estão corretas
	
	Todas as alternativas estão corretas.
	
	
	 4a Questão
	
	
	
	
	Sobre estrutura de dados, identifique o que está correto afirmar.
I. Pilha é uma estrutura de dados com acesso restrito aos seus elementos, uma vez que eles são colocados e retirados por um único lado e são ordenados pelo princípio LIFO (last in first out). Assim, sempre que um elemento é adicionado ou retirado seu topo é alterado. 
II. Pilha é o tipo de estrutura usada, por exemplo, na avaliação de expressões numéricas, na recursividade e pelos compiladores, na passagem de parâmetros para as funções. 
III. Registro é uma estrutura básica que permite guardar coleções de dados de diferentes tipos, sendo normalmente utilizado quando um objeto tem diferentes atributos, isto é, contém campos de diferentes tipos. 
IV. Lista pode conter um número qualquer de elementos, expandindo-se ou contraindo-se conforme o elementos são inseridos ou retirados. Nesse tipo de estrutura, os acessos tanto podem ser feitos sequencialmente como diretamente. 
V. Fila, assim como a pilha , é uma versão especial de lista, e como tal, seus elementos são ordenados pelo princípio LIFO (last in first out).
		
	 
	I, II e III.
	
	I, III, IV e V.
	
	I, III e V.
	
	II, III, IV e V.
	
	II, IV e V.
	
	
	 5a Questão
	
	
	
	
	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
	
	Pilha Sequencial
	
	Pilha Encadeada
	 
	Fila Sequencial
	
	Lista Encadeada
	
	
	 6a Questão
	
	
	
	
	          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
	
	Fila
	
	             Pilha
	
	              Árvore
	
	
	 7a Questão
	
	
	
	
	Podemos dizer que estrutura de dados é:
		
	
	Uma sequência de passos computacionais que transforma uma entrada em uma saída previamente determinada.
	 
	O meio para armazenar e organizar dados com o objetivo de facilitar o acesso e as modificações.
	
	O que permite o armazenamento e a recuperação de dados independentemente de seu conteúdo.
	
	É a saída, que satisfaz a quaisquer restrições impostas pelo problema, necessária para se calcular uma solução do problema.
	
	A entrada, que satisfaz a quaisquer restrições impostas pelo problema, necessária para se calcular uma solução do problema.
	
	
	 8a Questão
	
	
	
	
	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 II e IV estão corretas.
	
	Todas as alternativas estão corretas.
	
	As alternativas III e IV estão corretas.
	
	As alternativas I e III estão corretas.
	 
	As alternativas I e II estão corretas
	
	 1a Questão
	
	
	
	
	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 modo particular de armazenamento e organização de dados em um computador de modo que possam ser usados eficientemente.
	
	É 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.
	
Explicação:
Estrutura de dados não é banco de dados . Estrutura de dados não é Tipo de dados.
Estrutura de dados nã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¿ que no caso, fala de função.
 
Estrutura de dados não é ¿ É 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.¿    Esta definição é de algoritmo.
 
Portanto, Estrutura de Dados é ¿ É um modo particular de armazenamento e organização de dados em um computador de modo que possam ser usados eficientemente.¿
 
Na Aula 1 do conteúdo online há elementos para tal questão.
	
	
	 2a Questão
	
	
	
	
	Na maioria dos sistemas operacionais, os arquivos são organizados hierarquicamente em um esquema de diretórios (pastas) e sub-diretórios. Qual a estrutura mais adequada para representar este problema ?
		
	
	pilha
	
	lista
	 
	árvore
	
	grafo
	
	fila
	
	
	 3a Questão
	
	
	
	
	Estão entre algumas das possíveis formas de se estruturar dados:
		
	
	Algoritmos, lista ordenada, vetores.
	
	Grafos, algoritmos, fila.
	
	Lista encadeada, vetores, algoritmos.
	
	Grafos, lista ordenada, algoritmos.
	 
	Grafos, lista ordenada, vetores.
	
Explicação:
	FAlso.  Algoritmos não são estrutura de dados
	Grafos, algoritmos,fila.
	.
	FAlso.  Algoritmos não são estrutura de dados.
	Grafos, lista ordenada, algoritmos.
	 
	Correto.
	Grafos, lista ordenada, vetores.
	 
	FAlso.  Algoritmos não são estrutura de dados.
	Algoritmos, lista ordenada, vetores.
	 
	
FAlso.  Algoritmos não são estrutura de dados.
	Lista encadeada, vetores, algoritmos.
	
	
	 4a Questão
	
	
	
	
	           Preciso cadastrar todos os interessados em meu novo curso de programação. Qual a estrutura de dados mais adequada para modelar este problema, visto que não há qualquer preocupação com ordem de chegada ou saída de aluno da turma.
		
	
	Árvore
	
	         Fila
	
	          Pilha
	
	Grafo
	 
	Lista
	
	
	 5a Questão
	
	
	
	
	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. 
		
	
	II, IV e V são afirmativas verdadeiras
	 
	I, III, IV e VI são afirmativas verdadeiras
	
	I, II, III e VI são afirmativas verdadeiras
	
	I, II e V são afirmativas verdadeiras
	
	II, IV, V e VI são afirmativas verdadeiras
	
	
	 6a Questão
	
	
	
	
	Analise as afirmativas abaixo e selecione a alternativa correta.
 
I Algumas aplicações da estrutura de dados grafo são: Diagrama de Entidade Relacionamento e Redes de computadores. 
 
II Árvore e lista duplamente encadeada são estruturas não lineares. 
III A Fila é uma estrutura não linear e a inserção de um elemento acontece ao final.  
IV A Lista é uma das estruturas de dados mais simples, mas não se pode ordená-la.
 
V O uso de ponteiros é fundamental para construção de listas encadeadas.
		
	
	I , II e IV são verdadeiras 
	
	II e V são verdadeiras 
	
	III e V são verdadeiras 
	
	II E IV são verdadeiras 
	 
	I e V são verdadeiras 
	
	
	 7a Questão
	
	
	
	
	Preciso fazer uma relação de tudo o que levar em minha viagem de mochila pela Europa.  A estrutura de dados mais adequada para armazenar tudo que preciso levar é ...
		
	 
	lista
	
	grafo
	
	fila
	
	árvore
	
	pilha
	
Explicação:
Conforme gabarito e aula 1.
	
	
	 8a Questão
	
	
	
	
	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 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 duas pilhas.
	
	Após a impressão dos valores pela ordem teremos uma fila e um grafo.
	
	Após a impressão dos valores pela ordem teremos duas filas.
	
	 1a Questão
	
	
	
	
	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.
		
	
	número
	
	caracter
	 
	referência
	
	valor
	
	void
	
Explicação:
Esse é o conceito de passagem por referência.
	
	
	 2a Questão
	
	
	
	
	Ao definirmos uma função, podemos afirmar:
I Toda função tem parâmetros
II Quando nada retorna, o tipo é void
III Quando todos os parâmetros são do mesmo tipo, é suficiente usar o tipo uma vez e separar os nomes dos parâmetros por vírgulas
IV  Na passagem por valor, o endereço da variável da função chamadora é passado para a função chamada
Após uma análise das afirmativas acima, escolha a opção correta.
		
	 
	Somente II está correta
	
	Somente II III e IV estão corretas
	
	Somente II e III estão corretas
	
	Somente II e IV estão corretas
	 
	Somente I e II estão corretas
	
	
	 3a Questão
	
	
	
	
	Considere a função abaixo:
int func (int a, int& b){
   a = b - a;
   b = a * 2;
   a = b * 2;
   return a;
}
Considere o seguinte código na função main:
    int x = 2, y = 3, z;
    z = func (x, y);
    cout << x << "; " << y << "; " << z;
O que será impresso?
		
	
	2; 2; 1
	
	1; 2; 4
	
	1; 3; 1
	 
	4; 2; 4
	 
	2; 2; 4
	
Explicação:
a recebeu o valor de x que era 2
b recebeu 3, a partir de y, que foi passado por referência.
Executando a função, passo a passo, tem-se :
a recebeu 1
b recebeu  2
a recebeu um novo valor, que é  4.
Daí a função retorna o valor de a, que é 4.  
Voltando para a main temos que z recebeu o retorno da função que é 4, x não se alterou, valendo 2 e y recebeu 4, devido a alteração na função no parâmetro b, passado por referência.
  Daí, na tela será impresso :  2; 2; 4
	
	
	 4a Questão
	
	
	
	
	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 13
	 
	Valores: 13 13
	
	Valores: 13 10
	
	Valores: 10 10
	
	Valores: 31 01
	
Explicação:
 
A execução começa pela main. São passados o valor de a, que é 13 e o endereço de b, que vale 10.  Em seguida, é chamada a função troca e são passados o valor de a e o endereço de b.  
Executando a função troca, x recebe 13 e *y recebe 10. Mas ocorre a troca, usando tmp como auxiliar. Então x recebe 10 e *y recebe 13. Ao terminar a execução da função, voltamos para a main e temos a sem mudanças e b com a mudança ocorrida na função.  Note que x é um parâmetro passado por valor  e  y é um parÂmetro passado por referência.
Portanto,  a ficou 13 e b ficou 13.
Logo, será impresso : Valores:  13 13
	
	
	 5a Questão
	
	
	
	
	 
		
	
	Auxiliar = 100  Numero1 = 900  Numero2 = 20
	
	Auxiliar = 111  Numero1 = 1000  Numero2 = 80
	 
	Auxiliar = 100  Numero1 = 900  Numero2 = 80
	
	Auxiliar = 100  Numero1 = 1000  Numero2 = 20
	
	Auxiliar = 101  Numero1 = 900  Numero2 = 20
	
Explicação:
Acompanhando a execução
Na função main() é declarada a variável valor e inicializada com 1000.
Quando na main(), a função mistério é chamada, é passado o endereço da variável valor. Logo, de forma bem simples, v seria o nome da variável valor para a função misterio(...)
Dentro da função misterio(...), foi declarada uma variável local aux com conteúdo 11
Sendo assim,
aux = aux - 11; Deixará aux com 100
v =  v -  aux ; Deixará v com 900(1000 - 100)
Como a  variável  numero foi declarada globalmente, todas as funções poderão acessá-la e, com isso, alterar seu valor,
numero =  aux  -  numero; Deixará numero com 80(100 - 20)
Dentro da função misterio(...) será exibido Auxiliar = 100 e quando retornar à função main(), serão exibidos Numero1 = 900 Numero2 = 80
Resposta correta: Auxiliar = 100  Numero1 = 900 Numero2 = 80
	
	
	 6a Questão
	
	
	
	
	Funções são instrumentos de modularização de programas, que tem como finalidade tornar o código mais legível, isto é mais fácil de entender, evita replicaçãode instruções e permite o reuso das funções em outros programas. Então considere o seguinte código:
#include< iostream >
using namespace std;
 
int main( )
{
   float a=10.0;
   float b=4.0;
   cout < < media(a,b);
   return 0;
}
float media(float x, float y) { return (x+y)/2;}
 
Marque a alternativa CORRETA:
		
	
	O código compila normalmente e apresenta como resultado o valor 7.0
	 
	O código não compila, pois há necessidade de se declarar float media(float, float) como protótipo da função float media(float x, float y)antes da função principal.
	
	O código não compila, pois os parâmetros usados na chamada da função deveriam ser "x" e "y"; porém a chamada se deu com identificadores "a" e "b".
	
	O código não compila, pois a função float media(float x, float y) retorna um valor que seria ser armazenado em uma variável do tipo float e só então poderia ser usado o comando cout para exibir o resultado.
	
	O código compila normalmente, pois como a descrição da função float media(float x, float y)está posicionada após a função int main ( ), não há necessidade do uso de protótipos.
	
Explicação:
Quando uma função é posicionada depois da função main(), o protótipo dela precisa estar presente antes da função main().
	
	
	 7a Questão
	
	
	
	
	O que será mostrado na tela pelo programa abaixo ? 
#include < iostream >
using namespace std;
int a,b;
void dobro(int x){ //x passado por valor
 x=2*x;
}
int triplo(int y){ //y passado por valor
 return 3*y;
}
void altera(int x, int &y) { //x passado por valor e y passado por referencia
 x=x+a;
 y=x+b;
} 
 
int main (){
 a=2;
 b=3;
 dobro(a);
 b=triplo(b);
 altera(a,b);
 cout<< a << " e " << b << endl;
}
 
		
	
	4 e 12
	
	2 e 9
	
	9 e 16
	
	4 e 9
	 
	2 e 13
	
Explicação:
Executando o programa, passo a passo, temos :
Na main, a recebe 2 e b recebe 3.  Note que a e b são variáveis globais.
Daí, ainda na main, a função dobro é chamada. Ao executar dobro, temos que o valor 2 é passado e x (local à dobro) recebe 2 * 2, que dá 4.
Ao terminar a função dobro, volta-se para a main, mas o valor de a passado não mudou, continuando 2.
Após a execução de dobro, a função triplo é chamada na main e é passado o valor de b,  que é  3.  Iniciando a execução da função triplo, temos que y recebe 3 e a função retorna 3 * 3, que é 9. Voltando para a main, temos que b recebe o valor retornado pela função, que é 9.
Até este ponto, temos que a vale 2 e b mudou para 9.
Em seguida, a função altera é chamada e são passados 2 e 9, respectivamente, para x e y.  Executando a função altera, temos que x recebe 2+2, que dá 4 e y recebe 4+9, que dá 13.  Como x é passado por valor e y por referência, temos que a mudará e b mudará (ambas na main).
Então, voltando para main temos que a vale 2 e que b vale 13. Assim, será impresso na tela
           2  e   13
	
	
	 8a Questão
	
	
	
	
	Assinale a alternativa que apresenta duas formas de passagem de parâmetros para uma rotina ou função:
		
	
	Por inferência e por valor.
	
	Por teste e por reforço.
	
	Por memória e por disco.
	
	Por reforço e por referência.
	 
	Por valor e por referência
	
Explicação:
Questão super objetiva.  Só pode ser por valor e por referência.
	
	
	 1a Questão
	
	
	
	
	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:
		
	
	void func (int &a, int &b);
	
	int func (&int, int);
	
	void func (int a, int &b);
	 
	int func (int a, int &b);
	
	int func (int &a, int b);
	
	
	 2a Questão
	
	
	
	
	Blocos únicos de códigos que realizam diversas tarefas distintas são de difícil manutenção. Portanto, utiliza-se a técnica da modularização de programas, a fim de facilitar a implementação e a manutenção dos programas. Esta técnica tem como principal elemento:
		
	
	Os Grafos
	
	As Filas
	
	As Estruturas de Dados
	 
	As funções
	
	Os Vetores
	
	
	
	 3a Questão
	
	
	
	
	Assinale a alternativa que apresenta duas formas de passagem de parâmetros para uma rotina ou função:
		
	
	Por teste e por reforço.
	
	Por memória e por disco.
	
	Por inferência e por valor.
	
	Por reforço e por referência.
	 
	Por valor e por referência
	
Explicação:
Questão super objetiva.  Só pode ser por valor e por referência.
	
	
	 4a Questão
	
	
	
	
	Nas linguagens C e C++, ao se declarar qualquer função, a especificação de tipo de dados que antecede o nome desta função define
		
	 
	o tipo do dado do valor retornado da função para quem a chamou.
	
	o tipo dos dados dos parâmetros que são passados à função quando da sua chamada.
	 
	o tipo das variáveis que serão utilizadas dentro da função.
	
	o escopo das variáveis do programa.
	
	o protótipo da função.
	
Explicação:
Por definição, antes do nome da função colocamos o tipo de dados retornado. Por exemplo, int, double, char ... Quando a função nada retorna colocamos void.
	
	
	 5a Questão
	
	
	
	
	Funções são semelhantes aos procedimentos, exceto que uma função sempre retorna um valor. Um exemplo de função seria o conjunto de instruções para calcular o fatorial de um número e após a função ser executada, ela deve retornar o fatorial do número pedido. Marque a opção que representa um protótipo de função válido.
		
	
	nome tipo(parametros);
	
	void float(int a, int b);
	
	tipo parametros(parametros);
	 
	retorno nomeFuncao(parametros);
	 
	tipo parametros(int a, int b);
	
Explicação:
Por definição, o protótipo de uma função é formado da seguinte forma :
   nome_da_função ( );
	
	
	 6a Questão
	
	
	
	
	Considere a função abaixo:
void func (int a, int &b) {
    a++;
    b = a*2;
}
e o seguinte trecho de código na função  main :
int x=2, y=3;
func (x,y);
func (y,x);
cout << x << "  ;  " << y;
Após a execução do cout o que será impresso  ? 
		
	 
	2; 6
	
	4; 12
	 
	14; 6
	
	2; 12
	
	6; 14
	
Explicação:
  Fazendo um teste de mesa, chegaremos na opção correta.  Iniciando a execução pela main, temos que x recebe 2 e y recebe 3.  
Em seguida, na 1ª. chamada de func,  os valores de x e de y, respectivamente, 2 e 3, são passados para a função.
Executando a função func, que possui o parâmetro a  passado por valor e o parâmetro b passado por referência (usa &) ...
void func (int a, int &b) {
a++;
b = a*2;
}
Temos que a recebeu 2 e b recebeu 3. Daí, a ficará 3 e b receberá 6.  
Assim, ao terminar a função func e retornarmos para a main teremos x sem alteração igual a 2 e y com alteração igual a 6.
Após voltarmos para a main, temos uma nova chamada de func que recebe os valores de y e de x, respectivamente, que são 6 e 2.  Na 2ª. chamada de func para esses valores, teremos que a recebe 6 e y recebe 2.  Dentro da função, temos que a é incrementado para 7 e que b recebe 7 * 2 que dá 14. Ao terminarmos a execução da função, temos que y não sofreu mudança, ficando com o valor 6  e que x mudou para 14.  Logo, será impresso 14;6
Logo, as demais opções são incorretas.
 
	
	
	 7a Questão
	
	
	
	
	Considere a função abaixo: 
int func (int a, int &b) {
a = b - a;
b = a * 2;
a = b * 2;
return a;
}
Considere também o seguinte trecho de código no main :
int x=2, y=3, z;
z = func (x,y);
cout << x << "; " << y<< "; " << z;
Após a execução do cout, seria impresso:
		
	 
	2; 2; 4
	
	2; 2; 1
	
	1; 3; 1
	
	4; 2; 4
	 
	1; 2; 4
	
Explicação:Começando a execução pela main, temos que x recebe 2 e y recebe 3.
Chamando a função, são passados os valores 2 e 3, respectivamente para a e b. Note que b é passado por referência.
Dentro da função tem-se o seguinte :
a recebe 1, depois b recebe 2 e então, novamente, a é alterado e recebe 4. Daí, o valor de a igual a 4 é retornado para a main e é atribuído a z.
Voltando para a main, temos que x não mudou, ficando igual a 2. Temos ainda que z recebeu 4, o valor retornado pela função e finalmente, y foi alterado para 2.
Portanto, foi impresso 2;2;4, pois foram impressos os valores de x, y e z, respectivamente.
	
	
	 8a Questão
	
	
	
	
	Blocos únicos de códigos que realizam diversas tarefas distitintas são de dificil manutenção. Portanto, utiliza-se a tecnica da modularização de programas, a fim de facilitar a implementação e a manutenção dos programas. Esta técnica, também chamada de modularização, tem como principal elemento:
		
	
	Os Grafos
	
	As Estruturas de Dados
	
	As Filas
	 
	As funções
	
	Os Vetores
	
	 1a Questão
	
	
	
	
	Informe qual deverá ser a saída do programa abaixo:
#include 
void func(int *x)
{
 do{
 cout << *x << " ";
 (*x)--;
 }while(*x>0);
}
main()
{
 int x=5;
 func(&x);
 cout << x;
 system("pause");
}
		
	
	5 3 4 2 1 4
	
	5 4 3 2 1 5
	
	5 3 4 2 1 0
	 
	5 4 3 2 1 0
	
	5 4 3 2 1 6
	
	
	 2a Questão
	
	
	
	
	Considera a FUNÇÃO abaixo:
void inverte(int &x, int &y)
{ int aux = x;
x = y;
y = aux; }
Quais valores serão impressos na tela quando o seguinte programa principal for executado?
int main()
{ int a = 18, b = 28;
inverte(a, b);
cout << a <<" e "<< b;
return 0; }
		
	 
	28 e 18
	
	18 e 18
	
	28 e 08
	
	18 e 28
	
	08 e 18
	
Explicação:
Teste de Mesa
a      b      x      y      aux
18    28                          //Na main()
18    28    18    28          //Quando a função é chamada x, recebe o endereço de a e y, o de b. Logo acessam os mesmos endereços
18    28    18    28    18  //Na função, aux é declarada e inicializada com o valor de x
18    28    28    28    18   //Na função x  =  y; Deixará x com valor 28
18    28    28    18    18   //Na função y = aux; Deixará y com valor 18
 
Como a função é void, nada retorna e nem precisa porque os valores foram trocados pela função misterio(...) que recebeu por passagem por referência.
	
	
	 3a Questão
	
	
	
	
	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 = 3; n = n + 2; dobro(n); cout << n; return 0; }
		
	 
	5
	
	3
	
	10
	
	0
	
	20
	
Explicação:
A função não retorna valor, então o valor de "n" não é alterado permanecendo igual a 5.
	
	
	 4a Questão
	
	
	
	
	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.
		
	 
	6
	
	2
	
	3
	
	1
	
	4
	
Explicação:
Fazendo passo a passo :
int func1 (long num) {
    int n, na=1;
    while (num / 10 != 0){
          na += 1;
          num /= 10;
    }
    return na;
}
main() {
     cout << func1 (132041);
}
Passos : 
1) Chamada da função passando o valor 132041
2) Começa a função com num recebendo o valor 132041
3) na recebe 1 
4) enquanto num/10 é diferente de zero faça ...   Vejamos : 132041/10 é diferente de zero então
   na recebe 2 e num recebe 13204
5) Volta no teste do loop... 13204 /10 é diferente de zero ? Sim. Então, na recebe 3 e num recebe 1320
6) Volta no teste do loop... 1320 /10 é diferente de zero ? Sim. Então, na recebe 4 e num recebe 132 
7) Volta no teste do loop... 132 /10 é diferente de zero ? Sim. Então, na recebe 5 e num recebe 13
8) Volta no teste do loop... 13 /10 é diferente de zero ? Sim. Então, na recebe 6 e num recebe 1
9) Volta no teste do loop... 1 /10 é diferente de zero ?  Não.
Então, retorna o valor e na que é 6.
	
	
	 5a Questão
	
	
	
	
	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:
		
	
	Registro.
	
	Passagem por valor.
	
	Envio de valor.
	 
	Ponteiros.
	
	Envio de inteiro.
	
Explicação:
	Falso.  Quando se tem endereço não é passagem por valor
	Passagem por valor.
	 
	FAlso. Fala-se em endereço do valor
	Envio de inteiro.
	 
	 Verdadeiro. Ponteiro armazena o endereço de memória de uma variável
	Ponteiros.
	 
	Falso. Como é esse envio ? 
	Envio de valor.
	 
	FAlso.  Sem sentido. Resgistro (struct em C++) agrega dados de tipos diferentes.
	Registro.
	
	
	 6a Questão
	
	
	
	
	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 ______________________ .
		
	
	strcat(); e strcpy() ;
	
	strcmp(); e strlen() ;
	
	strcmp(); e strcat();
	 
	strcmp(); e strcpy();
	
	strcmp(); e strcmpi ();
	
Explicação:
Nâo há outra possíbilidade de resposta.  Em cstring estão declaradas as funções da opção correta, que fazem exatamente o que foi mencionado no enunciado.
Ainda a saber :   strcat concatena e strlen conta o número de caracteres
	
	
	 7a Questão
	
	
	
	
	Caso uma estrutura homogênea (vetor) seja passada como parâmetro para uma função, então:
		
	
	Essa passagem é "por valor"
	
	Todos os valores contidos no vetor são copiados para a função
	 
	Essa passagem é "por referência"
	
	Haverá um erro de compilação, pois vetores não podem ser parâmetros de funções
	
	Essa passagem pode ser "por valor" ou "por referência"
	
Explicação:
Quando o vetor é um parâmetro de uma função ele é sempre passado por referência, não havendo outra possibilidade. Não ocorrerá erro, se o vetor for devidamente passado para a função.
	
	
	 8a Questão
	
	
	
	
	Assinale a opção certa.
 Quando não se escreve o protótipo de uma função ...
		
	
	A chamada da função poderá ser feita em qualquer hipótese.
	 
	É preciso definir a função antes do programa principal.
	
	O programa não funcionará de forma alguma.
	
	A chamada da função não poderá ser feita em qualquer hipótese.
	
	A definição da função deverá ser escrita, obrigatoriamente, após o programa principal.
	
	
	
	 1a Questão
	
	
	
	
	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).
	 
	∙ (ponto).
	
	-> (seta).
	
	* (asterisco).
	
	& (e comercial ou eitza).
	
Explicação:
Por definição, o operador que permite acessar os campos de uma variável struct é o ponto (.).
 
	
	
	 2a Questão
	
	
	
	
	Dadas as afirmativas abaixo, identifique as corretas e marque a alternativa verdadeira.
I- Vetores e matrizes servem apenas para construir agregados de dados heterogêneos.
II- Registros em C++ são tiposde dados compostos formados por mais de um tipo  de dados.
III- Na Linguagem C++, "struct" é uma palavra reservada que serve para definir registros.
IV- Registros são tipos de dados heterogêneos.
		
	
	estão corretas apenas as afirmativas I, III e IV.
	
	estão corretas apenas as afirmativas I, II e III.
	
	todas as afirmativas estão corretas.
	 
	estão corretas apenas as afirmativas II, III e IV.
	
	estão corretas apenas as afirmativas I, II e IV.
	
Explicação:
Analisando as afirmativas, temos :
Afirmativa I :  Falso.  Vetores e matrizes são agregados homogêneos.
Afirmativas II, III e IV : Estão corretas. Basicamente, structs são agregados heterogêneos.
Logo, a opção correta é estão corretas apenas as afirmativas II, III e IV.
	
	
	 3a Questão
	
	
	
	
	Marque a opção correta, considerando 
struct Livro { 
int codigo; 
float preco; 
} liv; 
		
	
	Livro.liv.codigo = 12345;
	
	liv->preco = 30.70;
	 
	liv.preco = 30.70;
	
	Livro->liv.codigo = 12345;
	
	Livro.codigo = 12345;
	
	
	 4a Questão
	
	
	
	
	o programa de computador necessita preencher uma lista de alunos (nome e nota) até que a lista esteja cheia. Sabe-se que a lista tem capacidade para 25 alunos. Utilizando agregados heterogêneos, qual o trecho de código que exibe a melhor forma de solucionar este problema?
		
	
	for (int i = 0; i <= 25; i++) { cin >> lista[i].nome; cin >> lista[i].nota; }
	
	for (int i = 0; i < 25; i++) { cin >> lista->nome; cin >> lista->nota; }
	
	for (int i = 0; i < 25; i++) { cin >> lista[i]->nome; cin >> lista[i]->nota; }
	 
	for (int i = 0; i < 25; i++) { cin >> lista[i].nome; cin >> lista[i].nota; }
	
	int i = 0; while( i < 25) { cin >> lista[i].nome; cin >> lista[i].cargo; i ++; }
	
Explicação:
Analisando cada item :
	for (int i = 0; i <= 25; i++) { cin >> lista[i].nome; cin >> lista[i].nota; }
	>> Falso.  Veja que se há 25 itens, os índices começarão de 0 e irao até 24  e não 25.
 
	for (int i = 0; i < 25; i++) { cin >> lista[i]->nome; cin >> lista[i]->nota; }
	 
	>> Falso.  Para acessar o campo de struct é ponto e não seta.  lista[i] é uma struct e não um ponteiro.
 
	for (int i = 0; i < 25; i++) { cin >> lista->nome; cin >> lista->nota; }
	 
	 >> Falso. Para acessar o campo de struct é ponto e não seta.  lista é um vetor e lista[i] é um componente de lista.  Usamos o operador seta quando temos ponteiro para struct.
 
	for (int i = 0; i < 25; i++) { cin >> lista[i].nome; cin >> lista[i].nota; }
	
	>> Verdadeiro.
 
	int i = 0; while( i < 25) { cin >> lista[i].nome; cin >> lista[i].cargo; i ++; }
 
>> Falso, porque foi pedido nome e nota e não cargo.
	 
 
 
	
	
	 5a Questão
	
	
	
	
	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.
	
	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.
	
	É 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 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.
	
Explicação:
Consiste em adicionar um valor no vetor, mantendo a ordem existente e ajustando o total de elementos. 
Só pode ocorrer, no entanto, se a lista não estiver cheia.
	
	
	 6a Questão
	
	
	
	
	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]=5.7;
	
	aluno.vet[10].nota=5.7;
	
	vet[10]=aluno.5.7;
	
	vet[10].aluno.nota=5.7 ;
	 
	vet[10].nota=5.7;
	
	
	 7a Questão
	
	
	
	
	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.
		
	
	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;
}
	
	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; 
}
	 
	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; 
        } 
    } 
} 
}
	
	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; 
            } 
}
	
Explicação:
Na ordenação por seleção, a idéia é sempre procurar o menor elemento do vetor e inseri-lo no início do vetor. Procuramos o menor valor do vetor e colocamos ele em vetor.
Procuramos o menor valor do vetor excluindo o já colocado e colocamos ele em vetor. E assim vamos indo até termos todo o vetor ordenado.
Partindo sempre a partir do último elemento reordenado (a partir do i), o programa procura o menor elemento no vetor e o substitue pelo elemento i atual.
É o que está ocorrendo na primeira opção!
	
	
	 8a Questão
	
	
	
	
	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;
	
	aluno[10]=6.0;
	
	vet[3].aluno=6.0;
	 
	vet[3].media=6.0;
	
	aluno[3].10=6.0;
	
	 1a Questão
	
	
	
	
	Marque a afirmativa correta para a "Inserção em lista linear sequencial ordenada".
		
	
	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.
	 
	Consiste em adicionar um valor no vetor, alterando a ordem existente e ajustando o total de elementos.
	 
	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.
	
	É o processo pelo qual um conjunto de dados é colocado em uma ordem crescente ou decrescente.
	
Explicação:
Consiste em adicionar um valor no vetor, mantendo a ordem existente e ajustando o total de elementos. 
Só pode ocorrer, no entanto, se a lista não estiver cheia.
	
	
	 2a Questão
	
	
	
	
	Qual das seguintes estruturas de dados é classificada como heterogênea?
		
	
	Loop
	
	Vetor
	
	Fila
	
	Pilha
	 
	Registro
	
Explicação:
Registro permite agregar dados de tipos diferentes.
Vetor permite agregar dados do mesmo tipo.
Pilha e fila implementadas com vetor ou lista encadeada.
Loop : termo genérico para repetições.
	
	
	 3a Questão
	
	
	
	
	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, 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){
   for (int i = 0; i < n; i++)
     if (v[i] == valor)
       return i;
   return -1;
}
	
	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) {
 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;
}
	
	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; 
}
	
Explicação:
Na ordenação por seleção, a idéia é sempre procurar o menor elemento do vetor e inseri-lo no início do vetor. Procuramos o menor valor do vetor e colocamos ele em vetor.
Procuramos o menor valor do vetor excluindo o já colocado e colocamos ele em vetor. E assim vamos indo até termos todo o vetor ordenado.
Partindo sempre a partir do último elemento reordenado (a partir do i), o programa procura o menor elemento no vetor e o substitue pelo elemento i atual.
É o que está ocorrendo na primeira opção!
	
	
	 4a Questão
	
	
	
	
	Com relação à struct,  é correto afirmar que :
		
	
	A struct é sempre definida dentro da main.
	
	Não é possível criar um vetor de structs, pois o vetor trabalha apenas com dados do mesmo tipo.
	
	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  é chamado componente.
	 
	Cada elemento da struct é denominado membro ou campo, sendo que a struct pode armazenar elementos de tipos diferentes ou não.
	
	
	 5a Questão
	
	
	
	
	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.
		
	 
	vet[3].media=6.0;
	
	vet[3].aluno=6.0;
	
	aluno[3].10=6.0;
	
	aluno[3].media=6.0;
	
	aluno[10]=6.0;
	
	
	 6a Questão
	
	
	
	
	Marque a opção correta, considerando 
struct Livro { 
int codigo; 
float preco; 
} liv; 
		
	 
	liv.preco = 30.70;
	
	Livro->liv.codigo = 12345;
	
	Livro.liv.codigo = 12345;
	
	Livro.codigo = 12345;
	
	liv->preco = 30.70;
	
	
	 7a Questão
	
	
	
	
	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.5.7;
	
	aluno.vet[10].nota=5.7;
	
	vet[10].aluno.nota=5.7 ;
	
	aluno.vet[10]=5.7;
	 
	vet[10].nota=5.7;
	
	
	 8a Questão
	
	
	
	
	Dadas as afirmativas abaixo, identifique as corretas e marque a alternativa verdadeira.
I- Vetores e matrizes servem apenas para construir agregados de dados heterogêneos.
II- Registros em C++ são tipos de dados compostos formados por mais de um tipo  de dados.
III- Na Linguagem C++, "struct" é uma palavra reservada que serve para definir registros.
IV- Registros são tipos de dados heterogêneos.
		
	
	todas as afirmativas estão corretas.
	
	estão corretas apenas as afirmativas I, III e IV.
	
	estão corretas apenas as afirmativas I, II e III.
	 
	estão corretas apenas as afirmativas II, III e IV.
	
	estão corretas apenas as afirmativas I, II e IV.
	
Explicação:
Analisando as afirmativas, temos :
Afirmativa I :  Falso.  Vetores e matrizes são agregados homogêneos.
Afirmativas II, III e IV : Estão corretas. Basicamente, structs são agregados heterogêneos.
Logo, a opção correta é estão corretas apenas as afirmativas II, III e IV.
	
	 1a Questão
	
	
	
	
	
Este vetor foi ordenado pelo método:
		
	 
	Ordenação por inserção (insertion sort). 
	
	Ordenação por seleção (selection sort).  
	
	Quicksort.  
	
	Mergesort.  
	 
	Método da bolha (bubble sort).  
	
Explicação:
O bubblesort trabalha comparando e trocando, se preciso, duplas de dados vizinhos.  Portanto, pelo comportamento na sequÊncia descrita temos o método da bolha ou bubblesort.
	
	
	 2a Questão
	
	
	
	
	Em relação à classificação do método de ordenação, assinale abaixo aquele que, durante o processo de ordenação, só usa a memória principal:
		
	
	Ordenação Simples
	
	Ordenação Externa
	
	Ordenação Eficiente
	
	Ordenação Simples Externa
	 
	Ordenação Interna
	
	
	 3a Questão
	
	
	
	
	Existem vários tipos de algoritmos para realizar a ordenação dos elementos, onde um algoritmo de ordenação deve rearranjar o vetor de forma a estabelecer uma ordem entre os elementos. Marque a alternativa correta que cita o algoritmo cuja descrição é: "considera cada elemento uma vez inserindo-o em seu lugar correto entre os elementos que já estão em ordem". E o seu passo a passo pode ser descrito como: "o elemento é inserido entre os ordenados movendo-se os elementos maiores que ele uma posição para a direita e posteriormente inserindo-o na posição vaga".
		
	
	Seleção
	
	QuickSort
	
	MergeSort
	
	Bolha
	 
	Inserção
	
	
	 4a Questão
	
	
	
	
	Sabendo-seque 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,3,23,8,13
	 
	1,23,3,8,13
	 
	1,13,23,8,3
	
	1,8,3,23,13
	
	1,23,13,8,3
	
	
	 5a Questão
	
	
	
	
	Marque a afirmativa correta para a "Ordenação em Listas Lineares Sequenciais".
		
	 
	É o processo pelo qual um conjunto de dados é colocado em uma ordem crescente ou decrescente.
	
	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 adicionar um valor no vetor, mantendo a ordem existente e ajustando o total de elementos.
	
	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.
	
	Consiste em adicionar um valor no vetor, alterando a ordem existente e ajustando o total de elementos.
	
	
	 6a Questão
	
	
	
	
	Sobre o funcionamento da busca binária, é correto afirmar que dividindo seu vetor em duas metades.
		
	
	Se o item for igual ao item que está na metade do vetor, o item não 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.
	 
	Se o item for igual ao item que está na metade do vetor, o item foi encontrado.
	 
	Se o item for maior que o item que está na metade do vetor procure na primeira metade, ou seja, a da direita.
	
Explicação:
Neste tipo de busca, o vetor deve estar ordenado.
Divide-se o conjunto de dados ao meio e procura-se no meio do vetor. Se achou, retorna a posição do dado do meio. SE não achou, verifica-se se o valor procurado vem antes do  valor do meio. Se for verdade,  redefine-se o fim do vetor, voltando a realizar a busca à esquerda do meio. Se o valor procurado vier depois do valor do meio do vetor, então redefine-se o início e segue-se para a busca na parte à direita do meio do vetor.
	
	
	 7a Questão
	
	
	
	
	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 sequencial
	 
	pesquisa binária
	
	pesquisa cadeias indexada
	
	pesquisa de cadeias
	
	
	 8a Questão
	
	
	
	
	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 = 0
		
	 
	2
	
	1
	
	-2
	 
	0
	
	-1
	
Explicação:
A busca pode retornar o índice do elemento encontrado ou pode retornar -1, caso o elemento e não seja encontrado. Vemos que o valor de e é encontrado. Logo, a função retornará a posição do valor e = 0 no vetor. No caso, o elemento zero está na posição 0.  
Resposta : 0
	
	 1a Questão
	
	
	
	
	Analise o seguinte trecho de algoritmo de ordenação de dados, cujos elementos estão dispostos em um vetor de nome v com n elementos.
...
{
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;
}
}
...
Assinale o método ao qual o trecho de algoritmo pertence.
		
	
	Heapsort
	
	Seleção
	
	Bolha
	
	Quicksort
	 
	Inserção
	
	
	 2a Questão
	
	
	
	
	Considere a função misterio e o trecho abaixo.
void misterio(int v[ ], int n) {     //n é o número de elementos de v
   int i, j, m, aux;
   for (j = 0; j < n-1; j++) {
        m = j;
        for (i = j+1; i < n; i++) {
             if (v[i] < v[m])
                    m = i;
        }
        aux  = v[j];
        v[j] = v[m];
        v[m] = aux;
	
   }
}
Trecho na main :        
int v[4] = {40,30,10,20};
misterio(v, 4);
Marque a  opção correta.  Como ficará o vetor após a execução da função misterio ?
 
		
	 
	10  20  30  40  
	
	10  20  40  30  
	
	5  10  20  30 
	
	10  30  40  20 
	
	10  30  20 40
	
Explicação:
O aluno precisa fazer um teste de mesa para achar a solução.
A função implementa a ordenação por seleção, colocando o vetor de entrada em ordem crescente.
	
	
	 3a Questão
	
	
	
	
	Nos métodos de ordenação interna, quais são aqueles classificados como tipo método simples?
		
	
	Insert Sort, Bubble Sort e Quick Sort
	
	Selection Sort, Shell Sort e Bubble Sort
	
	Insert Sort, Bubble Sort e Shell Sort
	
	Shell Sort, Quick Sort e Heap Sort
	 
	Selection Sort, Insert Sort e Bubble Sort
	
	
	 4a Questão
	
	
	
	
	Em uma pesquisa sequencial a lista deve estar?
		
	
	ordenada somente do início até a metade da lista.
	
	sempre desordenada.
	
	ordenada somente o primeiro da lista.
	 
	ordenada ou desordenada.
	
	desordenada somente da metade da lista até o final.
	
Explicação:
A busca sequencial pode se usada para listas ordenadas ou não ordenadas, não havendo qualquer restrição a parte ou à  totalidade da lista na ordenação.  Já a busca binária só pode ser usada para listas ordenadas.
	
	
	 5a Questão
	
	
	
	
	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 por inserção.
	
	trata-se da implementação do algortimo de busca sequencial
	
	trata-se da implementação do algortimo de ordenação bolha.
	 
	trata-se da implementação do algortimo de busca binária.
	
	trata-se da implementação do algortimo de ordenação por seleção.
	
	
	 6a Questão
	
	
	
	
	Caso seja empregada uma busca binária em uma lista sequencial ordenada com 2048 valores, qual seria o número máximo de comparações para encontrar um valor que esteja na lista?
		
	 
	8
	 
	11
	
	9
	
	12
	
	10
	
Explicação:
Como a busca binária sai continuamente dividindo o conjunto de dados ao meio (em duas partes), então vamos fatorar e organizar o resultado como potência de base 2.
 Fatorando 2048 temos 2 11
 Portanto, a resposta é 11.
	
	
	 7a Questão
	
	
	
	
	O seguinte trecho de programa abaixo representa qual tipo de estrutura de ordenação?
voidordenar(float v[], int n) // n é o no. de elementos em v
{
 int i , // índice
 aux, // auxiliar para troca
trocou = true,
fim = n - 1;
while (trocou)
{
    trocou = false; // sinaliza que é falso que trocou
     for (i = 0; i < fim; i++)
     {
       if (v[i] > v[i+1])
       {
         aux = v[i];
         v[i] = v[i+1];
         v[i+1] = aux;
         // sinaliza que é verdadeiro que trocou
         trocou = true;
        } // fim if
    } // fim for
 fim--; // decrementa o fim
} // fim while
} // fim da função
		
	
	Mergesort
	 
	Bublesort
	
	Shellsort
	
	Quicksort
	
	Heapsort
	
	
	 8a Questão
	
	
	
	
	
		
	
	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]< 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-1] < vet[j] )
    { 
         aux=vet[j];
         vet[j]= vet[j-1];
         vet[j-1]=aux;      
     }
	
	 1a Questão
	
	
	
	
	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
	 
	Lista Sequencial
	 
	Fila Sequencial
	
	Pilha Sequencial
	
	Pilha Encadeada
	
	
	 2a Questão
	
	
	
	
	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, IV
	 
	I, III, IV
	
	I, II, III
	
	I, II
	
	I, II, III, 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 lista pode ou não ter dados repetidos.
Resposta certa : As afirmativas I, II, IV estão certas
	
	
	 3a Questão
	
	
	
	
	As estruturas de dados em programação são muito utilizadas para tornar o acesso aos dados mais eficiente e organizado. A estrutura de dados considerada mais simples e tem como característica apresentar apenas uma dimensão é:
		
	
	Matriz
	
	Variável
	
	Registro
	 
	Vetor
	
	Função
	
	
	 4a Questão
	
	
	
	
	__________________________ é 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 Não Linear
	
	Lista Linear de Alocação de Memória
	 
	Lista Linear Sequencial
	
	Lista Linear Não Alocada
	
	Lista Linear Não Sequencial
	
	
	 5a Questão
	
	
	
	
	
		
	
	for (int i = 0; i < n; i++)
   cout << L.matricula[i] << "  "  << L.nome[i] << endl;
	
	for (int i = 0; i < n; i++)
   cout << L.matricula << "  "  << L.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[i] << endl;
	 
	for (int i = 0; i < n; i++)
   cout << L[i].matricula << "  "  << L[i].nome << endl;
	
	
	 6a Questão
	
	
	
	
	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.
	
	Estão corretas apenas as afirmativas I e III.
	 
	Nenhuma afirmação está correta.
	
	Está correta apenas a afirmativa II.
	
	Estão corretas apenas as afirmativas I e II.
	
Explicação:
Analisando cada afirmativa :
  I. Só podemos ter uma matriz de no máximo duas dimensões. Exemplo: C[100][100].
 Falso.  Podemos ter matrizes unidimensionais, tridimensionais, etc...
 II. Ao declararmos um vetor int A[10], se escrevemos A[2] acessamos o segundo elemento do vetor.
Falso.  Em C++ o índice inicial é zero. Logo, A[2] é o elemento de índice 2, ou seja, o 3o. elemento do vetor.
III. Uma string declarada como char B[30] armazena no máximo 30 caracteres. Escolha a alternativa correta:
Falso. B pode armazenar no máximo 29 caracteres que sejam dados, pois existe uma área para o caracter nulo.
Logo, todas as opções são falsas.
	
	
	 7a Questão
	
	
	
	
	São métodos ou algoritmos conhecidos de ordenação de dados por troca:
		
	
	ordenação shell e hashing.
	 
	bubble sort e quicksort.
	
	busca por ordenação e ordenação shell.
	
	hashing e bubble sort.
	
	quicksort e hashing.
	
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.
 
	
	
	 8a Questão
	
	
	
	
	Estude atentamente o código a segir: 
int deciframe(intv[ ], 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
	 
	-1
	
	4
	
	6
	
	3
	
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.
	
	 1a Questão
	
	
	
	
	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, IV
	
	I, III, IV
	
	I, II
	
	I, II, III, IV
	
	I, II, III
	
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 lista pode ou não ter dados repetidos.
Resposta certa : As afirmativas I, II, IV estão certas
	
	
	 2a Questão
	
	
	
	
	__________________________ é 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 Não Linear
	
	Lista Linear Não Alocada
	
	Lista Linear de Alocação de Memória
	
	Lista Linear Não Sequencial
	 
	Lista Linear Sequencial
	
	
	 3a Questão
	
	
	
	
	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
		
	 
	-1
	
	3
	
	6
	
	0
	
	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.
	
	
	 4a Questão
	
	
	
	
	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á correta apenas a afirmativa II.
	
	Estão corretas apenas as afirmativas I e II.
	
	Estão corretas apenas as afirmativas I e III.
	
Explicação:
Analisando cada afirmativa :
  I. Só podemos ter uma matriz de no máximo duas dimensões. Exemplo: C[100][100].
 Falso.  Podemos ter matrizes unidimensionais, tridimensionais, etc...
 II. Ao declararmos um vetor int A[10], se escrevemos A[2] acessamos o segundo elemento do vetor.
Falso.  Em C++ o índice inicial é zero. Logo, A[2] é o elemento de índice 2, ou seja, o 3o. elemento do vetor.
III. Uma string declarada como char B[30] armazena no máximo 30 caracteres. Escolha a alternativa correta:
Falso. B pode armazenar no máximo 29 caracteres que sejam dados, pois existe uma área para o caracter nulo.
Logo, todas as opções são falsas.
	
	
	 5a Questão
	
	
	
	
	Com relação as listas lineares sequenciais:
I - Uma lista linear sequencial é um vetor em linguagens estruturadas, também chamado de array.
II - Um elemento de uma lista linear sequencial pode ser acessado diretamente através de um índice.
III - Uma lista linear sequencial pode ter elementos de um mesmo tipo, ou de tipos diferentes.
		
	 
	Apenas as afirmações II e III estão corretas.
	
	Apenas as afirmações II está corretas.
	
	Apenas a afirmação I está correta.
	
	Apenas as afirmações I e III estão corretas.
	 
	Apenas as afirmações I e II estão corretas.
	
	
	 6a Questão
	
	
	
	
	São métodos ou algoritmos conhecidos de ordenação de dados por troca:
		
	
	ordenação shell e hashing.
	 
	bubble sort e quicksort.
	
	hashing e bubble sort.
	
	busca por ordenação e ordenação shell.
	
	quicksort e hashing.
	
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úmeropivô já está em sua posição final. Os dois grupos desordenados recursivamente sofreram o mesmo processo até que a lista esteja ordenada.
 
	
	
	 7a Questão
	
	
	
	
	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
	
	Pilha Encadeada
	
	Pilha Sequencial
	
	Fila Sequencial
	
	Lista Encadeada
	
	
	 8a Questão
	
	
	
	
	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
	 
	Inserção
	
	Busca
	
	Substituição
	
	Inicialização

Continue navegando