250 likes | 385 Views
TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS LINGUAGEM DE PROGRAMAÇÃO I Aula 6. Agenda. Matrizes Unidimensionais Multidimensionais Declaração de Vetores. Vetores. Dados Homogêneos Uma estrutura de dados, que utiliza somente um tipo de dado, em sua
E N D
TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMASLINGUAGEM DE PROGRAMAÇÃO IAula 6 02/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com –http://professorleomir.wordpress.com
Agenda • Matrizes • Unidimensionais • Multidimensionais • Declaração de Vetores 02/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com –http://professorleomir.wordpress.com
Vetores • Dados Homogêneos Uma estrutura de dados, que utiliza somente um tipo de dado, em sua Definição é conhecida como dados homogêneos. Variáveis compostas homogêneas correspondem a posições de memória, identificadas por um mesmo nome, individualizado por índices e cujo conteúdo é composto do mesmo tipo. Sendo os vetores (também conhecidos como estruturas de dados unidimensionais) e as matrizes (estruturas de dados bidimensionais) os representantes dos dados homogêneos 3 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com –http://professorleomir.wordpress.com
Vetores • Vetor - O vetor é uma estrutura de dados linear que necessita de somente um índice para que seus elementos sejam endereçados. • Usado para armazenar lista de valores do mesmo tipo. • Cada célula armazena somente um valor de dados do vetor tipo. • Cada célula tem seu próprio endereço ou indice. • Características principais • Alocação estática, Estrutura homogênea, alocação seqüencial 4 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com –http://professorleomir.wordpress.com
Vetores • Inserção/Exclusão Realocação dos elementos Posição de memória não liberada Ex : int nota [ 5 ] nota [1]=9.5; nota[2]=7.4 ......... 5 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com –http://professorleomir.wordpress.com
Matriz • Uma matriz é um arranjo bidimensional ou multidimensional de alocação estática e seqüencial. A matriz é uma estrutura de dados que necessita de um índice para referenciar a linha e outro para referenciar a coluna para que seus elementos sejam endereçados. • Ex. Char letras[3][6] 6 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com –http://professorleomir.wordpress.com
Matriz • Funções para alocação de memória Na linguagem C, a alocação dinâmica de memória pode ser realizada com apenas quatro chamadas a funções: void * malloc(int qty_bytes_alloc); void * calloc(int qty, int size); void * realloc(void * pointer, int new_size); free( void * pointer); 7 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com –http://professorleomir.wordpress.com
Uso de Memória em C • Funções para alocação de memória É a função malloc que realiza a alocação de memória. Deve-se informar para a função a quantidade de bytes para alocação. A função irá retornar, se existir memória suifciente, um endereço que deve ser colocado em uma variável do tipo ponteiro. Como a função retorna um ponteiro para o tipo void, deve-se utilizar o typecast, transformando este endereço para o tipo de ponteiro desejado. 8 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com –http://professorleomir.wordpress.com
Uso de Memória em C • Funções para alocação de memória calloc - Em vez de se alocar uma quantidade de bytes através da função malloc, pode-se usar a função calloc e especificar a quantidade de bloco de um determinado tamanho. Funcionalmente a alocação irá ocorrer de maneira idêntica. A única diferença entre o malloc e o calloc é que a última função, além de alocar o espaço, também inicializa o mesmo com zeros. 9 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com –http://professorleomir.wordpress.com
Uso de Memória em C • Funções para alocação de memória • Função realloc Às vezes é necessário expandir uma área alocada. Para isto deve-se usar a função realloc. Deve-se passar para ela o ponteiro retornado pelo malloc e a indicação do novo tamanho. A realocação de memória pode resultar na troca de blocos na memória. 10 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com –http://professorleomir.wordpress.com
Uso de Memória em C • Funções para alocação de memória • Função free - Quando não se deseja mais uma área alocada, deve-se liberá-la através da função free. Deve ser passado para a função o endereço, que se deseja liberar, que foi devolvido quando a alocação da memória ocorreu. 11 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com –http://professorleomir.wordpress.com
Declaração de Vetores • Ocorre da mesma forma que a declaração de uma variavel simples • Tipo nome_variavel[no. De elementos] OU • Int notas[4]; • Tipo – Tipo de dados de cada um dos elementos do vetor • Nome_variavel – Indica o Nome pelo qual o vetor sera chamado. • No. De elementos – Valor constante que indica quantos elementos tem o vetor. • Um vetor pode conter elementos de qualquer tipo de dadaos, mas os elementos são todos do mesmo tipo definido na declaração do vetor. 12 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com –http://professorleomir.wordpress.com
Declaração de Vetores • Carga inicial – como as variaveis contem valores aleatorios. • É possivel iniciar automaticamente todos os elementos de um vetor : • Tipo var[n] = {valor1,valor2,valor3,...valorn}; • Ex. de prog. Para leitura de salarios: 13 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com –http://professorleomir.wordpress.com
Matrizes e vetores Multidimensionais • A declaração de um vetor com n dimensões é realizada da seguinte maneira: • Tipo vetor[dim1] [dim2] [...] [dimn] • Ex. de vetor para implementar o jogo da velha usando um vetor de duas dimensões: • Constantes – Nome correspondente a um valor fixo (não se pode alterar ao longo da execução do programa. • Const tipo simbolo = valor ou • #define simbolo valor 14 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com –http://professorleomir.wordpress.com
Passagem de Vetores para Funções • Usado para passagem de vários parâmetros/dados para função – ex. função de inicialização de vetor com 10 posições Main() { int v[10]; inic1(v) } void inic1(int s[10]) { ... } 15 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com –http://professorleomir.wordpress.com
Passagem de Vetores para Funções • Dentro de uma função não é possível saber o tamanho do vetor passado pelo programa, por isso a necessidade de especificar o tamanho. • Suponhamos ter a intenção de iniciar os vetores V com 10 posições e X com 20 posições com o valor zero em todas as posições, por terem dimensões diferentes seria necessário funções distintas para inicializar, uma com 10 e outra com 20 16 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com –http://professorleomir.wordpress.com
Passagem de Vetores para Funções • A invocação dessas funções ficaria assim: Main() { int v[10]; int x[20]; inic1(v); inic2(x); } 17 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com –http://professorleomir.wordpress.com
Passagem de Vetores para Funções • A invocação dessas funções ficaria assim: Main() { int v[10]; int x[20]; inic1(v); inic2(x); } • As duas funções podem ser mudadas por uma única que inicie qualquer vetor de inteiros com o valor 0 independente das dimensões, para C não interessa qual dimensão do vetor que é passado a uma função, apenas o tipo do elemento interessa. 18 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com –http://professorleomir.wordpress.com
Passagem de Vetores para Funções 19 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com –http://professorleomir.wordpress.com
Matrizes e vetores Multidimensionais • A escrita de programas deve ser realizada de forma que uma pequena alteração não provoque grandes transformações no código dos mesmos, vejamos o seguinte programa : 20 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com –http://professorleomir.wordpress.com
Matrizes e vetores Multidimensionais • O programa funcionaria para um vetor de 10 elementos, se fosse urgente usa-lo com 25 posições, seria necessario alterar todas as ocorrências do numero 10 para 25 21 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com –http://professorleomir.wordpress.com
Matrizes e vetores Multidimensionais • A solução esta no uso de constantes que uma vez alteradas propagam o novo valor para todas as ocorrências. • Devem ser declaradas fora da função para serem visíveis ao longo de todo o programa. • Pode ser declarada de duas maneiras distintas: • Const tipo simbolo = valor • #define simbolo valor 22 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com –http://professorleomir.wordpress.com
Matrizes e vetores Multidimensionais • Constantes • Diferenças entre const e #define. • Uma constante definida com const existe fisicamente em uma determinada posição de memória. • Uma constante definida com #define não existe fisicamente na memória, sendo seu valor substituido ao longo do programa na fase de pré processamento (antes da compilação) • Const faz parte das palavras reservadas da linguagem C • #define é uma diretiva que indica ao pré-processador que o simbolo que a segue vai ficar com o valor que aparece depois do simbolo, antes de compilar o pré-processdor subtitui o simbolo pelo valor definido. • Constante definida com const fica com o tipo de dado indicado na definição enquanto que se usar #define o tipo resulta da expressão que aparece no componente valor. • Como #define não faz parte da ling. C não precisa de ; no final 23 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com –http://professorleomir.wordpress.com
Matrizes e vetores Multidimensionais • A Passagen de Vetores com mais de uma dimensão é realizada indicando no cabeçalho da função obrigatoriamente o numero de elementos de cada uma das dimensões n-1 a direita, apenas a dimensão mais a esquerda pode ser omitida colocando-se um asterisco * ou apenas [ ]. 24 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com –http://professorleomir.wordpress.com
Bibliografia 02/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com –http://professorleomir.wordpress.com