Buscar

Vetores e Matrizes em Linguagem C/C++

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 6 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 6 páginas

Prévia do material em texto

Linguagem da Programação I
7º Aula
Vetores e Matrizes 
Objetivos de aprendizagem
Ao término desta aula, vocês serão capazes de: 
• compreender o funcionamento de variáveis alocadas como vetor;
• compreender o funcionamento de matrizes multidimensionais;
• desenvolver códigos utilizando dados armazenados em vetores e matrizes.
Olá pessoal!
Até agora que já sabemos utilizar variáveis, podemos tentar melhorar um 
pouco a utilização delas, pois muitas vezes precisamos ficar declarando uma 
quantidade grande de variáveis com o mesmo objetivo em comum. Podemos 
resolver problemas como esse utilizando vetores e matrizes. Portanto, nesta 
aula, trataremos de como utilizar essas estruturas existentes na linguagem de 
programação.
Boa aula!
Bons estudos!
43
Seções de estudo
1 - Introdução
1 - Introdução
2 - - Como declarar um vetor em C agora que já sabe para 
que serve e como são importantes, vamos começar a usar os 
vetores/arrays em linguagem C/C++ 
3 - Acesso aos elementos de um vetor ou matriz
4 - Matrizes
Um vetor é uma estrutura de dados utilizada para representar 
certa quantidade de variáveis de valores homogêneos, ou seja: 
um conjunto de variáveis, todas do mesmo tipo. 
Nas aulas anteriores, os programas sempre liam uma 
variável que armazenava apenas um valor. Ou seja, a cada 
rodada do laço, a variável assumia um valor, e exibir as notas de 
todos os alunos, não seria possível, pois sempre substituíamos 
a nota de um aluno pela nota do aluno seguinte. Para que fosse 
possível armazenar as notas de todos os alunos, teríamos duas 
alternativas: a primeira, menos inteligente, seria declarar uma 
variável para armazenar a nota de cada aluno; e a segunda seria 
declarar um vetor de tamanho igual à quantidade de alunos. 
Sintaxe para declaração de vetores:
 tipo_do_vetor nome_do_vetor [tamanho]; 
Como funciona: 
A única diferença entre a declaração de vetores e a 
declaração de variáveis simples é que, ao declarar vetores, 
especificamos ao fim da declaração e entre colchetes [ ] o 
tamanho do vetor, ou seja, sua capacidade de armazenamento. 
Por exemplo: 
Se precisarmos armazenar a nota de 10 alunos, podemos 
declarar um vetor de 10 posições do tipo float. A declaração do 
nosso vetor ficaria assim: float notas [10];
Um vetor é como uma coleção de caixinhas numeradas. 
Cada caixinha é capaz de armazenar um valor e tem o seu 
“endereço”. O “endereço” de cada caixinha é conhecido como 
índice e serve para identificar qual posição do vetor queremos 
acessar.
 Abaixo temos a representação gráfica no nosso vetor de 
notas de dez posições, declarado acima: 
Índice 0 1 2 3 4 5 6 7 8 9
Valor 8,5 7,6 9,3 10 6,3 4,7 8,8 9,1 3,4 10
No vetor representado acima temos, por exemplo, 
armazenado no índice “2” o valor “9.3”. Note que, como 
declaramos um vetor com 10 posições, os índices variam de 0 
a 9. Mas, resta uma dúvida: como referenciar as posições do 
vetor e armazenar dados nelas? 
A sintaxe para utilizar uma posição do vetor é: nome do 
vetor [índice]; assim, para armazenar o valor 8.5 na primeira 
posição do nosso vetor, seria utilizado o comando: notas [0] 
= 8.5. 
1.1 - O que são vetores, como 
declarar e quando usar
Nesta seção vamos estudar o tipo de estrutura de dados 
mais simples: os vetores, também conhecidos por arrays.
O que é um vetor em C... E para quê serve?
Imagine que você foi contratado para criar um programa 
em C para uma escola.
Nesse programa você tem que armazenar as notas dos 
alunos, nomes, médias, nome dos pais, faltas e tudo mais.
E aí? Vai declarar quantos inteiros para armazenar as 
notas? Centenas? Milhares?
E quantos caracteres para armazenar esses nomes?
E quantos floats para armazenar as notas e médias de 
cada matéria, para cada aluno?
É quase que humanamente impossível fazer isso. Mas não 
se preocupe, pois você programa em C e tem total domínio de 
sua máquina. Você não perderá tempo declarando inúmeras 
variáveis, fará com que o computador faça isso pra você.
E é disso que se trata a estrutura de dados: estudar, 
manipular, organizar, salvar e extrair informações de uma 
grande quantidade de dados. Automatizar esse processo 
para que não precisemos declarar, inicializar e fazer outras 
operações em nossas variáveis de um modo manual.
2 - Como declarar um vetor em C 
agora que já sabe para que serve, e 
como são importantes. Agora vamos 
começar a usar os vetores/arrays em 
linguagem C/C++
Para criar um vetor, precisamos declarar três atributos 
dela:
• O tipo de valor que vai ser armazenado no vetor
• O nome do vetor, para que possamos acessá-la
• O número de elementos do vetor
A declaração de um vetor é muito parecida com a 
declaração de uma variável, bastando adicionar o número de 
elementos que desejamos que ela tenha. A sintaxe é a seguinte:
<tipo> <nome> [<número de elementos>];
Por exemplo, caso quiséssemos criar uma matriz chamada 
catálogo para armazenar 156 inteiros, a declaração seria assim:
int catálogo [156];
Podemos utilizar qualquer tipo de variáveis já estudadas 
anteriormente para criar um vetor, como float, int, char. Uma 
vez criada uma matriz de um determinado tipo, ela só pode 
receber valores desse tipo. Note que precisamos definir um 
tipo para uma matriz: não é possível criar um vetor “genérico” 
que aceite qualquer tipo, ou vários tipos. Isso acontece porque 
ao declarar uma matriz, o compilador aloca memória suficiente 
para conter o número de valores especificado de acordo com 
44Linguagem da Programação I
o tipo da matriz. Por exemplo, um vetor de 100 elementos 
do tipo int normalmente irá requerer 100*2 ou 200 bytes de 
memória. Por outro lado, um vetor de 100 elementos do tipo 
float irá requerer 100*4 bytes ou 400 bytes (VICTORINE, 
1994).
Assim como uma variável normal, podemos atribuir 
valores para uma matriz no momento de sua declaração. Isso 
é feito utilizando o operador de atribuição “=” seguido dos 
valores contidos entre chaves e separados por vírgulas. Por 
exemplo, considere a matriz de inteiros “teste” abaixo:
int teste [5] = {1, 2, 3, 4 , 5};
Também podemos atribuir apenas parte dos valores 
de uma matriz, por exemplo, podemos criar um vetor que 
comporte 50 valores do tipo float e atribuir apenas 5 valores a 
ela, deixando para atribuir o restante dos valores no decorrer 
do programa.
float notas [50] = {7.65, 8.48, 4.27, 6.78, 9.10 };
A linguagem C++ faz com que toda matriz parcialmente 
inicializada tenha seus valores restantes automaticamente 
transformados em zero. Assim, caso precisemos de uma 
matriz que só contenha zeros, podemos atribuir o primeiro 
elemento da matriz como zero e deixar que o compilador 
transforme os elementos restantes em zero, como vemos 
abaixo (VICTORINE, 1994):
int zeros [75] = {0};
A sintaxe é a seguinte:
tipo nome variável [número de elementos];
Ou seja, a sintaxe é a mesma de declarar uma variável 
normal, mas não vamos declarar somente uma, vamos 
declarar várias. E o par de colchetes ao lado do nome da 
variável serve para isso: especificar quantas daquelas variáveis 
estamos declarando.
Por exemplo, vamos declarar 10 inteiros que vão 
representar a idade de 10 pessoas:
int idade [10];
Agora 50 floats que vão representar a nota de 50 alunos:
float notas [50];
Bem simples.
Observação: a contagem do índice sempre começa do 0. 
Embora tenhamos declarado as variáveis com um nome, 
elas não podem ter um mesmo nome. Por isso, um número é 
associado ao seu nome.
No caso da idade [10], as variáveis inteiras são:
Idade [0], idade [1], idade [2], ..., idade [9]
Isso mesmo, o primeiro elemento é sempre o zero.
Então, se uma variável tem ‘n’ elementos, seus índices 
variam, sempre, de 0 até n-1, totalizando ‘n’ elementos.
3 - Acesso aos elementos de um 
vetor ou matriz
3.1 - Acessar os elementos de um 
vetor em C
Declaramos várias variáveis com o mesmo nome, mas 
como se referir, individualmente, a cada uma delas?
A resposta é simples: usando números, ou índices.
‘notas’ é um vetor de floats.
Se quiser utilizar um tipo float, use aseguinte sintaxe: 
nome [índice]. 
Suas variáveis, de forma independente, são chamadas de: 
notas [0]. Notas [1], notas [10] etc. Você pode utilizá-las como 
as variáveis (na verdade elas são variáveis, como se tivessem 
sido declaradas manualmente), por exemplo:
Armazenar a nota de um aluno que tirou 10
Nota [10] = 10.0 //esse programa em C
Somar a nota de dois alunos:
float soma = nota [3] + nota [4];
Incrementar:
Nota [5] ++;
Por fim, pode fazer tudo. São variáveis do tipo float 
normais. A diferença é que os nomes das variáveis têm números, 
que são chamados de índice, que são criados automaticamente 
quando você declara um bloco de vários elementos (vulgo 
vetores, ou arrays) (CARVALHO, 2008).
Como de costume, para fixar melhor. 
3.2 - Acessando Valores de uma 
Matriz
Após criar uma matriz, podemos acessar qualquer valor 
dentro dela. Cada valor, ou elemento de uma matriz, possui 
um número próprio. Toda matriz começa no elemento 0. 
Precisamos ter isso em mente quando acessamos valores dentro 
de uma matriz, pois o primeiro elemento será o elemento “0”, 
o segundo elemento será o elemento “1” (CARVALHO, 2008).
Cada elemento de uma matriz é tratado como uma variável 
separada. Assim, podemos atribuir valor para um elemento, 
exibi-lo na tela, utilizá-lo em operações matemáticas e em laços 
condicionais. O programa abaixo ilustra essas várias ações:
#include <iostream>
using namespace std;
int main() {
int matriz[5] = {1,2,3,4,5};
cout<<”o primeiro valor da matriz é: 
“<<matriz[0]<<endl;
cout<<”o último valor da matriz é: “<<matriz[4]<<endl;
cout<<”Somando o segundo e o quarto elementos da 
matriz temos: “<< matriz[1] + matriz[3]<<endl;
matriz[2] = 27;
cout<<”Mudamos o valor do terceiro elemento da matriz 
para: “<<matriz[2]<<endl;
system (“PAUSE > null”);
return 0;
}
3.3 - Utilizando Laços para Percorrer 
vetores
Uma das utilizações mais úteis dos laços condicionais 
45
é o acesso a vários (ou todos) elementos de uma matriz 
rapidamente. Podemos utilizar qualquer um dos laços que 
estudamos, mas sem dúvida o laço for é o mais prático para 
trabalhar-se com matrizes. Utilizamos a variável de controle do 
laço para acessar cada um dos elementos desejados (lembre-se 
de que a matriz sempre começa no elemento 0). Como vemos 
no programa abaixo que percorre os elementos de uma matriz, 
primeiro preenchendo a matriz com os dados entrados pelo 
usuário, depois exibindo esses dados na tela.
#include <iostream>
using namespace std;
int main()
{
int sequência[4];
for (int i = 0; i < 4; i++) {
cout << “Entre com o elemento número “<<(i+1)<<” 
da sequência: “;
cin >> sequência[i];
cout << endl;
}
cout << “A sequência entrada pelo usuário foi: “;
for (int i = 0; i < 4; i++) {
cout << sequência[i]<<” “;
}
System (“PAUSE > null”);
return 0;
}
Importante: como vimos no exemplo anterior, podemos 
utilizar variáveis para acessar os elementos de uma matriz. 
Da mesma forma, podemos definir constantes para indicar 
o número de elementos de uma matriz. Essa técnica é muito 
útil, pois caso precisemos alterar o número de elementos da 
matriz ao invés de caçarmos no código todas as referências 
a este número, tudo que precisamos fazer é alterar o valor da 
constante (JAMSA, 1999).
Assim, veja o mesmo programa anterior reescrito 
utilizando uma definição de constante.
#include <iostream>
using namespace std;
int main()
{
const int TAMANHO = 4;
int sequência[TAMANHO];
for (int i = 0; i < 4; i++) {
cout << “Entre com o elemento número “<<(i+1)<<” 
da sequência: “;
cin >> sequência[i];
cout << endl;
}
cout << “A sequência entrada pelo usuário foi: “;
for (int i = 0; i < 4; i++) {
cout << sequência[i]<<” “;
}
System (“PAUSE > null”);
return 0;
}
Exemplo: Faça um programa que peça 3 números inteiros 
ao usuário, armazene em um vetor, depois mostre o valor de 
cada elemento do vetor, assim como seu índice.
Primeiro declaramos um vetor de inteiros, contendo 3 
elementos:
int NUMERO[3];
Agora vamos pedir para o usuário preencher esses três 
números.
Lembre-se de que você é programador e sabe que os 
índices vão de 0 até 2.
Mas o usuário não. Para o leigo, é número 1, número 2 
e número 3, não inicia no 0. No laço for, o nosso ‘índice’ vai 
de 0 até 2.
Porém, ao recebermos o valor de índice ‘índice’, estamos 
pedindo ao usuário o valor do número ‘índice+1’.
Por exemplo, para armazenar um valor no ‘NUMERO[0]’, 
vamos pedir o número ‘0+1’ ao usuário.
Para armazenar um valor no ‘NUMERO[1]’, vamos 
pedir o número ‘1+1’ ao usuário.
Para armazenar um valor no ‘NUMERO[2]’, vamos 
pedir o número ‘2+1’ ao usuário.
Usaremos outro laço for para exibir o valor dos números, 
através dos índices, que variam de 0 até 2.
Porém, novamente, temos que mostrar 1 ao 3 para o 
cliente, pois para ele não faz sentido ‘número 0 -> valor 10 ‘ e 
sim ‘número 1 -> valor 10’.
Então, nosso código em C fica:
#include <stdio.h>
 
int main()
{
 int NUMERO[3],
 índice;
 
 for (índice = 0; índice < = 2; índice ++)
 {
 Printf (“Entre com o número %d: “, indice+1);
 Scanf (“%d”, &NUMERO [índice]);
 }
 
 For (índice = 0; índice < = 2; índice ++)
 Printf (“Número %d = %d\n”, índice +1, 
NUMERO [índice]);
 
}
Exemplo: 
Faça um programa em C que peça ao usuário duas 
notas que ele tirou e mostre a média.
Use vetores! Aliás, use somente um vetor para essas 
três variáveis.
Agora vamos declarar vetor de float de 3 elementos.
Nas duas primeiras posições armazenamos as notas do 
usuário (nota[0] e nota[1]), e na terceira posição (nota[2]) 
armazenaremos a média (nota[0] + nota[1])/2.
Veja como ficou nosso código C:
#include <stdio.h>
int main()
{
46Linguagem da Programação I
 float notas [3];
 printf (“Insira sua primeira nota: “);
 scanf (“%f ”, &notas[0]);
 printf (“Insira sua segunda nota: “);
 scanf (“%f ”, &notas[1]);
 notas [2] = (notas[0] + notas[1])/2;
 printf (“Sua media e: %.2f\n”, notas[2]);
}
Sim, muito simples. São simplesmente variáveis normais, 
a diferença é que são várias delas.
É até mais fácil trabalhar com vetores do que com 
variáveis declaradas manualmente, por conta dos índices.
Afinal, números têm uma ordem lógica, já os nomes que 
damos às variáveis não.
Até fazemos uma ressalva, evite usar variáveis como: a, b, 
c, x, y, i, j... ou a primeira letra que você encontrou.
Use ‘linha’, ‘coluna’, ‘índice’, ‘contador’, ‘count’, ‘média’, 
‘nota’, ‘continuar’ etc, como fizemos aqui.
Pode parecer perda de tempo usar uma variável com 
nome tão grande. Mas é porque ainda estamos estudando.
Quando você for profissional e já tiver feito programa 
com milhares de linhas de código, ficará impossível entender 
o que é sopa de letras que você usou como nome de variáveis.
Mas se tiver usado nomes que façam sentido, você e 
outros programadores também entenderão de maneira mais 
simples.
Não é um conselho, é um diferencial.
4 - Matrizes
Além dos vetores de uma única dimensão, C++ permite 
a criação de matrizes de múltiplas dimensões. As matrizes 
bidimensionais são sem dúvida as mais utilizadas e as mais 
úteis, pois comportam-se como tabelas com linhas e colunas. 
Ao declarar uma matriz multidimensional, adicionamos 
um conjunto de colchetes para cada dimensão extra. Entre 
os colchetes de cada dimensão, colocamos o número de 
elementos que aquela dimensão terá (ou uma variável que 
represente o número de elementos) (JAMSA, 1999). Assim:
int tabela [10] [5]; //matriz bidimensional
int horas [12] [30] [24]; //matriz de três dimensões 
int minutos [12] [30] [24] [60]; //matriz de quatro 
dimensões
Normalmente trabalhamos no máximo com matrizes 
bidimensionais, mas podem surgir ocasiões onde matrizes 
de mais de duas dimensões sejam necessárias. Matrizes 
multidimensionais funcionam como matrizes dentro de 
matrizes. Por exemplo, uma matriz bidimensional pode ser 
vista como uma matriz de uma dimensão cujos elementos são 
outras matrizes. Essa analogia é útil para entender como é 
feita a inicialização dosvalores de matrizes multidimensionais: 
inicializamos a matriz separando seus elementos por vírgulas, 
onde cada elemento é uma matriz individual e é inicializada da 
mesma forma que a matriz “principal” (JAMSA, 1999). Por 
exemplo, seja a matriz bidimensional da tabela:
int tabela [2] [3] = { { 1, 2, 3} , { 4, 5, 6}};
Veja que cada “elemento” é fechado por chaves e separado 
por vírgulas. A mesma coisa acontece com matrizes de três 
dimensões, e assim por diante. O exemplo abaixo mostra a 
declaração de uma matriz tridimensional. Preste atenção na 
presença das chaves e das vírgulas separando cada elemento 
diferente:
int tritabela [2] [2] [2] = { {{ 9, 8}, {7,6}} , {{5, 4},{3, 
2}} };
Cada elemento de uma matriz multidimensional pode 
ser acessado individualmente, indicando a posição exata do 
valor dentro da matriz. Como vimos anteriormente no caso 
das matrizes simples, a utilização dos laços condicionais facilita 
o acesso aos vários elementos de uma matriz. No caso das 
matrizes multidimensionais, utilizamos laços aninhados para 
acessar cada dimensão de uma vez. O programa abaixo declara 
a matriz tridimensional que vimos anteriormente e utiliza uma 
sucessão de laços for aninhados para exibir a matriz na tela.
#include <iostream>
using namespace std;
int main()
{
int tritabela [2] [2] [2] = {{{ 9, 8}, {7,6}},{{5, 4},{3, 2}}};
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
for (int k = 0; k < 2; k++) {
cout << tritabela[i][j][k]<<” “;
}
cout<<endl;
}
cout<<endl;
}
System (“PAUSE > null”);
return 0;
}
Retomando a aula
Parece que estamos indo bem. Então, para encerrar 
esta aula, vamos recordar:
Na aula anterior foram apresentados as estruturas de 
repetições e dependendo da interação dentro do laço, nossas 
variáveis tinham seus valores sobrescritos, ou teríamos que 
declarar n variáveis. Agora, através de matrizes e vetores podemos 
declarar uma variável que representará um conjunto de valores. 
Portanto, agora, as estruturas de repetição apresentam uma 
importância ainda maior na nossa programação. Também com 
os vetores e as matrizes conseguiremos otimizar e desenvolver 
programas mais compactos. Vimos que para interagir nesses 
conjuntos sempre necessitamos de variáveis para utilizarmos 
como índice. Esses índices sempre serão inteiros, já que não 
existem posições de vetores ou matrizes quebrados.
47
CARVALHO, Flávia Pereira de; Apostila de Programação 
II- Linguagem de Programação C, Faculdade de Informática de 
Taquara, Curso de Sistemas de Informação 2008.
JAMSA, Kris; KLANDERM LARS; SANTOS, Jeremias 
René D. Pereira dos. Programando em C/C++: a bíblia. São 
Paulo: Makron Books do Brasil, 1999.
DELGADO, Armando Luiz; Linguagem C++; usp; 
2012.
Vale a pena
Vale a pena ler
Disponível em: <http://www.dainf.ct.utfpr.edu.
br/~pbueno/Arquivos/Algoritmos.pdf>. Acesso em: 25 de 
nov. 2017.
Disponível em: <https://www.devmedia.com.br/
estrutura-de-repeticao-c/24121>. Acesso em: 25 de nov. 
2017. 
Disponível em: <http://www.professores.uff.br/
screspo/wp-content/uploads/sites/127/2017/09/mat.
pdf>. Acesso em: 25 de nov. 2017. 
Vale a pena acessar
Programar em C - Ciclo for | Laço for | Repetição 
for. Disponível em: <https://www.youtube.com/
watch?v=lRuQ8S-jXcY>. Acesso em: 25 de nov. 2017.
Vale a pena assistir
Minhas anotações

Continue navegando