Upload
trandien
View
234
Download
0
Embed Size (px)
Citation preview
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.