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

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

O Portal do Estudante de Computação

Apresentações semelhantes


Apresentação em tema: "O Portal do Estudante de Computação"— Transcrição da apresentação:

1 O Portal do Estudante de Computação
Computação Depressão O Portal do Estudante de Computação Pascal Lógica de Programação

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]); readln(idades[2]); 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 Nome: idades Índice: 1 2 3 4 5 6 7 8 9 10 Valor: var
idades: array[1..10] of integer; Na memória do computador teremos algo mais ou menos assim: Nome: idades Índice: 1 2 3 4 5 6 7 8 9 10 Valor:

9 Preenchimento Nome: idades Índice: 1 2 3 4 5 6 7 8 9 10 Valor: 18 25
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: 1 2 3 4 5 6 7 8 9 10 Valor: 18 25 54 34 95 81 42 108 33

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’) 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: 1 2 3 4 5 6 7 8 9 10 Valor: 18 25 54 34 95 81 42 108 33 Nome: idades Índice: 1 2 3 4 5 6 7 8 9 10 Valor: 18 25 33 34 42 54 81 95 108

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: 1 4 3 5 2 1 2 3 4 5

23 Ordenação 1 4 3 5 2 Í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. 1 4 3 5 2

24 Ordenação 1 4 3 5 2 1 3 4 5 2 1 2 4 5 3 Í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. 1 4 3 5 2 1 3 4 5 2 1 2 4 5 3

25 Ordenação 1 2 4 5 3 1 2 3 5 4 Í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. 1 2 4 5 3 1 2 3 5 4

26 Ordenação 1 2 3 5 4 1 2 3 4 5 Índice atual: 4.
Comparando 5 com 4, quem é menor? 4. Então trocam de posições. 1 2 3 4 5

27 Ordenação 1 2 3 4 5 Í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!

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 1 4 3 5 2 5 4 3 2 1

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 "O Portal do Estudante de Computação"

Apresentações semelhantes


Anúncios Google