TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

Matrizes manipuladoras representadas por conjuntos bidimensionais de valores numéricos

Pesquisas Acadêmicas: Matrizes manipuladoras representadas por conjuntos bidimensionais de valores numéricos. Pesquise 862.000+ trabalhos acadêmicos

Por:   •  23/11/2014  •  Pesquisas Acadêmicas  •  2.571 Palavras (11 Páginas)  •  244 Visualizações

Página 1 de 11

8. Matrizes

W. Celes e J. L. Rangel

Já discutimos em capítulos anteriores a construção de conjuntos unidimensionais através do

uso de vetores. A linguagem C também permite a construção de conjuntos bi ou

multidimensionais. Neste capítulo, discutiremos em detalhe a manipulação de matrizes,

representadas por conjuntos bidimensionais de valores numéricos. As construções

apresentadas aqui podem ser estendidas para conjuntos de dimensões maiores.

8.1. Alocação estática versus dinâmica

Antes de tratarmos das construções de matrizes, vamos recapitular alguns conceitos

apresentados com vetores. A forma mais simples de declararmos um vetor de inteiros em C

é mostrada a seguir:

int v[10];

ou, se quisermos criar uma constante simbólica para a dimensão:

#define N 10

int v[N];

Podemos dizer que, nestes casos, os vetores são declarados “estaticamente” 1. A variável

que representa o vetor é uma constante que armazena o endereço ocupado pelo primeiro

elemento do vetor. Esses vetores podem ser declarados como variáveis globais ou dentro do

corpo de uma função. Se declarado dentro do corpo de uma função, o vetor existirá apenas

enquanto a função estiver sendo executada, pois o espaço de memória para o vetor é

reservado na pilha de execução. Portanto, não podemos fazer referência ao espaço de

memória de um vetor local de uma função que já retornou.

O problema de declararmos um vetor estaticamente, seja como variável global ou local, é

que precisamos saber de antemão a dimensão máxima do vetor. Usando alocação dinâmica,

podemos determinar a dimensão do vetor em tempo de execução:

int* v;

v = (int*) malloc(n * sizeof(int));

Neste fragmento de código, n representa uma variável com a dimensão do vetor,

determinada em tempo de execução (podemos, por exemplo, capturar o valor de n

fornecido pelo usuário). Após a alocação dinâmica, acessamos os elementos do vetor da

mesma forma que os elementos de vetores criados estaticamente. Outra diferença

importante: com alocação dinâmica, declaramos uma variável do tipo ponteiro que

posteriormente recebe o valor do endereço do primeiro elemento do vetor, alocado

dinamicamente. A área de memória ocupada pelo vetor permanece válida até que seja

explicitamente liberada (através da função free). Portanto, mesmo que um vetor seja

1 O termo “estático” aqui refere-se ao fato de não usarmos alocação dinâmica.

Estruturas de Dados –PUC-Rio 8-2

criado dinamicamente dentro da função, podemos acessá-lo depois da função ser finalizada,

pois a área de memória ocupada por ele permanece válida, isto é, o vetor não está alocado

na pilha de execução. Usamos esta propriedade quando escrevemos a função que duplica

uma cadeia de caracteres (string): a função duplica aloca um vetor de char

dinamicamente, preenche seus valores e retorna o ponteiro, para que a função que chama

possa acessar a nova cadeia de caracteres.

A linguagem C oferece ainda um mecanismo para re-alocarmos um vetor dinamicamente.

Em tempo de execução, podemos verificar que a dimensão inicialmente escolhida para um

vetor tornou-se insuficiente (ou excessivamente grande), necessitando um redimensionamento.

A função realloc da biblioteca padrão nos permite re-alocar um vetor,

preservando o conteúdo dos elementos, que permanecem válidos após a re-alocação (no

fragmento de código abaixo, m representa a nova dimensão do vetor).

v = (int*) realloc(v, m*sizeof(int));

Vale salientar que, sempre que possível, optamos por trabalhar com vetores criados

estaticamente. Eles tendem a ser mais eficientes, já que os vetores alocados dinamicamente

têm uma indireção a mais (primeiro acessa-se o valor do endereço armazenado na variável

ponteiro para então acessar o elemento do vetor).

8.2. Vetores bidimensionais – Matrizes

A linguagem C permite a criação de vetores bidimensionais, declarados estaticamente. Por

exemplo, para declararmos uma matriz de valores reais com 4 linhas e 3 colunas, fazemos:

float mat[4][3];

Esta declaração reserva um espaço de memória necessário para armazenar os 12 elementos

da matriz, que são armazenados de maneira contínua, organizados linha a linha.

Figura 8.1: Alocação dos elementos de uma matriz.

5.0 10.0 15.0

20.0 25.0 30.0

35.0 40.0 45.0

50.0 55.0 60.0

j

i

60.0

55.0

50.0

...

Baixar como (para membros premium)  txt (19.2 Kb)  
Continuar por mais 10 páginas »
Disponível apenas no TrabalhosGratuitos.com