Ferramentas do usuário

Ferramentas do site


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:
 +
 +''[[tipos_dados|tipo_variável]] [[variavel_definicao|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.
 +
 +<code c>
 +/* 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;
 +}
 +</code>
 +
 +===== Definindo Matrizes =====
 +
 +Sintaxe:
 +
 +''[[tipos_dados|tipo_variável]] [[variavel_definicao|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:
 +
 +<code c>
 +/* 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;
 +}
 +</code>
 +
 +===== Matrizes n-Dimensionais =====
 +
 +Sintaxe:
 +''[[tipos_dados|tipo_variável]] [[variavel_definicao|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:
 +
 +<code c>
 +/* 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;
 +}
 +</code>
 +
 +
 +===== Inicializando Matrizes =====
 +
 +Sintaxe:
 +
 +  * Para vetores
 +''[[tipos_dados|tipo_variável]] [[variavel_definicao|nome_vetor]][5] = {vlr_1, vlr_2, vlr_3, vlr_4, vlr_5 };''
 +
 +  * Para Matrizes
 +''[[tipos_dados|tipo_variável]] [[variavel_definicao|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:
 +
 +<code c>
 +/* 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;
 +}
 +</code>
 +
 +===== 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 <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;
 +}
 +</code>
 +
 + --- //[[marcos@laureano.eti.br|Marcos Laureano]] 2008/05/15 16:34//