vetor_matriz
Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
| — | vetor_matriz [2023/09/12 16:14] (atual) – criada - edição externa 127.0.0.1 | ||
|---|---|---|---|
| Linha 1: | Linha 1: | ||
| + | ====== Vetores e Matrizes ====== | ||
| + | ===== Definindo Vetores ===== | ||
| + | |||
| + | Sintaxe: | ||
| + | |||
| + | '' | ||
| + | |||
| + | ---- | ||
| + | |||
| + | 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. | ||
| + | |||
| + | <code c> | ||
| + | /* programa vetor_matriz_1.c */ | ||
| + | |||
| + | #include < | ||
| + | #define TAMANHO | ||
| + | |||
| + | 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 (" | ||
| + | scanf (" | ||
| + | iVetor [i] = iValor_a; | ||
| + | } | ||
| + | |||
| + | iSoma = 0; | ||
| + | |||
| + | for (i=0; i < TAMANHO; i++) | ||
| + | { | ||
| + | iSoma += iVetor[i]; | ||
| + | } | ||
| + | | ||
| + | |||
| + | | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== Definindo Matrizes ===== | ||
| + | |||
| + | Sintaxe: | ||
| + | |||
| + | '' | ||
| + | |||
| + | ---- | ||
| + | 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: | ||
| + | |||
| + | <code c> | ||
| + | /* programa vetor_matriz_2.c */ | ||
| + | |||
| + | #include < | ||
| + | #define TAMANHO | ||
| + | |||
| + | int main(void) | ||
| + | { | ||
| + | int i,j; | ||
| + | int iDeterminante; | ||
| + | int iValor_a; | ||
| + | int iMatriz [TAMANHO][TAMANHO]; | ||
| + | |||
| + | | ||
| + | { | ||
| + | for(j=0; j < TAMANHO; j++) | ||
| + | { | ||
| + | | ||
| + | scanf (" | ||
| + | | ||
| + | } | ||
| + | } | ||
| + | | ||
| + | | ||
| + | |||
| + | | ||
| + | | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== Matrizes n-Dimensionais ===== | ||
| + | |||
| + | Sintaxe: | ||
| + | '' | ||
| + | |||
| + | ---- | ||
| + | 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: | ||
| + | |||
| + | <code c> | ||
| + | /* programa vetor_matriz_3.c */ | ||
| + | |||
| + | #include < | ||
| + | #define DIMENSAO_1 | ||
| + | #define DIMENSAO_2 | ||
| + | #define DIMENSAO_3 | ||
| + | #define DIMENSAO_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++) | ||
| + | { | ||
| + | | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | /* Uma regra que pode-se sempre levar sempre em consideração: | ||
| + | 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++) | ||
| + | { | ||
| + | | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | return 0; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Inicializando Matrizes ===== | ||
| + | |||
| + | Sintaxe: | ||
| + | |||
| + | * Para vetores | ||
| + | '' | ||
| + | |||
| + | * Para Matrizes | ||
| + | '' | ||
| + | |||
| + | ---- | ||
| + | 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 '' | ||
| + | * Não pode pular valores, todos os valores devem ser colocados. | ||
| + | |||
| + | Veja o exemplo: | ||
| + | |||
| + | <code c> | ||
| + | /* programa vetor_matriz_4.c */ | ||
| + | |||
| + | #include < | ||
| + | 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}}}; | ||
| + | |||
| + | | ||
| + | for (i=0; i < 5; i++) | ||
| + | { | ||
| + | printf ("%d ", iMatriz_1 [i]); | ||
| + | } | ||
| + | | ||
| + | |||
| + | | ||
| + | for (i=0; i < 3; i++) | ||
| + | { | ||
| + | for (j=0; j < 3; j++) | ||
| + | { | ||
| + | | ||
| + | } | ||
| + | printf(" | ||
| + | } | ||
| + | | ||
| + | |||
| + | | ||
| + | | ||
| + | { | ||
| + | for (j=0; j < 2; j++) | ||
| + | { | ||
| + | for (k=0; k < 2; k++) | ||
| + | { | ||
| + | printf(" | ||
| + | } | ||
| + | | ||
| + | } | ||
| + | printf(" | ||
| + | } | ||
| + | | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== 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: | ||
| + | <code c> | ||
| + | /* programa vetor_matriz_5.c */ | ||
| + | #include < | ||
| + | |||
| + | void imprime_1(int iVetor[]) /* Não é preciso informar o tamanho do índice.... */ | ||
| + | { | ||
| + | int i; | ||
| + | | ||
| + | for (i=0; i < 5; i++) | ||
| + | { | ||
| + | printf(" | ||
| + | | ||
| + | } | ||
| + | | ||
| + | |||
| + | | ||
| + | } | ||
| + | |||
| + | 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; | ||
| + | | ||
| + | for (i=0; i < 3; i++) | ||
| + | { | ||
| + | for (j=0; j < 3; j++) | ||
| + | { | ||
| + | | ||
| + | } | ||
| + | printf(" | ||
| + | } | ||
| + | | ||
| + | } | ||
| + | |||
| + | int main(void) | ||
| + | { | ||
| + | int iVetor[5] = {1, 2, 3, 4, 5}; | ||
| + | int iMatriz[3][3] = {{11, 12, 13}, | ||
| + | {21, 22, 23}, | ||
| + | {31, 32, 33}}; | ||
| + | |||
| + | | ||
| + | | ||
| + | |||
| + | | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | --- // | ||