Buscar

Estrutura de dados 1 a 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 311 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 311 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 311 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

Aula 1
	1a 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.
		
	
	Lista
	
	Grafo
	
	         Fila 
	
	          Pilha 
	
	Árvore
	Respondido em 29/03/2020 10:26:11
	
	
	 
	
	 2a 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. 
	
	Todas as alternativas estão corretas. 
	
	As alternativas II e IV estão corretas. 
	
	As alternativas I e II estão corretas 
	
	As alternativas I e III estão corretas. 
	Respondido em 29/03/2020 10:27:43
	
	
	Gabarito
Coment.
	
	 
	
	 3a 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.
	
	II, IV e V.
	
	I, III e V.
	
	II, III, IV e V.
	
	I, III, IV e V.
	Respondido em 29/03/2020 10:30:39
	
	
	Gabarito
Coment.
	
	 
	
	 4a Questão 
	
	
	
	
	A que estrutura pertence a definição: " Uma estrutura não linear que é um conjunto de nós e suas conexões entre eles e não há limitação de vértices. Muito utilizada para representação de percursos em mapas." 
		
	
	filas encadeadas 
	
	grafos 
	
	listas encadeadas 
	
	structs
	
	pilhas encadeadas 
	Respondido em 29/03/2020 10:32:48
	
	
	 
	
	 5a 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 
	
	Pilhas Encadeadas 
	
	Vetores 
	
	Filas Encadeadas 
	
	Listas Encadeadas.
	Respondido em 29/03/2020 10:34:02
	
	
	 
	
	 6a Questão 
	
	
	
	
	Assinale a alternativa correta sobre tipos abstratos de dados:
		
	
	É 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.
	
	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 é composto por um modelo de dados e um conjunto de operadores definidos sobre esses dados.
	
	Um tipo abstrato de dados deve sempre ser representado por meio dos recursos específicos de uma linguagem de programação.
	Respondido em 29/03/2020 10:36:28
	
Explicação: 
	
	Um tipo abstrato de dados é composto por um modelo de dados e um conjunto de operadores definidos sobre esses dados.
	Verdadeiro.  Por definição de TAD (tipo abstrato de 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.
	Falso.   Quando se pensa em TAD não há vínculos com implementação.
	
	Um tipo abstrato de dados descreve, além do que se pode fazer com os dados, como as operações serão efetivamente implementadas.
	FAlso.  Não se pensa em implementação quando se trabalha com TAD.
	
	É fundamental que os tipos abstratos de dados proponham um conjunto eficiente de algoritmos para realização de suas operações.
	FAlso. Não se pensa em implementação ou eficiência quando se trabalha com TAD. Se pensa na semântica das operações.
	
	Um tipo abstrato de dados deve sempre ser representado por meio dos recursos específicos de uma linguagem de programação.
	
	
 Falso : Não se pensa em programa ou na linguagem de programação, pois o TAD não está vinculado à implementação.
	
	
	 
	
	 7a Questão 
	
	
	
	
	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.
		
	
	pilha
	
	grafo
	
	fila
	
	árvore
	
	lista
	Respondido em 29/03/2020 10:37:09
	
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 fila e um grafo.
	
	Após a impressão dos valores pela ordem teremos duas pilhas.
	
	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 filas.
	
		1.
		Das estruturas de dados a seguir aquela que NÃO é uma estrutura linear é : 
	
	
	
	Pilha. 
	
	
	Fila.
	
	
	Grafo. 
	
	
	Vetor.
	
	
	Lista. 
	
Explicação: 
Lineares : lista, pilha, fila, deque. Com ou sem vetor, que é linear.
Não lineares  : árvore e grafo.
 
	
	
	
	 
		
	
		2.
		Diferentes tipos de estrutura de dados são adequadas a diferentes tipos de aplicação e algumas são altamente especializadas, destinando-se a algumas tarefas específicas. Dessa forma a definição de Estrutura de Dados está expressa na alternativa:
	
	
	
	São os nomes dados as variáveis na montagem de uma rotina.
	
	
	É um modo de distribuição e organização de dados em uma rede de computador de modo que possam ser usados de modo eficiente.
	
	
	É um modo particular de armazenamento e organização de dados em um computador de modo que possam ser usados de modo eficiente.
	
	
	É um modo de utilização de dados nos programas de computador.
	
	
	É um modo de deleção de dados em um computador.
	
Explicação: 
Analisando cada item :
	
	É um modo particular de armazenamento e organização de dados em um computador de modo que possam ser usados de modo eficiente.
	Correta.
	
	É um modo de distribuição e organização de dados em uma rede de computador de modo que possam ser usados de modo eficiente.
	FAlso. Não há distribuição de dados ou organização de dados em uma rede via estrutura de dados.
	
	É um modo de utilização de dados nos programas de computador.
	FAlso. Não se diz como se utiliza dados.Variáveis armazenam dados, por exemplo e em atribuições ou em expressões também utilizamos dados.
	
	São os nomes dados as variáveis na montagem de uma rotina.
	FAlso.  Nomes de variáveis são identificadores.
	
	É um modo de deleção de dados em um computador.
Falso. Para "deletar" um dado não temos que usar estrutura de dados.
	
	
 
	
	Gabarito
Coment.
	
	
	
	 
		
	
		3.
		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.
	
	
	
	grafo
	
	
	fila
	
	
	árvore
	
	
	lista
	
	
	pilha
	
Explicação: 
Conforme gabarito e aula 1.
	
	
	
	 
		
	
		4.
		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 e V são afirmativas verdadeiras
	
	
	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
	
	
	II, IV, V e VI são afirmativas verdadeiras 
	
	Gabarito
Coment.
	
	
	
	 
		
	
		5.
		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. 
	
	
	As alternativas I e II estão corretas 
	
	
	As alternativas III e IV estão corretas. 
	
	
	Todas as alternativas estão corretas. 
	
	
	As alternativas I e III estão corretas. 
	
	
	
	 
		
	
		6.
		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 
	
	
	Fila Sequencial 
	
	
	Pilha Encadeada 
	
	
	Lista Encadeada 
	
	
	Lista Sequencial 
	
	
	
	 
		
	
		7.
		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).
	
	
	
	II, III, IV e V.
	
	
	I, III e V.
	
	
	II, IV e V.
	
	
	I, III, IV e V.
	
	
	I, II e III.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		8.
		           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.
	
	
	
	          Pilha 
	
	
	Lista
	
	
	         Fila 
	
	
	Árvore
	
	
	Grafo
		1.
		Estão entre algumas das possíveis formas de estruturas de dados: 
	
	
	
	Grafos, funções, fila
	
	
	Árvores binárias, pilhas, vetores
	
	
	cout, Funções, vetores
	
	
	Listas, vetores, cin
	
	
	Árvores binárias, pilhas, algoritmos
	
Explicação: 
	
	Árvores binárias, pilhas, vetores
	Verdadeiro.  
	
	Grafos, funções, fila
	Falso.  Funções não são estruturas de dados. Funções são módulos dos programas.
	
	Árvores binárias, pilhas, algoritmos
	FAlso. Algoritmos não são estrutura de dados.
	
	Listas, vetores, cin
	Falso.  cin não é estrutura de dados.  É usado para fazer entrada de dados.
	
	cout, Funções, vetores
Falso.  Funções e cout não são estrutura de dados.
	
		2.
		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 filas.
	
	
	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 uma fila e uma pilha.
	
	
	Após a impressão dos valores pela ordem teremos uma pilha e uma fila.
	
	
	
	 
		
	
		3.
		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 é ...
	
	
	
	grafo
	
	
	fila
	
	
	lista
	
	
	pilha
	
	
	árvore
	
Explicação: 
Conforme gabarito e aula 1.
	
	
	
	 
		
	
		4.
		A forma correta para imprimir o valor do último elemento de um vetor v com n posições é:
	
	
	
	cin >> v[-1];
	
	
	cout << v[n-1];
	
	
	cout << v[n+1];
	
	
	cout << v[n];
	
	
	cout << v[ultimo];
	
	
	
	 
		
	
		5.
		Em relação a estruturas de dados, avalie a correspondência existente entre as estruturas de dados Lineares e Não Lineares com suas respectivas coleções de dados.
 
 
A correta associação entre os elementos das duas tabelas é:
 
 
 
 
 
 
 
 
 
 
	
	
	
	a1, b2, c1, d1. 
	
	
	a1, b1, c2, d1
	
	
	a2, b1, c2, d1. 
	
	
	a1, b1, c2, d2. 
	
	
	a2, b2, c1, d2. 
	
Explicação: 
Por definição : pilha, fila, lista, vetor são estruturas lineares.  Já árvore e grafos são estruturas de dados não lineares.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		6.
		Estão entre algumas das possíveis formas de se estruturar dados: 
	
	
	
	Lista encadeada, vetores, algoritmos.
	
	
	Grafos, lista ordenada, vetores. 
	
	
	Algoritmos, lista ordenada, vetores. 
	
	
	Grafos, algoritmos, fila. 
	
	
	Grafos, lista ordenada, algoritmos. 
	
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.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		7.
		É um exemplo de TAD Não Linear:
	
	
	
	Grafos 
	
	
	Filas de Prioridade
	
	
	Filas 
	
	
	Listas 
	
	
	Pilhas
	
Explicação: Um grafo é um tipo de dados abstrato não linear
	
	
	
	 
		
	
		8.
		Assinale a alternativa correta sobre tipos abstratos de dados:
	
	
	
	Um tipo abstrato de dados deve sempre ser representado por meio dos recursos específicos de uma linguagem de programação.
	
	
	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 é composto por um modelo de dados e um conjunto de operadores definidos sobre esses dados.
	
	
	É 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.
	
Explicação: 
	
	Um tipo abstrato de dados é composto por um modelo de dados e um conjunto de operadores definidos sobre esses dados.
	Verdadeiro.  Por definição de TAD (tipo abstrato de 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.
	Falso.   Quando se pensa em TAD não há vínculos com implementação.
	
	Um tipo abstrato de dados descreve, além do que se pode fazer com os dados, como as operações serão efetivamente implementadas.
	FAlso.  Não se pensa em implementação quando se trabalha com TAD.
	
	É fundamental que os tipos abstratos de dados proponham um conjunto eficiente de algoritmos para realização de suas operações.
	FAlso. Não se pensa em implementação ou eficiência quando se trabalha com TAD. Se pensa na semântica das operações.
	
	Um tipo abstrato de dados deve sempre ser representado por meio dos recursos específicos de uma linguagem de programação.
	
	
 Falso : Não se pensa em programa ou na linguagem de programação, pois o TAD não está vinculado à implementação.
		1.
		O que é estrutura de dados?
	
	
	
	É uma forma determinada de armazenamento de dados em um banco 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.
	
	
	É 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.
	
	
	É um conjunto de técnicas de programação.
	
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. 
		1.
		O que é estrutura de dados?
	
	
	
	É uma forma determinada de armazenamento de dados em um banco 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.
	
	
	É 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.
	
	
	É um conjunto de técnicas de programação.
	
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. 
	
	
	
	 
		
	
		2.
		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 
	
	
	I e V são verdadeiras 
	
	
	II E IV são verdadeiras 
	
	
	II e V são verdadeiras 
	
	
	III e V são verdadeiras 
	
	Gabarito
Coment.
	
	
	
	 
		
	
		3.
		Podemos dizer que estrutura de dados é: 
	
	
	
	É a saída, 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 entrada, 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. 
	
	
	O que permite o armazenamento e a recuperação de dados independentemente de seu conteúdo. 
	
	Gabarito
Coment.
	
	
	
	 
		
	
		4.
		Diferentes tipos de estrutura de dados são adequadas a diferentes tipos de aplicação e algumas são altamente especializadas, destinando-se a algumas tarefas específicas. Dessa forma a definição de Estrutura de Dados está expressa na alternativa:
	
	
	
	É um modo de utilização de dados nos programas de computador.
	
	
	É um modo de distribuição e organização de dados em uma rede de computador de modo que possam ser usados de modo eficiente.
	
	
	É um modo de deleção de dados em um computador.
	
	
	São os nomes dados as variáveis na montagem de uma rotina.
	
	
	É um modo particular de armazenamento e organização de dados em um computador de modo que possam ser usados de modo eficiente.
	
Explicação: 
Analisando cada item :
	
	É um modo particular de armazenamento e organização de dados em um computador de modo que possam ser usados de modo eficiente.
	Correta.
	
	É um modo de distribuição e organização de dados em uma rede de computador de modo que possam ser usados de modo eficiente.
	FAlso. Não há distribuição de dados ou organização de dados em uma rede via estrutura de dados.
	
	É um modo de utilização de dados nos programas de computador.
	FAlso. Não se diz como se utiliza dados.  Variáveis armazenam dados, por exemplo e em atribuições ou em expressões também utilizamos dados.
	
	São os nomes dados as variáveis na montagem de uma rotina.
	FAlso.  Nomes de variáveis são identificadores.
	
	É um modo de deleção de dadosem um computador.
Falso. Para "deletar" um dado não temos que usar estrutura de dados.
	
	
 
	
	Gabarito
Coment.
	
	
	
	 
		
	
		5.
		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
	
	
	lista
	
	
	grafo
	
	
	fila
	
	
	pilha
	
Explicação: 
Conforme gabarito e aula 1.
	
	
	
	 
		
	
		6.
		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 e V são afirmativas verdadeiras
	
	
	II, IV, V e VI são afirmativas verdadeiras 
	
	Gabarito
Coment.
	
	
	
	 
		
	
		7.
		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 II estão corretas 
	
	
	As alternativas II e IV estão corretas. 
	
	
	As alternativas I e III estão corretas. 
	
	
	As alternativas III e IV estão corretas. 
	
	
	Todas as alternativas estão corretas. 
	
	
	
	 
		
	
		8.
		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. 
	
	
	
	Fila Sequencial 
	
	
	Lista Sequencial 
	
	
	Lista Encadeada 
	
	
	Pilha Encadeada 
	
	
	Pilha Sequencial 
	
	
		1.
		Das estruturas de dados a seguir aquela que NÃO é uma estrutura linear é : 
	
	
	
	Vetor.
	
	
	Lista. 
	
	
	Fila.
	
	
	Grafo. 
	
	
	Pilha. 
	
Explicação: 
Lineares : lista, pilha, fila, deque. Com ou sem vetor, que é linear.
Não lineares  : árvore e grafo.
 
	
	
	
	 
		
	
		2.
		           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.
	
	
	
	Grafo
	
	
	Árvore
	
	
	         Fila 
	
	
	Lista
	
	
	          Pilha 
	
	
	
	 
		
	
		3.
		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.
	
	
	II, III, IV e V.
	
	
	II, IV e V.
	
	
	I, III e V.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		4.
		Estão entre algumas das possíveis formas de estruturas de dados: 
	
	
	
	Grafos, funções, fila
	
	
	Listas, vetores, cin
	
	
	Árvores binárias, pilhas, algoritmos
	
	
	cout, Funções, vetores
	
	
	Árvores binárias, pilhas, vetores
	
Explicação: 
	
	Árvores binárias, pilhas, vetores
	Verdadeiro.  
	
	Grafos, funções, fila
	Falso.  Funções não são estruturas de dados. Funções são módulos dos programas.
	
	Árvores binárias, pilhas, algoritmos
	FAlso. Algoritmos não são estrutura de dados.
	
	Listas, vetores, cin
	Falso.  cin não é estrutura de dados.  É usado para fazer entrada de dados.
	
	cout, Funções, vetores
Falso.  Funções e cout não são estrutura de dados.
	
	
	
	 
		
	
		5.
		Em relação a estruturas de dados, avalie a correspondência existente entre as estruturas de dados Lineares e Não Lineares com suas respectivas coleções de dados.
 
 
A correta associação entre os elementos das duas tabelas é:
 
 
 
 
 
 
 
 
 
 
	
	
	
	a2, b1, c2, d1. 
	
	
	a2, b2, c1, d2. 
	
	
	a1, b2, c1, d1. 
	
	
	a1, b1, c2, d2. 
	
	
	a1, b1, c2, d1
	
Explicação: 
Por definição : pilha, fila, lista, vetor são estruturas lineares.  Já árvore e grafos são estruturas de dados não lineares.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		6.
		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 filas.
	
	
	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 uma pilha e uma fila.
	
	
	Após a impressão dos valores pela ordem teremos uma fila e uma pilha.
	
	
	
	 
		
	
		7.
		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 é ...
	
	
	
	grafo
	
	
	árvore
	
	
	lista
	
	
	pilha
	
	
	fila
	
Explicação: 
Conforme gabarito e aula 1.
	
	
	
	 
		
	
		8.
		A forma correta para imprimir o valor do último elemento de um vetor v com n posições é:
	
	
	
	cout << v[n+1];
	
	
	cout << v[n];
	
	
	cout << v[ultimo];
	
	
	cin >> v[-1];
	
	
	cout << v[n-1];
	
Aula 2
		1.
		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: 
	
	
	
	As Estruturas de Dados 
	
	
	As funções 
	
	
	As Filas
	
	
	Os Vetores 
	
	
	Os Grafos 
	
	
	
	 
		
	
		2.
		Considere o trecho de um programa escrito em C++.
int func1 (int vtx[], int tam) {
    int soma=0;
    for (int i=0 ; i < tam; i++) {
        if (i% 2 !=0)
             soma += vtx[i];     
    }
    return soma;
}
int main() {
    int vt[5] = {10,20,30,40,50};
    cout << func1 (vt,5);
}
Marque a opção correta que mostra o que é impresso na tela.
	
	
	
	30
	
	
	40
	
	
	20
	
	
	60
	
	
	50
	
Explicação: 
int func1 (int vtx[], int tam) {
    int soma=0;  //inicializa soma com zero.
    for (int i=0 ; i < tam; i++) {
        if (i % 2 !=0)   //testa se i é ímpar. Se for, acumula na soma o valor de vtx[i]
             soma += vtx[i];     
    }
    return soma;
}
 
Fazendo um teste de mesa parcial ...
	vetor 
	tam
	soma
	i
	{10, 20, 30, 40, 50}
	5
	0
	0
	 
	 
	20
	1
	 
	 
	 
	2
E continua ... se vê que a função está somando os elementos do vetor que possuem índices ímpares. Logo, serão somados 20 e 40, que dará 60.
A soma 60 é retornada e impressa na main.
	
	
	
	 
		
	
		3.
		1)      O que será impresso pela função Eureka ? Assinale a opção correta.
 
void Eureka()
 {
 	for (int i = 1; i <= 10; i++)
		if (i % 2 == 0)
		 cout << i << " ";
		else
		 if (i % 7 == 0)
		 return;
 }
 
	
	
	
	Nada é impresso, pois a função não compila. Para a função compilar, deveria ter int no lugar de void, já que há return na função.
	
	
	2 4 6 8
	
	
	2 4 6 8 10
	
	
	2 4 6
	
	
	Nada é impresso, pois a função não compila. A função não deveria usar return, pois não está de acordo com o uso de void.
	
	
	
	 
		
	
		4.
		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);
	
	
	int func (int a, int &b);
	
	
	void func (int &a, int &b);
	
	
	int func (int &a, int b);
	
	
	void func (int a, int &b);
	
	Gabarito
Coment.
	
	
	
	 
		
	
		5.
		Sobre funções, é correto afirmar:
	
	
	
	Não podem ser chamadas dentro de outras funções.
	
	
	Não devem conter variáveis locais em seu código. 
	
	
	Obrigatoriamente devem retornam algum valor.
	
	
	Obrigatoriamente devem possuir parâmetros.
	
	
	São blocos de instruções que são executados quando são chamadas em alguma parte do programa. 
	
Explicação: 
Uma função é um bloco de instruções que pode ser chamada a partir de outra função, que pode ter ou não parâmetros, que pode ou não retornar valor, que pode ter ou não variáveis locais.
	
	
	
	 
		
	
		6.
		No programa abaixo em C++, que sequência de valores serão impressos ? int x; x = 15; if (x > 0) { int x; x = 25; cout << x << endl; } cout << x << endl;
	
	
	
	15 e 15
	
	
	25 e 25
	
	
	25 e 15
	
	
	0 e 5
	
	
	15 e 25
	
Explicação: 
Analisando passo a passo, temos :
x é declarado e inicializado com 15. Daí, testa-se a condição do if, que é verdadeira. Em seguida, entra-se no bloco do if onde um outro x é declarado, recebe 25 e é impresso. Terminado o bloco do if, o x local ao bloco do if não é mais enxergado. Então, ao executarmos a última linha do cout, que está fora do if, vemos que o valor de  x impresso é 15.
Logo, a resposta correta é 25 e 15
	
	
	
	 
		
	
		7.
		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?
	
	
	
	1; 2; 4
	
	
	4; 2; 4
	
	
	1; 3; 1
	
	
	2; 2; 4
	
	
	2; 2; 1
	
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
	
	
	
	 
		
	
		8.
		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 e III estão corretas
	
	
	Somente II III e IV estão corretas
	
	
	Somente II está correta 
	
	
	Somente II e IV estão corretas
	
	
	Somente I e II estão corretas
		1.
		 
	
	
	
	O programa não executa corretamente, pois o protótipo da função media( ) não apresenta a identificação dos parâmetros, mas apenas os tipos dos mesmos. 
	
	
	O programa executa perfeitamente, mas não mostra o valor da media já que esta função não foi chamada na função main( ). 
	
	
	O programa não executa corretamente, pois os protótipos estão fora da ordem em que as funções são descritas. 
	
	
	O programa executa perfeitamente independente da ordem das funções já que existem os seus protótipos. 
	
	
	O programa não executa corretamente pois as funções devem ser descritas antes da função main(), para que o compilador consiga reconhecê-las. 
	
	Gabarito
Coment.
	
	
	
	 
		
	
		2.
		Caso uma estrutura homogênea (vetor) seja passada como parâmetro para uma função, então:
	
	
	
	Essa passagem pode ser "por valor" ou "por referência"
	
	
	Todos os valores contidos no vetor são copiados para a função
	
	
	Essa passagem é "por referência"
	
	
	Essa passagem é "por valor"
	
	
	Haverá um erro de compilação, pois vetores não podem ser parâmetros de funções
	
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.
	
	
	
	 
		
	
		3.
		Qual será a saída para o seguinte trecho de código?
 void FUNC1()
{
int B = -100; 
cout << "Valor de B dentro da função FUNC1: " << B;
}
void FUNC2() {
int B =  -200;
cout << "Valor de B dentro da função FUNC2: " << B;
}
int  main() {
int B = 10;
cout << "Valor de B: " << B;
B = 20;
FUNC1();
cout << "Valor de B: " << B;
B = 30;
FUNC2();
cout << "Valor de B: " << B;
}
	
	
	
	Valor de B: 10 Valor de B dentro da função FUNC1: -100 Valor de B: 20 Valor de B dentro da função FUNC2: -200 Valor de B: 30
	
	
	Valor de B: 10 Valor de B dentro da função FUNC1: -200 Valor de B: 20 Valor de B dentro da função FUNC2: -200 Valor de B: 30
	
	
	Valor de B: 10 Valor de B dentro da função FUNC1: -100 Valor de B: 10 Valor de B dentro da função FUNC2: -200 Valor de B: 30
	
	
	Valor de B: 10 Valor de B dentro da função FUNC1: -100 Valor de B: 20 Valor de B dentro da função FUNC2: -400 Valor de B: 30
	
	
	Valor de B: 10 Valor de B dentro da função FUNC1: -100 Valor de B: 20 Valor de B dentro da função FUNC2: -200 Valor de B: 20
	
Explicação: 
A execução começa pela main. Na main, B recebe 10. E daí é impresso :  Valor de B : 10
DEpois, B muda e recebe 20.
Em seguida, é chamada a função FUNC1. Dentro desta função, existe um outro B que recebe -100. Então, é impresso  :
                      Valor de B dentro da função FUNC1: -100
A função termina e voltamos para a main, onde existe um outro cout que imprime o valor de B, que na main vale 20. Então, será impresso na tela :   
     Valor de B : 20         
Em seguida, ainda na main, B recebe 30 e logo depois, FUNC2 é chamada.  Executando FUNC2 temos que um B, local à função, recebe -200 e logo em seguida é impresso :  Valor de B dentro da função FUNC2 : -200
Terminando a execução de FUNC2, voltamos para a main onde é impresso o valor do B (local à main) :  Valor de B :  30
Logo, a opção correta é a que diz : 
      Valor de B : 10
      Valor de B dentro da função FUNC1: -100 
     Valor de B : 20      
     Valor de B dentro da funçãoFUNC2 : -200
     Valor de B :  30
	
	
	
	 
		
	
		4.
		No programa abaixo, diga em que área de memória serão alocados os elementos de dados y e r, respectivamente. 
#include 
using namespace std; 
int x, y; 
float media( float a, float b ) 
{ float tmp; 
tmp = (a + b ) / 2.0; 
return ( tmp ); 
} 
int main() 
{ 
float r; 
cout<<"Informe 2 valores: "; 
cin>>x>> y; 
r = media( x, y ); 
cout<<"\nMedia = "<< r<<"\n"; 
system ("pause"); 
}
	
	
	
	( ) área de registro / área de pilha 
	
	
	( ) área de dados globais / área de registro
	
	
	( ) área de pilha / área de registro
	
	
	( ) área de dados globais / área de pilha
	
	
	( ) área de registro / área de dados globais
	
Explicação: 
Como y e r são variáveis, ficarão armazenadas em  na área de dados globais / área de pilha
	
	
	
	 
		
	
		5.
		  Assinale a opção CORRETA.  O protótipo da função que permitirá calcular o volume de um paralelepípedo com medidas a, b e c  de acordo com o trecho da  chamada  :     cout << "Volume  =   "  <<  volume(a,b,c);
	
	
	
	float  volume (float, float, float);
	
	
	float volume (float ; float ; float);
	
	
	float volume (float, float);
	
	
	void volume (float, float, float &);
	
	
	void volume (float , float);
	
Explicação: 
Resposta única.
Pela chamada da função
cout << "Volume  =   "  <<  volume(a,b,c);
temos que a função retorna um valor, que pelo enunciado, vemos que é do tipo float. Há ainda os valores de a, b e c que são medidas de uma figura geométrica. Logo, a, b e c são do tipo float.
Como protótipo é uma declaração temos :
tipo de retorno da função seguido do seu nome seguido de parênteses e dentro dos parênteses, temos os tipos das variáveis que estavam na chamada da função.
Logo :   float volume(float, float, float);  
Note a vírgula para separar os tipos e o ponto  e vírgula ao final.
 
	
	
	
	 
		
	
		6.
		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:
	
	
	
	1; 3; 1
	
	
	2; 2; 4
	
	
	4; 2; 4
	
	
	1; 2; 4
	
	
	2; 2; 1
	
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.
	
	
	
	 
		
	
		7.
		#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.
	
	
	Retorna valor.
	
	
	Não retorna valor e possui parâmetros.
	
	
	Não retorna valor e não   possui parâmetros.
	
Explicação: 
A função
void SOMA(float a, int b)  {
  float result  =  a+b;
  cout << "A soma de " << a << " com " << b << " é: " << result;
}
tem o tipo de retorno void, o que significa que nenhum valor é retornado. Além disso, a função possui 2 parâmetros, que são a e b.
Logo, a resposta certa é  Não retorna valor e possui parâmetros.
	
	
	
	 
		
	
		8.
		Considere a função: 
void eureka (int &z)   {
      x = 10 * x; 
} 
Qual será o valor impresso na tela quando o programa principal for executado? 
int main() { 
int n; 
n = 5; 
dobro(n); 
cout << n; 
return 0; 
} 
 
	
	
	
	10 
	
	
	5
	
	
	50
	
	
	Haverá um erro de compilação 
	
	
	0 
		1.
		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, 5, 10
	
	
	3, 2, 8
	
	
	2, 2, 9
	
	
	4, 5, 9
	
	
	3, 5, 8
	
Explicação: 
Fazendo um teste de mesa, temos o seguinte : 
A execução começa pela main.  
As variáveis a, b e c são iniciadas com 2.
Chama-se a função executar e são passados os valores de a e b, ou seja, 2 e 2.
Ao iniciar a execução da função executar temos que x é passado por valor e y por referência. Iniciando a função temos :
Em x = y * 2;   Daí :  x  recebe 2 * 2, que dá 4
Em y = ++x;     Daí : x é incrementado para 5 e depois y recebe 5.
Então, a soma de x + y é retornado. Ou seja, 10 é retornado.
Mas como y é passado por referência, a variável b na chamada da função foi alterada para 5.  Nada, no entanto, ocorreu com a na chamada da função, pois x foi passado por valor.
Ao voltar para main, será impresso  2, 5, 10
Portanto, qualquer outra opção é totalmente inviável.
 
 
	
	
	
	 
		
	
		2.
		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. 
	
	
	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. 
	
	
	O programa não funcionará de forma alguma. 
	
	Gabarito
Coment.
	
	
	
	 
		
	
		3.
		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: 13 10
	
	
	Valores: 31 01
	
	
	Valores: 13 13
	
	
	Valores: 10 13
	
	
	Valores: 10 10
	
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
	
	
	
	 
		
	
		4.
		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
	
Explicação: 
Fazendo um teste de mesa temos que será impresso a seguinte sequência :  1   -2   3  -4   5  -6, um embaixo do outro.
Parte de um teste de mesa :
 
	x
	ini
	fim
	y
	false
	1
	7
	1
	true
	 
	 
	2
	false
	 
	 
	 
E continua x, ini, fim e y recebendo valores
Tela :
1
-2
3
-4
5
-6
 
 
 
	
	
	
	 
		
	
		5.
		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(); estrcpy() ;
	
	
	strcmp(); e strcmpi ();
	
	
	strcmp(); e strcpy();
	
	
	strcmp(); e strcat();
	
	
	strcmp(); e strlen() ;
	
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
	
	
	
	 
		
	
		6.
		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 dos dados dos parâmetros que são passados à função quando da sua chamada.
	
	
	o escopo das variáveis do programa.
	
	
	o tipo das variáveis que serão utilizadas dentro da função.
	
	
	o tipo do dado do valor retornado da função para quem a chamou.
	
	
	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.
	
	
	
	 
		
	
		7.
		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; }
	
	
	
	Haverá um erro de compilação
	
	
	5
	
	
	0
	
	
	10
	
	
	20
	
	
	
	 
		
	
		8.
		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; }
	
	
	
	20
	
	
	5
	
	
	3
	
	
	0
	
	
	10
	
Explicação: 
A função não retorna valor, então o valor de "n" não é alterado permanecendo igual a 5.
		void eureka (int &z)   {1.
		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; 12
	
	
	14; 6
	
	
	2; 6
	
	
	4; 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.
 
	
	
	
	 
		
	
		2.
		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 Vetores 
	
	
	As Estruturas de Dados 
	
	
	Os Grafos 
	
	
	As Filas 
	
	
	As funções 
	
	
	
	 
		
	
		3.
		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.
	
	
	
	3
	
	
	27
	
	
	9
	
	
	18
	
	
	6
	
Explicação: 
Fazendo um teste de mesa, temos que o valor 9 retornado e impresso na main.
Iniciando um teste de mesa....
	n1
	n2
	aux
	27
	18
	9 
	18
	9 
	0
	continua...
	continua...
	continua..
 
	
	
	
	 
		
	
		4.
		Considere as seguintes afirmativas :
I) Os vetores em C++, quando passados como parâmetros de funções,  são obrigatoriamente passados "por valor" e não "por referência".
II) Variáveis globais são um recurso adequado para troca de informações entre funções distintas.
III) Caso uma função necessite retornar mais de um valor ao programa que a chamou, deve fazê-lo usando parâmetros passados "por valor".
As afirmativas corretas são:
	
	
	
	Apenas II
	
	
	Nenhuma está correta
	
	
	Apenas I
	
	
	Apenas III
	
	
	Apenas I e II
	
Explicação: 
Analisando cada afirmativa ...
I .   Falso. Em C++ os vetores passados como parâmetros são sempre passados por referência.
II.  FAlso. Variáveis globais são uma péssima forma de usar recursos, comprometendo principalmente a manutenção do programa.
III.  FAlso.  A função poderá retornar explicitamente um valor com return, mas terá que passar o outro parâmetro por referência e não por valor. Outra forma, será passar todos os parâmetros por referência.
Portanto, não opção correta.
	
	
	
	 
		
	
		5.
		Considere o trecho de um programa escrito em C++ : 
long func1 (int n1) {
   int ft=1, i = 1;
   while ( i <= n1) {
         ft *= i;
         i++;
   }
   return ft;
}
main() {
    cout << func1 (5);
}
Marque a opção correta que mostra o que é impresso na tela.
	
	
	
	60
	
	
	24
	
	
	120
	
	
	1
	
	
	5
	
Explicação: 
Acompanhando passo a passo :
long func1 (int n1) {
   int ft=1, i = 1;
   while ( i <= n1) {
         ft *= i;
         i++;
   }
   return ft;
}
main() {
    cout << func1 (5);
}
Passo a passo :
1) Começando a execução pela main ... func1 é chamada e é passado o valor 5.
2) Entrando na função, temos que n1 recebeu 5, i recebeu 1  e ft recebeu 1.
3) Ainda na função func1 ...   teste do loop ... 1 <= 5 ? Sim.
    Então, ft recebe 1*1, que dá 1 e i passa a valer 2.  Acompanhar na tabela desde o início da execução de func1
	ft
	i
	i <= n1
	1
	1
	1 <= 5 / Sim
	1
	2
	2 <= 5 ? Sim
	2
	3
	3 <= 5 ? sim
	6
	4
	4 <= 5 ? Sim
	24
	5
	 5 <= 5 ? Sim
	120
	6
	6 <= 5 ? FAlso
SErá retornado o valor de ft que é 120.  Volta-se então para a main e o valor 120 é impresso.
	
	
	
	 
		
	
		6.
		Caso uma estrutura homogênea (vetor) seja passada como parâmetro para uma função, então:
	
	
	
	Essa passagem é "por valor"
	
	
	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"
	
	
	Todos os valores contidos no vetor são copiados para a função
	
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.
	
	
	
	 
		
	
		7.
		 
	
	
	
	O programa não executa corretamente pois as funções devem ser descritas antes da função main(), para que o compilador consiga reconhecê-las. 
	
	
	O programa executa perfeitamente, mas não mostra o valor da media já que esta função não foi chamada na função main( ). 
	
	
	O programa não executa corretamente, pois os protótipos estão fora da ordem em que as funções são descritas. 
	
	
	O programa executa perfeitamente independente da ordem das funções já que existem os seus protótipos. 
	
	
	O programa não executa corretamente, pois o protótipo da função media( ) não apresenta a identificação dos parâmetros, mas apenas os tipos dos mesmos. 
	
	Gabarito
Coment.
	
	
	
	 
		
	
		8.
		No programa abaixo, diga em que área de memória serão alocados os elementos de dados y e r, respectivamente. 
#include 
using namespace std; 
int x, y; 
float media( float a, float b ) 
{ float tmp; 
tmp = (a + b ) / 2.0; 
return( tmp ); 
} 
int main() 
{ 
float r; 
cout<<"Informe 2 valores: "; 
cin>>x>> y; 
r = media( x, y ); 
cout<<"\nMedia = "<< r<<"\n"; 
system ("pause"); 
}
	
	
	
	( ) área de registro / área de dados globais
	
	
	( ) área de dados globais / área de pilha
	
	
	( ) área de registro / área de pilha 
	
	
	( ) área de dados globais / área de registro
	
	
	( ) área de pilha / área de registro
	
Explicação: 
Como y e r são variáveis, ficarão armazenadas em  na área de dados globais / área de pilha
		#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.
	
	
	Retorna valor e possui parâmetros.
	
	
	Retorna valor e não  possui parâmetros.
	
	
	Não retorna valor e possui parâmetros.
	
	
	Não retorna valor e não   possui parâmetros.
	
Explicação: 
A função
void SOMA(float a, int b)  {
  float result  =  a+b;
  cout << "A soma de " << a << " com " << b << " é: " << result;
}
tem o tipo de retorno void, o que significa que nenhum valor é retornado. Além disso, a função possui 2 parâmetros, que são a e b.
Logo, a resposta certa é  Não retorna valor e possui parâmetros.
	
	
	
	 
		
	
		2.
		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:
	
	
	
	1; 3; 1
	
	
	2; 2; 4
	
	
	2; 2; 1
	
	
	1; 2; 4
	
	
	4; 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.
	
	
	
	 
		
	
		3.
		  Assinale a opção CORRETA.  O protótipo da função que permitirá calcular o volume de um paralelepípedo com medidas a, b e c  de acordo com o trecho da  chamada  :     cout << "Volume  =   "  <<  volume(a,b,c);
	
	
	
	float volume (float, float);
	
	
	float volume (float ; float ; float);
	
	
	void volume (float, float, float &);
	
	
	float  volume (float, float, float);
	
	
	void volume (float , float);
	
Explicação: 
Resposta única.
Pela chamada da função
cout << "Volume  =   "  <<  volume(a,b,c);
temos que a função retorna um valor, que pelo enunciado, vemos que é do tipo float. Há ainda os valores de a, b e c que são medidas de uma figura geométrica. Logo, a, b e c são do tipo float.
Como protótipo é uma declaração temos :
tipo de retorno da função seguido do seu nome seguido de parênteses e dentro dos parênteses, temos os tipos das variáveis que estavam na chamada da função.
Logo :   float volume(float, float, float);  
Note a vírgula para separar os tipos e o ponto  e vírgula ao final.
 
	
	
	
	 
		
	
		4.
		Qual será a saída para o seguinte trecho de código?
 void FUNC1()
{
int B = -100; 
cout << "Valor de B dentro da função FUNC1: " << B;
}
void FUNC2() {
int B =  -200;
cout << "Valor de B dentro da função FUNC2: " << B;
}
int  main() {
int B = 10;
cout << "Valor de B: " << B;
B = 20;
FUNC1();
cout << "Valor de B: " << B;
B = 30;
FUNC2();
cout << "Valor de B: " << B;
}
	
	
	
	Valor de B: 10 Valor de B dentro da função FUNC1: -100 Valor de B: 20 Valor de B dentro da função FUNC2: -400 Valor de B: 30
	
	
	Valor de B: 10 Valor de B dentro da função FUNC1: -100 Valor de B: 20 Valor de B dentro da função FUNC2: -200 Valor de B: 20
	
	
	Valor de B: 10 Valor de B dentro da função FUNC1: -100 Valor de B: 20 Valor de B dentro da função FUNC2: -200 Valor de B: 30
	
	
	Valor de B: 10 Valor de B dentro da função FUNC1: -200 Valor de B: 20 Valor de B dentro da função FUNC2: -200 Valor de B: 30
	
	
	Valor de B: 10 Valor de B dentro da função FUNC1: -100 Valor de B: 10 Valor de B dentro da função FUNC2: -200 Valor de B: 30
	
Explicação: 
A execução começa pela main. Na main, B recebe 10. E daí é impresso :  Valor de B : 10
DEpois, B muda e recebe 20.
Em seguida, é chamada a função FUNC1. Dentro desta função, existe um outro B que recebe -100. Então, é impresso  :
                      Valor de B dentro da função FUNC1: -100
A função termina e voltamos para a main, onde existe um outro cout que imprime o valor de B, que na main vale 20. Então, será impresso na tela :   
     Valor de B : 20         
Em seguida, ainda na main, B recebe 30 e logo depois, FUNC2 é chamada.  Executando FUNC2 temos que um B, local à função, recebe -200 e logo em seguida é impresso :  Valor de B dentro da função FUNC2 : -200
Terminando a execução de FUNC2, voltamos para a main onde é impresso o valor do B (local à main) :  Valor de B :  30
Logo, a opção correta é a que diz : 
      Valor de B : 10
      Valor de B dentro da função FUNC1: -100 
     Valor de B : 20      
     Valor de B dentro da função FUNC2 : -200
     Valor de B :  30
	
	
	
	 
		
	
		5.
		Considere a função: 
void dobro(int x) { 
      x = 10 * x; 
} 
Qual será o valor impresso na tela quando o programa principal for executado? 
int main() { 
int n; 
n = 5; 
dobro(n); 
cout << n; 
return 0; 
} 
 
	
	
	
	Haverá um erro de compilação 
	
	
	5
	
	
	50
	
	
	10 
	
	
	0 
	
	Gabarito
Coment.
	
	
	
	 
		
	
		6.
		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 valor
 
 
	
	
	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 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
 
 
	
Explicação: 
Questão objetiva. Só é possível ser marcada a opção indicada no gabarito.
Vejamos a análise passo a passo do trecho de código....
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;
}
Passo a passo ....
Temos que valor recebeu 100 e valor é uma variável global.
Começando a execução pela main, temos que eureka é chamada e o valor 1000 é passado.
Iniciando a execução de eureka temos que :
    temp (local à eureka) recebe o valor 25, depois o valor 1000 passado é decrementado para 999, temp recebe 15, valor recebe 100-15, que dá 85. Daí, o valor de temp é impresso, sendo mostrado na tela :     Auxiliar = 15.  DAí, a função termina e volta-se para a main.  Lá na main, após a chamada da eureka, temos a seguinte impressão :
    Result = 999   Valor = 85
Note que para R valer 999 só foi possível porque z é um parâmetro passado por referência.
	
	
	
	 
		
	
		7.
		Funções são semelhantes aos procedimentos, exceto que uma função sempre retorna um valor. Um exemplode 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(int a, int b);
	
	
	tipo parametros(parametros);
	
	
	retorno nomeFuncao(parametros);
	
Explicação: 
Por definição, o protótipo de uma função é formado da seguinte forma :
   nome_da_função ( );
	
	
	
	 
		
	
		8.
		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;
}
 
	
	
	
	9 e 16
	
	
	2 e 13
	
	
	2 e 9
	
	
	4 e 9
	
	
	4 e 12
	
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
Aula 3
		1.
		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) { 
     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; 
        } 
    } 
} 
} 
	
	
	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, 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;
}
	
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!
	
	Gabarito
Coment.
	
	
	
	 
		
	
		2.
		Marque a afirmativa correta para a "Inserção em lista linear sequencial ordenada". 
	
	
	
	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. 
	
	
	É o processo pelo qual um conjunto de dados é colocado em uma ordem crescente ou decrescente. 
	
	
	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 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.
	
	
	
	 
		
	
		3.
		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]=5.7; 
	
	
	aluno.vet[10].nota=5.7; 
	
	
	vet[10].nota=5.7; 
	
	
	vet[10].aluno.nota=5.7 ; 
	
	
	
	 
		
	
		4.
		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].nota=5.7; 
	
	
	aluno.vet[10].nota=5.7;
	
	
	vet[10]=aluno.5.7; 
	
	
	aluno.vet[10]=5.7; 
	
	
	vet[10].aluno.nota=5.7 ; 
	
	
	
	 
		
	
		5.
		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[i].nome; cin >> lista[i].nota; }
	
	
	for (int i = 0; i < 25; i++) { cin >> lista->nome; cin >> lista->nota; }
	
	
	int i = 0; while( i < 25) { cin >> lista[i].nome; cin >> lista[i].cargo; i ++; } 
	
	
	for (int i = 0; i <= 25; i++) { cin >> lista[i].nome; cin >> lista[i].nota; }
	
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 (inti = 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.
	 
 
 
	
	
	
	 
		
	
		6.
		Marque a opção correta, considerando 
struct Livro { 
int codigo; 
float preco; 
} liv; 
	
	
	
	Livro.codigo = 12345;
	
	
	Livro.liv.codigo = 12345;
	
	
	liv.preco = 30.70;
	
	
	Livro->liv.codigo = 12345;
	
	
	liv->preco = 30.70;
	
	
	
	 
		
	
		7.
		Qual das seguintes estruturas de dados é classificada como heterogênea?
	
	
	
	Fila
	
	
	Pilha
	
	
	Loop
	
	
	Vetor
	
	
	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.
	
		1.
		Qual das seguintes estruturas de dados é classificada como heterogênea?
	
	
	
	Fila
	
	
	Vetor
	
	
	Registro 
	
	
	Loop
	
	
	Pilha
	
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.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		2.
		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 + 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, 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; 
            } 
} 
	
	
	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/2;
     if (v[meio] == valor)
       return meio;  
     if (valor < v[meio])
       fim = meio -1;
     else
       ini = meio+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!
	
	Gabarito
Coment.
	
	
	
	 
		
	
		3.
		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. 
	
	
	É 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 adicionar um valor no vetor, alterando a ordem existente e ajustando o total de elementos. 
	
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.
	
	
	
	 
		
	
		4.
		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; 
	
	
	vet[10].aluno.nota=5.7 ; 
	
	
	aluno.vet[10].nota=5.7; 
	
	
	aluno.vet[10]=5.7; 
	
	
	vet[10].nota=5.7; 
	
	
	
	 
		
	
		5.
		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; 
	
	
	vet[10].aluno.nota=5.7 ; 
	
	
	aluno.vet[10]=5.7; 
	
	
	aluno.vet[10].nota=5.7;
	
	
	vet[10].nota=5.7; 
	
	
	
	 
		
	
		6.
		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;
	
	
	
	 
		
	
		7.
		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?
	
	
	
	int i = 0; while( i < 25) { cin >> lista[i].nome; cin >> lista[i].cargo; i ++; } 
	
	
	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; }
	
	
	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; }
	
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.
	 
 
 
	
	
		1.
		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

Outros materiais