Lógica de Programação Germano Marcos Email: [email protected].

61
Lógica de Programação Germano Marcos Email: [email protected]

Transcript of Lógica de Programação Germano Marcos Email: [email protected].

Page 1: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Lógica de Programação

Germano MarcosEmail: [email protected]

Page 2: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Lógica

Lógica é uma parte da filosofia que estuda o fundamento, a estrutura e as expressões humanas do conhecimento.

Lógica de programação é a técnica de encadear pensamentos para atingir

determinado objetivo.

Page 3: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Lógica

Exemplos de ordenação do raciocínio:

• Todo mamífero é um animal.• Todo homem é mamífero.

• Portanto, todo homem é um animal.

• Pernambuco é um estado do Brasil• Quem nasce em Pernambuco é pernambucano

• Portanto, todos os pernambucanos são brasileiros.

Page 4: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Lógica

• Todo mamífero é um animal. premissa

• Todo homem é mamífero. premissa

• Portanto, todo homem é um animal. conclusão

SILOGISMO Argumento composto por duas premissas e uma conclusão Estabelece uma relação (válida ou não) São estudos do Cálculo Sentencial ou Lógica Proposicional

Page 5: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Silogismo

Silogismo Válido Ex:Pernambuco é um estado do BrasilTiago reside em PernambucoLogo, Tiago reside no Brasil

Silogismo Inválido

Ex:Existem biscoitos feitos de água e sal.

O mar é feito de água e sal.Logo, o mar é um biscoitão.

Page 6: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Lógica

Vamos pensar em novos exemplos: ? ?? ??? ????? ?????? ????????? ????????????

Page 7: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Lógica de Programação

• Um pensamento pode ser representado em vários idiomas, embora sempre expresse a mesma idéia, o mesmo raciocínio.

• A idéia é concebida. Em seguida racionalizada, ordenada, e formalizada através da representação em uma certa linguagem de programação, como C, Java, PHP, Ruby...

Page 8: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Lógica de Programação

• Entretanto, cada linguagem de programação, assim como os idiomas da linguagem natural (linguagem falada e escrita, Português, Inglês, Espanho, Francês), tem suas especificidades.

• Para que possamos representar formalmente um raciocínio, sem nos preocuparmos com um linguagem de programação específica, usamos os ALGORITMOS.

Page 9: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmo

O que é um Algoritmo ?é formalmente uma sequência finita de passos que levam a execução de uma tarefa. Podemos pensar em algoritmo como uma receita, uma sequência de instruções que dão cabo de uma meta específica. Estas tarefas não podem ser redundantes nem subjetivas na sua definição, devem ser claras e precisas.

É um conjunto de passos, finito, sequenciais, pré definidos e não ambíguos.

Page 10: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmo

• E como precisamos detalhar essa sequência de ações/passos, então é necessário pensar com ordem.

• Quer dizer: usar a Lógica!

Page 11: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmo

• No dia a dia usamos algoritmos, mas os conhecemos como receitas.

• Ao fazer um bolo precisamos seguir uma receita.

• Exercício: Vamos pensar numa receita de bolo ou para tomar um banho.

Page 12: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Resposta: Algoritmo 1

Situação Problema => Fazer um Bolo

Dados de entrada => ingredientes (ovos, trigo,açúcar, fermento etc.) Processamento: Unte tabuleiro com manteiga; Misture fermento,trigo,ovos,leite; Mexa a massa; Coloque a massa no tabuleiro; Ligue o forno; Coloque tabuleiro no forno; Aguarde até o bolo assar; Desligue o forno; Tire o bolo do forno;

Saida de dados => Bolo Pronto

S

O

L

U

Ç

Ã

O

Page 13: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Resposta: Algoritmo 2

Situação Problema => Tomar Banho;Dados de entrada => Pessoa suja;

Processamento:1. Tirar a roupa;2. Ir para debaixo do chuveiro;3. Abrir o registro;4. Ensaboar-se;5. Passar shampoo nos cabelos;6. Enxaguar todo o corpo;7. Fechar o registro;

Dados de saída => Pessoa Limpa:

S

O

L

U

Ç

Ã

O

Page 14: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmo

Observação:Existem algumas diferenças entre o nosso algoritmo e aquele

utilizado pelo computador ?

SIM

Nosso Computador

Português Inglês

Pseudocódigos Linhas de Códigos reais e robustas

Page 15: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmo

• Exemplo Clássico: Algoritmo para a troca de uma lâmpada utilizando o português coloquial.

• Embora essas atividades pareçam óbvias, normalmente as realizamos inconscientemente para alcançar os nossos objetivos.

Page 16: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmo da Lâmpada

V. 1• Pegar uma escada• Pegar uma lâmpada nova• Posicionar a escada abaixo da lâmpada a

ser trocada• Subir na escada• Retirar a lâmpada velha• Colocar a lâmpada nova

Page 17: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmo da Lâmpada

• A sequenciação:

É uma forma de reger o fluxo das ações a serem executadas;

A ordem é importante; No exemplo da troca da lâmpada a

sequenciação é linear;

Page 18: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmo da Lâmpada

• E se a lâmpada não estiver queimada?• De acordo com o algoritmo que desenvolvemos a

troca seria feita independentemente de a lâmpada estar ou não queimada!

• Essa possibilidade não foi prevista.• Podemos verificar se a lâmpada acende antes de

buscar a escada e a lâmpada.

Page 19: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmo da Lâmpada

• Para solucionar a possibilidade de a lâmpada não estar queimada podemos refinar um pouco mais o nosso algoritmo anterior.

• Como?

• Efetuando um teste. Vamos lá!

Page 20: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmo da Lâmpada

V. 2• Acionar o interruptor;• Se a lâmpada não acender, então:• Pegar uma escada;• Pegar uma lâmpada nova;• Posicionar a escada abaixo da lâmpada a ser• trocada;• Subir na escada;• Retirar a lâmpada velha;• Colocar a lâmpada nova;

Page 21: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmo da Lâmpada

• Note que agora estabelecemos uma condição ao nosso algoritmo:

• Se essa condição for verdadeira (???) efetuaremos a troca da lâmpada, seguindo os próximos passos.

Page 22: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmo da Lâmpada

• Se a condição for falsa (???) então os passos relativos à troca da lâmpada não serão executados.

• Quer dizer, a lâmpada, que está funcionando, não será trocada.

Page 23: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmo da Lâmpada

• Essa condição de teste que estabelecemos é o chamado Teste de Seleção.

• Dada uma condição, então as ações a serem executadas dependerão da avaliação dessa condição (verdadeira ou falsa).

Page 24: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Atividades

Elaborar um Silogismo Válido e um Inválido;

Elaborar um Algoritmo para trocar um pneu furado.

Page 25: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Lógica de Programação

Lógica de programação é a técnica de encadear pensamentos para atingir

determinado objetivo.

• Por que estamos estudando Lógica de Programação?

• R: para aprendermos a construir algoritmos coerentes e válidos.

Page 26: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmo da Lâmpada

V. 2• Acionar o interruptor;• Se a lâmpada não acender, então:• Pegar uma escada;• Pegar uma lâmpada nova;• Posicionar a escada abaixo da lâmpada a ser• trocada;• Subir na escada;• Retirar a lâmpada velha;• Colocar a lâmpada nova;

Page 27: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmo da Lâmpada

• O algoritmo v.2 parece ser adequado, mas, e no caso de a lâmpada nova estiver defeituosa?

• Podemos melhorar o nosso algoritmo ao ponto de ter que trocar a lâmpada, quantas vezes for necessário, até que funcione.

• Refinando...

Page 28: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmo da Lâmpada

• Acionar o interruptor;• Se a lâmpada não acender, então:

• Pegar uma escada;• Pegar uma lâmpada nova;

• Posicionar a escada abaixo da lâmpada a ser trocada;• Subir na escada;

• Retirar a lâmpada velha;• Colocar a lâmpada nova;

• Se a lâmpada não acender, então:• Retirar a lâmpada queimada;

• Colocar outra lâmpada nova; • Se a lâmpada não acender, então:

• Retirar a lâmpada queimada;• Colocar outra lâmpada nova;

• Se a lâmpada não acender, então:• Retirar a lâmpada queimada;

• Colocar outra lâmpada nova; • Se a lâmpada não acender, então:

• . . . até quando???

V. 3

Page 29: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmo da Lâmpada

• Notemos que o algoritmo v.3 não especifica até quando o teste da lâmpada será feito.

• Refinando ainda mais o algoritmo v.3, porém, agora teremos que lidar com o problema descrito logo a cima.

Page 30: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmo da Lâmpada

O trecho:• Enquanto a lâmpada não acender, faça:• Retirar a lâmpada queimada;• Colocar uma lâmpada nova;

Condição de Parada

Page 31: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmo da Lâmpada

v.4• Acionar o interruptor;• Se a lâmpada não acender, então:• Pegar uma escada;• Pegar uma lâmpada nova;• Posicionar a escada abaixo da lâmpada a ser trocada;• Subir na escada;• Retirar a lâmpada velha;• Colocar a lâmpada nova;• Enquanto a lâmpada não acender, faça:• Retirar a lâmpada queimada;• Colocar uma lâmpada nova;

Page 32: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmo da Lâmpada

• Notemos que, até o momento, definimos um algoritmo para a troca de apenas uma lâmpada (na verdade, o conjunto: lâmpada, soquete, interruptor), testando esse conjunto e trocando tantas lâmpadas sejam necessárias até que o conjunto funcione.

• E se precisássemos trocar várias lâmpadas??

Por exemplo 10...

Page 33: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmo da Lâmpada

V.5• Ir até o interruptor do primeiro soquete;• Enquanto a quantidade de soquetes testados for igual dez, faça:• Acionar o interruptor• Se a lâmpada não acender, então• Pegar uma escada• Pegar uma lâmpada nova• Posicionar a escada abaixo da lâmpada a ser trocada• Subir na escada• Retirar a lâmpada velha• Colocar a lâmpada nova• Enquanto a lâmpada não acender, faça:• Retirar a lâmpada queimada;• Colocar uma lâmpada nova;• Ir até o interruptor do próximo soquete;

Page 34: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmo da Lâmpada

V.5• Ir até o interruptor do primeiro soquete;• Enquando a quantidade de soquetes testados for igual a dez, faça:• Acionar o interruptor Teste de seleção• Se a lâmpada não acender, então• Pegar uma escada• Pegar uma lâmpada nova• Posicionar a escada abaixo da lâmpada a ser trocada• Subir na escada• Retirar a lâmpada velha• Colocar a lâmpada nova• Enquanto a lâmpada não acender, faça: Estrutura de parada• Retirar a lâmpada queimada;• Colocar uma lâmpada nova;• Ir até o interruptor do próximo soquete;

Estrutura de repetição

Page 35: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Desafio 1

Um homem precisa atravessar um rio com um barco que possui capacidade apenas para carregar ele mesmo e mais uma de suas três cargas: um lobo, um bode e um feixe de capim.

O que o homem deve fazer para conseguir atravessar o rio sem perder suas cargas?

Escreva um algoritmo mostrando a resposta, ou seja, indicando todas as ações necessárias para que o homem possa fazer sua travessia segura.

Page 36: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

R: Desafio 1

Leva o bode para o outro lado do rio Volta sozinho Leva o lobo para o outro lado do rio Volta com o bode Leva o capim para o outro lado do rio Volta sozinho Leva o bode para o outro lado do rio

Page 37: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Desafio 2

Três senhoras (dona Branca, dona Rosa e dona Violeta) passeavam pelo parque quando dona Rosa disse:

- Não é curioso que estejamos usando vestidos de cores branca, rosa e violeta, embora nenhuma de nós esteja usando um vestido de cor igual ao seu próprio nome?

- Uma simples coincidência (respondeu a senhora com o vestido violeta).

Qual a cor do vestido de cada senhora?

Page 38: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

R: Desafio 02

Senhora Cor do vestido

Dona Rosa Branca

Dona Branca Violeta

Dona Violeta Rosa

Page 39: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Desafio 03

Três padres jesuítas e três canibais precisam atravessar um rio. Para tal dispõe de um barco com capacidade para 2 pessoas. Por medida de segurança, não se deve permitir que em alguma margem a quantidade de jesuítas seja inferior a de canibais.

Qual a solução para efetuar a travessia com segurança?

Elabore um algoritmo que represente a solução para este problema.

Page 40: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Resolução – Algoritmo 3

1. Início;2. Vai 1 canibal e 1 jesuíta;3. Volta 1 jesuíta;4. Vão 2 canibais;5. Volta 1 canibal;6. Vão 2 jesuítas;7. Volta 1 canibal e 1 jesuíta;8. Vão 2 jesuítas;9. Volta 1 canibal;10. Vão 2 canibais;11. Volta 1 canibal;12. Vão 2 canibais;13. Fim.

Page 41: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Desafio 4 - Torre de Hanoi

Page 42: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Resolução – Torre de Hanoi

1. Laranja => 2;2. Verde => 3;3. Laranja => 3;4. Roxo => 2;5. Laranja => 1;6. Verde => 2;7. Laranja =>2;8. Amarelo => 3;9. Laranja => 3;10. Verde => 1;11. Laranja => 1;12. Roxo => 3;13. Laranja => 2;

14. Verde => 3;15. Laranja => 3;16. Azul => 2;17. Laranja => 1;18. Verde =>2;19. Laranja => 2;20. Roxo => 1;21. Laranja => 3;22. Verde => 1;23. Laranja => 1;24. Amarelo => 2;25. Laranja => 2;26. Verde => 3;

27.Laranja => 3

28.Roxo => 2

29.Laranja => 1

30.Verde => 2

31.Laranja => 2

32.Vermelho => 2

33.Laranja => 3

34.Verde => 1

35.Laranja => 1

36.Roxo => 3

Page 43: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Resolução – Torre de Hanoi

37.Laranja => 238.Verde => 339.Laranja => 340.Amarelo => 141.Laranja => 142.Verde => 243.Laranja => 244.Roxo => 145.Laranja => 346.Verde => 147.Laranja => 148.Azul => 349.Laranja => 250.Verde => 351.Laranja => 3

52.Roxo => 253.Laranja => 154.Verde => 255.Laranja => 256.Amarelo => 357.Laranja => 358.Verde => 159.Laranja => 160.Roxo => 361.Laranja => 262.Verde => 363.Laranja => 3

Page 44: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.
Page 45: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmos

• Qualquer pessoa pode resolver o problema de trocar a lâmpada do seu modo.

Page 46: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmos

• Entretanto, o computador tradicional não tem conhecimento prévio nem adquire experiências, por isso devemos determinar detalhadamente as ações que desejamos que ele execute.

• Como?

Page 47: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmos

• Prevendo possíveis obstáculos e a forma de transpô-los = descrever uma sequência finita de ações que garantam a solução do problema.

Algoritmos

Page 48: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmos

Textualmente:• Mais fácil de entender, pois

usa a nossa linguagem natural;

• Passível de erros, por conta de que as vezes não usamos palavras adequadas

• Menos trabalhoso

Graficamente:• Mais fiel ao raciocínio

original• Substitui algumas palavras

por desenhos• Mais difícil de enteder (??)• Mais trabalhoso

Formas de Representação

Page 49: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmos Gráficos

• Fluxograma Tradicional

• Diagrama de Chapin

Início AçãoEstruturas

de Seleção e de Repetição

Ação Bloco de ações

1a Ação

2a Ação

...

n-ésima Ação

V F1a Ação

2a Ação

...

n-ésima Ação

Page 50: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmos GráficosFluxograma

Fim

Início

Leia B1, B2

Calcule

M (B1 + B2) / 2

Aluno aprovado

Média >= 6

Aluno reprovado

verdadeira Falsa

Page 51: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmos GráficosDiagrama de Chapin

Page 52: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Exercício

Produzir um algoritmo (contendo um teste de seleção) textual.

Este exercício pode ser feito individualmente ou em dupla.

ATENÇÃO!!

Não façam algoritmos pequenos;

Entregar assim que for solicitado.

Page 53: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmos

Textualmente:• Mais fácil de entender, pois

usa a nossa linguagem natural;

• Passível de erros, por conta de que as vezes não usamos palavras adequadas

• Menos trabalhoso

Graficamente:• Mais fiel ao raciocínio

original• Substitui algumas palavras

por desenhos• Mais difícil de enteder (??)• Mais trabalhoso

Formas de Representação

Page 54: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmos Gráficos

• Fluxograma Tradicional

• Diagrama de Chapin

Início AçãoEstruturas

de Seleção e de Repetição

Ação Bloco de ações

1a Ação

2a Ação

...

n-ésima Ação

V F1a Ação

2a Ação

...

n-ésima Ação

Page 55: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmos GráficosFluxograma

Fim

Início

Leia B1, B2

Calcule

M (B1 + B2) / 2

Aluno aprovado

Média >= 6

Aluno reprovado

verdadeira Falsa

Page 56: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmos GráficosDiagrama de Chapin

Page 57: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Exercício

Implementar o algoritmo feito no exercício anterior e transforma-lo em um fluxograma.

Este exercício pode ser feito individualmente ou em dupla.

ATENÇÃO!!

Não façam algoritmos pequenos;

Entregar ainda nesta aula (assim q for solicitado).

Page 58: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Respondendo o exercício

Page 59: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Algoritmo para escovar os dentes

1. início;2. pegar a escova;3. pegar a pasta;4. verificar se tem água;5. - - - - se tiver água, faça;6. - - - - - - - - - - - tirar a tampa da pasta;7. - - - - - - - - - - - colocar a pasta na escova;8. - - - - - - - - - - - fechar a pasta;9. - - - - - - - - - - - escovar os dentes;10. - - - - - - - - - - - abrir a torneira;11. - - - - - - - - - - - enxaguar a boca;12. - - - - - - - - - - - lavar a escova;13. - - - - - - - - - - - fechar a torneira;14. - - - - Fim se;15. guardar a escova;16. guardar a pasta;17. Fim.

Page 60: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Finalizando nosso silogismo

Todo ser humano é um ser vivo

Você é um ser humano

Logo você é um ser vivo

Premissa

Premissa

Conclusão

Termo médio = Ser humano

Termo específico = Você

Termo mais abrangente = Ser vivo

Termos Classificação

Válido

Inválido

ou

O r g a n i z a ç ã o

Page 61: Lógica de Programação Germano Marcos Email: germano_07@hotmail.com.

Finalizando nosso algoritmo

1. início;2. pegar a escova;3. pegar a pasta;4. verificar se tem água;5. - - - - se tiver água, faça;6. - - - - - - - - - - - tirar a tampa da pasta;7. - - - - - - - - - - - colocar a pasta na escova;8. - - - - - - - - - - - fechar a pasta;9. - - - - - - - - - - - escovar os dentes;10. - - - - - - - - - - - abrir a torneira;11. - - - - - - - - - - - enxaguar a boca;12. - - - - - - - - - - - lavar a escova;13. - - - - - - - - - - - fechar a torneira;14. - - - - Fim se;15. guardar a escova;16. guardar a pasta;17. Fim.

Bloco VERDADE