Preview only show first 10 pages with watermark. For full document please download

Aed 06

Aula de Algoritmo e Estrutura de Dados do Professor Patrick Pedreira.

   EMBED


Share

Transcript

Algoritmos e Estruturas de Dados Vetores  As estruturas de dados homogêneas que estudaremos são os vetores também conhecidos como arranjos. Os arranjos (vetores) são variáveis compostas que podem representar um conjunto de valores ao mesmo tempo. Estruturas de Dados Homogêneas Vetores  É uma forma de manipular conjuntos ou coleções de dados. Isso facilita muito a programação.  Imagine a criação de mil variáveis para representar todas as notas dos alunos de uma escola...  Vetores nada mais são que matrizes (uni ou multidimensionais).  Matriz (Álgebra) -> Arranjo retangular de elementos de um conjunto.  É importante ressaltar que vetores de qualquer dimensão são caracterizados por terem todos os seus elementos pertencentes ao mesmo tipo de dado.  A Forma geral para se declarar um vetor unidimensional é: Prof. Patrick Pedreira Vetores Exemplo 1: exemplo: Vetor [50] de real;  : Vetor [] de ; Vetores  Em função de um vetor se tratar de um arranjo de elementos torna-se necessária uma forma de acessar individualmente cada elemento.  A indexação possibilita tal acesso. A especificação do intervalo dos índices além de definir o número de elemento indica quais serão os valores dos índices utilizados para acessar cada elemento.  No exemplo anterior, os dados serão indexados de 1 a 50. Para acessá-los vamos escrever: exemplo[1] exemplo[2] . exemplo[10]  Consideraremos que os índices iniciam em 1. Mas isso pode variar em algumas linguagens de programação. 1 Please purchase 'e-PDF Converter and Creator' on http://www.e-pdfconverter.com to remove this message. Vetores Vetores Vetores não podem ser acessados como um todo Seus elementos precisam ser manipulados individualmente, pelo índice. Portanto, as operações seguintes são inválidas: exemplo: Vetor [50] de real; escreva(Exemplo); leia(Exemplo); {ERRADO} {ERRADO} Vetores Nome_Aluno: Vetor [50] de caractere; leia(Nome_Aluno); { correto - variável tratada como primitiva} escreva(Nome_Aluno);  A única exceção que faremos à regra anterior será em relação aos vetores de caracteres. Neste caso, poderemos tratar os valores individualmente, pelo índice, ou como uma variável primitiva.  Essa exceção também é implementada em diversas linguagens de programação, visto que há muitos casos em que precisamos lidar com textos completos e não com as letras.  Nesses casos, a manipulação dos caracteres individualmente seria um trabalho grande e desnecessário. Portanto, as operações seguintes são válidas. Vetores Exemplo (Atribuição de valores a elementos específicos): exemplo[4] <- 5.7 Nome_Aluno”Caio”; Nome_Aluno[7]’O’; { correto - variável tratada como vetor} escreva(Nome_Aluno[2]); { correto - variável tratada como vetor} ... 2 Please purchase 'e-PDF Converter and Creator' on http://www.e-pdfconverter.com to remove this message. Vetores Vetores Problema – Calcular a média das notas de 100 alunos (Sem utilizar vetores). Vetores Problema – Calcular a média das notas de 100 alunos (utilizando vetores). Vetores Algoritmo Media100_Versao2 Principal():neutro var média: real; Notas: Vetor[100] de real; i:inteiro; início soma0; Para(i=1; i<=100;ii+1) início escreva(“Entre com a próxima nota: ”); leia(notas[i]); somasoma+notas[i]; fim médiasoma/100; escreva(“a média é: “, média); fim 3 Please purchase 'e-PDF Converter and Creator' on http://www.e-pdfconverter.com to remove this message. Vetores Vetores  Para melhorar a legibilidade do código, é interessante a utilização de constantes para a definição do tamanho do vetor.  Exemplo: Problema – Indicar a ocorrência e posição de um número em um vetor constante TAM=100; var Notas: Vetor[TAM] de real;  A definição de tipos diferentes dos primitivos para a declaração de variáveis compostas também auxilia na melhora de legibilidade do código  tipo : Vetor [] de  Ex: tipo Vetor100: Vetor[100] de real;  var Notas: Vetor100;  A variável Notas pode ser utilizada como parâmetros de argumentos de módulos  Busca(V: Vetor100): inteiro {cabeçalho do módulo}  Busca(Notas); Vetores Vetores constante TAM=100; tipo Vetor100: Vetor [TAM] de inteiro; Busca(V: Vetor100; num: inteiro): inteiro {cabeçalho do módulo} var i: inteiro; Teste de mesa para busca no vetor para num 8 início i  1; {1} enquanto(V[i]<>num e i<=TAM) faça {2} ii+1; {3} se(i<=TAM) então {4} retorne(i); {5} senão retorne(-1); {6} fim 4 Please purchase 'e-PDF Converter and Creator' on http://www.e-pdfconverter.com to remove this message. Vetores Vetores Exercícios Vetores Vetores  Problema – Ler e somar dois vetores de seis elementos inteiros e armazenar em um terceiro vetor. O primeiro elemento do vetor A deve ser somado com o último elemento do vetor B. O segundo de A com o penú penúltimo de B, e assim sucessivamente.  Exemplo 5 Please purchase 'e-PDF Converter and Creator' on http://www.e-pdfconverter.com to remove this message. Vetores Vetores Teste de mesa a partir da linha 4, após a leitura dos vetores A e B linha 4 5 4 5 4 5 4 5 4 5 4 5 4 Vetores Problema – Inverter os valores de um vetor. Fazer um módulo que receba um vetor de seis posições e o inverta. Vetores Versão 1: Qual o problema? Exemplo 6 Please purchase 'e-PDF Converter and Creator' on http://www.e-pdfconverter.com to remove this message. Vetores O problema da implementação anterior é a sobreposição de valores. Após o índice passar da metade do vetor, o algoritmo começa a colocar os mesmos valores que já atribuíra na primeira metade. Os valores inicialmente atribuídos sobrepõem os originais. Assim, a primeira metade do vetor é perdida. Vetores A utilização do vetor auxiliar resolve o problema da sobreposição de valores. O inconveniente é a duplicação de espaço no caso de um vetor com muitos elementos. Vetores Versão 2: Qual o inconveniente? Vetores Versão 3: Melhorada 7 Please purchase 'e-PDF Converter and Creator' on http://www.e-pdfconverter.com to remove this message. Vetores Exercício: faça o teste de mesa para as três versões do algoritmo Vetores Problema – Ordenar os valores de um vetor de tamanho n. A solução desse algoritmo não é trivial, já existe uma série de algoritmos disponíveis para resolvê-lo. Veremos o algoritmo Bolha (Bubblesort) que é um dos mais simples e depois o Quicksort, que é mais sofisticado e eficiente. Vetores Problema – Ordenar os valores de um vetor de tamanho n. Vetores  Para o último elemento do vetor, varrevarre-se o vetor trocando os elementos em posiç posições adjacentes que estejam fora de ordem. Ao final deste processo, o maior elemento necessariamente estará estará na última posiç posição do vetor. Depois repeterepete-se esse processo e terter-sese-á a penú penúltima posiç posição, o segundo maior elemento. 8 Please purchase 'e-PDF Converter and Creator' on http://www.e-pdfconverter.com to remove this message. Vetores Vetores  Exercí Exercíciocio- continue o teste de mesa, até até que o vetor esteja ordenado, ou seja, esteja com os valores a seguir:  Quicksort  Baseado na ideia de dividir para conquistar. O vetor é dividido em duas partes que serão ordenadas independentemente. Este processo repete-se até que o vetor inteiro esteja ordenado.  O módulo partição escolhe um elemento chamado pivô e garante que este esteja na posição correta do vetor ao final do módulo. Dessa forma, os elementos menores que o pivô estarão à esquerdo e os maiores, à direita.  A posição do pivô é um divisor para o vetor. O processo de ordenação será chamado recursivamente uma vez para os limites definidos pelo pivô à esquerda e outra para o vetor à direita. Este processo repete-se até que o vetor esteja ordenado. Vetores Vetores 9 Please purchase 'e-PDF Converter and Creator' on http://www.e-pdfconverter.com to remove this message. Vetores Vetores bidimensionais  São conhecidos como matrizes  Estruturas precisam de dois parâmetros para identificá-las (linhas e colunas) Vetores Problema – Leitura de uma matriz 2 X 3 Vetores  a1:real;  M: Vetor[3,2] de real;  escreva(M[1,1]); {escrita da primeira linha, primeira coluna, ou seja, 1}  escreva(M[3,2]); {escrita do valor 0}  M[1,1] M[1,1]90;  a1  M[1,1]; Vetores Abordagem inicial...Por que seria ruim? 10 Please purchase 'e-PDF Converter and Creator' on http://www.e-pdfconverter.com to remove this message. Vetores Abordagem melhorada...Mas ainda não é a ideal Vetores Melhor abordagem Vetores Vetores Multidimensionais Exemplo Tipo Matriz_2X3X2: Vetor[2,3,2] de inteiro; Var Est_tridimensional: Matriz_2X3X2; 11 Please purchase 'e-PDF Converter and Creator' on http://www.e-pdfconverter.com to remove this message.