Linguagem Computacional - angel.acmesecurity.orgadriano/aulas/lc/2015/4-algoritmos... · 1 -...

30
1 - Algoritmos Prof. Dr. Adriano Mauro Cansian 1 Linguagem Computacional Prof. Dr. Adriano Cansian Prof. Dr. Leandro Alves Neves Algoritmos e Programação – Parte 1 Sumário Noções de lógica Representação do Conhecimento Lógica na Programação Lógica e Algoritmo: Resolução de um Problema Algoritmos: Formas de Apresentação Descrição Narrativa Fluxograma Pseudocódigo Algoritmos: Estruturas Básicas de Controle • Sequenciação • Seleção • Repetição

Transcript of Linguagem Computacional - angel.acmesecurity.orgadriano/aulas/lc/2015/4-algoritmos... · 1 -...

1 - Algoritmos

Prof. Dr. Adriano Mauro Cansian 1

Linguagem Computacional

Prof. Dr. Adriano Cansian Prof. Dr. Leandro Alves Neves

Algoritmos e Programação – Parte 1

Sumário n  Noções de lógica n  Representação do Conhecimento n  Lógica na Programação n  Lógica e Algoritmo: Resolução de um Problema n  Algoritmos: Formas de Apresentação

¡ Descrição Narrativa ¡ Fluxograma ¡ Pseudocódigo

  Algoritmos: Estruturas Básicas de Controle •  Sequenciação •  Seleção •  Repetição

1 - Algoritmos

Prof. Dr. Adriano Mauro Cansian 2

Noções de Lógica n Lógica: estudo filosófico do raciocínio válido.

¡ Sequência coerente, regular e obrigatória de acontecimentos.

¡ Consequência Lógica – Exemplos:

•  Lógica: se Sócrates é homem e todos os homens são mortais, então Sócrates é mortal

•  Definição: se Carlos é solteiro, então ele não é casado

•  Causal: se chover, então o telhado fica molhado •  Decisão: se o Santos ganhar, eu vou festejar

•  O que essas implicações têm em comum?

3

Não pode acontecer de o antencedente ser verdadeiro e o consequente ser falso

Representação do Conhecimento: um exemplo

•  Formalização de Argumentos 1.  Se neva, então faz frio. 2.  Está nevando. 3.  Logo, está fazendo frio.

•  Representação: Vocabulário •  p : “neve” •  q : “frio”

–  Formalização Consequência

Lógica

Conclusão

{p→q, p} |= q

Argumento: sequência de premissas seguida de uma conclusão

1 - Algoritmos

Prof. Dr. Adriano Mauro Cansian 3

O que é um “premissa”? •  Na lógica, uma premissa é uma fórmula

considerada hipoteticamente verdadeira, dentro de uma dada inferência.

•  Premissa significa: a proposição, o conteúdo, às informações essenciais que servem de base para um raciocínio, para um estudo que levará a uma conclusão.

•  Inferência constitui-se de duas partes: –  uma coleção de premissas, –  e uma conclusão.

Lógica na programação

n Qual a importância da Lógica na programação?

1.  Representar o raciocínio. 2.  Permite focar a resolução do

problema.

1 - Algoritmos

Prof. Dr. Adriano Mauro Cansian 4

Lógica na programação •  Para desenvolver um software:

– É preciso representar uma abstração da realidade.

•  Abstração por quê?

– Porque um software não é algo palpável, “real”

– Ele simula uma realidade.

– Por exemplo: No Facebook, o software estabelece uma realidade de que as pessoas estão se comunicando.

Lógica na programação

n A construção de um software considera: 1.  Representar uma realidade (Abstração

e Lógica).

2.  Selecionar os dados relacionados ao problema que será resolvido.

3.  Processar os dados.

4.  Obter os resultados esperados (saída).

1 - Algoritmos

Prof. Dr. Adriano Mauro Cansian 5

n  Algoritmo: sequência ordenada de operações, e sem ambiguidades, para resolução de um problema

q  Ex: Receita de Bolo

Entradas? Saída?

Processos?

Descrição dos passos?

Lógica e Algoritmo

Problema

Solução

Produto Final

Análise Preliminar

Teste de Qualidade Alteração

Lógica e Algoritmo

1 - Algoritmos

Prof. Dr. Adriano Mauro Cansian 6

© Adriano Mauro Cansian 11

Para fazer um software •  Então, tecnicamente, para fazer um software

temos que: – Representar uma realidade. – Selecionar de dados que estejam relacionados

com o problema a ser resolvido – Processar os dados. – Obter os dos resultados esperados.

(Lembrar da figura do microondas)

O Que são “dados” afinal?

•  Tudo que o software vai processar e devolver. – Exemplo: quando anexo uma foto a um Email,

o programa tem que saber como representar aqueles dados da foto dentro da mensagem de Email.

•  Depois, do outro lado, o software tem que saber representar novamente os dados, para mostrar a foto.

© Adriano Mauro Cansian 12

1 - Algoritmos

Prof. Dr. Adriano Mauro Cansian 7

© Adriano Mauro Cansian 13

Dados & Operações

•  Para resolução de um problema: –  escolher uma abstração da realidade.

•  Decidir o que é relevante para o problema.

–  informação: é um conjunto de dados.

•  A forma como se representa informação e suas

operações estão ligadas

© Adriano Mauro Cansian 14

Como representar dados •  Como representar dados?

–  depende do que se vai fazer. •  não é uma tarefa muito trivial. •  não existe uma única solução. •  não existe receita única.

–  a solução de um problema no computador é um modelo.

–  a construção do modelo pode ter muitos níveis de detalhe.

Quanto Mais complexo = mais detalhes.

1 - Algoritmos

Prof. Dr. Adriano Mauro Cansian 8

© Adriano Mauro Cansian 15

Como fazer as operações?

•  A decisão é influenciada pelo problema. –  Por exemplo: Windows no PC ou Celular Iphone ?.

•  Programador ➞ focaliza o problema

– Programador usa linguagens que se concentrar nas características do problema: alto nível.

© Adriano Mauro Cansian 16

Algoritmo (1)

•  É um processo sistemático para a resolução de problemas:

– Dois aspectos básicos no estudo de algoritmos ➨ ”correção” e ”análise”.

– Correção: exatidão do método empregado.

– Análise: verificar a eficiência do algoritmo (ver se a “coisa” realmente funciona).

1 - Algoritmos

Prof. Dr. Adriano Mauro Cansian 9

© Adriano Mauro Cansian 17

Algoritmo (2)

•  O algoritmo tem que fornecer uma “saída” a partir de uma “entrada”. –  Ou seja, obter o resultado do problema.

– Durante o processo, manipula dados gerados a partir de sua entrada.

© Adriano Mauro Cansian 18

Algoritmo (3) •  Um algoritmo é projetado em termos de “Tipos

de Dados”. •  O que é um “tipo de dados” ? •  É tudo que o computador vai “ler”, “escrever” e

processar. – Pode ser um número digital no teclado, ou

pode ser um sensor de infravermelho de um robô para detectar um obstáculo.

•  Veremos mais sobre ler e escrever mais adiante.

1 - Algoritmos

Prof. Dr. Adriano Mauro Cansian 10

Algoritmo (4)

Como implementar um algoritmo em uma Linguagem de programação?

•  Temos que saber: – Como representá-lo nesta linguagem.

• Quais são as regras e comandos. • Quais Tipos de Dados e Operações

suportadas pelo computador. – Como representar os dados.

•  Usando “Estruturas de Dados”. © Adriano Mauro Cansian 19

© Adriano Mauro Cansian 20

Algoritmos & Estruturas de Dados

•  Resolução de um Problema – Algoritmo

• Representação dos passos para resolver um problema.

– Estrutura de Dados • Representação da informação, ou seja, dos

dados que serão tratados.

1 - Algoritmos

Prof. Dr. Adriano Mauro Cansian 11

Algoritmos

© Adriano Mauro Cansian 22

Algoritmos - conceitos (1)

•  A palavra algoritmo, à primeira vista, parece-nos estranha.

•  Mas fazemos uso constantemente de algoritmos .

•  Algoritmos frequentemente usados: –  instruções para se utilizar um aparelho eletrodoméstico;

–  uma receita para preparo de algum prato;

–  a regra para determinação de máximos e mínimos de funções por derivadas sucessivas;

1 - Algoritmos

Prof. Dr. Adriano Mauro Cansian 12

© Adriano Mauro Cansian 23

Algoritmos - conceitos (2) q “Um conjunto finito de regras que provê uma

sequência de operações para resolver um tipo de problema específico.” [KNUTH]

q “Sequência ordenada, e não ambígua, de

passos que levam à solução de um dado problema.” [TREMBLAY]

© Adriano Mauro Cansian 24

Por que precisamos de algoritmos?

•  A importância do algoritmo está no fato de termos que especificar uma sequência de passos lógicos, para que o computador possa executar uma tarefa qualquer.

•  O computador não tem vontade própria. –  Faz apenas o que mandamos.

•  Com um algoritmo, podemos conceber uma solução para um dado problema, independente de uma linguagem computacional específica.

1 - Algoritmos

Prof. Dr. Adriano Mauro Cansian 13

© Adriano Mauro Cansian 25

Algoritmo e Instruções

•  Um texto contendo comandos (instruções) – Devem ser executados na ordem especificada. – Corresponde a representação concreta. – Execução: o algoritmo é um evento dinâmico è ele evolui no tempo.

– Ele “roda”.

© Adriano Mauro Cansian 26

Algoritmo e Instruções

•  Deve utilizar Estruturas Básicas de controle – Formas naturais de pensar, e adequadas à

construção de algoritmos inteligíveis. – Sempre em “alto nível”. – Por exemplo:

SE ......... ENTÃO .......... SENÃO ........

1 - Algoritmos

Prof. Dr. Adriano Mauro Cansian 14

© Adriano Mauro Cansian 27

Imperativo: ordens!

•  Algoritmo possui um caráter imperativo. •  Deve-se dar “ordens” no algoritmo:

– Uma ação no algoritmo: um comando, ou ordem

•  (“faça” / “execute” / “some” / “imprima”).

– Ordem executável para obter um efeito desejado.

Características dos algoritmos

Características e formas de representação

1 - Algoritmos

Prof. Dr. Adriano Mauro Cansian 15

© Adriano Mauro Cansian 29

Características dos algoritmos •  Todo algoritmo deve apresentar algumas

características básicas: 1.  Não dar margem à dupla interpretação (não ser

ambíguo); 2.  Ter capacidade de receber dado(s) de entrada; 3.  Poder gerar informações de saída; 4.  Ser efetivo, ou seja todas as etapas

especificadas no algoritmo devem ser alcançáveis em um tempo finito;

5.  Ter fim.

© Adriano Mauro Cansian 30

Formas de apresentação

•  Algoritmos podem ser representados, dentre outras maneiras, por: – DESCRIÇÃO NARRATIVA

– FLUXOGRAMA

– LINGUAGEM ALGORÍTMICA •  Pseudo-linguagem, parecida com a linguagem de

programação que iremos usa.

1 - Algoritmos

Prof. Dr. Adriano Mauro Cansian 16

© Adriano Mauro Cansian 31

Descrição narrativa (1) •  Uso da língua nativa para escrever. •  Exemplo: Receita de Bolo

1.  Selecione 50g manteiga, 2 ovos, 2 Kg de farinha, 500ml leite e 100g fermento.

2.  Misture os ingredientes;3.  Despeje a mistura na fôrma de bolo;4.  Leve a fôrma ao forno;5.  Espere 20 minutos;6.  Retire a fôrma do forno;7.  Deixe esfriar;8.  Prove.

© Adriano Mauro Cansian 32

Descrição narrativa (2) •  Vantagens:

•  A língua nativa é bastante conhecida;

•  Desvantagens: –  Imprecisão; – Pouca confiabilidade

•  Por causa da imprecisão; – Extenso

•  Normalmente, escreve-se muito, para dizer pouca coisa.

1 - Algoritmos

Prof. Dr. Adriano Mauro Cansian 17

© Adriano Mauro Cansian 33

Fluxograma (1)

•  Utilização de símbolos gráficos para representar algoritmos.

•  No fluxograma existem símbolos padronizados para início, entrada de dados, cálculos, saída de dados, fim, dentre outros.

© Adriano Mauro Cansian 34

Fluxograma (2)

Início

Leia NUM

DOBRO ← NUM*2

Escreva DOBRO

Fim

Início do algoritmo Entrada do número Cálculo do dobro do número Apresentação do resultado Fim do algoritmo

1 - Algoritmos

Prof. Dr. Adriano Mauro Cansian 18

Linguagem algorítmica

© Adriano Mauro Cansian 36

Linguagem Algorítmica (1) •  Consiste na definição de uma pseudo-linguagem

de programação para representar algoritmos; •  Comandos e instruções são em português ou inglês. •  Exemplo: Algoritmo CALCULA_DOBRO

1.  início2.   Leia NUM3.   DOBRO ß 2 * NUM

4.   Escreva DOBRO5.  fim

1 - Algoritmos

Prof. Dr. Adriano Mauro Cansian 19

© Adriano Mauro Cansian 37

Linguagem Algorítmica (2) •  Vantagens:

–  Independência da solução. •  Trata-se de solução lógica apenas. •  Não interessa quem vai executar.

–  Usa o português como linguagem de base; –  Pode-se definir quais e como os dados vão estar

estruturados; –  Passagem quase imediata do algoritmo para uma linguagem

de programação qualquer.

•  Desvantagens: –  Exige a definição de uma linguagem não real para trabalho; –  Não padronizado.

© Adriano Mauro Cansian 38

Resolvendo um problema manualmente

•  Suponha que desejamos resolver o seguinte problema: –  A partir de dois números, que serão informados,

calcular a adição dos mesmos.

•  Seria bem provável que fosse utilizados os passos a seguir: a.  saber quais são os números;

b.  calcular a soma dos números;

c.  responder à questão com o valor do resultado.

1 - Algoritmos

Prof. Dr. Adriano Mauro Cansian 20

© Adriano Mauro Cansian 39

Resolvendo o problema em nosso computador

•  Vejamos como seria resolvido esse mesmo problema em termos das operações básicas citadas anteriormente: –  a) operação de entrada de dados dos números ;

–  b1) movimento do valor dos números entre a memória e a ULA;

–  b2) operação aritmética de somar os 2 números;

–  b3) movimentação do resultado da ULA para guardar na memória;

–  c) operação de saída do resultado, que está guardado na memória, para o dispositivo de saída desejado.

Escrita de algoritmos

1 - Algoritmos

Prof. Dr. Adriano Mauro Cansian 21

© Adriano Mauro Cansian 41

Escrita de algoritmos

•  Escrever algoritmos ou programar, consiste em:

•  Dividir qualquer problema em muitos pequenos passos.

• Usando uma ou mais operações básicas possíveis.

© Adriano Mauro Cansian 42

Passos, comandos e linguagem (1)

•  Passos que compõem o algoritmo são denominados de comandos.

•  Lembrando: Os comandos de uma linguagem de programação podem ser: – De “Linguagens de baixo nível”.

– De “Linguagens de alto nível”.

1 - Algoritmos

Prof. Dr. Adriano Mauro Cansian 22

© Adriano Mauro Cansian 43

Passos, comandos e linguagem (2)

•  Em uma linguagem de alto nível teríamos uma sequência de comandos assim:

Leia X,Y SOMA ß X + Y Escreva SOMA

Vamos trabalhar somente com alto nível

Estruturas Básicas da Construção de Algoritmos

1 - Algoritmos

Prof. Dr. Adriano Mauro Cansian 23

© Adriano Mauro Cansian 45

Estruturas básicas

•  Existem 3 estruturas básicas de controle, nas quais se baseiam os algoritmos: – Sequenciação;

– Decisão; – Repetição.

•  Detalharemos cada uma delas, a seguir:

© Adriano Mauro Cansian 46

Sequenciação (1) •  Os comandos do algoritmo fazem parte de uma

sequência. •  É importante a ordem na qual se encontram

–  Pois serão executados um de cada vez, estritamente, de acordo com essa ordem.

Comando-1Comando-2

Comando-3

:

Comando-n

1 - Algoritmos

Prof. Dr. Adriano Mauro Cansian 24

© Adriano Mauro Cansian 47

Decisão ou seleção (1) •  Essa estrutura também é conhecida por estrutura

condicional. •  A execução depende de uma condição acontecer. •  Vejamos o funcionamento:

SE <condição> ENTÃO

<executa comando-1> SENÃO

<executa comando-2>

Ou seja, SE a <condição> for verdadeira (então) será executado o <comando-1> e, em caso contrário (senão), teremos a execução de <comando-2>.

© Adriano Mauro Cansian 48

Decisão ou seleção (2) •  A decisão deve ser sempre usada quando há a

necessidade de testar alguma condição

•  E, em função desta condição, tomar uma atitude (realizar uma ação).

•  Em nosso dia-a-dia, estamos sempre tomando decisões, vejamos um exemplo:

Se tiver dinheiro suficiente, então vou jantar no Habbibs; Caso contrário (senão), vou comer um misto no Chalé;

1 - Algoritmos

Prof. Dr. Adriano Mauro Cansian 25

© Adriano Mauro Cansian 49

Repetição ou iteração (1)

•  Também é conhecida por “looping” ou laço.

•  Tarefas individuais são repetidas um número determinado de vezes.

–  Ou tantas vezes quanto uma condição lógica seja satisfeita.

•  Exemplos: a)  Vou atirar pedras na vidraça até quebrá-la;

b)  Baterei cinco pênaltis; c)  Enquanto tiver saúde e dinheiro, vou viajar de carro.

© Adriano Mauro Cansian 50

Repetição ou iteração (2)

•  Ex.(a): vai-se repetir a ação de atirar pedras na janela até que seja satisfeita a condição de quebrar a janela.

•  Ex.(b): haverá a repetição da atitude de bater um pênalti um número determinado de vezes (condição = cinco).

•  Ex. (c): a condição que me permitirá continuar viajando de carro é ter dinheiro e saúde.

1 - Algoritmos

Prof. Dr. Adriano Mauro Cansian 26

Alguns exemplos de estruturas

Em algoritmos

51

Exemplo: Sequenciação

•  Problema: Trocar uma lâmpada •  Solução (Algoritmo explorando sequenciação)

– Algoritmo trocar_lâmpada_versão1 1.  pegar uma escada; 2.  posicionar a escada embaixo da lâmpada; 3.  buscar uma lâmpada nova; 4.  subir na escada; 5.  retirar lâmpada queimada; 6.  colocar lâmpada nova; 7.  descer da escada;

1 - Algoritmos

Prof. Dr. Adriano Mauro Cansian 27

Exemplo: Seleção ou Decisão

•  Problema: Trocar uma lâmpada •  Solução (Algoritmo explorando sequenciação e seleção)

– Algoritmo trocar_lâmpada_versão2 1.  acionar o interruptor; 2.  se a lâmpada não acender, então

a.  pegar uma escada; b.  posicionar a escada embaixo da lâmpada; c.  buscar uma lâmpada nova; d.  subir na escada; e.  retirar lâmpada queimada; f.  colocar lâmpada nova. g.  descer da escada;

Exemplo: Repetição •  Problema: Trocar 10 lâmpadas queimadas

•  Solução (Algoritmo explorando sequenciação, seleção e repetição)

– Algoritmo trocar_lâmpada_versão3 1.  Para 10 lâmpadas, faça

i.  ir até o interruptor da lâmpada 1 de 10; ii.  acionar o interruptor; iii.  se a lâmpada não acender, então

a.  pegar uma escada; b.  posicionar a escada embaixo da lâmpada; c.  buscar uma lâmpada nova; d.  subir na escada; e.  retirar lâmpada queimada; f.  colocar lâmpada nova; g.  Descer da escada;

2.  Repetir etapas 1.i até 1.iii. para próxima lâmpada

1 - Algoritmos

Prof. Dr. Adriano Mauro Cansian 28

© Adriano Mauro Cansian 55

Conclusão das estruturas básicas

•  A utilização combinada dessas 3 estruturas descritas vai permitir expressar a solução para problemas, usando qualquer que seja a linguagem.

•  Todas as linguagens de programação oferecem essas estruturas.

© Adriano Mauro Cansian 56

Refinamentos sucessivos (1)

•  Um algoritmo é considerado completo se todos os seus comandos forem do entendimento do seu executor.

•  Um comando que não for do entendimento do executor terá que ser desdobrado em novos comandos, que constituirão um refinamento do comando inicial. –  E assim sucessivamente, até que os comandos

sejam entendidos pelo destinatário.

1 - Algoritmos

Prof. Dr. Adriano Mauro Cansian 29

© Adriano Mauro Cansian 57

Refinamentos sucessivos (2)

•  Por exemplo, o algoritmo para calcular a média aritmética de dois números, pode ser escrito da seguinte forma:

Algoritmo CALCULA_MÉDIA Início

Receba os dois números Calcule a média dos dois números Exiba o resultado

Fim

© Adriano Mauro Cansian 58

Refinamentos sucessivos (3) •  Podemos desdobrar o comando “Calcule a média

dos dois números” em:

Soma os dois números

Divida o resultado por 2

•  Após esse refinamento, o algoritmo pode ser considerado completo.

1 - Algoritmos

Prof. Dr. Adriano Mauro Cansian 30

© Adriano Mauro Cansian 59

Conclusão sobre refinamentos sucessivos

•  À medida que o algoritmo passa a ser maior e mais complexo, esta visão global torna-se menos clara e, neste caso, um algoritmo apresentado com os refinamentos sucessivos separados oferece uma melhor abordagem para quem precisar entendê-lo.

© Adriano Mauro Cansian 60

Resumo •  Até aqui vimos:

–  Definições de algoritmos. –  Características e modelos descritivos dos algoritmos. –  Linguagem algorítmica. –  Ambiente, funcionamento e escrita dos algoritmos. –  Estruturas básicas: seqüenciação, decisão, seleção e

repetição –  Refinamentos sucessivos.