• Nenhum resultado encontrado

Lab5

N/A
N/A
Protected

Academic year: 2021

Share "Lab5"

Copied!
11
0
0

Texto

(1)

UNIFEI – Universidade Federal de Itajubá Campus Avançado de Itabira

Laboratório de Lógica de Programação – ECOI02 Profa. Claudia A. Izeki

Laboratório 5 – Estudo Dirigido de Vetores

Objetivos da atividade:

 Entender, aplicar e avaliar os conceitos de vetores. Procedimentos da atividade:

Primeiramente, leia o texto sobre vetores (está neste documento na página a seguir). Depois, você deverá resolver todos os 12 exercícios desta lista em seu caderno, com sua própria caligrafia;

Utilize o material de referência da disciplina: http://bac004.wikidot.com. Observação: sempre traga esse material na forma impressa ou digital para não depender do funcionamento de Internet no laboratório;

Quando tiver alguma dúvida, verifique-a com seu colega ou acesse o material de aula. Se a dúvida persistir, contate o monitor e/ou professor. Caso a dúvida ocorra fora do horário de aula, favor enviar um e-mail para claudia.izeki.unifei@gmail.com. Horários de monitoria podem ser acessados em: http://goo.gl/pK08sH.

 A nota desta lista de exercícios, juntamente com outras, valerá 20% da nota da prática de ECOI02;

 Você terá uma semana para resolver esta lista, que deverá ser apresentado no

início da aula do dia 14 de abril de 2015, para ser vistado;

 Ao terminar os exercícios você deverá se retirar do laboratório;

 Não é permitida a realização de atividades que não as relacionadas à disciplina, como o acesso a redes sociais (Facebook), execução de trabalhos de outras disciplinas, entre outras.

(2)

Imagine o seguinte problema: calcular a média aritmética de notas de 5 alunos. Como você resolveria esse problema?

Talvez você pense na solução do Programa 1, declarando 5 variáveis para cada nota: n1, n2, n3 n4 e n5. Imagine agora se você pretendesse encontrar a média aritmética das notas de uma turma de 50 alunos ou da escola toda com 2000 alunos? Seria inviável declarar n1, n2, n3, ..., n2000!

Programa 1 - Declarando 5 variáveis para cada nota de aluno.

Ou, talvez, você pense na solução do Programa 2, em que há a declaração de uma variável chamada nota e, fazendo a entrada de dados em um laço nessa mesma variável, há o acúmulo da soma de notas na variável soma. Qual o problema com essa solução? É que a cada iteração do laço a nota é substituída por outra e você perde os valores das notas caso necessite acessá-las mais tarde.

(3)

É evidente que é necessária uma maneira conveniente de armazenar vários valores do mesmo tipo; no nosso caso, as notas. Vetor é um tipo de dado oferecido para esse propósito.

Vetores são variáveis com capacidade para armazenar diferentes valores do mesmo tipo sequencialmente na memória. Cada um desses valores é identificado pelo mesmo nome (o nome dado ao vetor), sendo diferenciado apenas por um índice.

Os índices utilizados em C++ para identificar as células (posições) do vetor começam sempre em 0 e vão até o tamanho do vetor menos 1.

A declaração de um vetor segue o seguinte formato:

tipoDoVetor nomeDoVetor[númeroDeCélulas];

Exemplo 1: O vetor chamado notas possui 5 células (posições ou elementos), começando no índice 0 e indo até o índice 4 (número de células menos 1). Em cada célula poderá ser armazenado um número real, conforme especificado pelo tipo float na declaração.

Para acessar cada célula/elemento do vetor deve-se utilizar o nome do vetor e indicar o índice entre o par de colchetes. Assim:

nomeDoVetor[índice]

Exemplo 2: Em relação ao vetor notas do Exemplo1.

a) Para acessar o terceiro elemento: notas[2], com valor 9.0; b) Para acessar o primeiro elemento: notas[0], com valor 6.5;

c) Qual o valor do elemento notas[5]? Não existe, pois não há o índice 5, que seria o sexto elemento;

(4)

A seguir, é apresentado um programa que faz a entrada de notas de 5 alunos e calcula sua média utilizando um vetor. Repare nos valores que a variável i assume dentro do laço, de 0 a 4.

Programa 3 - Utilizando um vetor chamado notas com 5 posições.

Exercícios:

1) Edite, compile e execute o código do Programa 3 do texto sobre Vetores. Copie o programa em seu caderno, circulando e indicando a declaração do vetor e o acesso a seus elementos.

2) Quando não se atribui valor a uma variável, ela possui valor de lixo de memória. O mesmo ocorre com os elementos de um vetor. Sendo assim, com relação ao vetor notas do Exercicio 1, imprima seus valores antes da entrada de dados, constatando que há valores de lixo. Escreva em seu caderno apenas o laço que imprime os valores dos elementos do vetor. Dica: verifique como se acessa os elementos de um vetor.

3) Por definição, um Vetor é uma variável com capacidade para armazenar diferentes valores do mesmo tipo sequencialmente na memória. Para checar essa informação, adicione o seguinte trecho de código no programa do Exercício 2. Escreva em seu caderno os endereços de memória impressos, verificando a adição de 4 unidades a cada endereço.

(5)

4) Dado o vetor chamado idades a seguir, responda:

a) Qual a declaração do vetor idades? b) Qual o valor do elemento idades[1]?

c) Como podemos acessar o último elemento do vetor? d) Como podemos acessar o primeiro elemento do vetor?

5) A seguinte linha de código inicializa um vetor chamado vet com os valores 1, 2, 3, 4 e 5, funcionando apenas na declaração. Faça um programa com essa linha, imprimindo os elementos do vetor. Escreva em seu caderno apenas essa inicialização juntamente com a impressão.

6) O objetivo do seguinte programa é realizar a soma de todos os elementos do vetor v. Mas, ao executá-lo, a soma impressa foi 145 e não 150. Por que isso aconteceu? Corrija o problema.

(6)

a) Quais valores serão impressos para o terceiro vetor v3, caso os valores de entrada para os vetores v1 e v2 forem, respectivamente, { 7, 3, 12, -6, 19, 11, 6, 4, 0, 21 } e { 12, -16, 14, 3, 8, 11, 51, -1, 20, 2 }? Primeiro tente resolver sem o uso do computador.

b) Descreva a funcionalidade do programa acima.

8) Seja o seguinte trecho de código incompleto que ordena um vetor em ordem crescente. Escreva a sequência de instruções que completa o algoritmo corretamente. (Há continuação deste exercício na página seguinte!)

(7)

Instruções que completam o código: 1) if (vetor[j] < vetor[i])

2) vetor[i] = vetor[j]; 3) for(j = i+1; j < TAM; j++) 4) vetor[j]= temp;

5) for (i = 0; i < TAM-1; i++) 6) temp = vetor[i];

9) O programa modularizado a seguir inicializa um vetor de 10 posições com valores do tipo real inseridos pelo usuário. Após a entrada, imprime os elementos do vetor em ordem crescente de posição, separados por espaços em branco.

Sendo assim, faça um programa modularizado que carregue um vetor de 8 posições com valores inteiros passados pelo usuário e o imprima em ordem inversa (do último ao primeiro elemento). Escreva o programa inteiro em seu caderno.

10) O programa modularizado a seguir preenche um vetor de 10 posições com números aleatórios usando a função rand() da biblioteca cstdlib. Em seguida, solicita ao usuário um elemento a ser buscado no vetor. Caso o elemento exista,

Para passar um vetor por parâmetro, deve-se escrever apenas seu nome entre parênteses.

Quando se passa um vetor por parâmetro, a passagem de parâmetro já é por referência, ou seja, qualquer alteração nas células deste vetor continuará sendo válida após o término da função. Mas não se deve escrever o & antes do nome do vetor. Isso causaria um erro!

(8)

informa em qual índice do vetor ele se encontra. Caso o elemento não exista, informa ao usuário: “Elemento não encontrado!”.

rand() é uma função que gera números aleatórios de 0 a RAND_MAX, que é 32767. Para gerar números em um dado intervalo, utilize o operador resto de divisão (%). Exemplo: para gerar números de 1 a 10, use rand()%10 + 1.

(9)

Digite o programa, preencha as lacunas das linhas 60 e 61 da função procuraValorEmVetor e teste o programa. Escreva em seu caderno apenas essa função.

11) O seguinte programa modularizado pede ao usuário o tamanho do vetor que deverá ser alocado na memória. Além disso, faz a leitura e a impressão do vetor.

(10)

Digite e teste o programa. A seguir, aproveite o código e defina uma função que receba dois parâmetros: um vetor de números inteiros e o seu tamanho, e retorne por referência o maior e o segundo maior elementos desse vetor. Chame essa função na main, apresentado os resultados. Escreva em seu caderno o programa inteiro.

12) A seguinte função “isSorted” deverá retornar true se o vetor está ordenado em ordem crescente. Caso contrário, deverá retornar false:

bool isSorted (int x[], int tam) {

// o código vem aqui... }

Qual trecho de código a seguir completa a função “isSorted”? Primeiro resolva sem o auxílio do computador.

(a) bool b = true;

for (int i=0; i<tam-1; i++) { if (x[i] > x[i+1]) b = false; else b = true; } return b; (b) bool b = false;

for (int i=0; i<tam-1; i++) { if (x[i] > x[i+1]) b = true; } return b; (c) bool b = false;

for (int i=0; i<tam-1; i++) {

Em alguns casos, o tamanho do vetor a ser passado como parâmetro não é conhecido durante a implementação da função. Assim, para passar o vetor como parâmetro nestes casos basta omitir o tamanho deste vetor e incluir apenas os símbolos [ ] (abre e fecha colchetes) após o nome do parâmetro. Nestes casos, o tamanho do vetor é passado como um outro argumento, do tipo inteiro, conforme mostra o exemplo ao lado.

(11)

if (x[i] > x[i+1]) b = false; }

return b;

(d) for (int i=0; i<tam-1; i++) {

if (x[i] > x[i+1]) return false; }

return true;

(e) for (int i=0; i<tam-1; i++) {

if (x[i] > x[i+1]) return true; }

Referências

Documentos relacionados

2.2.3 Efeitos prejudiciais do fitato Embora a presença do fitato seja desejada para a maioria dos alimentos vegetais, por ser uma importante fonte de fósforo e outros

D569 Diferenciação entre as laranjeiras mais cultivadas no Rio Grande do Sul / Roberto Pedroso de Oliveira.... I.Oliveira, Roberto

Esta dissertação tem como objetivo geral propor um modelo de avaliação da rede logística para fins de reestruturação, utilizando o método do Fluxo de Caixa Descontado (FCD) para

Única das variáveis a valor de mercado que apresentou resultados significantes para a variável Tamanho, o endividamento de longo prazo a valor de mercado (Y6) também

[r]

O fortalecimento da escola pública requer a criação de uma cultura de participação para todos os seus segmentos, e a melhoria das condições efetivas para

[r]

Este estudo trata do desenho de um Sistema Estadual de Incentivo a Serviços Ambientais (SISA) que inclui um regime de REDD (Redução de Emissões por Desmatamento e