Escolar Documentos
Profissional Documentos
Cultura Documentos
Agenda
1. 2. 3. 4. 5. 6. 7.
Relembrando... Matrizes Dinmicas Matriz representada por Vetor Simples Matriz representada por Vetor de Ponteiros Operaes com Matrizes Exerccios de Fixao Reviso
Relembrando...
Quais pontos foram vistos na aula anterior? Alocao Esttica x Alocao Dinmica. Matrizes. Passagem de Matrizes para Funes.
Matrizes Dinmicas
Matrizes Dinmicas As matrizes declaradas estaticamente sofrem das mesmas
limitaes dos vetores: precisamos saber de antemo suas dimenses. Se as dimenses s so conhecidas em tempo de
dinamicamente.
Matrizes Dinmicas
Matriz representada por Vetor Simples Concretamente, para representar uma matriz, precisamos de um espao de memria suficiente para armazenar seus elementos.
Matrizes Dinmicas
Matriz representada por Vetor Simples A estratgia de endereamento para acessar os elementos a seguinte: se quisermos acessar o que seria o elemento mat[i][j] de uma matriz, devemos acessar o elemento v[k], com
Matrizes Dinmicas
Matriz representada por Vetor Simples Esta conta de endereamento intuitiva: para acessarmos os elementos da terceira (i=2) linha da matriz, temos que pular duas linhas de elementos (i*n) e, indexar o elemento da linha com j. Com esta estratgia, a alocao da matriz recai numa alocao de vetor que tem m*n elementos, onde m e n representam as dimenses da matriz.
float *mat; /* matriz m x n representada por um vetor */ ... mat = (float*) malloc(m*n*sizeof(float));
No entanto, somos obrigados a usar uma notao desconfortvel, v[i*n+j], para acessar os elementos, o que pode deixar o cdigo pouco legvel.
Matrizes Dinmicas
Matriz representada por Vetor de Ponteiros Vamos agora apresentar outra estratgia para trabalhar com matrizes dinmicas que usam vetores de ponteiros. Nesta segunda estratgia, cada linha da matriz representada por um
vetor independente.
A matriz ento representada por um vetor de vetores, ou vetor de ponteiros, no qual cada elemento armazena o endereo do primeiro elemento de cada linha.
Matrizes Dinmicas
Matriz representada por Vetor de Ponteiros A figura abaixo ilustra o arranjo da memria utilizada nesta estratgia:
Matrizes Dinmicas
Matriz representada por Vetor de Ponteiros A alocao da matriz agora mais elaborada. Primeiro, temos que alocar o vetor de ponteiros. Em seguida, alocamos cada uma das linhas da matriz, atribuindo seus endereos aos elementos do
Matrizes Dinmicas
Matriz representada por Vetor de Ponteiros A grande vantagem desta estratgia que o acesso aos elementos feito da mesma forma que quando temos uma matriz criada estaticamente, pois, se mat representa uma matriz alocada
implementar
funes
bsicas,
/* Verificar os valores gravados */ for (i=0; i<pa; i++) for (j=0; j<pn; j++) printf ("A Nota %d, do Aluno %d eh: %.2f \n", j+1, i+1, pv[i*pn+j]); printf ("\n");
} printf ("\n");
} return (v);
/* Verificar os valores gravados */ for (i=0; i<pa; i++) for (j=0; j<pn; j++) printf ("A Nota %d, do Aluno %d eh: %.2f \n", j+1, i+1, pv[i][j]); printf ("\n");
} printf ("\n");
dos alunos, esta nota seja gravada como mais um valor na matriz:
a) Como sugesto utilize uma funo do tipo redimensiona_matriz para as duas alteraes, podendo aumentar a linha ou a coluna. 2 - Incremente o exemplo 6.5, incluindo uma funo que possa incluir um novo aluno e suas notas; arrumar a lgica para que aps calcular a mdia dos alunos, esta nota seja gravada como mais um valor na matriz: a) Como sugesto utilize uma funo do tipo redimensiona_matriz para as duas alteraes, podendo aumentar a linha ou a coluna. 3 - Apresente uma soluo e/ou explicao para o problema da liberao
Matrizes
E como seria para trabalharmos com Caracteres? o que veremos no prximo captulo, quando discutirmos: Cadeia de Caracteres; Funes de Manipulao;
Reviso
Quais pontos foram vistos neste captulo? Alocao Esttica x Alocao Dinmica. Matrizes. Passagem de Matrizes para Funes. Matriz representada por Vetor Simples Matriz representada por Vetor de Ponteiros Operaes com Matrizes.
Reviso
Matriz: Matriz representada por vetor bidimensional esttico: elementos acessados com indexao dupla m[ i ][ j ]. Matriz representada por um vetor simples: conjunto bidimensional representado em vetor unidimensional. Matriz representada por um vetor de ponteiros: cada elemento do vetor armazena o endereo do primeiro elemento de cada linha da matriz. Funes para gerncia de memria: realloc permite re-alocar um vetor preservando o contedo dos elementos, que permanecem vlidos aps a re-alocao
Reviso
Matriz: Matriz mat com n colunas representada no vetor v, alocado dinamicamente mat[i][j] como em v[ i * n + j ].
/* exemplo: matriz com m linhas e n colunas */ float *v; /* matriz m x n representada por um vetor */ ...
Reviso
Matriz: Matriz mat representada atravs de vetor de ponteiros, alocado dinamicamente.
/* exemplo: matriz com m linhas e n colunas */ float** mat; ... mat = (float**) malloc(m*sizeof(float*)); for (i=0; i<m; i++) mat[i] = (float*) malloc(n*sizeof(float)); /* exemplo: passagem de matriz para funo */ float acessa (int m, int n, float** mat, int i, int j)
ESTRUTURA DE DADOS