Matrizes. Estruturas de Dados Aula 5: Matrizes. Vetor declaração estática. Vetor declaração dinâmica

Documentos relacionados
Estruturas de Dados Aula 5: Matrizes 23/03/2011

Estruturas de Dados Aula 5: Matrizes

Estruturas de Dados. Módulo 6 Matrizes. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

Referências. Programação de Computadores II. Cap. 6 Matrizes. Tópicos. Alocação Estática versus Dinâmica. Alocação Estática versus Dinâmica

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

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

ALOCAÇÃO DINÂMICA DE MEMORIA Lista 10. A linguagem C/C++ possui recursos para alocação dinâmica de memoria.

Programação I Ponteiros e alocação dinâmica de memória. Prof. Carlos Alberto

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Métodos Computacionais. Vetores e Matrizes Dinâmicas

Introdução a Programação. Ponteiros e Vetores, Alocação Dinâmica

Exercícios Capítulos 5 e 6

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Alocação Estática e Dinâmica. Prof. M.Sc. Mariella Berger

Estruturas de Dados. Profa. Juliana Pinheiro Campos

LINGUAGEM C: ALOCAÇÃO DINÂMICA

1/34 GESTÃO DINÂMICA DE MEMÓRIA

Exercício. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal

Módulo 5 Vetores e Alocação Dinâmica

INF1007: Programação 2. 2 Alocação Dinâmica. 17/02/2014 (c) Dept. Informática - PUC-Rio 1

Aula 24 Ponteiros, vetores e structs

Aula 17: Ponteiros e Alocação Dinâmica em C

Ponteiros e alocação dinâmica de memória. Disciplina de Programação de Computadores I Universidade Federal de Ouro Preto

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica

Alocação Dinâmica. Introdução à Computação

Aula 25: Alocação Dinâmica

Estrutura de Dados. Aula 07 Alocação Dinâmica

Alocação Dinâmica de Memória. Programação II

11a. Aula Ponteiros e Vetores

Introdução à Ciência da Computação I. Alocação Dinâmica. Prof. Claudio Fabiano Motta Toledo

Exercícios. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal

BCC Introdu c ao ` a Programa c ao I Ponteiros Guillermo C amara-ch avez UFOP 1/61

- Mapa de memória de um processo - Ponteiros

Ponteiros de Variáveis

Programação II. Vetores e Alocação Dinâmica. Bruno Feijó Dept. de Informática, PUC-Rio

Programação científica C++

Vetores e Matrizes. Prof. Fabrício Olivetti de França Charles Henrique

Programação de Computadores II. Cap. 5 Alocação Dinâmica

Ponteiros. Baseado nos slides do Prof. Mauro.

BCC Introdu c ao ` a Programa c ao I Ponteiros Guillermo C amara-ch avez UFOP 1/54

Aula 25: Alocação Dinâmica

Laboratório de Programação II

Matrizes. Marina Andretta. 17 de abril de 2017 ICMC-USP. Marina Andretta (ICMC-USP) sme0230-ipc 17 de abril de / 30

Alocação Dinâmica em C

Princípios de Desenvolvimento de Algoritmos MAC122

#include<iostream> using namespace std; main(){ int i=20; int *p; p=&i; cout << "Valor da variável: " << *p << endl; }

Programação II. Vetores e Alocação Dinâmica. Bruno Feijó Dept. de Informática, PUC-Rio

Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores

Programação I Matrizes e Strings. Prof. Carlos Alberto

Estruturas de Dados. Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C

Algoritmos e Estruturas de Dados. Prof. Marcelo Zorzan Profa. Melissa Zanatta

Ponteiros - Parte I. Ponteiros, Ponteiros e Vetores, Algoritmo Bubble Sort, Alocação Dinâmica de Memória

Estrutura de dados 1. Ponteiros

Aula 24: Ponteiros e Alocação Dinâmica

Algoritmos e Programação de Computadores Profs: Ronaldo Castro de Oliveira Anilton Joaquim da Silva

Estruturas Dinâmicas - Ponteiros

SSC304 Introdução à Programação Para Engenharias. Alocação Dinâmica. GE4 Bio

Programação Computacional Aula 16: Alocação Dinâmica de Memória

Ponteiro. Ponteiro. Objetivo. Compreender a definição e dominar a implementação de ponteiros em C.

Estruturas de Dados Aulas 3 e 4: Uso da. 14/03/2011 e 16/03/2011

Centro Universitário Franciscano Curso de Sistemas de Informação Disciplina de algoritmos e programação II. Ponteiros

MCTA028 Programação Estruturada Aula 09: - Ponteiros (parte 2)

Ponteiros. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista

Programação de Computadores II

Linguagem C Ponteiros

AULA 6. Conceitos. Melhores momentos. Conceitos. Conceitos. Conceitos. Conceitos

Introdução à Programação

Fundamentos de Programação

10 a Aula - Operadores de Molde ( Casting ). Atribuição de Memória. Ponteiros. Enumerados. Mestrado em Engenharia Física Tecnológica

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas

Capítulo 08: Matrizes

Estruturas de Dados Aula 2: Estruturas Estáticas. Tipos Básicos. Quantos valores distintos podemos representar com o tipo char?

Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011

BCC202 - Estrutura de Dados I

Modulo 12: alocação dinâmica de memória

Estruturas dinâmicas Ponteiros

Professor: Jó Ueyama Estagiário PAE: Heitor Freitas

Reinaldo Gomes Alocação Dinâmica

Essencialmente, um ponteiro nada mais é do que uma variável que ao invés de conter um valor, contém um endereço de memória.

Laboratório de Introdução à Ciência da Computação I

Ponteiros e Alocação de Memória

Aula 23: Ponteiros Introdução a Programação Túlio Toffolo & Puca Huachi

PONTEIROS E LISTAS. Kalinka Regina Lucas Jaquie Castelo Branco

ANHANGUERA ESTRUTURA DE DADOS AULA 04 MATRIZES, LISTAS E ALOCAÇÃO DINÂMICA. Prof. Thomás da Costa

Linguagem C: Ponteiros - Alocação Dinâmica

Curso de Programação C em Ambientes Linux Aula 05

Fundamentos de Programação

INF 1007 Programação II

Ponteiros em C. Adriano Joaquim de Oliveira Cruz 21 de julho de Instituto de Matemática Departamento de Ciência da Computação UFRJ

A linguagem C permite dois tipos de alocação de memória: Alocação estática e alocação dinâmica.

REVISÃO DE C. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Alocação dinâmica de Memória

MCTA028 Programação Estruturada Aula 09: - Ponteiros (parte 2)

Funções em Linguagem C Parte II

Tipos Abstratos de Dados. Estrutura de Dados

INF1005: Programação 1. Matrizes. 06/06/10 (c) Paula Rodrigues 1

Capítulo 8: Matrizes

Transcrição:

Matrizes Estruturas de Dados Aula 5: Matrizes 22/03/2010 Conjuntos bidimensionais declarados estaticamente float mat[4][3]; Declaração de um vetor (estática ou dinâmica?) int v[10] int *v; v = (int*) malloc (n*sizeof(int)); v = (int*) realloc (v, m*sizeof(int)); Vetor declaração estática int v[10] Precisamos saber o tamanho do vetor antes da execução do programa v armazena o endereço de memória ocupado pelo primeiro elemento do vetor *v e v[0] *(v+1) e v[1] Escopo de declaração local Se o vetor for declarado dentro da função, não pode ser acessado fora da função Vetor declaração dinâmica int *v; v = (int*) malloc (n*sizeof(int)); Tamanho do vetor pode ser definido em tempo de execução do programa Variável ponteiro aponta para a primeira posição do vetor Área ocupada pelo vetor permanece fora das funções até que seja liberada explicitamente por free()

Matrizes float mat[4][3] = {{5.0,10.0,15.0}, {20.0,25.0,30.0}, {35.0,40.0,45.0}, {50.0,55.0,60.0}}; Vetores bidimensionais (matrizes) Elementos acessados pela indexação m[i][j] i acessa linha e j coluna Elemento inicial m[0][0] m representa um ponteiro para o primeiro vetor-linha, composto por 3 elementos. Pode ser inicializada na declaração: float mat [4][3] = {1,2,3,4,5,6,7,8,9,10,11,12}; float mat [][3] = {1,2,3,4,5,6,7,8,9,10,11,12}; Passagem para funções Tipo passado para função é o vetor linha void f (, float (*mat)[3], ); void f (, float mat [][3], ); Matrizes Dinâmicas Conjuntos bidimensionais não podem ser alocados dinâmicamente no C Abstrações conceituais com vetores são necessárias para alocarmos matrizes dinâmicamente

Matrizes representadas por vetor simples Matriz é representada por um vetor unidimensional Primeiras posições do vetor armazenam os elementos da primeira linha As posições seguintes armazenam da segunda linha, e assim por diante Conceitualmente, estamos trabalhando com uma matriz Concretamente, estamos representando um vetor unidimensional Exige disciplina para acessar os elementos Matrizes representadas por vetor simples mat [i][j] V[k], com k = i*n+j, onde n é o número de colunas da matriz Matriz representada por vetor simples mat [i][j] mapedo para v[i*n + j] m e n são as dimensões da matriz (de tamanho m*n elementos) float *mat; mat = (float*) malloc (m*n*sizeof(float)); Matriz representada por vetor de ponteiros Cada linha da matriz é representada por um vetor separado A matriz é representada por um vetor de vetores Vetor de ponteiros Cada elemento do vetor armazena o endereço de memória do primeiro elemento de cada linha

Matriz representada por vetor de ponteiros Matriz representada por vetor de ponteiros Precisamos alocar memória para o vetor de ponteiros e atribuir os endereços das linhas da matriz int i; float **mat; /*vetor de ponteiros*/ mat = (float**)malloc (m*sizeof(float*)); mat[i] = (float*) malloc (n*sizeof(float)); Matriz representada por vetor de ponteiros Para liberar o espaço de memória alocado free (mat[i]); free (mat); Operações com Matrizes Exemplo: função transposta Dada uma matriz, cria dinâmicamente a matriz transposta Matriz de entrada: mat (m x n) Matriz de saída: trp Uma matriz Q é a matriz transposta de M, se Qij = Mji float* transposta (int m, int n, float* mat); float** transposta (int m, int n, float** mat);

Exemplo matriz com vetor simples float* transposta (int m, int n, float* mat); { int i, j; } float* trp; trp = (float*) malloc (n*m*sizeof (float)); for (j=0; j<n; j++) trp[j*m+i] = mat [i*n+j]; return trp; Exemplo matriz com vetor de ponteiros float** transposta (int m, int n, float** mat); { int i, j; float** trp; trp = (float**) malloc (n*sizeof (float*)); for (i=0; i<n; i++) trp[i] = (float*) malloc(m*sizeof(float)); for (j=0; j<n; j++) trp[j][i] = mat [i][j]; return trp; } Resumindo Matriz representada por vetor bidimensional estático: elementos acessados com indexação 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 endereço do primeiro elemento de cada linha da matriz Exercício 1 Implemente a função multiplicação de matriz usando a abordagem de alocação dinâmica de matrizes (vetor de ponteiros) Multiplicação de matrizes: entrada: matriz A de dimensão m x p matriz B de dimensão p x n saída: matriz M de dimensão m x n, definida como: para i = 0 até m - 1, de 1 em 1 para j = 0 até n - 1, de 1 em 1 M[ i, j ] = 0 para k = 0 até p - 1, de 1 em 1 M[ i, j ] = M[ i, j ] + A[ i, k ] * B[ k, j ]

Resposta Resposta Exercício 2 Implemente a função multiplicação usando a abordagem de alocação dinâmica de matrizes (representada por vetor simples)