Vetores são um tipo particular de matriz declarada com uma única dimensão


Matrizes e Vetores

Declara��o de Matrizes e Vetores Acesso aos elementos Exemplos com Vetores Passagem de Matrizes e Vetores como Par�metro(por valor)
Passagem dos Elementos de Matrizes e Vetores como Par�metro Acesso a uma linha de uma matriz
Cuidados com os limites dos �ndices de Matrizes e Vetores
Passagem de Matrizes e Vetores como Par�metro(por refer�ncia)
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 uma 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 ideia 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/vetor foi declarado.

            Por defini��o da linguagem C, 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.

    #include <stdio.h>

    #define TAM_MAX 10

    void ImprimeVet (int Tam, int Vet[TAM_MAX])
    {
        int i;
        for (i=0; i< Tam; i++)
        {
          printf("%d", Vet[i]);
        }    
    }

    int main()
    {
      int Notas[TAM_MAX];

        ImprimeVet(TAM_MAX, Notas); // Passa o vetor 'Notas' como
                                     // par�metro

        return 0;

    }


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

}


Acesso a uma linha de uma matriz

Uma linha de uma matriz � vista, em C, como sendo um vetor. O acesso � linha � feito informando apenas a primeira das dimens�es da matriz.
No exemplo a seguir as fun��es
InicializaVet e ImprimeVet s�o usadas para manipular os dados de cada uma das linhas de uma matriz.

#include <stdio.h>

#define NLinhas 10
#define NColunas 5

void ImprimeVet(int Vet[NColunas])
{
    int i;
    for(i = 0; i < NColunas; i++) {
    printf("%d ", Vet[i]);
    }
}
void InicializaVet(int Vet[NColunas], int n)
{
    int i;
    for(i = 0; i < NColunas; i++) {
    Vet[i] = i * n;
    }
}

int main()
{
    int Matriz[NLinhas][NColunas];

    int i;
    for(i = 0; i < NLinhas; i++) {
        InicializaVet(Matriz[i], i);
        printf("\n");
    }

    for(i = 0; i < NLinhas; i++) {
        ImprimeVet(Matriz[i]);
        printf("\n");
    }
    return 0;
}




Cuidados com os limites dos �ndices de Matrizes e Vetores

A linguagem C n�o faz nenhum teste de verifica��o dos �ndices usados para acessar os elementos de um vetor.

Isto significa que, se estes limites n�o forem respeitados, resultados indesejados ser�o obtidos.

No exemplo a seguir, a matriz int M[2][3] � acessada com �ndices fora dos limites corretos, o que gera um resultado diferente do esperado.

#include <stdio.h>

void ImprimeVet(int Vet[3])
{
    int i;
    for(i = 0; i < 3; i++) {
    printf("%d ", Vet[i]);
    }
}

int main()
{
    int Matriz[2][3];

    int i;
    for(i = 0; i < 10; i++)
    {
        Matriz[0][i] = i;  // a matriz tem 3 colunas, mas o la�o do for vai at� 10
    }

    for(i = 0; i < 2; i++) {
        ImprimeVet(Matriz[i]);
    printf("\n");
    }
    return 0;
}

No caso deste exemplo, no primeiro for, ap�s atribuir um valor para a posi��o Matriz[0][2], o c�digo avan�a sobre os dados da segunda linha, mesmo sendo a linha definida como 0, como se pode observar na sa�da do programa, apresentada a seguir:

0 1 2
3 4 5

Outro exemplo, desta vez usando strings, tamb�m ocorre o mesmo problema, neste caso porque a string colocada em cada linha da matriz � maior do que os espa�o dispon�vel para armazen�-la.

#include <stdio.h>
#include <string.h>

void ImprimeVet(int Vet[3])
{
    int i;
    for(i = 0; i < 3; i++) {
    printf("%d ", Vet[i]);
    }
}

int main()
{
    char Texto[2][17];

    int i;

    strcpy(Texto[0], "Aula de Programacao");  // esta string n�o cabe na linha

da matriz
                                             
    strcpy(Texto[1], "em linguagem C."); 

    for(i = 0; i < 2; i++) {
        printf("%s\n", Texto[i]);
    }
    return 0;
}

A sa�da do programa � :

Aula de Programacem linguagem C.
em linguagem C.



Passagem dos Elementos de Matrizes e Vetores como Par�metro (por valor)

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].

    #include <stdio.h>
    #include <string.h>
    void Imprime (int N) // fun��o com um par�metro por valor
    {
        printf("%d", N);
    }

    int main()
    {
        int i;

        int Vet[10];

        for(i = 0; i < 10; i++)
        {
            Vet[i] = i;
        }      
        for (i=0; i< 10; i++)
        {
           Imprime(Vet[i]);// passa o valor de cada um dos elementos do vetor como par�metro
        }
        return 0;
      }


A sa�da do programa � :
0123456789

Sugere-se, antes da leitura das pr�ximas se��es, a consulta � p�gina sobre ponteiros.

Passagem dos Elementos de Matrizes e Vetores como Par�metro (por refer�ncia)

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].

   #include <stdio.h>
   #include <string.h>

    void Imprime (int N) // fun��o com um par�metro por valor
    {
        printf("%d", N);
    }

   void Set (int *N, int i) // fun��o com um par�metro por refer�ncia
    {
      *N = i;
    }

   int main()
    {
        int i;

        int Vet[10];

        for (i=0; i< 10; i++)
        {
           Set(&Vet[i], 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

        }

        return 0;

      }


A sa�da do programa � :
0123456789

O que é um vetor é uma matriz como são declarados?

Vetores e matrizes são coleções de variáveis contínuas na memória e acessadas através de um número de índice. A diferença entre vetores e matrizes é que vetores são de uma única dimensão, enquanto matrizes podem conter várias dimensões.

O que é uma matriz um conjunto de vetores de um único tipo?

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 uma só dimensão.

O que é um vetor na programação?

Um vetor , ou arranjo (= array), é uma estrutura de dados que armazena uma sequência de objetos, todos do mesmo tipo, em posições consecutivas da memória RAM (= random access memory) do computador.

Como se declara um vetor?

Para declarar um vetor chamado vetor , com cinco elementos inteiros, escrevemos: int vetor[5]; Note que a quantidade de elementos de um vetor não pode ser alterada depois que o vetor for declarado. Para criar vetores de tamanho dinâmico, podemos usar ponteiros, que serão abordados mais adiante.