30
LÓGICA DE PROGRAMAÇÃO Pascal Computação Depressão O Portal do Estudante de Computação www.facebook.com/ComputacaoDepressao www.ComputacaoDepressao.com.br

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

Embed Size (px)

Citation preview

Page 1: 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

LÓGICA DE PROGRAMAÇÃO Pascal

Computação Depressão

O Portal do Estudante de Computação

www.facebook.com/ComputacaoDepressaowww.ComputacaoDepressao.com.br

Page 2: 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

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”.

Page 3: 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

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

Page 4: 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

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;

Page 5: 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

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]);

Page 6: 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

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;

Page 7: 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

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.

Page 8: 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

PREENCHIMENTO 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:

Page 9: 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

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:

1 2 3 4 5 6 7 8 9 10

Valor: 18 25 54 34 2 95 81 42 108

33

Page 10: 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

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]);

Page 11: 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

LEITURA var contador: integer; idades: array[1..10] of integer;

begin for contador := 1 to 10 do writeln(idades[contador]); readln; end.

Page 12: 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

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.

Page 13: 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

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.

Page 14: 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

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.

Page 15: 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

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.

Page 16: 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

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?

Page 17: 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

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.

Page 18: 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

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.

Page 19: 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

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.

Page 20: 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

PESQUISA BINÁRIA

Page 21: 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

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 10Valor: 18 25 54 34 2 95 81 42 108 33

Nome: idadesÍndice: 1 2 3 4 5 6 7 8 9 10Valor: 2 18 25 33 34 42 54 81 95 108

Page 22: 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

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

Page 23: 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

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.

1 4 3 5 2

Page 24: 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

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.

1 4 3 5 2

1 3 4 5 2

1 2 4 5 3

Page 25: 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

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.

1 2 4 5 3

1 2 3 5 4

Page 26: 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

ORDENAÇÃO

Índice atual: 4.

Comparando 5 com 4, quem é menor? 4. Então trocam de posições.

1 2 3 5 4

1 2 3 4 5

Page 27: 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

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!

1 2 3 4 5

Page 28: 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

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.

Page 29: 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

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

Page 30: 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

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.