• Nenhum resultado encontrado

ESTRUTURAS DE DADOS ESTÁTICAS: MATRIZES

N/A
N/A
Protected

Academic year: 2021

Share "ESTRUTURAS DE DADOS ESTÁTICAS: MATRIZES"

Copied!
18
0
0

Texto

(1)

CURSO TÉCNICO PROFISSIONALIZANTE EM INFORMÁTICA

ERINALDO SANCHES NASCIMENTO

ESTRUTURAS DE DADOS ESTÁTICAS: MATRIZES

FOZ DO IGUAÇU 2013

(2)

LISTA DE QUADROS

QUADRO1–ALGORITMOPARACARREGARUMAMATRIZ ... 3

QUADRO2–ALGORITMOPARAMOSTRAROSELEMENTOSDEUMAMATRIZ .. 4

QUADRO3–APLICATIVOQUEINICIALIZAEEXIBEVALORESDEARRAYS

BIDIMENSIONAIS ... 4

QUADRO4–APLICATIVOQUECALCULAAMÉDIAGEOMÉTRICADEUMA

MATRIZ6X2 ... 6

QUADRO5–APLICATIVOQUECALCULAAMÉDIADECADAALUNOEDA

(3)

FIGURA1–EXEMPLODEUMAMATRIZ. ... 1

FIGURA2–REPRESENTAÇÃODEUMAMATRIZXCOM3LINHASE5COLUNAS.

... 2 FIGURA3–SAÍDADAAPLICAÇÃOQUECRIAEINICIALIZADUASMATRIZES. .... 5

(4)

SUMÁRIO

7 ESTRUTURAS DE DADOS ESTÁTICAS – PARTE II ... 1

7.1DECLARAÇÃO ... 2

7.1.1 Declaração em Java ... 2

7.2OPERAÇÕES ... 3

7.2.1 Carregar uma Matriz... 3

7.2.2 Mostrar os Elementos de uma Matriz ... 4

7.2.3 Operações em Java ... 4

7.3EXERCÍCIOS ... 8

7.4TRABALHOSPRÁTICOS ... 11

7.5PROJETOPRÁTICO ... 13

(5)

7 ESTRUTURAS DE DADOS ESTÁTICAS – PARTE II

Um array multidimensional (matriz) é uma variável composta homogênea bidimensional formada por uma sequência de variáveis, todas do mesmo tipo, com o mesmo identificador (mesmo nome) e alocadas sequencialmente na memória. Uma vez que as variáveis têm o mesmo nome, o que as distingue são índices que referenciam sua localização dentro da estrutura. Uma variável do tipo matriz é composta por linhas e colunas.

Estruturas indexadas que necessitam de mais de um índice para identificar um de seus elementos são chamadas matrizes de dimensão n, onde n representa o número de índices requeridos. Uma matriz de dimensão 2 é uma matriz que exige dois índices para identificar um elemento em sua estrutura.

Os arrays multimensionais com duas dimensões costumam ser utilizados para representar tabelas de valores que consistem nas informações dispostas em

linhas e colunas. Para identificar um elemento de uma tabela particular devemos

especificar dois índices. Por convenção, o primeiro identifica a linha do elemento e o segundo a sua coluna.

Exemplo: suponha a necessidade de desenhar um gráfico de uma curva no plano e que seja necessário guardar as posições dos pontos dessa curva em coordenadas x e y, uma maneira possível de armazenar em memória o total dos pontos dessa curva seria na forma de uma matriz de dimensão 2. Nela, um dado elemento conteria o valor correspondente ao ponto identificado pelo índice de x para a abscissa e y para a ordenada desse elemento.

Na figura 1, se a curva representasse as vendas de um determinado produto numa região, o elemento da linha 4 e da coluna 5 conteria a região para as vendas de 5 unidades e para o valor de 4 no período em questão.

(6)

2 7.1 DECLARAÇÃO

A declaração de uma matriz é muito semelhante à declaração de vetor. Delimitadas entre os colchetes, temos duas declarações de tipo associadas aos índices, separadas por uma vírgula. A convenção mais comum é dizermos que o primeiro índice identifica uma linha de uma matriz bidimensional e o segundo, uma coluna.

DECLARE

NOME[LINHA, COLUNA] TIPO

Onde, nome é o nome da variável do tipo matriz, linha é a quantidade de linhas que vão compor a matriz, coluna é a quantidade de colunas que vão compor a matriz e tipo é o tipo de dados que poderá ser armazenado na sequência de variáveis que formam a matriz.

DECLARE

VENDAS : VETOR [1..M, 1..N] DE INTEIROS DECLARE X : VETOR [3,5] DE INTEIROS 1 2 3 4 5 X 1 2 3

Figura 2 – Representação de uma matriz X com 3 linhas e 5 colunas.

7.1.1 Declaração em Java

A linguagem Java não oferece suporte a arrays (vetores) multidimensionais, a exemplo do que ocorre com outras linguagens de programação. No entanto, a mesma funcionalidade pode ser obtida com a declaração de um array de arrays.

Exemplo 1: um array bidimensional b com duas linhas e duas colunas, inicializado com inicializadores de array aninhados.

int b[][] = {{1,2}, {3,4}};

X[3,4] X[1,1]

(7)

Exemplo 2: um array bidimensional com expressões de criação de arrays. int b[][];

b = new int[3][4];

Nesse caso os valores literais 3 e 4 especificam o número de linhas e o número de colunas, respectivamente. Os programas também podem utilizar variáveis para especificar dimensões de array. Os elementos de um array multidimensional são inicializados quando o objeto array é criado.

Exemplo 3: um array multimensional em que cada linha tem um número diferente de colunas.

int b[][];

b = new int [2][]; //cria duas linhas

b[0] = new int [5]; //cria 5 colunas para a linha 0 b[1] = new int [3]; //cria 3 colunas para a linha 1

As instruções acima criam um array bidimensional com duas linhas. A linha 0 tem cinco colunas e a linha 1 tem três colunas.

7.2 OPERAÇÕES

Da mesma forma que se pode fazer operações com os elementos de um vetor, é possível fazê-las com os elementos de uma matriz. É possível acessar individualmente os elementos e, por conseguinte, os valores de cada uma das posições e realizar cálculos matemáticos e comparativos, o que dá grande margem de possíveis aplicações computacionais e práticas.

7.2.1 Carregar uma Matriz

O quadro 1 traz um algoritmo de exemplo para carregar uma matriz.

Quadro 1 – Algoritmo para carregar uma matriz

(8)

4 INÍCIO

PARA j ← 1 ATÉ 5 FAÇA INÍCIO

ESCREVA (“Digite o número da linha “, i, “ e coluna “, j); LEIA (X [i, j]);

FIM FIM

7.2.2 Mostrar os Elementos de uma Matriz

O quadro 2 apresenta um algoritmo de exemplo que mostra os elementos de uma matriz.

Quadro 2 – Algoritmo para mostrar os elementos de uma matriz

PARA i ← 1 ATÉ 3 FAÇA INÍCIO

PARA j ← 1 ATÉ 5 FAÇA INÍCIO

ESCREVA (X[i, j]; FIM

FIM

7.2.3 Operações em Java

O quadro 3 considera um aplicativo que inicializa arrays bidimensionais com inicializadores de array e exibe valores de cada elemento de cada array.

Quadro 3 – Aplicativo que inicializa e exibe valores de arrays bidimensionais

(9)

2 //método que cria e gera saída de arrays 3 public static void main(String args[]){ 4 int array1[][] = {{1,2,3},{4,5,6}}; 5 int array2[][] = {{1,2},{3},{4,5,6}};

6 System.out.println("Valores no array1 por linha sao"); 7 saidaArray(array1);

8 System.out.println("\nValores no array2 por linha sao"); 9 saidaArray(array2);

10 }//fim do método principal (main) 11

12 /* método que gera saída de linhas (i) 13 * e colunas (j) do array

14 */

15 public static void saidaArray(int array[][]){ 16 //faz um loop pelas linhas do array 17 for (int i = 0; i < array.length; i++){

18 //faz um loop pelas colinhas da linha atual 19 for (int j = 0; j < array[i].length; j++)

20 System.out.printf("%d", array[i][j]);

21 System.out.println();//inicia a nova linha de saída 22 }//fim do for mais externo

23 }//fim do método saidaArray 24 }//fim da classe matriz1

A figura 3 apresenta a saída gerada pela aplicação descrita no quadro 3.

(10)

6 Dada uma matriz de inteiros com 6 linhas e 2 colunas, o código apresentado no quadro 4 calcula e exibe a média geométrica dos valores de cada uma das linhas. A média geométrica é calculada pela seguinte expressão: , que representa a raiz quadrada do resultado da multiplicação dos elementos da coluna 1 (x1) pelos elementos da coluna 2 (x2).

Quadro 4 – Aplicativo que calcula a média geométrica de uma matriz 6x2

1 import javax.swing.JOptionPane; 2 public class matriz2 {

3 public static void main(String args[]){ 4 int g[][] = new int[6][2];

5 float prod; 6 String num; 7 try{

8 for (int i = 0; i < 6; i++){ 9 for (int j = 0; j < 2; j++){

10 num = JOptionPane.showInputDialog( 11 "Informar o valor de G "+i+", "+j+": "); 12 g[i][j] = Integer.parseInt(num);

13 } 14 }

15 for (int i = 0; i < 6; i++){ 16 prod = 1;

17 for (int j = 0; j < 2; j++) 18 prod*=g[i][j];

19 JOptionPane.showMessageDialog(

20 null, "Linha "+i+": "+Math.sqrt(prod)); 21 }

22 }catch(Exception e){

23 JOptionPane.showMessageDialog(

24 null, "Ocorreu um erro durante a leitura!"); 25 }

(11)

26 } 27 }

O pacote java.lang.Math possui métodos que realizam operações matemática mais complexas, como é o caso da raiz quadrada extraída da variável

prod. Não há necessidade de um import do pacote Math, como é feito para o caso

do swing, pois ele está automaticamente disponível para a linguagem, porém, caso seja feito, não provocará erro.

O quadro 5 considera uma matriz de 10 linhas e 3 colunas, onde cada linha está associada a um aluno, e as colunas estão associadas às notas das provas referentes àquele estudante. O programa apresentando no quadro 5 escreve a média de cada estudante e a média da turma em cada prova.

Quadro 5 – Aplicativo que calcula a média de cada aluno e da turma

1 import javax.swing.JOptionPane; 2 public class matriz3 {

3 public static void main(String args[]){

4 final int nProvas = 3; //número de provas (colunas) 5 final int nAlunos = 3;//número de alunos (linhas) 6 //declaração de matriz para as notas das provas 7 float NotaProva[][] = new float[nAlunos][nProvas]; 8 //declaração de vetor para a média dos alunos 9 float MedAlunos[] = new float[nAlunos];

10 //declaração de vetor ara a média das provas 11 float MedProvas[] = new float[nProvas]; 12 float soma;

13 String num; 14 try{

15 for (int i = 0; i < nAlunos; i++){ 16 soma = 0;

17 for (int j = 0; j < nProvas; j++){

18 num = JOptionPane.showInputDialog( 19 null,"Entre com a nota do Aluno-"+i+

(12)

8 20 " Prova-"+j); 21 NotaProva[i][j] = Float.parseFloat(num); 22 soma+=NotaProva[i][j]; 23 } 24 MedAlunos[i] = soma/nProvas; 25 } 26 for(int j = 0; j < nProvas; j++){ 27 soma = 0;

28 for (int i = 0; i < nAlunos; i++)

29 soma+=NotaProva[i][j]; 30 MedProvas[j] = soma/nAlunos;

31 }

32 for(int i = 0; i < nAlunos; i++)

33 JOptionPane.showMessageDialog( 34 null, "Média do aluno- "+i+": "+ 35 MedAlunos[i]);

36 for(int i = 0; i < nProvas; i++)

37 JOptionPane.showMessageDialog(null, "Média da Prova-" 38 +i+": "+MedProvas[i]); 39 }catch(Exception e){

40 JOptionPane.showMessageDialog(null, "Ocorreu um erro durante a leitura!"); 41 } 42 } 43 } 7.3 EXERCÍCIOS 1. Preencha as lacunas:

a) Em um array bidimensional, o primeiro índice identifica o __________ de um elemento, e o segundo índice identifica o __________ de um elemento.

(13)

b) Um array m por n contém __________ linhas, __________ colunas e __________ elementos.

c) O nome do elemento na linha 3 e na coluna 5 do array d é __________. 2. Qual é a saída produzida pelo código a seguir?

int [][] meuArray = new int [4][4]; int indece1, indece2;

for (indece1 = 0; indece1 < meuArray.length; indece1++) for (indece2 = 0;

indece2 < meuArray[indece1].length; indece2++) meuArray[indece1][indece2] = indece2;

for (indece1 = 0; indece1 < meuArray.length; indece1++) {

for (indece2 = 0;

indece2 < meuArray[indece1].length; indece2++) System.out.print(meuArray[indece1][indece2] + " "); System.out.println();

}

3. Quais das seguintes declarações são válidas? Quais instanciam um objeto array? Explique as suas respostas.

int primes = {2, 3, 4, 5, 7, 11};

float elapsedTimes[] = {11.47, 12.04, 11.72, 13.88}; int[] scores = int[30];

int[] primes = new {2, 3, 5, 7, 11}; int[] scores = new int[30];

char grades[] = {'a', 'b', 'c', 'd', 'f'}; char[] grades = new char[];

4. Descreva que problema ocorre no código a seguir. Que modificações devem ser feitas para eliminar o problema?

int[] numeros = {3, 2, 3, 6, 9, 10, 12, 32, 3, 12, 6}; for (int cont = 1; count <= numeros.length; cont++)

System.out.println (numeros[cont]);

5. Escreva uma declaração de matriz e classes de suporte necessárias para representar as seguintes afirmações:

(14)

10 b) As notas dos testes dos alunos de uma turma de 40 alunos.

c) As transações de cartões de crédito que contêm um número de transação, um nome comercial, e um preço.

d) Os nomes dos alunos de uma classe e notas de tarefa de casa para cada aluno.

e) Para cada funcionário da empresa: o número do funcionário, a data de admissão, e o montante dos últimos cinco aumentos.

6. Faça um programa que carregue uma matriz 2 x 2, calcule e mostre uma matriz resultante que será a matriz digitada multiplicada pelo maior elemento da matriz. 7. Faça um programa que carregue uma matriz 10 x 3 com as notas de dez alunos

em três provas. Mostre um relatório com o número do aluno (número da linha) e a prova em que cada aluno obteve menor nota. Ao final do relatório, mostre quantos alunos tiveram menor nota na prova1, quantos alunos tiveram menor nota na prova 2 e quantos alunos tiveram menor nota na prova 3.

8. Faça um programa que carregue:

Um vetor com oito posições com os nomes das lojas.

Um outro vetor com quatro posições com os nomes dos produtos. Uma matriz com os preços de todos os produtos em cada loja.

O programa deve mostrar todas as relações (nome do produto – nome da loja) nas quais o preço não ultrapasse R$ 120,00.

9. Faça um programa que carregue uma matriz 10 x 20 com números inteiros e some cada uma das linhas, armazenando o resultado das somas em um vetor. A seguir, multiplique cada elemento da matriz pela soma da linha e mostre a matriz resultante.

10. Faça um programa que carregue uma matriz 15 x 5 com números inteiros, calcule e mostre quais os elementos da matriz que se repetem e quantas vezes cada um está repetido.

11. Faça um programa que carregue uma matriz 10 x 10 com números inteiros, execute as trocas especificadas a seguir e mostra a matriz resultante.

a linha 2 com a linha 8; a coluna 4 com a coluna 10;

a diagonal principal com a diagonal secundária; a linha 5 com a coluna 10.

(15)

12. Faça um programa que utiliza uma matriz com dimensões máxima de cinco linhas e quatro colunas e solicite que sejam digitados os números (desordenadamente) e armazene-os ordenadamente na matriz.

13. Faça um programa que utilize uma matriz com as dimensões fornecidas pelo usuário e execute as solicitações a seguir:

A matriz deve ser obrigatoriamente quadrada (número igual de linhas e colunas).

Realize a leitura dos elementos que vão compor a matriz.

Some e mostre os elementos que estão abaixo da diagonal secundária.

14. Faça um programa que receba o estoque atual de três produtos que estão armazenados em quatro armazéns e coloque esses dados em uma matriz 5 x 3. Sendo que a última linha da matriz contém o custo de cada produto, calcule e mostre:

A quantidade de itens armazenados em cada armazém. Qual o armazém possui maior estoque do produto 2. Qual o armazém possui menor estoque.

Qual o custo total de cada produto. Qual o custo total de cada armazém.

15. Faça um programa que receba as vendas semanais (de um mês) de cinco vendedores de uma loja e armazene essas vendas em uma matriz. Calcule e mostre:

O total de vendas do mês de cada vendedor.

O total de vendas de cada semana (todos os vendedores juntos). O total de vendas do mês.

7.4 TRABALHOS PRÁTICOS

1. Faça um programa que:

Receba dez nomes de produtos e armazene-os em um vetor.

Receba o estoque desses dez produtos em cada um dos cindo armazéns (matriz 5 x 10).

(16)

12 Receba o custo dos dez produtos e armazene-os em um outro vetor.

Calcule e mostre:

O total de itens armazenados em cada armazém. O total de itens armazenados de cada produto. O custo total de cada armazém.

O nome do produto e o número do armazém que possui maior número de itens estocados.

O nome do produto que possui menor custo. 2. Faça um programa que receba:

Um vetor com o nome de cinco cidades diferentes.

Uma matriz 5 x 5 com a distância entre as cidades, sendo que na diagonal principal deve ser colocada automaticamente distância zero, ou seja, não deve ser permitida a digitação.

Calcule e mostre:

Os percursos que não ultrapassam 250 quilômetros (os percursos são compostos pelos nomes das cidades de origem e pelos nomes das cidades de destino);

O consumo de um veículo, ou seja, quantos quilômetros o veículo faz por litro de combustível e mostre um relatório com a quantidade de combustível necessária para percorrer cada percurso citando o mesmo (nome da cidade de origem e nome da cidade de destino);

A maior distância e em que percurso se encontra (nome da cidade de origem e nome da cidade de destino).

3. Faça um programa que carregue:

Um vetor com cinco números inteiros. Um outro vetor com dez números inteiros.

Uma matriz 4 x 3, também com números inteiros. Calcule e mostre:

O maior elemento do primeiro vetor multiplicado pelo menor elemento do segundo vetor. O resultado dessa multiplicação adicionado aos elementos digitados na matriz dará origem a uma segunda matriz (resultante).

A soma dos elementos pares de cada linha da matriz resultante.

(17)

7.5 PROJETO PRÁTICO

Desenvolva uma classe que registros as notas em uma classe cujo únicas pontuações registradas são pontuações de questionário. Um objeto desta classe tem três matrizes como variáveis de instância. Uma delas é uma matriz bidimensional chamada nota que registra a nota de cada aluno em cada quiz. Por exemplo, a pontuação que o aluno número 4 recebeu no teste número 1 é registrada na matriz nota [3] [0].

Todos os dados brutos estão na matriz de nota, mas duas outras matrizes armazenam dados computados.

A matriz mediaAluno grava a pontuação média no questionário para cada um dos alunos. Por exemplo, o programa define mediaAluno [0] igual à média das pontuações dos questionários recebidos pelo aluno 1, mediaAluno [1], igual à média das pontuações dos questionários recebidos pelo aluno 2, e assim por diante.

A matriz mediaQuiz grava a pontuação média para cada quiz. Por exemplo, o programa define mediaQuiz [0] igual à média de todas as notas dos alunos para o teste 1, mediaQuiz [1] registra a pontuação média para o teste 2, e assim por diante.

A duas matrizes mediaAluno e mediaQuiz são criadas e preenchidas pelo construtor que cria o objeto LivroNota.

Crie um construtor sem argumento para a classe LivroNota e um método de entrada que define todas as variáveis de instância, incluindo a criação de objetos de matriz.

Escreva os métodos abaixo e adicione-os à classe LivroNota

Retorna a nota que um aluno recebeu em um teste. O método deve receber o número do aluno e o número do teste por parâmetro.

Altera a nota de um aluno em um teste. O método deve receber o número do aluno, o número do teste e a nova nota.

Retorna uma matriz com a pontuação média questionário para cada aluno. Retorna uma matriz com a pontuação média para cada quiz.

(18)

14 7.6 REFERÊNCIA BIBLIOGRÁFICA

ASCENCIO, Ana F. G.; CAMPOS, Edilene A. V. Fundamentos da Programação de

Computadores. São Paulo: Pearson Prentice Hall.

DEITEL, Paul; DEITEL, Harvey. Java for Programmers, 2nd ed. Boston: Pearson Education, 2012.

LEWIS, John; DEPASQUALE, Peter J.; CHASE, Joseph. Java Foundations:

Introduction to program design & data structures, 2nd ed. Boston: Addison-Wesley, 2011

SAVITCH, Walter. Absolute Java, 5th Ed. Boston: Pearson, 2013.

SCHIDT, Herbert. Java: The Complete Reference, 7th Ed. New York: Mc Graw Hill, 2007.

Referências

Documentos relacionados

A Fundação Coordenação de Aperfeiçoamento de Pessoal de Nível Superior – Capes, no uso de suas atribuições, estabelecida nos termos da instrução do Processo nº

3.1 Este Edital dirige-se a pesquisadores de instituições de Ensino Superior – IES brasileiras, públicas e privadas sem fins lucrativos, que possuam programas de

Máximo: até 60% do valor de venda ou avaliação das unidades habitacionais do empreendimento, o que for menor, limitado a R$ 48.000, R$ 60.000 ou R$ 78.000,

(Res)seguro de Transportes de Carga e a Cobertura de Stock Throughput (STP) - 2º Encontro de Resseguros – Rio de Janeiro, Abril de

Apesar de o mercado acionário brasileiro ter se tornado mais importante para a economia brasileira, sobretudo entre o período de 2002 para 2005 (Tabela 3), sua repre- sentatividade

A Direção do Centro de Ciências Humanas, Sociais e Agrárias (CCHSA) e do Colégio Agrícola Vidal de Negreiros (CAVN), Campus III da Universidade Federal da Paraíba

Para preparar a pimenta branca, as espigas são colhidas quando os frutos apresentam a coloração amarelada ou vermelha. As espigas são colocadas em sacos de plástico trançado sem

No sentido de reverter tal situação, a realização deste trabalho elaborado na disciplina de Prática enquanto Componente Curricular V (PeCC V), buscou proporcionar as