O Portal do Estudante de Computação

Slides:



Advertisements
Apresentações semelhantes
Estruturação de Linguagens (Pascal e C++)
Advertisements

ESTRUTURA DE DADOS Professor: Marcelo Mendes Turma: MBI-1
Programação em Java Prof. Maurício Braga
Linguagem de Programação I
Programação de Computadores
Pesquisa de Informação
Busca sequencial Consiste em percorrer um vetor à procura de um certo elemento. O valor procurado deve ser confrontado com cada elemento do vetor, e o.
ESTRUTURAS DO TIPO FILA
Universidade Federal do Pará Serviço Público Federal Centro de Ciências Exatas e Naturais Departamento de Informática Abril/2001.
Estrutura de Dados I Profº.: ABC Sampaio
Adaptado de material da profa. Maria Aparecida Livi
Introdução à Programação Pascal - Começando Prof. Filipo Studzinski Perotto 2009.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Algoritmos e Estruturas de Dados II
Linguagem C Strings.
Robson Godoi / Sandra Siebra
Algoritmos e Programação
Algoritmos e Programação
O Portal do Estudante de Computação
O Portal do Estudante de Computação
O Portal do Estudante de Computação
GAUSS COM PIVOTEAMENTO
O Portal do Estudante de Computação
O Portal do Estudante de Computação
O Portal do Estudante de Computação
Paradigmas de programação
João Lucas de Oliveira Torres
Ponteiros em Pascal Variáveis ponteiros são aquelas que guardam o endereço de outra, possibilitando o acesso a seu conteúdo. Declaração em Pascal:  var.
Variáveis, Tipos de Dados e Constantes
FATORAÇÃO LU.
O Portal do Estudante de Computação
MÉTODO JACOBI.
Sub-programas. Mecanismo de composição de programas Sub-programa está para peça de LEGO assim como um programa está para a construção.
Aula prática 6 Vetores e Matrizes
Linguagem de Programação II Parte VII
Linguagem de Programação II Parte V
Introdução a Programação COM 100
Ponteiros em Pascal Variáveis ponteiros são aquelas que guardam o endereço de outra, possibilitando o acesso a seu conteúdo. Declaração em Pascal:  var.
Seminário 1: Revisão de C
Introdução ao uso de vatores na linguagem PASCAL.
O Portal do Estudante de Computação
O Portal do Estudante de Computação
Computação Eletrônica
Lógica de Programação/ Algoritmos Engenharia Produção 2014
Fundamentos de Programação
Computação Eletrônica Subprograma. Função O que este programa faz? Program funcao; var n,x: real; begin write('Entre n: '); readln(n); x := cos(n); write(x);
Computação Eletrônica
Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato
Linguagem Pascal Prof. Sérgio Rodrigues.
Linguagem PASCAL1 Módulo 3 Estrutura de Dados.. Linguagem PASCAL2 Arrays (“Variáveis compostas homogêneas”) n Arrays unidimensionais: identificador: array.
Módulo I Capítulo 5: Vetores
ARQUIVOS.
Algoritmos e Estruturas de Dados RECURSIVIDADE. O que é recursividade? Recursividade significa algo ser definido em termos de sí próprio. Em termos de.
“Introdução a Computação” Capítulo II Estruturas de Dados
VARIÁVEIS COMPOSTAS HOMOGÊNEAS UNIDIMENSIONAIS (VETORES)
Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples
Computação Eletrônica
Estruturas de Dados + Algoritmos = Programas
Computação Eletrônica Variáveis Reais e Booleanas.
Programação de Computadores - 1
Introdução à Programação
Prof: Adriano A. Ribeiro
AULA 09 PROGRAMAÇÃO I. Estruturas de Dados Heterogêneas 10/08/2010 Programação I 2 Objetivo: Estudar os tipos de dados heterogêneos:  Registros;  Arrays.
 O que são arrays:  estruturas de dados homogêneas  coleção de elementos do mesmo tipo referenciada por um nome comum  um array pode ser imaginado.
Computadores vs. Programas / Algoritmos Computadores vs. Programas -> Algoritmos O tratamento de problemas através do computador geralmente envolve uma.
Computação Eletrônica Variáveis Inteiras. A memória A memória pode ser vista como um imenso gaveteiro Em cada gaveta, guardamos uma informação. Por exemplo,
Estruturas Homogêneas - Vetores
Vetores de uma dimensão Nota Índice Posição identificando cada elemento Nome Comum para todos os elementos Valor Semelhante a uma variável.
SUB-ROTINAS EM PASCAL PROGRAMAÇÃO MODULARIZADA 252.
Transcrição da apresentação:

O Portal do Estudante de Computação Computação Depressão O Portal do Estudante de Computação www.facebook.com/ComputacaoDepressao www.ComputacaoDepressao.com.br Pascal Lógica de Programação

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

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

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;

Preenchimento var idades: array[1..10] of integer; begin writeln(‘Digite a idade:’); readln(idades[1]); readln(idades[2]); ⋮ readln(idades[10]);

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;

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.

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:

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

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

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

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.

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.

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.

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.

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?

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.

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.

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.

Pesquisa binária

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

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

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

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

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

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

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!

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.

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

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.