Matrizes e Vetores
| Declaração de Matrizes e Vetores | Acesso aos elementos | Exemplos com Vetores | Passagem de Matrizes e Vetores como Parâmetro |
| Exemplos com Matrizes |
Uma matriz é uma coleção de variáveis de mesmo tipo, acessíveis com um único nome e armazenados contiguamente na memória.
A individualização de cada variável de um vetor é feita através do uso de índices.
Os Vetores são matrizes de 1 só dimensão.
int Vetor[5]; // declara um vetor de 5 posições
int Matriz[5][3]; // declara uma matriz de 5 linhas e 3 colunas
Para acessar os elementos de um vetor usa-se índices. O índice define a posição da variável dentro do vetor.
Em todos os vetores tem o primeiro elemento na posição 0(zero). Assim, se tomarmos "K" como sendo o tamanho do vetor a última posição é a de índice "K-1"
Vetor[0] = 4; // Coloca 4 na primeira
posição de "Vetor"
Vetor[4] = 8; // Coloca 8 na última
posição de "Vetor"
int Vetor[5]; // declara um vetor de 5 posições
int Matriz[5][3]; // declara uma matriz de 5 linhas e 3 colunas
Vetor[0] = 9; //
coloca 9 na primeira posição do vetor
Vetor[4] = 30 // coloca 30 na última posição
do vetor
Matriz[0][1] = 15; // coloca 15 na célula que
está na primeira linha
// e na segunda coluna da matriz
Preenchimento de um vetor com um dado
for(i=0; i<5; i++)
for(i=0; i<=4; i++)
Vetor[i] = 30;
Vetor[i] = 30;
Colocar os números de 1 a 5 em Vetor
for(i=0; i<5; i++)
Vetor[i] = i+1;
Colocar os números de 5 a 1 em Vetor
for(i=0; i<5; i++)
Vetor[i] = 5-i;
Uso de Constantes para definir o tamanho de um vetor
#define TAM_MAX 10
double VetReais[TAM_MAX];
for(i=0; i<TAM_MAX; i++)
VetReais[i] = TAM_MAX - i; // coloca 5,4,3,2,1
no vetor
Copiar os dados de um vetor para outro
#define TAM_MAX 10
double VetReais[TAM_MAX], Copia[TAM_MAX];
for(i=0; i<TAM_MAX; i++)
VetCopia[i] = VetReais[i]; // Copia os dados de
um vetor
// para outro
Copiar os dados de um VET1 para as primeiras 5 posições de COPIA e VET2 para as outras 5
#define TAM_MAX 10
// Note que a declaração do vetor
"Cópia" cria o dobro de posições
double Vet1[TAM_MAX], Vet2[TAM_MAX], Copia[TAM_MAX*2];
for(i=0; i<TAM_MAX; i++)
VetCopia[i] = Vet1[i]; // Copia os dados do
primeiro vetor
for(i=0; i<TAM_MAX; i++) // Copia os dados do segundo
vetor
VetCopia[i+TAM_MAX] = Vet2[i];
// ****** Pergunta: Como fazer a cópia usando um único comando for ?
Leitura dos dados de um um vetor
#define TAM_MAX 10
double Vet1[TAM_MAX];
for(i=0; i<TAM_MAX; i++)
scanf("%f",&Vet1[i]);
Encontrar o maior valor dentro de um vetor
#define TAM_MAX 10
double Vet1[TAM_MAX];
double Maior;
for(i=0; i<TAM_MAX; i++)
scanf("%f",&Vet1[i]);// le os
dados
Maior = Vet1[0]; // assume que o primeiro é o maior
for(i=0; i<TAM_MAX; i++)
if Vet1[i] > Maior
Maior = Vet1[i];
printf("O maior elemento é %f\n",Maior);
// ****** Pergunta: Como fazer a mesma busca e
imprimir também a
// ****** posição do dado dentro do vetor. Tente fazer isto usando
// ****** apenas 1 variável.
Crie um programa que copie para um vetor os elementos de outro em ordem crescente.
// a idéia aqui é encontrar o menor
elemento do vetor 1 e colocar no vetor 2. Tirar este número de vet1, por exemplo,
// colocando no seu lugar, no vetor 1, um número grande e recomeçar a busca pelo novo
número menor.
#define TAM_MAX 10
double Vet1[TAM_MAX], VetOrdenado[TAM_MAX];
double Menor, Maior;
for(i=0; i<TAM_MAX; i++)
scanf("%f",&Vet1[i]);// le os
dados
PosMaior = 0; // assume que o maior
está na 1a. posição
for(i=0; i<TAM_MAX; i++)
if Vet1[i] > Vet1[PosMaior]
PosMaior = i; // acha a
posição do maior
for(j=0; j<TAM_MAX;j++)
{
PosMenor = 0; // assume que o primeiro é o menor
for(i=0; i<TAM_MAX; i++)
if Vet1[i] < Vet1[PosMenor]
PosDoMenor = i;
VetOrdenado[j]= Vet1[PosMenor]; // copia menor para o novo
vetor
// inutiliza a posição do menor colocando nela um número grande
Vet1[PosMenor] = Vet1[PosMaior]; // no caso o maior do
vetor
}
for(i=0; i<TAM_MAX; i++)
print("%f\n",VetOrdenado[i]);// Imprime os
dados
Passagem de Matrizes e Vetores como Parâmetro
Para passar uma
matriz ou vetor como parâmetro, basta declarar o parâmetro da mesma forma que a matriz
foi declarada.
Um vetor é sempre
passado por referência, logo, qualquer alteração em seus elementos altera a variável
usada como parâmetro na chamada da rotina.
#define TAM_MAX 10
void ImprimeVet (int Tam, int Vet[TAM_MAX])
{
int i;
for (i=0; i< Tam; i++)
{
printf("%d", Vet[i]);
}
}
void main()
{
int Notas[TAM_MAX];
ImprimeVet(TAM_MAX,
Notas); // Passa o vetor 'Notas' como
// parâmetro
}
A passagem dos elementos de um vetor como parâmetro é idêntica à passagem de uma variável. Ou seja, quando a passagem for por valor usa-se vet[i] e quando for por referência usa-se &vet[i].
void Imprime (int N) // função com um
parâmetro por valor
{
printf("%d", N);
}
void Incr (int *N) // função com um parâmetro
por referência
{
*N = *N + 1;
}
void Incr (int *N)
{
int i;
for (i=0; i< Tam; i++)
{
Incr(&Vet[i]); // Note que é preciso colocar o '&' antes
// de Vet[i] pois a função 'Incr' espera um
// parâmetro por REFERÊNCIA
Imprime(Vet[i]); // Note que NÃO se deve colocar
nada antes
// de Vet[i] pois a função 'Imprime' espera um
// parâmetro por VALOR
}
}
#define NLIN 10
#define NCOL 10
int Matriz[NLIN][NCOL];
Preencher uma matriz com um dado
for(i=0; i < NLIN; i++)
for(j=0; j < NCOL; j++)
Matriz[i][j] = 30;
Somar um número a uma linha/coluna de uma matriz
void SomaValorNaColuna(int Valor, int Matriz[NLIN][NCOL], int
Coluna)
{
for(i=0; i < NLIN; i++) // para cada linha de 'Coluna'
Matriz[i][Coluna] = Matriz[i][Coluna] + 30;
}
Criar uma matriz identidade
void CriaIdent(int Colunas, int linhas, int
Matriz[NLIN][NCOL])
{
}
Criar uma matriz transposta
void CriaTransp(int Colunas, int linhas,
int Matriz[NLIN][NCOL], int Trasposta[NLIN][NCOL])
{
}
Cria uma rotina que some duas matrizes
void SomaMatrizes(int Colunas, int linhas,
int MatrizA[NLIN][NCOL], int MatrizB[NLIN][NCOL],
int MatrizSOMA[NLIN][NCOL])
{
}
Cria uma rotina que multiplique duas matrizes
void MultMatrizes(int Colunas, int linhas,
int MatrizA[NLIN][NCOL], int MatrizB[NLIN][NCOL],
int MatrizMULT[NLIN][NCOL])
{
}