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

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

LÓGICA DE PROGRAMAÇÃO Pascal. CARACTERÍSTICAS Na linguagem Pascal, o vetor possui um número N de posições, e é recomendável que seja configurado para.

Apresentações semelhantes


Apresentação em tema: "LÓGICA DE PROGRAMAÇÃO Pascal. CARACTERÍSTICAS Na linguagem Pascal, o vetor possui um número N de posições, e é recomendável que seja configurado para."— Transcrição da apresentação:

1 LÓGICA DE PROGRAMAÇÃO Pascal

2 CARACTERÍSTICAS Na linguagem Pascal, o vetor possui um número N de posições, e é recomendável que seja configurado para ele ir de 1 a N. Sendo que podemos personalizar os valores dos índices. var idades: array[1..10] of integer; //10 índices idades: array[5..15] of integer; //11 índices As duas declarações são válidas, porém devemos nos atentar às boas práticas e definir sempre de 1 a N.

3 DECLARAÇÃO var idade: integer; idades: array[1..10] of integer; //10 índices nome: string; nomes: array[1..50] of string; //50 índices letra: char; letras: array[1..26] of char; //26 índices nota: real; notas: array[1..30] of real; //30 índices enviado: boolean; enviados: array[1..45] of boolean; //45 índices

4 PREENCHIMENTO É possível preencher um vetor índice a índice, como se fossem variáveis isoladas. Assim como é possível utilizar uma estrutura de repetição para auxiliar o preenchimento do vetor. var idades: array[1..10] of integer; begin idades[1] := 18; idades[2] := 25; idades[10] := 33;

5 PREENCHIMENTO var idades: array[1..10] of integer; begin writeln(Digite a idade:); readln(idades[1]); writeln(Digite a idade:); readln(idades[2]); writeln(Digite a idade:); readln(idades[10]);

6 PREENCHIMENTO Se declararmos um vetor, não será possível inserir um dado nele como se fosse uma variável! Por exemplo: var idades: array[1..10] of integer; begin idades := 18; E também não será possível inserir um valor num índice fora da faixa de índices do vetor! Por exemplo: idades[15] := 34;

7 PREENCHIMENTO var contador: integer; idades: array[1..10] of integer; begin for contador := 1 to 10 do begin writeln(Digite a idade:); readln(idades[contador]); end; end.

8 PREENCHIMENTO var idades: array[1..10] of integer; Na memória do computador teremos algo mais ou menos assim: Nome:idades Índice: Valor:

9 PREENCHIMENTO Digamos que, após uma rotina para preencher os valores baseada em estrutura de repetição, esses valores foram inseridos nos índices do vetor: Nome:idades Índice: Valor:

10 LEITURA Para lermos e/ou exibirmos os valores em cada índice do vetor, usamos basicamente os mesmos conceitos vistos no preenchimento do vetor. Digamos que o vetor foi devidamente declarado e preenchido. Podemos ler os valores deles indicando o índice diretamente ou usando uma estrutura de repetição para vários índices. writeln(idades[1]); writeln(idades[2]); writeln(idades[10]);

11 LEITURA var contador: integer; idades: array[1..10] of integer; begin for contador := 1 to 10 do writeln(idades[contador]); readln; end.

12 LEITURA Podemos realizar operações matemáticas (caso o tipo de dado seja numérico) dos valores do vetor! Por exemplo, calcular a média das idades: var contador, soma: integer; idades: array[1..10] of integer; media: real; begin soma := 0; for contador := 1 to 10 do soma := (soma + idades[contador]); media := (soma / 10); writeln(Média das idades:, media:0:2); end.

13 LEITURA Assim como os índices podem se tornar elementos de operações condicionais. Por exemplo, mostrar todos os números pares no vetor: var contador: integer; idades: array[1..10] of integer; begin for contador := 1 to 10 do if((idades[contador] mod 2) = 0) then writeln(idades[contador], é par); readln; end.

14 PESQUISA SEQUENCIAL E se quisermos pesquisar algo num vetor? Para nos certificarmos se algo está lá ou não? Afinal, já que podemos percorrer um vetor para preenchê-lo/lê-lo, por que não para indicar se algo existe lá? Temos alguns tipos de pesquisa que podem ser feitas, e abordaremos a pesquisa linear (ou sequencial), e será exibida resumidamente a pesquisa binária. Como procuramos nossas coisas em nossa casa? Primeiro pensamos nos lugares que elas podem estar e depois procuramos nos lugares até achá-las. No vetor é basicamente a mesma coisa: temos os lugares que elas podem estar (os índices) e procuramos até encontrar um dado.

15 PESQUISA SEQUENCIAL var contador, item: integer; idades: array[1..10] of integer; achou: boolean; begin achou := false; for contador := 1 to 10 do if(idades[contador] = item) then achou := true; if(achou) then writeln(Seu item está presente no vetor) else writeln(Seu item não está presente no vetor); end.

16 PESQUISA SEQUENCIAL Ele irá percorrer todo o vetor e irá trocar o valor da variável booleana de false para true quando encontrar o valor que você deseja. Problemas? Sim! Nesse caso o problema é de performance, visto que o vetor inteiro será percorrido em busca de itens iguais ao que você deseja. E após encontrar o item em algum índice, ele continuará percorrendo o vetor. Que tal se pararmos a busca caso encontremos o item?

17 PESQUISA SEQUENCIAL var contador, item: integer; idades: array[1..10] of integer; achou: boolean; begin contador := 1; achou := false; while((contador <= 10) and not (achou)) do if(idades[contador] = item) then achou := true else contador := (contador + 1); if(achou) then writeln(Seu item está presente no vetor) else writeln(Seu item não está presente no vetor); end.

18 PESQUISA SEQUENCIAL Resolvemos o problema! Agora ele só irá pesquisar no vetor inteiro na pior das hipóteses: quando o item que você quer encontrar estiver na última posição do vetor ou quando o item não existir no vetor. while((contador <= 10) and not (achou)) do if(idades[contador] = item) then achou := true else contador := (contador + 1); Mas em compensação, ele continuará buscando somente se ele não tiver chegado ao fim do vetor e se não tiver achado.

19 PESQUISA BINÁRIA Há também outros algoritmos com melhor performance do que o de pesquisa linear. Um deles é o de pesquisa binária. Ele vai comparando as pontas e o meio do vetor, e dependendo do valor, ele vai quebrando na metade, e novamente comparando as pontas e o meio do vetor, para novamente quebrá-lo pela metade, e assim sucessivamente. Ele é um algoritmo que usa a técnica dividir para conquistar. Como ele é um algoritmo mais avançado, não o veremos aqui no curso, mas será exibido representativamente. Primeiramente devemos saber que para uma pesquisa binária ser feita, o vetor tem de estar ordenado.

20 PESQUISA BINÁRIA

21 ORDENAÇÃO Assim como podemos preencher, ler e pesquisar num vetor, podemos ordená-lo alfanumericamente. Após uma rotina de ordenação, ele ficará assim: Nome:idades Índice: Valor: Nome:idades Índice: Valor:

22 ORDENAÇÃO Como ordenamos um vetor? Percorremos todos os itens, um a um, do começo ao fim. Cada item é comparado com os demais. Se há algum item nos demais que é menor que o que eu estou comparando, eu troco a posição desses dois itens, e então ele passa a estar mais para o começo do vetor. Para esse exemplo, usaremos um vetor mais simples, com 5 índices: E no final ele tem de ficar assim:

23 ORDENAÇÃO Índice atual: 1. Comparando 1 com 4, quem é menor? 1. Então continuam onde estão. Comparando 1 com 3, quem é menor? 1. Então continuam onde estão. Comparando 1 com 5, quem é menor? 1. Então continuam onde estão. Comparando 1 com 2, quem é menor? 1. Então continuam onde estão

24 ORDENAÇÃO Índice atual: 2. Comparando 4 com 3, quem é menor? 3. Então trocam de posições. Comparando 3 com 5, quem é menor? 3. Então continuam onde estão. Comparando 3 com 2, quem é menor? 2. Então trocam de posições

25 ORDENAÇÃO Índice atual: 3. Comparando 4 com 5, quem é menor? 4. Então continuam onde estão. Comparando 4 com 3, quem é menor? 3. Então trocam de posições

26 ORDENAÇÃO Índice atual: 4. Comparando 5 com 4, quem é menor? 4. Então trocam de posições

27 ORDENAÇÃO Índice atual: 5. Comparando 5 com... não tem mais o que comparar! Está ordenado! Para o aprendizado, esse algoritmo é o mais simples para ser entendido e implementado. Há diversos outros algoritmos para ordenação de vetores e listas. Aí entramos em um assunto chamado complexidade de algoritmos, que visa testar e garantir resultados mais eficientes nos algoritmos de ordenação. E para codificar esse algoritmo... será que é difícil? Não! 12345

28 ORDENAÇÃO var a, b, temp: integer; idades: array[1..10] of integer; begin for a := 1 to 9 do for b := (a + 1) to 10 do if(idades[a] > idades[b]) then begin temp := idades[a]; idades[a] := idades[b]; idades[b] := temp; end; end.

29 ORDENAÇÃO E se eu quisesse ordenar decrescentemente? Ou seja, se tenho: Ficar assim: Basta na verificação de quem é menor, alterar o símbolo para maior, ou seja, ele trocará de posição se o item a ser comparado for maior que o outro. Os itens maiores estarão no começo do vetor. if(idades[a] > idades[b]) then begin if(idades[a] < idades[b]) then begin

30 ORDENAÇÃO Este algoritmo de ordenação de vetores funciona para todos os tipos básicos vistos: integer, real, char, string e boolean. No caso do char e string, como sabemos que uma letra é menor que a outra, para podermos ordená-los? Na tabela ASCII, as letras possuem um valor numérico, e a letra A vem antes dos restantes.


Carregar ppt "LÓGICA DE PROGRAMAÇÃO Pascal. CARACTERÍSTICAS Na linguagem Pascal, o vetor possui um número N de posições, e é recomendável que seja configurado para."

Apresentações semelhantes


Anúncios Google