Manipulando Vetores

Ver Todos os Exercícios

Teoria

Introdução

Eai, tudo tranquilo? Aqui é o Samuel do Responde Aí e hoje nós falar um pouco sobre manipulação de vetores.

Vamos aprender a trabalhar com cada elemento que compõe um vetor e a manipulá-los no nosso código. Então bora lá!

Estrutura de armazenamento dos vetores

Nós sabemos que um vetor é uma estrutura de dados indexada, mas como fazemos para acessar cada um desses dados de forma individual?

Para isso, vamos analisar como cada elemento está armazenado dentro de um vetor, por exemplo:

Nesse caso, o vetor v e c possui capacidade para armazenar 5 valores do tipo i n t . Nós podemos entender esse vetor como um conjunto de blocos, onde cada bloco armazena um valor e possui um índice de acordo com a sua localização no vetor.

Esses índices se iniciam com 0 , e vão até ( t a m a n h o   d o   v e t o r   -   1 ) , ou seja, para v e c , esses índices vão de 0 a 4 , pois ele pode armazenar até 5 valores.

Inserindo um elemento

Para atribuir valores a um vetor, nós podemos fazer isso no momento em que o declaramos:

Ou podemos fazer isso usando os índices de cada posição do vetor, da forma:

v e t o r í n d i c e = v a l o r ;

Se fôssemos fazer isso para v e c , teríamos:

Operações com vetores

Pra gente realizar uma manipulação com algum elemento de um vetor, a única coisa que precisamos fazer é chamar esse elemento usando o nome do vetor e o índice da posição desse elemento:

v e t o r [ í n d i c e ]

Ao usar esse tipo de referencia, nós podemos realizar operações com cada elemento do vetor como uma variável normal.

Para o vetor v e c , se quisermos somar 1 ao elemento que está na posição de índice 1, ou seja, o 4 , só precisamos fazer:

Dessa forma, o vetor v e c ficaria:

For each

Imagina que você esteja trabalhando pra uma empresa de contabilidade e precisa fazer uma análise dos gastos dessa empresa. Para isso, você decide criar um programa que salva cada valor de gasto como elemento de um vetor e calcula a soma desses valores.

Um método bastante usado para isso seria utilizar um laço f o r para acessar cada índice desse vetor e atribuir os valores guardados a uma variável acumuladora.

Dessa forma, ficaria assim:

Mas calma ai! No C++ existe um método um pouco diferente que podemos usar para isso, é o f o r   e a c h !

No f o r   e a c h , para cada passagem do laço de f o r , uma variável que vamos definir irá receber o valor que está armazenado em cada índice do vetor. Ou seja, na primeira passagem, essa variável será igual à v e t o r [ 0 ] , na segunda ela será v e t o r 1 , na terceira será v e t o r [ 2 ] e por ai vai.

Para usarmos o f o r   e a c h , a sintaxe é a seguinte:

f o r   ( a u t o       n o m e _ d a _ v a r i á v e l     :     v e t o r ) {                     c o d i g o _ d o _ l o o p }

Nós também podemos explicitar o tipo da variável no lugar do a u t o , ficando

f o r   ( t i p o _ d a _ v a r i á v e l       n o m e _ d a _ v a r i á v e l     :     v e t o r ) {                     c o d i g o _ d o _ l o o p }

Dessa forma, para o nosso exemplo, ficaríamos com:

Agora que já sabemos como funciona o indexamento de dados num vetor, como fazemos operações com um vetor e como usamos o f o r   e a c h , podemos partir para algumas questões de fixação!

Inserindo um elemento

Operações com vetores

For each

Exercícios Resolvidos

Exercício Resolvido #1

Faça um programa que possua um vetor denominado A que armazene 6 números inteiros. O programa deve executar os seguintes passos:

(a) Atribua os seguintes valores a esse vetor: 1, 0, 5, -2, -5, 7.

(b) Armazene em uma variável inteira (simples) a soma entre os valores das posições A[0], A[1] e A[5] do vetor e mostre na tela esta soma.

(c) Modifique o quarto valor armazenado no vetor, atribuindo a este o valor 100.

(d) Mostre na tela cada valor do vetor A, um em cada linha.

Passo 1

Fala aí, tudo tranquilo?

Vamos resolver essa questão item por item.

No item a), basta declararmos o vetor e atribuirmos os valores que foram dados. Para isso, vamos declarar o vetor como um inteiro com capacidade de armazenar 6 valores.

Passo 2

Para o item b), vamos declarar uma variável s o m a , e fazê-la receber os valores de A[0], A[1] e A[5].

Nós podemos checar o valor dessa variável por meio da biblioteca i o s t r e a m :

Passo 3

No item c), precisamos ter cuidado com o que iremos tratar como “quarto valor armazenado”, pois os índices dos valores armazenados não começam no 1, mas sim no 0. Portanto, o quarto valor é o A[3], e não o A[4].

Dessa forma, ficaríamos com:

Passo 4

Por fim, no item d), para mostrarmos cada valor contido no vetor A, vamos utilizar o f o r   e a c h , no qual faremos uma variável mudar o seu valor a cada laço de repetição.

Resposta

Ei, a resposta está no passo a passo :)

Exercício Resolvido #2

Faça um programa que armazene 6 números inteiros passados pelo usuário em um vetor V , calcule e imprima o produtório desses valores.

Passo 1

Eai, beleza?

Vamos começar esse problema incluindo a biblioteca i o s t r e a m , pois vamos precisar dela para receber dados do usuário e inicializando a função m a i n . Após isso, vamos declarar o vetor V , e a variável p r o d , que vai armazenar o produto dos valores do vetor.

Perceba que é importante que o valor inicial de p r o d seja 1, pois ela deve acumular um produtório, logo, o seu valor inicial não deve alterar o valor de uma multiplicação.

Passo 2

O próximo passo é receber do usuário os valores para armazenar no vetor. Para isso, usaremos um laço de for, no qual, para cada repetição, um valor será armazenado no vetor numa posição diferente.

Ainda dentro desse laço for, podemos usar a variável p r o d para acumular o valor do produtório, ou seja, armazenar o seu valor multiplicado pelo novo valor armazenado.

Passo 3

Por fim, basta imprimirmos o valor do produto dos números armazenados no vetor.

Resposta

Exercício Resolvido #3

Faça um programa que preencha um vetor com 10 números reais, calcule e mostre a quantidade de números negativos e a soma dos números positivos desse vetor.

Passo 1

Eai, tudo beleza?

Nessa questão, vamos iniciar incluindo a biblioteca < i o s t r e a m > e declarando a função m a i n . Após isso, vamos declarar 1 vetor v e c t , que vai armazenar os 10 números reais, e mais duas variáveis, a variável n e g a t i v o s , que vai armazenar a quantidade de números negativos que estarão no vetor, e a variável a c u m u l a d o r , que vai acumular a soma dos valores positivos do vetor.

Passo 2

A seguir, precisamos passar valores para esse vetor. Para isso, vamos fazer o usuário enviar os valores. Para que isso seja feito, vamos utilizar um laço f o r , com um total de 10 repetições e, para cada repetição, vamos falar para o usuário digitar um número e vamos armazená-lo no vetor.

E já podemos aproveitar esse laço f o r para checar se valor passado para o vetor é positivo ou negativo. Se ele for negativo, a variável n e g a t i v o s aumenta o seu valor em 1. Se ele for positivo, a variável a c u m u l a d o r irá acumular o valor que foi passado ao vetor.

A cada iteração, o valor que o usuário entrou é alocado na posição de índice i do vetor v e c t . Então nos referimos a esse número como v e c t [ i ] . Das linhas 17 a 20, o programa verifica se ele é positivo ou negativo e faz o que deve ser feito em cada caso.

Passo 3

Por fim, basta printarmos a quantidade de valores negativos e a soma dos valores positivos e encerrarmos a função m a i n .

Resposta

Exercício Resolvido #4

Faça um programa que receba do usuário um vetor com 10 posições. Em seguida, deverá ser impresso o maior e o menor elemento do vetor.

Passo 1

Fala aí, tudo tranquilo?

Vamos começar incluindo a biblioteca i o s t r e a m , pois vamos precisar receber valores do usuário e imprimir mensagens na tela.

Após isso, vamos declarar o vetor V com 10 posições. Além de duas variáveis: m a i o r e m e n o r que vão armazenar o maior valor desse array e o seu menor valor.

Passo 2

Agora, vamos fazer o usuário passar os valores para esse array. Para isso, vamos utilizar um laço de f o r e, para cada repetição, o usuário passa um valor que é armazenado em uma posição diferente do vetor.

Passo 3

O próximo passo é definir qual o maior e o menor valor passados pelo usuário. Para isso, vamos fazer com que as variáveis m a i o r e m e n o r recebam o valor V [ 0 ] . A seguir vamos fazer um laço de f o r   e a c h e, para cada repetição, vamos fazer dois i f ’s serem analisados.

O primeiro é para saber se o valor armazenado na variável do f o r   e a c h é maior do que o valor armazenado em m a i o r . Se sim, vamos fazer a variável m a i o r receber esse valor.

O segundo é bem parecido. Vamos analisar se a variável do f o r   e a c h é menor que o valor de m e n o r e, se isso for cumprido, m e n o r recebe o valor dessa variável.

Com o término desse laço de repetição, todas as variáveis são comparadas com o valor de m a i o r que sempre vai assumindo o maior valor da comparação. Com isso, essa variável assume o maior valor dentro do vetor. O processo que ocorre para a variável m e n o r é análogo.

Por fim, basta imprimirmos esses valores.

Resposta

Exercício Resolvido #5

Dados dois vetores  x  e  y , ambos com  n  elementos ( n m a x = 100 ), determinar o produto escalar desses vetores.

Observação:

  • x ⋅ y = ∑ x i ⋅ y i

Passo 1

Fala aí, tudo tranquilo?

Vamos começar declarando os vetores x e y , ambos com capacidade máxima de 100 valores reais, e a variável para armazenar o produto escalar, além da variável que vai armazenar o tamanho dos vetores.

Passo 2

Agora, vamos colocar para o usuário passar os valores para as variáveis, começando pela variável n .

Após ter definido o tamanho dos vetores, podemos pedir para o usuário passar os valores para os vetores por meio de um laço for com n repetições.

Passo 3

Por fim, vamos calcular o valor do produto escalar usando o somatório que foi dado no enunciado. Para isso, vamos fazer um laço f o r no qual um termo do somatório é calculado a cada repetição do laço.

Resposta

Exercício Resolvido #6

Dada uma sequência de n números inteiros, imprimi-la na ordem inversa à da leitura.

Obs: A sequência deve ter no máximo 50 termos.

Passo 1

Eai, tudo beleza?

Vamos iniciar o nosso código declarando variáveis que usaremos: um número inteiro para salvar a quantidade de termos da sequência e um vetor de tamanho 50 (pois o enunciado nos diz que é a maior quantidade de termos que essa sequencia pode ter). Após isso, vamos pedir para o usuário digitar o tamanho da sequencia e vamos passar esse valor para a variável n .

Passo 2

Agora, vamos passar os valores para o nosso vetor. Para fazermos isso, vamos criar um laço de f o r para variar um valor i   de 0 até n - 1 . Dentro desse laço, vamos pedir um número ao usuário e vamos guardá-lo no nosso vetor na posição i .

Passo 3

Para finalizar, vamos imprimir os valores do vetor, mas na ordem inversa. Para isso, vamos fazer um laço de f o r , mas o valor inicial da variável do laço será n - 1 e esse valor vai diminuindo de 1 em 1 até zerar. A ideia aqui é fazer essa variação para que possamos ir imprimindo os valores do vetor começando pelo último e terminado no primeiro:

Resposta

Exercício Resolvido #7

Faça um programa para ler a nota da prova de 15 alunos e armazene num vetor, calcule e imprima a média geral.

Passo 1

Eai, tudo beleza?

Vamos começar essa questão incluindo declarando as variáveis necessárias: o vetor n o t a s , para salvar as notas dos alunos, e a variável m e d i a , que vai armazenar o valor da média das notas.

Perceba que estamos iniciando a variável m e d i a com valor 0 , pois vamos utilizá-la como uma acumuladora.

Passo 2

O próximo passo é fazermos o nosso laço de f o r para receber a nota de cada aluno e armazená-la dentro do vetor n o t a s . Além disso, valor somar o valor da nota colocada dividido por 15 ao valor da m e d i a . Desse modo, ao final do loop, vamos ter o valor da média dos alunos salvo na nossa variável.

Passo 3

Por fim, basta imprimirmos esse valor na tela e encerrarmos a nossa função m a i n :

Resposta

Exercício Resolvido #8

Faça um programa que leia dois vetores de 10 posições e calcule outro vetor contendo, nas posições pares os valores do primeiro e nas posições impares os valores do segundo.

Passo 1

Eai, tudo beleza?

Para essa questão, vamos precisar de 3 vetores, 2 deles com 10 posições e um com 20.

Após declará-los, vamos utilizar um laço de f o r para que o usuário passe os valores para o primeiro vetor:

Dentro desse laço de f o r , já podemos fazer o vetor 3 receber, nas suas posições pares, os valores do vetor 1.

Passo 2

Vamos fazer o mesmo para o vetor 2, mas vamos utilizar as posições ímpares do vetor 3 para receber os valores do vetor 1.

Passo 3

Por fim, basta imprimirmos os valores do vetor 3 utilizando um último laço de f o r :

Resposta