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

Documentos relacionados
Vetores e matrizes. MCTA028 Programação Estruturada. Material preparado a partir de slides dos profs. Jesús Mena-Chalco e Fabrício Olivetti

Ponteiros. prof. Fabrício Olivetti de França

Linguagem C Ponteiros

Ponteiros e Tabelas. K&R: Capítulo 5

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

Linguagem de Programação C. Ponteiros

Funções em Linguagem C Parte II

Computação 2. Aula 7. Profª. Fabiany Ponteiros

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

11a. Aula Ponteiros e Vetores

Estruturas. struct são coleções de dados heterogêneos agrupados em uma mesma estrutura de dados. Ex: armazenar as coordenadas (x,y) de um ponto:

Programação 11543: Engenharia Informática 6619: Tecnologias e Sistemas de Informação. Cap. 8 Endereçamento de Memória Endereçamento de Memória

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

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

Estrutura de dados 2. Ponteiro. Prof. Jesuliana N. Ulysses

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.

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

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

Algoritmos e Estruturas de Dados I (AEDI) Introdução - AEDI. Prof. Paulo Henrique Pisani

ponteiros INF Programação I Prof. Roberto Azevedo

Estruturas de Dados Aula 5: Matrizes

Aula 06 Introdução à Programação Matrizes

Métodos Computacionais. Vetores e Matrizes Dinâmicas

Programação Estruturada Prof. Rodrigo Hausen Organização e Gerenciamento de Memória

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

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

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

Estruturas de Dados. Profa. Juliana Pinheiro Campos

Estrutura de dados 1. Ponteiros

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

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE

3. Linguagem de Programação C

Ponteiros. Ponteiros. Ponteiros. Ponteiros. Ponteiros. Introdução a Programação. Profa. Roseli Romero

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

A sintaxe para se declarar uma variável do tipo ponteiro é dada por:

Linguagem C (continuação)

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória

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

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

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

Apontadores/ponteiros

Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação. Estruturas em C

Programação científica C++

Programação 5374 : Engenharia Informática 6638 : Tecnologias e Sistemas de Informação. Cap. 7 Arrays. Arrays

1. Revisão de Vetores, Ponteiros, Funções e Estruturas em C

prim = A ; prim = &A[0];

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

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

INF 1620 P1-13/09/02 Questão 1 Nome:

Laboratório de Programação II

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

Introdução a Programação. Ponteiros e Passagem de Argumentos por Referência

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

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

Estruturas de Dados Homogêneas (Vetores e Matrizes) e Ponteiros em C

Alocação Dinâmica em C

Linguagem C. Ponteiros. Alex Vidigal Bastos.

Mais sobre Ponteiros em C

Introdução à Computação

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

Ponteiros. Baseado nos slides do Prof. Mauro.

Computação 2. Aula 5. Profª. Fabiany defines vetor, strings e matriz por parâmetros de função

Computação eletrônica:

ESTRUTURA DE DADOS (TCC )

Programação Estruturada

x=0; y=x+1; x=&y+2; x 1000 y 1004

Linguagem de Programação C. Prof. Fabrício Olivetti de França

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

Matrizes em C. Lucas Ferrari de Oliveira Professor Adjunto. Universidade Federal do Paraná

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013

Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013

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

Declarando e Utilizando Ponteiros. Para declarar um ponteiro temos a seguinte forma geral: tipo_do_ponteiro *nome_da_variável;

Linguagem C. André Tavares da Silva.

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

Ponteiros de Variáveis

Aula 20 - Ponteiros. Prof. Laura Silva de Assis. Engenharia de Computação. CEFET/RJ - Centro Federal de Educação Tecnológica Celso Suckow da Fonseca

Aula 24 Ponteiros, vetores e structs

Aula 10 Oficina de Programação Matrizes. Profa. Elaine Faria UFU

Linguagem C: Ponteiros. Prof. Tiago Alves de Oliveira

Introdução a Ponteiros e Vetores em C

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

3. Linguagem de Programação C

Declarações. Tipos de Acesso, Inicialização e Constantes

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

Linguagem C: Ponteiros. Prof. Leonardo Barreto Campos 1

ALOCAÇÃO DINÂMICA DE MEMÓRIA

- Mapa de memória de um processo - Ponteiros

Ponteiros. Considere um carteiro recém-chegado na vila Na vila, a referência para se encontrar a casa é pelo morador

Estruturas de Dados. Módulo 4 Funções. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

Introdução à Linguagem C

Ponteiros. Embora o programador não tenha acesso ao endereço de uma variável, existem algumas situações onde é necessário a utilização deste endereço.

Revisão da Linguagem C Prof. Evandro L. L. Rodrigues

Aula 27: Estruturas heterogêneas e alocação dinâmica

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

Transcrição:

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

Vetores Estáticos Um vetor em C é declarado como: tipo nome[tamanho]; 2

Vetores Estáticos /* vetor de nome v1 com 100 elementos do tipo inteiro */ int v1[100]; /* vetor de nome v1 com 32 elementos do tipo char */ char palavra[32]; 3

Vetores Estáticos Os vetores em C são chamados de array que é um container de elementos de mesmo tipo com tamanho fixo. Uma vez criado, não se pode alterar seu tamanho. 4

Endereçamento de Memória Quando uma array é criada o programa reserva (aloca) o espaço total da memória necessário definido por: tamanho * sizeof(tipo) 5

Endereçamento de Memória A variável receberá como valor o endereço da memória que inicia o espaço reservado da array: 9 bytes 0x1120 0x1121 0x1122 0x1123 0x1124 0x1125 0x1126 0x1127 0x1128 0x1129 6

Endereçamento de Memória Endereços geralmente são representados como números hexadecimais. Cada unidade representando um byte. 9 bytes 0x1120 0x1121 0x1122 0x1123 0x1124 0x1125 0x1126 0x1127 0x1128 0x1129 7

Endereçamento de Memória O espaço reservado é representado por: INICIO:OFFSET (tamanho) 0x1120:0009 9 bytes 0x1120 0x1121 0x1122 0x1123 0x1124 0x1125 0x1126 0x1127 0x1128 0x1129 8

Endereçamento de Memória Nesse exemplo a array receberá o valor 0x1120 representando o início da array. 9 bytes 0x1120 0x1121 0x1122 0x1123 0x1124 0x1125 0x1126 0x1127 0x1128 0x1129 9

Endereçamento de Memória int x[100]; printf( %d, x); x contém o endereço de memória do primeiro elemento. 10

Endereçamento de Memória Seguindo o exemplo anterior em que x = 0x1120, quando acessamos um elemento da array: X[4] = 10; O compilador realizar o cálculo 0x1120 + sizeof(tipo)*4 e retorna sizeof(tipo) bytes contidos na memória. 11

Endereçamento de Memória char x[9]; X[3]; 0x1120 + 3*1 = 0x1123 9 bytes 0x1120 0x1121 0x1122 0x1123 0x1124 0x1125 0x1126 0x1127 0x1128 0x1129 12

Endereçamento de Memória float x[2]; X[1]; 0x1120 + 1*4 = 0x1124 8 bytes 0x1120 0x1121 0x1122 0x1123 0x1124 0x1125 0x1126 0x1127 0x1128 13

Endereçamento de Memória Por essa razão o primeiro elemento de uma array é o 0. 14

Endereçamento de Memória Uma outra forma de acessar um elemento de uma array é calculando o endereço diretamente: int x[10]; printf( O elemento de índice 3 é: %d\n, *(x+3)); 15

Endereçamento de Memória Quando calculamos x+3 o compilador automaticamente traduz para x+3*sizeof(int), e retorna o endereço de memória correspondente. O operador unário * indica que queremos o conteúdo daquele endereço de memória. 16

Arrays como Parâmetros Para receber uma array como parâmetro fazemos: tipo funcao( tipo array[ ] ); 17

Arrays como Parâmetros Como o tipo array não carrega consigo seu tamanho, costuma-se fazer: tipo funcao( tipo array[ ], int tamanho ); 18

Arrays como Parâmetros float media( int dados[ ], int tamanho ) { int i; float media = 0.0; for( i = 0; i<tamanho; i++ ) { media += dados[i]; } return media/tamanho; } 19

Arrays como Parâmetros As arrays, diferente dos tipos básicos, são passadas para as funções como referência, ou seja, a função recebe o endereço de memória dela. Por causa disso, qualquer alteração feita nela será alterada na variável original. 20

Arrays como Parâmetros void muda_array( int dados[ ], int tamanho ) { dados[2] = 3; } 21

Arrays como Parâmetros int main ( ) { int meus_dados[4] = {1, 1, 1, 1}; muda_array(meus_dados, 4); printf( %d\n, meus_dados[2]); return 0; } 22

Exercício 01 Implemente a função: int produto_interno(int x[ ], int y[], int n) { }

Exercício 01 Qual o total de memória utilizada por sua função? Quantas instruções são executadas?

Arrays multi-dimensionais Similarmente, podemos definir uma array com mais do que uma dimensão: /* matriz 5x5 */ int A[5][5]; /* 10 documentos contendo 20 palavras de até 12 caracteres */ char corpus[10][20][12];

Endereçamento de Memória Notem que arrays multi-dimensionais são, na verdade, arrays unidimensionais em que o compilador calcula automaticamente a posição da coordenada. 26

Array Estática int array [N][M]; Ocupa um segmento contínuo de N*M*sizeof(int) bytes. Isso nos permite fazer *( &(array[0][0]) + i*m + j ) para acessar o elemento (i,j) da array.

Array Estática Esse tipo de array pode ser passada para uma função cuja declaração é: funcao( int array[ ][M] ); Ou seja, devemos especificar as dimensões da array na declaração. Isso é necessário para que o compilador transforme a indexação em aritmética de ponteiros.

Endereçamento de Memória char x[2][4]; 8 bytes 8 bytes (0,0) (0,1) (1,0) (1,1) (2,0) (2,1) (3,0) (3,1)

Endereçamento de Memória x[i][j] = *(x + i*colunas + j) x[1][0] = *(x + 1*4 + 0) = *(0x1120 + 4) 8 bytes (0,0) (0,1) (0,2) (0,3) (1,0) (1,1) (1,2) (1,3)

Arrays como Parâmetros /* média de uma array com 2 colunas */ float media (int dados[ ][2], int m) {... for( i = 0; i<m; i++ ) { for( j=0; j<2; j++ ) { media += dados[i][j]; } }... 31

Exercício 02 Implemente a função: int distancia_euclidiana(int x[ ][2], int n, int i) { } Que retorna a média das distâncias euclidianas de x[i] com todos os outros pontos.

Exercício 02 Qual o total de memória utilizada por sua função? Quantas instruções são executadas?

Strings Em C não existe o tipo string! Para criar uma string utilizamos uma array de char. Cada elemento da array corresponde a um caractere da string, o último caractere deve ser o `\0` que tem valor 0. 34

Strings char string[100] = Ola mundo! ; printf( %s\n, string); 35

Strings char string[100]; string[0] = O ; string[1] = l ; string[2] = a ; printf( %s\n, string); 36

Strings char string[100]; string[0] = O ; string[1] = l ; string[2] = a ; string[3] = \0 ; printf( %s\n, string); 37

Strings Em C uma sequência de caracteres, ou string, é definida entre aspas duplas. Um único caractere é definido por aspas simples. 38

Exercício 03 Implemente a função: int length(char s[ ]) { } Que retorna o tamanho da string s.

Exercício 03 Qual o total de memória utilizada por sua função? Quantas instruções são executadas?