Técnicas de Programação
Material Teórico Conceitos de Vetores e Matrizes Responsável pelo Conteúdo: Prof. a Esp. Margarete Eliane da Silva Almendro Revisão Técnica: Prof. Me. Douglas Almendro Revisão Textual: Prof. a Me. Selma Aparecida Cesarin
Conceitos de Vetores e Matrizes Estruturas de Dados Vetor e Matriz Nesta Unidade, o aluno terá uma visão do que vem a ser vetores e matrizes, suas formas de acesso e manipulação, bem como irá entender também o pensamento de programação computacional. Hoje, veremos alguns assuntos introdutórios na nossa Disciplina e aproveito para apresentar alguns conceitos que utilizaremos na estrutura de todas as nossas Unidades. Para obter um bom aproveitamento, vamos conferir a estrutura desta Unidade: Conteúdo Teórico: neste link, você encontrará o material principal de estudos na forma de texto escrito; Atividade de Sistematização: os exercícios disponibilizados são de autocorreção e visam a que você pratique o que aprendeu na Disciplina e que identifique os pontos em que precisa prestar mais atenção, ou pedir esclarecimentos a seu tutor. Além disso, as notas atribuídas aos exercícios serão parte de sua média final na Disciplina; Atividade de Aprofundamento: é uma atividade dissertativa ou de pesquisa; Material Complementar e Referências Bibliográficas: nestes links, você poderá ampliar seus conhecimentos; Videoaula: nestes links serão apresentadas algumas ferramentas na prática e também a resolução de alguns exercícios de forma prática. Lembramos a você da importância de realizar todas as atividades propostas dentro do prazo estabelecido para cada Unidade, dessa forma, você evitará que o conteúdo se acumule e que você tenha problemas ao final do semestre. Uma última recomendação, caso tenha problemas para acessar algum item da Disciplina, ou dúvidas com relação ao conteúdo, não deixe de entrar em contato com seu professor tutor pelo botão mensagens ou fóruns. Bom estudo! 5
Unidade: Conceitos de Vetores e Matrizes Contextualização A variável é capaz de armazenar apenas um valor de cada vez. Existem situações em que há necessidade de armazenar uma grande quantidade de valores e para isso não iremos declarar várias variáveis, mas não se preocupem; isso é normal. Para solucionarmos esses problemas, utilizaremos recursos da lógica de programação chamados de malhas ou repetições aplicados a vetores e matrizes. Com os vetores e matrizes podemos utilizar a mesma variável apenas informando a posição que iremos armazenar. Em nosso material estaremos explorando os conceitos iniciais tanto de estruturas de dados quanto de vetores, matrizes e principalmente a grande influência que temos em usar estruturas de repetição, nos algoritmos, tanto para as inserções nos vetores quanto nas remoções e alocações. 6
Estruturas de Dados A variável é capaz de armazenar apenas um valor de cada vez. Existem situações em que há necessidade de armazenar uma grande quantidade de valores, mas para isso não iremos declarar várias variáveis. Para resolver esse problema, construímos novos tipos que têm um formato denominado estrutura de dados, que define como os tipos primitivos estão organizados. Vetor e Matriz Um arranjo é um grupo de elementos ou itens que respondem a um mesmo nome e que podem ser acessados segundo a posição (índice) que ocupam dentro do vetor ou matriz. Cada elemento ou item de um arranjo está em determinada posição e armazena um valor. Este valor poderá ser real, inteiro, lógico, caracter (float, int, boolean, char, String etc. no caso da linguagem Java). É importante saber a diferença entre posição e valor do elemento de um arranjo. Considere o vetor c: Posição do elemento no vetor Nome do vetor c[0] c[1] c[2] c[3] c[4] c[5] c[6] c[7] c[8] -20 6 0 722 1543-9 0 62 3 Conteúdo de uma posição (um elemento) do vetor Um arranjo poderá ter várias dimensões: Vetores são arranjos unidimensionais (um índice); Matrizes são arranjos bidimensionais (dois índices). 7
Unidade: Conceitos de Vetores e Matrizes Podemos usar arranjos de três ou mais dimensões: Vetor (de n elementos): a 0 a 1 a 2... a n 1 Matriz (de m linhas e n colunas): a 00 a 01 a 02... a 0n 1 a 10 a 11 a 12... a 1n 1... a (m 1)0 a (m 1)1 a (m 1)2... a m 1 n 1 Arranjo tridimensional a ijk Quando devemos usar vetores e/ou matrizes? Quando desejamos processar uma grande quantidade de informações, fica extremamente complicado, ou praticamente impossível, criar e manter um conjunto grande de variáveis. Vetor Declaração Pseudocódigo tipo nome [quantidade] Java tipo[] nome; ou tipo nome []; Inicialização de um vetor: nome = new tipo[quantidade]; Pode-se criar diretamente: tipo[] nome = new tipo[quantidade]; Vetor já com conteúdo: tipo[] nome= {valor1,valor2,..,valorn} 8
Exemplo 1 Declaração de um vetor com 4 elementos inteiros. Pseudocódigo inteiro c [4] Java int [] c = new int[4]; Reforçando que: c[0] c[1] Conteúdo c[2] c[3] Vetores Características Tamanho fixo: vetores não podem ser redimensionados após sua construção; Verificados em tempo de execução: armazenar ou acessar um elemento em um local que não foi declarado; Tipo definido: restringimos o tipo dos elementos que podem ser armazenados. Cada elemento do vetor é inicializado com um valor padrão, dependendo do tipo de dados: null para Objetos (como String etc.) 0 para números (int, float, double, byte etc.) false para booleanos (boolean). 9
Unidade: Conceitos de Vetores e Matrizes Vetor Atribuição de Valores E se fosse um vetor com 1000 elementos? Pseudocódigo inteiro c[1000] para (i=0; i<1000; i++ ) escreva ( Digite um número ) leia c[i] Java A utilização de um vetor está associada a uma estrutura de repetição. Com isso, podemos facilmente percorrer um vetor para consultas ou atualizações. inteiro i para (i=0; i<4; i++ ) processar o elemento a[i] 10
Exemplo 2 Acessar, armazenar e mostrar valores do vetor. Pseudocódigo real salario[5] //Preenchimento do vetor para (i=0; i<5; i++ ) escreva ( Entre com salario ) leia salario[i] //mostrando valores armazenados para (i=0; i<5; i++ ) escreva ( Funcionário: + (i+1)+ Salário: + salario[i]) Java 11
Unidade: Conceitos de Vetores e Matrizes Exemplo 3 Obter 8 números e armazená-los em um vetor. Somar os valores do vetor, calcular e mostrar a média. Pseudocódigo Algoritmo soma real soma, media, a[8] início soma = 0 para (i=0; i<8; i++ ) escreva ( Digite um número ) leia a[i] para (i=0; i<8; i++ ) soma += a[i] media = soma / 8 escreva ( A Média é: + media) fim Observe que, como os valores ficaram armazenados no vetor, não necessitamos e não devemos efetuar a leitura novamente; apenas processar os valores do vetor. Java 12 Neste exemplo, estamos utilizando a classe Scanner para facilitar a digitação, mas poderíamos utilizar o JOptionPane.showInputDialog para inserir os valores.
Exemplo 4 Elabore um algoritmo que leia os salários de 10 trabalhadores de uma empresa e os armazene dentro de um vetor. Depois, em ciclos independentes: Calcule a média desses salários; Determine o maior dos salários desta empresa; Conte os salários menores de R$850,00. Pseudocódigo Algoritmo Empresa real sal[10], soma=0, media, maior inteiro i,quant = 0 início //Preenchimento do vetor para (i=0; i<10 ; i++) escreva ( Digite o salário do trabalhador + (i+1) + : ) leia sal[i] //Somando valores armazenados no vetor para (i=0; i<10 ; i++) soma += sal[i] //Cálculo da média media = soma / 10 escreva ( A média dos salários é R$ + media) //Encontrando o maior valor maior=sal[0] para (i=0; i<10 ; i++) se (sal[i] > maior) = sal[i] fim se escreva ( O maior salário é R$ + maior) //Quantidade de salários menores que R$850,00 para (i=0; i<10 ; i++) se (sal[i] < 850) quant++ fim se escreva ( Quant. de salários < R$850: + quant) fim 13
Unidade: Conceitos de Vetores e Matrizes Java 14 Exemplo 5 Faça um algoritmo que receba a quantidade de peças vendidas por vendedor e armazene essas quantidades em um vetor. Receba também o preço da peça vendida de cada vendedor e armazene esses preços em outro vetor. Existem apenas dez vendedores e cada vendedor pode vender apenas um tipo de peça, isto é, para cada vendedor existe apenas um preço. Calcule e mostre a quantidade total de peças vendidas por todos os vendedores e para cada vendedor calcule e mostre o valor total da venda, isto é, a quantidade de peças e o preço da peça.
Pseudocódigo Algoritmo vendedor inteiro qtde[10], i real preco[10], tot_geral, tot_vend inicio tot_geral = 0 para (i=0;i<10;i++) escreva ( Entre com a quantidade vendida pelo vendedor + (i+1)) leia qtde[i] escreva ( Digite o preço do produto ) leia preco[i] para (i=0;i<10;i++) tot_vend = qtde[i]*preco[i] escreva ( O total vendido pelo vendedor + (i+1) + é + tot_vend) para (i=0;i<10;i++) tot_geral = tot_geral + qtde[i] escreva ( O total vendido por todos os vendedores é + tot_geral) fim Java 15
Unidade: Conceitos de Vetores e Matrizes Processamento em Vetor Exemplo 7 Exemplo de processamento de uma matriz em ordem de colunas. inicialização geral para ( j = 0; j < n; j++ ) para ( i = 0; i < m; i++ ) processamento do elemento a[i][j] Exemplo 8 Exemplo de processamento de uma única linha k. inicialização necessária para a linha k para ( j = 0; j < n; j++ ) processamento do elemento a[k][j] resumo necessário para a linha k 16
Exemplo 9 Exemplo de processamento de uma única coluna k inicialização necessária para a coluna k para ( i = 0; i < m; i++ ) processamento do elemento a[i][k] resumo necessário para a coluna k Exemplo 10 Exemplo da utilização de uma matriz. Vamos supor que a matriz A contenha: real soma para ( i = 0; i < 3; i++ ) soma=0 para ( j = 0; j < 3; j++ ) soma += a[i][j] escreva Média do aluno + (i+1) + é + soma/3 Esta lógica calcula e visualiza a média das notas de cada aluno (cada linha é um aluno). 17
Unidade: Conceitos de Vetores e Matrizes real soma para ( j = 0; j < 3; j++ ) soma = 0 para ( i = 0; i < 3; i++ ) soma += a[i][j] escreva Média da disc. + (j+1) + é + soma/3 Esta lógica calcula e visualiza a média das notas de cada Disciplina. Exemplo 11 Vamos agora para um exemplo completo. Leia uma matriz 5 x 4. Leia também um valor x. O programa deverá fazer uma busca desse valor na matriz e, ao final, escrever a localização (linha e coluna) ou uma mensagem de não encontrado. Pseudocódigo Algoritmo Matriz5x4 inteiro matriz[5][4] inteiro busca, i, j, i1, j1 logico achou início para(i=0; i<5; i++) para(j=0; j<4; j++) escreva( Posição [ + i + ][ + j + ] ) leia(matriz[i][j]) achou = falso i1=0 j1=0 escreva( Qual o valor a buscar? ) leia(busca) para(i=0; i<5; i++) para(j=0; j<4; j++) se(matriz[i][j] == busca) achou=verdadeiro i1 = i j1 = j fim se se(achou == falso) escreva( Elemento não encontrado ) senão escreva( Encontrado na posição + i1 +, + j1) fim se fim 18
Java import javax.swing.joptionpane; public Class Matriz01{ public static void main(string args[]){ int[][] matriz = new int[5][4]; int busca, i, j, i1=0, j=0; boolean achou = false; for(i=0; i<5;i++){ for(j=0; j<4;j++){ matriz[i][j]= Integer.parseInt(JOptionPane. showinputdialog ( Posição [ +i+ ][ +j+ ] )); } } Busca= Integer.parseInt(JOptionPane. showinputdialog( Qual o valor a buscar? )); for(i=0; i<5;i++){ for(j=0; j<4;j++){ if(matriz[i][j]==busca){ achou= true; i1=i; j1=j; } } } if (achou==false){ JOptionPane.showMessageDialog(null, Elemento não encontrado ); } else{ JOptionPane.showMessageDialog(null, Elemento encontrado na posição +i1+, +j1); } } } 19
Unidade: Conceitos de Vetores e Matrizes Exemplo 12 Faça um programa que leia uma matriz 5x5 de números inteiros e em seguida calcule e imprima a soma de sua diagonal principal. a 11 a 12 a 13... a 1n a 21 a 22 a 23... a 21 A = a 31 a 32 a 33... a 11...... a n1 a n2 a n3... a nn diagonal principal i = j diagonal secundária i + j = n + 1 Pseudocódigo Algoritmo Matriz5x5 inteiro matriz[5][5] inteiro i, j, soma início para(i=0; i<5; i++) para(j=0; j<5; j++) escreva( Posição [ + i + ][ + j + ] ) leia(matriz[i][j]) soma = 0 para(i=0; i<5; i++) soma += matriz[i][i] escreva( A soma deu + soma) fim 20
Exemplo 13 Ler uma matriz de Strings de 5 x 10 e em seguida imprima a matriz na tela. Pseudocódigo Algoritmo Matriz 5x10 caracter matriz[5][10] caracter total inteiro i, j início para(i=0; i<5; i++) para(j=0; j<10; j++) escreva( Posição [ + i + ][ + j + ] ) leia(matriz[i][j]) total = para(i=0; i<5; i++) para(j=0; j<10; j++) total +=matriz[i][j] + total += \n escreva(total); fim 21
Unidade: Conceitos de Vetores e Matrizes Material Complementar Para aprofundar seus conhecimentos, consulte: Livros: WIRTH, N. Algoritmos e Estruturas de Dados. Rio de Janeiro: Ltc-Livros Técnicos e Científicos, 1999. OLIVEIRA, J. F.; MANZANO, J. A. N. G. Estudo Dirigido de Algoritmos. Editora Érica, 2010. 22
Referências DEITEL, H. M. Java: Como Programar. 6.ed. Porto Alegre: Bookman, 2003. (e-book) FURGERI, S. Java 6: Ensino Didático: Desenvolvendo e Implementando Aplicações. 2.ed. São Paulo: Erica, 2009. FARRER, H. Algoritmos Estruturados. 3.ed. Rio de Janeiro: Ltc-Livros Técnicos e Científicos, 1999. FORBELLONE, A. L. V.; EBERSPACHER, H. F. Lógica de Programação: A Construção de Algoritmos e Estrutura de Dados. 3.ed. São Paulo: Pearson Prentice Hall, 2008. MANZANO, J. A. N. G. Algoritmos: Lógica Para Desenvolvimento de Programação. 24.ed. São Paulo: Erica, 2010. OLIVEIRA, J. F.; MANZANO, J. A. N. G. Algoritmos Lógica para desenvolvimento de programação de computadores. Ver o conteúdo de Parte II Técnicas Básica de Programação Capítulo 3 Tipo de Dados e Instruções Primitivas. 23
Unidade: Conceitos de Vetores e Matrizes Anotações 24