Algoritmos e Estruturas de Dados/Vetores e Matrizes

Vetor (Array)

editar

Em computação um Vetor (Array) ou arranjo é o nome de uma matriz unidimensional considerada a mais simples das estruturas de dados. Geralmente é constituída por dados do mesmo tipo (homogêneos)e tamanho que são agrupados continuamente na memória e acessados por sua posição (indíce - geralmente um número inteiro) dentro do vetor. Na sua inicialização determina-se o seu tamanho que geralmente não se modifica mesmo que utilizemos menos elementos.

Abaixo temos o exemplo de um vetor. Os valores internos seriam os dados alocados no vetor, enquanto seu tamanho é dado pelo número de casas disponíveis (no caso 8) e o índice representa a posição do dado no vetor ( por exemplo podemos definir que 0 tem o índice 1, 2 tem índice 2, 8 tem índice 3 e assim sucessivamente).

0 2 8 9 10 11 15 18
  • Declaração e inicialização de um vetor

A declaração de um vetor em português estruturado pode ser da seguinte forma:

                             Nome_Vetor:vetor[tamanho]tipo

Assim temos como exemplo de declarações:

                             VECTOR:vetor [10] numérico
                             MEDIA: vetor [3] numérico

Tomemos o primeiro exemplo (inteiro vector [10]) onde declaramos que estamos criando um vetor para números chamado de VECTOR com dez posições. Desta forma o computador entende que deve alocar 10 espaços para 10 números inteiros no computador que serão inseridos conforme especificado pelo programa . Por exemplo, vamos construir dois laços de repetição:

                       VECTOR:vetor [10] numérico
                       INDICE:numérico
                       INDICE<-0
                       para INDICE de 0 até VECTOR<9 passo 1 faça
                       exibe Escreva um número 
                       recebe VECTOR [INDICE]
                       fecha_para
                       para INDICE de 0 até VECTOR<9 passo 1 faça
                       exibeVECTOR [INDICE]
                       recebe VECTOR [INDICE]
                       fecha_para

Conforme vimos, o primeiro laço para vai entender que ao entrar índice<-0 , quando o usuário digitar o primeiro valor será alocado este valor em vector[índice].Quando chegar ao final do para ele fará o teste. Se o índice continuar menor do que 10 ele entra no laço e recebe o segundo valor, chegando ao final do laço e fazendo novamente o processo até obter os dez valores quando sai do laço.

No segundo laço acessamos estes dados e exibimos na tela aplicando o mesmo príncipio do primeiro laço.

Operações com Vetores

editar

Podemos trabalhar com vetores numéricos, executando operações sobre eles da mesma forma como executaríamos com variáveis numéricas comuns. Devemos assumir que ao declararmos um determinado vetor[índice], com um índice específico, estamos fazendo referência a um número.

Matrizes

editar

Matrizes são arranjos ordenados que ao contrário dos vetores podem ter n dimensões, sendo que estas dimensões lhes dão o nome n-dimensional . Uma matriz de duas dimensões será chamada bi-dimensional, uma de três dimensões tri-dimensional e assim consecutivamente. Funciona praticamente da mesma forma que um vetor exceto que utilizaremos o número n de índices para acessar um dado que queremos. Para efeitos de estudo por enquanto nos limitaremos somente às matrizes bidimensionais (duas dimensões linha X colunas). Assim se possuimos uma matriz bidimensional de duas linhas e duas colunas:

3 4
5 6

Consideramos que para acessarmos o valor 3, localizamos o índice por sua linha (1) e coluna (1) , deste modo seu índice é (1,1). O valor quatro por exemplo será (1, 2).

  • Declaração e inicialização de um matriz

A declaração de uma matriz em português estruturado pode ser da seguinte forma:

tipo Nome_Matriz [tamanho_linha][tamanho_coluna]

Assim temos como exemplo de declarações:

                                    inteiro matriz [10][10] 
                                    real media [3][3]

Em uma matriz como o inteiro matriz que criamos acima é criado espaço para 100 elementos (10x10).Criaremos abaixo um algoritmo em que o usuário digita 100 elementos e estes aparecem na tela.

inteiro matriz [10][10]
inteiro i , j (i será o índice linha e j o índice coluna)
para (início: i=0 fim i<10 alteraçãoi+1 )
para (início: j=0 fim j<10 alteraçãoj+1 )
exibe Escreva um número
recebe matriz [i][j]
fecha_para
fecha_para
para (início: i=0 fim i<10 alteraçãoi+1 )
para (início: j=0 fim j<10 alteraçãoj+1 )
exibe Estes são os números digitados:
exibe matriz [i][j]
fecha_para
fecha_para

Operações com matrizes

editar

Soma entre matrizes

editar
inteiro matriz_A [1,,2,1,,[2]
inteiro matriz_B [2][2]
inteiro matriz_soma [2][2]
para (início: i=0 fim i<2 alteraçãoi+1 )
para (início: j=0 fim j<10 alteraçãoj+1 )
matriz_soma[i][j]= matriz_A [i][j]+ matriz_B [i][j]
fim_para
fim_para

Multiplicação por um escalar

editar
inteiro escalar
inteiro matriz_A [2][2]
inteiro matriz_multiplicação [2][2]
para (início: i=0 fim i<2 alteraçãoi+1 )
para (início: j=0 fim j<2 alteraçãoj+1 )
matriz_multiplicação[i][j]= escalar * matriz_A [i][j]
fim_para
fim_para

Multiplicação entre matrizes

editar
inteiro matriz_A [2][2]
inteiro matriz_B [2][2]
inteiro matriz_multiplicacao [2][2]
para (início: i=0 fim i<2 alteraçãoi+1 )
para (início: j=0 fim j<2 alteraçãoj+1 )
para (início: k=0 fim k<2 alteraçãok+1 )
matriz_multiplicacao[i][j]= matriz_multiplicacao [i][j]+ matriz_A [i][k]*matriz_B[k][j];
fim_para;
fim_para;

Calcular a diagonal e a transposta

editar
inteiro matriz_A [2][2];
inteiro diagonal=0;
para (início: i=0 fim i<2 alteraçãoi+1 );
para (início: j=0 fim j<10 alteraçãoj+1 );
se (i=j);
diagonal= diagonal+ matriz_A [i][j];
fim_se;
fim_para;
fim_para;
inteiro matriz_A [2][2];
inteiro inversa=0;
inteiro maximo=2;
para (início: i=0 fim i<2 alteraçãoi+1 );
para (início: j=0 fim j<2 alteraçãoj+1 );
se (i+j=(maximo*2)-1);
inversa= inversa + matriz_A [i][j];
fim_se;
fim_para;
fim_para;

Exemplo

editar
#include<stdio.h>
#include<stdlib.h>

#define t 3

int main(){
    int mat[t][t], i, j;
    for(i = 0; i<t; i++){
        for(j = 0; j<t; j++){
            printf("Digite o elemento mat[%d][%d]", i, j);
            scanf("%d", &mat[i][j]);
        }
    }
    for(i = 0; i<t; i++){

            for(j=0; j<t; j++){
                printf("mat[%d][%d] = %d, ", i, j, mat[i][j]);
            }
            printf("\n");

    }

    system("pause");
    return 0;
}

Ligações externas

editar

Bibliografia

editar