Algoritmos e Estruturas de Dados/Vetores e Matrizes
Vetor (Array)
editarEm 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
editarPodemos 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
editarMatrizes 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
editarSoma 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;
}