A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Introdução à Programação Um enfoque orientado a construção de modelos em programas baseados em objetos Gustavo Motta Departamento de Informática - UFPB.

Apresentações semelhantes


Apresentação em tema: "Introdução à Programação Um enfoque orientado a construção de modelos em programas baseados em objetos Gustavo Motta Departamento de Informática - UFPB."— Transcrição da apresentação:

1 Introdução à Programação Um enfoque orientado a construção de modelos em programas baseados em objetos Gustavo Motta Departamento de Informática - UFPB

2 (C) 2008 Gustavo Motta2 7. Arrays Definição Definição Um array em Java é uma estrutura de dados que permite o armazenamento de um conjunto de variáveis (elementos) de um mesmo tipo (ou referências para instâncias de uma mesma classe) e que são acessadas individualmente por um índice Um array em Java é uma estrutura de dados que permite o armazenamento de um conjunto de variáveis (elementos) de um mesmo tipo (ou referências para instâncias de uma mesma classe) e que são acessadas individualmente por um índice char[] letrasAlfabeto = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w','x', 'y', 'z'}; letrasAlfabeto[0] a letrasAlfabeto[1] b... letrasAlfabeto[25] z

3 (C) 2008 Gustavo Motta3 Usos mais comuns Usos mais comuns Armazenar grandes quantidades de dados de um mesmo tipo ou classe Armazenar grandes quantidades de dados de um mesmo tipo ou classe 1440 amostras do tipo double da temperatura de um paciente internado, medida a cada minuto, durante um dia 1440 amostras do tipo double da temperatura de um paciente internado, medida a cada minuto, durante um dia As 38 instâncias da classe Aluno, componentes de uma turma As 38 instâncias da classe Aluno, componentes de uma turma Utilizar variáveis individuais e com nomes distintos em casos como estes é extremamente trabalhoso e sujeito a erros Utilizar variáveis individuais e com nomes distintos em casos como estes é extremamente trabalhoso e sujeito a erros O uso de arrays permite usar um único nome para denotar um conjunto homogêneo de variáveis, que são acessadas individualmente através de índices O uso de arrays permite usar um único nome para denotar um conjunto homogêneo de variáveis, que são acessadas individualmente através de índices 7. Arrays

4 (C) 2008 Gustavo Motta4 Tipos de arrays Tipos de arrays Unidimensionais Unidimensionais Elementos são acessados por um único índice Elementos são acessados por um único índice alunos[0] alunos[0] alunos[1] alunos[1] Bidimensional Bidimensional Elementos são acessados por um par de índices, especificando linha e coluna de uma matriz Elementos são acessados por um par de índices, especificando linha e coluna de uma matriz turmaAluno[0][1] turmaAluno[0][1] turmaAluno[1][10] turmaAluno[1][10] Multidimensional Multidimensional Elementos são acessados por um número arbitrário de índices Elementos são acessados por um número arbitrário de índices 7. Arrays

5 (C) 2008 Gustavo Motta5 Declaração e alocação de arrays unidimensionais Declaração e alocação de arrays unidimensionais Java adota a notação de colchetes para declarar arrays Java adota a notação de colchetes para declarar arrays Uma variável de um tipo (classe) específico seguido de um par de colchetes declara uma referência a um array de elementos desse tipo Uma variável de um tipo (classe) específico seguido de um par de colchetes declara uma referência a um array de elementos desse tipo int[] posiçõesDeMemória; int[] posiçõesDeMemória; char letrasAlfabeto[]; char letrasAlfabeto[]; double[] medidaTemperatura; double[] medidaTemperatura; A declaração acima define apenas referências para arrays, mas não cria nenhuma variável do tipo array na memória A declaração acima define apenas referências para arrays, mas não cria nenhuma variável do tipo array na memória É preciso criar (alocar) o array na memória com um número predeterminado de posições É preciso criar (alocar) o array na memória com um número predeterminado de posições Opcionalmente, pode-se inicializá-lo na cláusula de declaração Opcionalmente, pode-se inicializá-lo na cláusula de declaração 7. Arrays

6 (C) 2008 Gustavo Motta6 7. Arrays Declaração e alocação de arrays unidimensionais Declaração e alocação de arrays unidimensionais Alocação de arrays Alocação de arrays Cria a variável correspondente ao array na memória com para um número de elementos predeterminado Cria a variável correspondente ao array na memória com para um número de elementos predeterminado Comando realizado pela palavra-chave new, seguida pelo tipo do dado do array e do número de elementos a alocar, entre colchetes Comando realizado pela palavra-chave new, seguida pelo tipo do dado do array e do número de elementos a alocar, entre colchetes int[] posiçõesDeMemória = new int[16]; int[] posiçõesDeMemória = new int[16]; int tamanho = 32768; int tamanho = 32768; posiçõesDeMemória = new int[tamanho]; posiçõesDeMemória = new int[tamanho]; double[] medidasTemperatura = new int[24 * 60 * 60]; double[] medidasTemperatura = new int[24 * 60 * 60];

7 (C) 2008 Gustavo Motta7 7. Arrays Declaração e alocação de arrays unidimensionais Declaração e alocação de arrays unidimensionais Inicialização Inicialização Pode ser realizada na cláusula de declaração, para pequeno número de elementos sabidos a priori Pode ser realizada na cláusula de declaração, para pequeno número de elementos sabidos a priori int[] ultimoDiaMes = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int[] ultimoDiaMes = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; String[] universidades = {"UFPB", "UFCG", "UEPB", "CEFET", "UNIPE"}; String[] universidades = {"UFPB", "UFCG", "UEPB", "CEFET", "UNIPE"}; Pode ser realizada após a alocação/criação criação do array Pode ser realizada após a alocação/criação criação do array String[] universidades = new String[5]; String[] universidades = new String[5]; universidades[0] = "UFPB"; universidades[1] = "UFCG"; universidades[2] = "UEPB"; universidades[3] = "CEFET"; universidades[4] = "UNIPE"; UFPBUFCGUEPBCEFETUNIPE

8 (C) 2008 Gustavo Motta8 7. Arrays Acesso a elementos Acesso a elementos O índice para acesso a um elemento deverá ser um valor do tipo inteiro entre 0 e o tamanho do array subtraído de 1 O índice para acesso a um elemento deverá ser um valor do tipo inteiro entre 0 e o tamanho do array subtraído de 1 nome_do_array[indice] nome_do_array[indice] Qualquer tentativa de acesso com valor de índice fora dessa faixa resulta em erro em tempo de execução, com a interrupção da execução do programa, indicado pela exceção Qualquer tentativa de acesso com valor de índice fora dessa faixa resulta em erro em tempo de execução, com a interrupção da execução do programa, indicado pela exceção ArrayIndexOutOfBoundsException ArrayIndexOutOfBoundsException O tamanho –quantidade de elementos– de um array pode ser lido através da variável length, existente em todo array O tamanho –quantidade de elementos– de um array pode ser lido através da variável length, existente em todo array universidades.length 5 universidades.length 5 ultimoDiaMes.length 12 ultimoDiaMes.length 12

9 (C) 2008 Gustavo Motta9 7. Arrays Acesso a elementos – exemplo Acesso a elementos – exemplo Método para computar a série de fibonacci Método para computar a série de fibonacci long[] fibonacci(int n) { long[] serie = new long[n]; if (n > 0) { serie[0] = 1; } if (n > 1) { serie[1] = 1; } for (int i = 2; i 0) { serie[0] = 1; } if (n > 1) { serie[1] = 1; } for (int i = 2; i < n; i++) { serie[i] = serie[i - 1] + serie[i - 2]; } return serie; }

10 (C) 2008 Gustavo Motta10 Arrays de instâncias de classes Arrays de instâncias de classes Array no qual os elementos são instâncias de classes Array no qual os elementos são instâncias de classes Cada elemento deverá ser criado para inicializar o array Cada elemento deverá ser criado para inicializar o array CartaoDeCredito[] void defineCartoes(int nCartoes) { CartaoDeCredito[] void defineCartoes(int nCartoes) { System.out.println("Configuracao do sistema de cartoes 'SysCard'."); System.out.println("Configuracao do sistema de cartoes 'SysCard'."); System.out.println("Entre com a bandeira de "+nCartoes+" cartoes..."); System.out.println("Entre com a bandeira de "+nCartoes+" cartoes..."); CartaoDeCredito[] cartoes = new CartaoDeCredito[nCartoes]; CartaoDeCredito[] cartoes = new CartaoDeCredito[nCartoes]; Scanner entrada = new Scanner (System.in); Scanner entrada = new Scanner (System.in); for (int n = 0; n < cartoes.length; n++) { for (int n = 0; n < cartoes.length; n++) { cartoes[n] = new CartaoDeCredito(); cartoes[n] = new CartaoDeCredito(); System.out.print("Entre com a bandeira do cartão '"+n+"': "); System.out.print("Entre com a bandeira do cartão '"+n+"': "); String bandeira = entrada.nextLine(); String bandeira = entrada.nextLine(); cartoes[n].defineBandeira(bandeira); cartoes[n].defineBandeira(bandeira); System.out.println(); System.out.println(); } return cartoes; } return cartoes; } 7. Arrays

11 (C) 2008 Gustavo Motta11 Ordenação Ordenação Disposição dos elementos de um array segundo a relação de ordem – crescente ou decrescente Disposição dos elementos de um array segundo a relação de ordem – crescente ou decrescente Ordem alfabética, numérica, etc. Ordem alfabética, numérica, etc. Agenda de telefônica Agenda de telefônica Relação de aprovados no vestibular Relação de aprovados no vestibular Páginas de um livro Páginas de um livro Existem diversos algoritmos para ordenação, por exemplo Existem diversos algoritmos para ordenação, por exemplo Bubblesort Bubblesort Simples, porém ineficiente Simples, porém ineficiente Quicksort Quicksort Elaborado, porém eficiente Elaborado, porém eficiente 7. Arrays

12 (C) 2008 Gustavo Motta12 Ordenação – Algoritmo Bubblesort Ordenação – Algoritmo Bubblesort Condição de entrada – pré-condição Condição de entrada – pré-condição O array para ser ordenado O array para ser ordenado Condição de saída – pós-condição Condição de saída – pós-condição O array ordenado O array ordenado Algoritmo Algoritmo 1. Enquanto o array não estiver ordenado, repita 2.Examine cada par de elementos adjacentes no array e inverta a posição dos valores que estão fora de ordem int[] idades = {60, 42, 75, 83, 27}; 7. Arrays idades[0] 60 idades[1] 42 idades[2] 75 idades[3] 83 idades[4] Passo Passo Passo Passo Passo

13 (C) 2008 Gustavo Motta13 Ordenação – Algoritmo Bubblesort Ordenação – Algoritmo Bubblesort public long[] sort(long[] data) { public long[] sort(long[] data) { boolean ordenado = true; do { ordenado = true; ordenado = true; for (int n = 0; n < data.length - 1; n++) { for (int n = 0; n < data.length - 1; n++) { if (data[n] > data[n + 1]) { if (data[n] > data[n + 1]) { long temp = data[n]; long temp = data[n]; data[n] = data[n + 1]; data[n] = data[n + 1]; data[n + 1] = temp; data[n + 1] = temp; ordenado = false; ordenado = false; } } } while (!ordenado); return data; } 7. Arrays

14 (C) 2008 Gustavo Motta14 7. Arrays Ordenação - Algoritmo QuickSort Ordenação - Algoritmo QuickSort Condição de entrada – pré-condição Condição de entrada – pré-condição O array a ser ordenado – long[] data O array a ser ordenado – long[] data Os índices inicial – int início – e final – int fim – do array Os índices inicial – int início – e final – int fim – do array Condição de saída – pós-condição Condição de saída – pós-condição O array ordenado - long[] data O array ordenado - long[] data Algoritmo QuickSort Algoritmo QuickSort 1. Se início < fim, então 1. Se início < fim, então 2. Particione os elementos no subarray entre início e fim, de modo que, todos os valores menores ou iguais ao pivô estejam à sua esquerda e que todos os valores maiores que ele estejam a sua direita, onde 2. Particione os elementos no subarray entre início e fim, de modo que, todos os valores menores ou iguais ao pivô estejam à sua esquerda e que todos os valores maiores que ele estejam a sua direita, onde O valor inicial do pivô é pivô = data[início] O valor inicial do pivô é pivô = data[início] O valor final da nova posição do pivô – pivôPos – é aquela onde todos os elementos data[pivôPos] têm índice > que pivôPos O valor final da nova posição do pivô – pivôPos – é aquela onde todos os elementos data[pivôPos] têm índice > que pivôPos 3. Aplique o algoritmo QuickSort para o subarray entre início e pivôPos Aplique o algoritmo QuickSort para o subarray entre início e pivôPos Aplique o algoritmo QuickSort para o subarray entre pivôPos + 1 e fim 4. Aplique o algoritmo QuickSort para o subarray entre pivôPos + 1 e fim

15 (C) 2008 Gustavo Motta15 7. Arrays Ordenação - Algoritmo QuickSort Ordenação - Algoritmo QuickSort Pivô particiona iníciofim Pivô particiona iníciofim Pivô iníciofim Pivô particiona Pivô particiona

16 (C) 2008 Gustavo Motta16 7. Arrays Ordenação - Algoritmo QuickSort Ordenação - Algoritmo QuickSort public void quickSort(long[] data, int início, int fim) { if (início < fim) { int pivôPos = particiona(data, início, fim); int pivôPos = particiona(data, início, fim); quickSort(data, início, pivôPos - 1); quickSort(data, início, pivôPos - 1); quickSort(data, pivôPos + 1, fim); quickSort(data, pivôPos + 1, fim);} } private int particiona(long[] data, int início, int fim) { long pivô = data[início]; int avanço = início; int retrocesso = fim; do { while ((data[avanço] <= pivô) && (avanço < fim)) avanço = avanço + 1; while (data[retrocesso] > pivô) retrocesso = retrocesso - 1; if (avanço < retrocesso) { long temp = data[avanço]; data[avanço] = data[retrocesso]; data[retrocesso] = temp; } while (avanço < retrocesso); long temp = data[retrocesso]; data[retrocesso] = data[início]; data[início] = temp; return retrocesso; }

17 (C) 2008 Gustavo Motta17 7. Arrays Ordenação - Algoritmo QuickSort Ordenação - Algoritmo QuickSort Pivô avançoretrocessoavanço retrocesso avanço Pivô avanço retrocesso Pivô avanço retrocesso Pivô avanço retrocesso Pivô avanço retrocesso Pivô avançoretrocesso

18 (C) 2008 Gustavo Motta18 7. Arrays Arrays multidimensionais Arrays multidimensionais Elementos são acessados por um número arbitrário de índices Elementos são acessados por um número arbitrário de índices Matrizes matemáticas Matrizes matemáticas double[][] matriz = new double[5][10];... public double maiorValor() { public double maiorValor() { double maiorAtéAgora = matriz[0][0]; double maiorAtéAgora = matriz[0][0]; for (int lin= 0;lin < matriz.length; lin++) for (int lin= 0;lin < matriz.length; lin++) for (int col = 0; col < matriz[lin].length; col++) for (int col = 0; col < matriz[lin].length; col++) if (matriz[lin][col] > maiorAtéAgora) if (matriz[lin][col] > maiorAtéAgora) maiorAtéAgora = matriz[lin][col]; maiorAtéAgora = matriz[lin][col]; return maiorAtéAgora; return maiorAtéAgora; }

19 (C) 2008 Gustavo Motta19 7. Arrays Arrays multidimensionais irregulares Arrays multidimensionais irregulares Não têm o mesmo número de elementos em cada dimensão Não têm o mesmo número de elementos em cada dimensão Um array em Java nada mais é do que um array cujos elementos são arrays, com exceção do elemento mais interno Um array em Java nada mais é do que um array cujos elementos são arrays, com exceção do elemento mais interno double[] [] matriz = new double[5][]; matriz[0] = new double[2]; matriz[1] = new double[5]; matriz[2] = new double[3];... public double maiorValor() { public double maiorValor() { double maiorAtéAgora = matriz[0][0]; double maiorAtéAgora = matriz[0][0]; for (int lin= 0;lin < matriz.length; lin++) for (int lin= 0;lin < matriz.length; lin++) for (int col = 0; col < matriz[lin].length; col++) for (int col = 0; col < matriz[lin].length; col++) if (matriz[lin][col] > maiorAtéAgora) if (matriz[lin][col] > maiorAtéAgora) maiorAtéAgora = matriz[lin][col]; maiorAtéAgora = matriz[lin][col]; return maiorAtéAgora; return maiorAtéAgora; }


Carregar ppt "Introdução à Programação Um enfoque orientado a construção de modelos em programas baseados em objetos Gustavo Motta Departamento de Informática - UFPB."

Apresentações semelhantes


Anúncios Google