Tabela de conteúdos
Vetores e Matrizes
Definindo Vetores
Sintaxe:
tipo_variável nome_vetor[tamanho];
Define-se como vetor uma variável que possui várias ocorrências de um mesmo tipo. Cada ocorrência é acessada através de um índice. Os vetores também são chamados de matrizes unidimensionais por possuírem somente um índice.
Para definir um vetor em C deve-se indicar a quantidade de ocorrência que o mesmo irá ter colocando na sua definição o valor entre [
]
.
Os índices de um vetor em C irão sempre começar de zero, fato que deve ser lembrado pois geralmente este detalhe é um grande causador de problemas. Portanto, para se acessar a primeira ocorrência de um vetor deve-se indicar o índice zero.
/* programa vetor_matriz_1.c */ #include <stdio.h> #define TAMANHO 5 int main (void) { int i; int iValor_a; int iSoma; int iVetor [TAMANHO]; for (i=0; i < TAMANHO; i++) /* na linguagem C, um vetor sempre começa em zero */ { printf ("Entre com o valor %d:", i + 1); scanf ("%d", &iValor_a); iVetor [i] = iValor_a; } iSoma = 0; for (i=0; i < TAMANHO; i++) { iSoma += iVetor[i]; } printf("Media : %f\n", iSoma / (TAMANHO * 1.0)); /* a multiplicação é uma forma de converter a divisão por inteiro para divisão real */ return 0; }
Definindo Matrizes
Sintaxe:
tipo_variável nome_matriz[quantidade_linhas][quantidade_colunas];
Para se definir matrizes basta adicionar mais uma dimensão na definição da variável. Por compatibilidade com a matemática a primeira dimensão é chamada de linha e a segunda de colunas.
Para se acessar um item de uma matriz deve-se indicar os dois índices.
Veja o exemplo:
/* programa vetor_matriz_2.c */ #include <stdio.h> #define TAMANHO 2 int main(void) { int i,j; int iDeterminante; int iValor_a; int iMatriz [TAMANHO][TAMANHO]; for(i=0; i < TAMANHO; i++) { for(j=0; j < TAMANHO; j++) { printf ("Entre item %d %d:", i + 1, j + 1); scanf ("%d", &iValor_a); iMatriz [i][j] = iValor_a; } } iDeterminante = iMatriz[0][0] * iMatriz [1][1] - iMatriz[0][1] * iMatriz [1][0]; printf ("Determinante : %d\n", iDeterminante); return 0; }
Matrizes n-Dimensionais
Sintaxe:
tipo_variável nome_matriz[dimensão_1][dimensão_2][dimensão_3][dimensão_4];
O conceito de dimensão pode ser estendido para mais de duas dimensões, criando-se matrizes n-dimensionais. Apesar de terem pouco uso prático deve-se lembrar que sempre cada dimensão definida irá ter o índice começando de zero e terminando em uma unidade antes do tamanho especificado para aquela dimensão.
Veja o exemplo:
/* programa vetor_matriz_3.c */ #include <stdio.h> #define DIMENSAO_1 2 #define DIMENSAO_2 5 #define DIMENSAO_3 3 #define DIMENSAO_4 4 int main (void) { int i,j,k,l; int iMatriz[DIMENSAO_1][DIMENSAO_2][DIMENSAO_3][DIMENSAO_4]; /* Codigo para zerar uma iMatriz de 4 dimensoes */ for (i=0; i < DIMENSAO_1; i++) { for (j=0; j < DIMENSAO_2; j++) { for (k=0; k < DIMENSAO_3; k++) { for (l=0; l < DIMENSAO_4; l++) { iMatriz [i][j][k][l] = i+j+k+l; } } } } /* Uma regra que pode-se sempre levar sempre em consideração: para cada dimensão de uma matriz, sempre haverá um laço (normalmente um for). Se houver 4 dimensões, então haverá 4 laços. */ for (i=0; i < DIMENSAO_1; i++) { for (j=0; j < DIMENSAO_2; j++) { for (k=0; k < DIMENSAO_3; k++) { for (l=0; l < DIMENSAO_4; l++) { printf("\nValor para iMatriz em [%d] [%d] [%d] [%d] = %d", i,j,k,l, iMatriz[i][j][k][l]); } } } } return 0; }
Inicializando Matrizes
Sintaxe:
- Para vetores
tipo_variável nome_vetor[5] = {vlr_1, vlr_2, vlr_3, vlr_4, vlr_5 };
- Para Matrizes
tipo_variável nome_matriz[2][2] = { {vlr_11,vlr_12}, {vlr_21,vlr_22} };
Pode-se, ao mesmo tempo em que se define a matriz, inicializá-la com valores, utilizando a seguinte sintaxe.
- Os valores devem ser colocados de acordo com as dimensões
- Cada dimensão deve ser colocada dentro de
{
e}
. - Não pode pular valores, todos os valores devem ser colocados.
Veja o exemplo:
/* programa vetor_matriz_4.c */ #include <stdio.h> int main (void) { int i,j, k; int iMatriz_1 [5] = {1, 2, 3, 4, 5}; int iMatriz_2 [3][3] = {{11, 12, 13}, {21, 22, 23}, {31, 32, 33}}; int iMatriz_3 [3][2][2] = {{{111, 112}, {121, 122}}, {{211, 212}, {221, 222}}, {{311, 312}, {321, 322}}}; printf("Primeira Matriz\n"); for (i=0; i < 5; i++) { printf ("%d ", iMatriz_1 [i]); } printf ("\n\n"); printf ("Segunda Matriz\n"); for (i=0; i < 3; i++) { for (j=0; j < 3; j++) { printf("%d ", iMatriz_2 [i][j]); } printf("\n"); } printf("\n"); printf ("Terceira Matriz\n"); for(i=0; i < 3; i++) { for (j=0; j < 2; j++) { for (k=0; k < 2; k++) { printf("%d ", iMatriz_3 [i][j][k]); } printf("\n"); } printf("\n"); } return 0; }
Matrizes como Parâmetros
Quando se coloca um vetor como parâmetro, a Linguagem C passa somente o seu endereço, não fazendo uma cópia na pilha. Portanto, pode-se definir o parâmetro sem a quantidade de elementos, pois como só será recebido o endereço pode-se acessar toda a matriz através deste endereço.
A mesma regra se aplica a matrizes para o caso da primeira dimensão. Pode-se não informar a quantidade de elementos da primeira dimensão. Devido á construção sintática da linguagem, deve-se porém informar as demais dimensões para que o compilador gere o código corretamente.
Veja o exemplo:
/* programa vetor_matriz_5.c */ #include <stdio.h> void imprime_1(int iVetor[]) /* Não é preciso informar o tamanho do índice.... */ { int i; printf("Primeira Matriz\n"); for (i=0; i < 5; i++) { printf("%d ", iVetor[i]); /* ...mas deve-se tomar cuidado na hora de manipular ao vetor, pois caso o programa “tente” acessar um índice que não existe, o resultado será indesejado. */ } printf("\n\n"); return; } void imprime_2(int iMatriz[][3]) /* Para a primeira dimensão, não é necessário informar a quantidade de índices. Mas para a demais é necessário. */ { int i,j; printf("Segunda Matriz\n"); for (i=0; i < 3; i++) { for (j=0; j < 3; j++) { printf("%d ", iMatriz[i][j]); } printf("\n"); } return; } int main(void) { int iVetor[5] = {1, 2, 3, 4, 5}; int iMatriz[3][3] = {{11, 12, 13}, {21, 22, 23}, {31, 32, 33}}; imprime_1(iVetor); imprime_2(iMatriz); return 0; }
— Marcos Laureano 2008/05/15 16:34