Baixe o app para aproveitar ainda mais
Prévia do material em texto
Estruturas de dados homogêneas Prof. Maurício Braga Vetores Até agora sempre utilizamos variáveis definidas a partir de tipos básicos de dados. Cada variável só é capaz de armazenar um dado por vez. Existem situações em que é necessário armazenar uma grande quantidade de dados na memória ao mesmo tempo. Esta quantidade torna inviável a criação de variáveis para cada um dos dados a ser armazenado. Para estes casos, poderemos criar variáveis a partir de tipos de dados estruturados. Um tipo de dado estruturado é aquele formado pela junção ou combinação de tipos básicos, definindo apenas uma variável que o represente. Vetores Vetor (ou array) é uma estrutura de dados composta por uma quantidade determinada de elementos de um mesmo tipo. Como armazena sempre dados do mesmo tipo, diz- se que vetores são estruturas de dados homogêneas. Vetores Ao apresentar o conceito de variável, dissemos que ela funciona como uma caixa na memória do computador, capaz de armazenar um único dado de um determinado tipo. Por analogia, podemos imaginar um vetor como um conjunto de variáveis agrupadas sob um mesmo nome, todas de um mesmo tipo. O vetor passa a ser um conjunto de caixinhas, contendo dados de mesma natureza e que estejam agrupados. Vetores Armazenamento em memória 15 A -7 15 23 A { Variável simples Vetor Vetores Para referenciar o conteúdo de uma variável simples, basta indicar o nome que foi definido. Para vetores, somente o nome não é suficiente. Além do nome, preciso indicar a posição no vetor onde está o dado que queremos acessar/utilizar. Esta posição é denominada índice. Os vetores são também chamados de variáveis indexadas unidimensionais. Vetores Sintaxe para declaração de um vetor: Sintaxe para referenciação de uma posição: Suponha que é necessário armazenar 100 preços de produtos de uma loja. Declaração: Referenciação: <var> : vetor[<inicio>..<fim>] de <tipo>; preco : vetor[1..100] de real; preco[1] = 32.50; <nome_vetor>[<posicao>]; preco[102] = 43.80; X Não é possível acessar posições fora do intervalo definido Vetores Observações É necessário validar acessos a índices inexistentes, evitando erros no sistema; Apenas variáveis inteiras podem ser utilizadas como índices de um vetor. Cada elemento do vetor deve ser tratado como uma variável independente Todas as operações que podem ser realizadas sobre variáveis de tipos básicos, podem ser aplicadas a posições de um vetor. Ex.: v[5] = s.nextInt(); syso(v[3]); v[3]=v[2]+4; Vetores em Java Recebem o nome de Array. Para criar um array, 3 passos são necessários: Declaração; Construção; Inicialização. Vetores em Java Declarando um vetor: int vetor[ ]; // declaração do array Construindo um vetor (a construção é feita com o operador new): vetor = new int[10]; // construção do array PS: Não se especifica o tamanho do array na declaração. Isso é feito apenas na construção. Vetores em Java A declaração e construção podem ser feitas de uma vez só: int vetor[ ] = new int[10]; Os índices em um array em Java começam em 0. Para inserirmos elementos, precisamos indicar a posição no array onde eles serão inseridos: vetor[0] = 52; vetor[1] = -28; Vetores em Java Exemplo: int[] v = new int[10]; v[0] = 34; v[1] = 27; v[2] = 18; v[3] = -78; v[4] = 1534; v[0] v[1] v[2] v[3] v[4] v[5] v[6] v[7] v[8] v[9] 34 27 18 -78 1534 Vetores em Java Não é possível acessar além dos limites em um array. Para sabermos o tamanho de um array, podemos usar a variável length: Ex: int v[ ] = new int[10]; for(int i = 0; i < v.length; i++) { System.out.println("array[" +i + "] = " +v[i]); } Vetores em Java Os arrays são inicializados automaticamente em java. Cada tipo de dado que podemos colocar em um array possui um valor padrão, que será usado para inicializar o array automaticamente. Inicialização automática de um Array Tipo valor tipo valor byte 0 short 0 int 0 long 0L float 0.0f double 0.0d char '\u0000' boolean false Referências recebem null Vetores em Java A declaração, construção e inicialização do array também pode ser feita de uma vez só: String frutas[ ] = {"Uva", "Melancia","Pêssego"}; código equivalente a: String frutas[ ] = new String[3]; frutas[0] = "Uva"; frutas[1] = "Melancia"; frutas[2] = "Pêssego"; Vetores Exemplo: Uma prova de química foi feita por um grupo de 20 alunos. Faça um programa para ler as notas obtidas pelos alunos, e depois exibir um relatório de notas superiores a 7,5 no seguinte formato: Notas > 7.5: 7.8 9.4 10.0 7.7 8.5 7.6 9.1 8.3 Vetores Solução: Este exemplo é uma aplicação simples de vetores. Existe uma repetição embutida, pois é necessário ler as 20 notas. Poderíamos solucionar este problema sem a utilização de vetores, mas perderíamos as notas dos alunos, o que é uma má idéia. Temos então quer ler todas as notas, e em seguida varrer todo o vetor, decidindo quais devem ser impressas. Como a quantidade de leituras é fixa, podemos utilizar o comando PARA nas repetições. Vetores Como fica o algoritmo: Variáveis cont : inteiro; nota : vetor[1..20] de real; Início // Lê as notas e armazena no vetor para cont de 1 até 20 faça [[ escrever “Digite a nota: “; ler nota[cont]; ]]; // imprime as notas acima de 7.5 escrever “Notas acima de 7.5”; para cont de 1 até 20 faça se nota[cont] > 7.5 então escrever nota[cont]; Solução em Java public static void main(String[] args) { double notas[]; notas = new double[20]; Scanner s = new Scanner(System.in); for (int i=0; i < notas.length;i++) { System.out.println("Digite a nota"); notas[i] = s.nextDouble(); } System.out.println("Notas > 7.5"); for (int i=0; i < notas.length;i++) { if ( notas[i]> 7.5) System.out.println(notas[i]); } } Matrizes Vimos que vetores são utilizados para armazenar dados de uma única “fileira”. Porém, existem situações em que a natureza dos dados exige uma forma de armazenamento em mais de uma dimensão. Para estas situações, existem as matrizes, que podem ser vistas como vetores que possuem mais de uma dimensão. No caso de uma matriz bidimensional, essa matriz representa uma tabela de valores colocados em linhas e colunas. Para identificar um valor é necessário informar a linha e a coluna Conhecidas como tabelas, ou variáveis indexadas bidimensionais Um vetor pode ser visto como uma matriz com uma única linha. Matrizes bidimensionais Sintaxe para declaração de uma matriz bidimensional: Sintaxe para referenciação de uma posição: Exemplos: Declaração: Referenciação: <var> : vetor[<inicio1>..<fim1>,<inicio2>..<fim2>,...] de <tipo>; valor : vetor[1..3,1..4] de real; valor[1,1] = 8.50; <nome_vetor>[<posicao1>,<posicao2>,...]; valor[2,3] = 7.3; Matrizes em Java Criadas utilizando arrays multidimensionais. Arrays multidimensionais com duas dimensões costumam ser utilizados para representar tabelas de valores: Informações dispostas na forma de linhas e colunas. Chamados de arrays bidimensionais pois precisam de dois índices para identificação dos elementos. Java não suporta arrays multidimensionais diretamente. É necessário criar um array unidimensional e definir que seus elementos também são arrays unidimensionais; Praticamente possuem o mesmo efeito. Arrays bidimensionais Cada elemento do array é identificado por uma expressão de acesso da forma nomeArray [ linha ] [ coluna ]. a[ 0 ] [ 0 ] a[ 0 ] [ 1 ] a[ 0 ] [ 2 ] a[ 0 ] [ 3 ] a[ 1 ] [ 0 ] a[ 1 ] [ 1 ] a[ 1 ] [ 2 ] a[ 1 ] [ 3 ] a[ 2 ] [ 0 ] a[ 2 ] [ 1 ] a[ 2 ] [ 2 ] a[ 2 ] [ 3 ] Arrays bidimensionais Arrays bidimensionais podem ser declarados / construídos da mesma forma que arrays unidimensionais: int b[][]; // declaração da matriz b = new int[ 2 ][ 3 ]; // construção matriz 2 linhas e // 3 colunas Ou int b[][] = new int[ 2 ][ 3 ]; Arrays Multidimensionais Acessando os elementos de um array multidimensional: int[ ][ ] a = new int[ 3 ][ 2 ]; for (int i = 0; i < a.length; i++) { for (int j = 0; j < a[ i ].length; j++) { System.out.println(a[ i ][ j ]); } } A declaração, construção e inicialização de uma matriz pode ser feita de uma vez só: int[][] m = {{1,2}, {3,4}}; código equivalente a: int[][] m = new int[2][2]; m[0][0] = 1; m[0][1] = 2; m[1][0] = 3; m[1][1] = 4; Arrays multidimensionais Arrays Multidimensionais Arrays de arrays unidimensionais não exigem que todas as linhas tenham a mesma quantidade de elementos. int b[ ][ ]; b = new int[ 2 ][ ]; // cria 2 linhas b[ 0 ] = new int[ 5 ]; // cria 5 colunas para linha 0 b[ 1 ] = new int[ 3 ]; // cria 3 colunas para linha 1 Matrizes Exemplo Um distribuidor de refrigerantes vende seu produto em todo o país. Em cada trimestre do ano passado ele vendeu uma certa quantidade de garrafas em cada região do Brasil. Faça um programa para ler as quantidades vendidas em uma matriz e depois imprima na tela a quantidade total vendida em todo o país. Solução Pelo enunciado do problema, vimos que existem 20 dados de entrada, pois temos 4 trimestres no ano e cada trimestre teve uma venda para cada uma das cinco regiões do Brasil. O enunciado do problema também no leva a concluir que devemos utilizar uma estrutura matricial ao invés de vetorial. Temos vendas para regiões por trimestre. Matrizes Solução (cont.) A tabela abaixo mostra uma representação possível para os dados do problema: 150 1150 900 1500 400 180 980 1100 2300 650 140 1000 950 2100 500 210 1600 1400 2600 840 1 - Norte 2 - Nordeste 3 - Sul 4 - Sudeste 5 – Centro- Oeste 1º Trimestre 2º Trimestre 3º Trimestre 4º Trimestre Matrizes Solução (cont.): Então o algoritmo fica assim: Variáveis quant : vetor[1..4,1..5] de inteiro; i, j, soma : inteiro; Início para i de 1 até 4 faça para j de 1 até 5 faça [[ escrever “Informe a quantidade do “, i, “º trimestre e “, j, “ª região: “; ler quant[i,j]; ]]; soma = 0; para i de 1 até 4 faça para j de 1 até 5 faça soma = soma + quant[i,j]; escrever “O total das quantidades vendidas é ”, soma; Fim. Solução Exemplo em Java public static void main(String[] args) { int[ ][ ] quant = new int[ 4 ][ 5 ]; int soma = 0; Scanner s = new Scanner(System.in); // lê os valores para cada região e cada trimestre for (int i = 0; i < quant.length; i++) { for (int j = 0; j < quant[ i ].length; j++) { System.out.println("informe a quantidade do "+(i+1)+"º trimestre e " +(j+1)+"ª região"); quant[ i ][ j ] = s.nextInt(); } } Solução Exemplo em Java // soma todos os valores armazenados na matriz for (int i = 0; i < quant.length; i++) { for (int j = 0; j < quant[ i ].length; j++) soma = soma + quant[ i ][ j ]; } System.out.println("O total de quantidades vendidas é:" + soma); } Estruturas de dados homogêneas Prof. Maurício Braga
Compartilhar