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      

Introdução

            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.


Declaração de Matrizes

        int Vetor[5];   // declara um vetor de 5 posições

        int Matriz[5][3]; // declara uma matriz de 5 linhas e 3 colunas


Acesso aos elementos do vetor

            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"


Exemplos com Vetores

    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
        }    
    }

 


Exemplos com Matrizes


    #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])
{

}