Aula prática 6
Vetores e Matrizes
Monitoria de Introdução à Programação
Roteiro


Vetores
Matrizes
– Bidimensionais
– N-dimensionais



Uso em funções
Dúvidas
Exercícios
Vetores

Um vetor (também chamado de vector ou array) é uma sequência
contínua na memória, de elementos de mesmo tipo.

O acesso às posições individuais é feito pelo índice do elemento. Em C e
em várias outras linguagens, o primeiro elemento é acessado pelo índice
0.
– int vetor[n]; //declaração de um vetor com ‘n’ elementos

O tamanho do vetor é fixo durante o programa, não é possível modificar
seu tamanho depois de declarado. Lembrando que não é possível utilizar
variáveis na hora da declaração de um vetor.

O identificador ‘vetor’ não é uma variável, ela não pode mudar valor, e
não “armazena” nenhum dado.
Então, o que significa o identificador ‘vetor’ ?
Vetores

Lembrando que vetores são espaços contínuos na memória, ‘vetor’ é um
endereço de memória, mas não um qualquer, e sim o primeiro endereço
neste espaço que foi reservado na declaração ‘ int vetor[n] ‘ ;

Portanto, para acessar outros elementos deste vetor, você deve
incrementar algum valor à este endereço inicial para obter-se o
elemento desejado.

C oferece o operador “[ ]” para fazer este incremento e o acesso ser
realizado facilmente. O valor de incremento é chamado de “Índice”.
Vetores

Portanto, se quisermos acessar o elemento 2 do nosso ‘ int vetor[n] ‘ ,
usamos a seguinte sintaxe:
vetor[2]; //índice == 2, posição == 3

O identificador ‘ vetor[2] ‘ pode ser usado como uma variável, tanto para
leitura, quanto para escrita. Ambos os trechos são válidos:

vetor[2] = 4;

int a;
a = vetor[2];
Vetores

Exemplos de uso do operador “[ ]”

Tentar acessar um elemento em uma posição menor que 0 ou maior que
o tamanho do vetor, poderá resultar em erro de execução.

Cuidado com lixo de memória: ao declarar um vetor sem uma lista de
inicialização, o vetor estará preenchido por lixo de memória. O mesmo
vale para posições além da lista de inicialização.
Vetores

Vetores são constantes! A variável que guarda um vetor é, em si, um
endereço de memória constante, indicando onde aquele vetor começa.
Tentar mudá-la após a declaração resultará em um erro de compilação.

Um vetor só guarda um tipo! Esse tipo é definido na sua declaração,
e nunca muda.

Tomar cuidado com o acesso aos elementos! C não checa os
limites do vetor antes de acessar os elementos, portanto acessar
elementos além do tamanho do vetor pode causar erro de execução.

Exemplo de um acesso indevido:
int vetor[4];
vetor[5] = 20;
Vetores

Como percorrer um vetor:
Uma forma prática de percorrer um vetor é usando um laço:
Matrizes

Matrizes são vetores de vetores. Dessa forma, podemos ter mais de uma
dimensão de acesso.

A declaração de uma matriz bi-dimensional é a seguinte:

int matriz[m][n] // matriz com m linhas e n colunas

Matrizes mantém a mesma propriedade de vetores, ou seja, continuam
sendo espaços contíguos na memória. As linhas da matriz são dispostas
sequencialmente.
– Isso gerará uma consequência na hora de passar vetores de duas ou mais
dimensões para uma função.
Matrizes Bidimensionais

O acesso à elementos da matriz é feito do mesmo modo que com
vetores:
Matrizes Bidimensionais

Para percorrer uma matriz:
Similar a percorrer um vetor, usando laços aninhados:
Matrizes N-Dimensionais

Se podemos ter vetores de vetores, segue que podemos ter vetores de
vetores de vetores de vetores...:

Para percorrer, a ideia é a mesma de vetores e matrizes bidimensionais,
usando laços aninhados.
Uso em Funções.

Como vetores são endereços na memória, podemos acessar diretamente
suas posições dentro de funções, e alterar seus valores:
Uso em Funções.

No exemplo anterior, a função soma recebe um inteiro que é o tamanho
do vetor, e o próprio vetor (ou o endereço dele).

A assinatura da função neste caso deve seguir esta sintaxe:
– int soma ( int vetor [], int tam );

A chamada da função deve seguir a seguinte sintaxe:
– soma( vetor, tam );
Se quisermos passar todo o vetor, devemos usar somente o identificador
do vetor, mas se quisermos passar uma posição específica do vetor,
usamos o operador “[ ]”.
 Ex: uma função que recebe dois inteiros e soma eles

– int somaNumeros (int n1, int n2); //assinatura da função
– somaNumeros (vetor [0], vetor[1]); //chamada da função
Uso em Funções – Matrizes bi-dimensionais.

As coisas mudam um pouco na hora de passar matrizes de duas ou mais
dimensões. A chamada se mantém, passando somente o endereço da
matriz, mas a assinatura será um pouco modificada.

Usaremos como exemplo uma função que some todos os elementos de
uma matriz quadrada, então temos que sua assinatura é:
– int somaMatriz (int matriz[][“n”], int ordem);
//O “n” é o número de colunas da matriz

Todas as dimensões da matriz devem ser definidas na assinatura da
função, menos a primeira, e não devem ser usadas variáveis aqui,
somente constantes.
Por que isso é necessário?
Dúvidas?
Exercício 1

Faça um programa que receba 8 números inteiros (de 0 a 20) e
os armazene em um vetor. Após isso, imprima o número de vezes
que o número x aparece neste vetor.

Entrada: 1 5 4 3 1 3 5 1
Saída:

–
–
–
–
1
3
4
5
–
–
–
–
3
2
1
2
vezes
vezes
vez
vezes
Exercício 2

Faça um programa que receba duas matrizes de ordem 3 e que
faça a soma ou a subtração das matrizes, dependendo da escolha
do usuário.
Exercício 3


Escreva um programa em C que recebe 10 números inteiros
positivos e vai colocando esses números em um vetor de 10
posições.
Após isto, ofereça ao usuário as seguintes opções e exiba a
opção pedida:
– 1 – Maior número do vetor
– 2 – Maior número do vetor entre o elemento a e o elemento b
 a e b são índices do vetor
– 3 – Vetor ordenado de forma crescente
– 4 – Sair
OBS : O programa só encerrará quando o usuário pedir pra sair.
Download

Vetores