introducao a logica de programacao - geral_alunos

78
Introdução à Lógica de Programação

Upload: leomaryo

Post on 30-Jun-2015

357 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introducao a Logica de Programacao - GERAL_ALUNOS

Introdução à Lógica de Programação

Page 2: Introducao a Logica de Programacao - GERAL_ALUNOS

Tópicos

� Introdução� Conceitos gerais� Raciocínio matemático� Noções de Lógica� Noções de Lógica� Algoritmos� Exercícios

Page 3: Introducao a Logica de Programacao - GERAL_ALUNOS

Tópicos

� Introdução� Conceitos gerais

� Programação estruturada� Desenvolvimento top-down� Modularização� Estruturas de controleConfiabilidade� Confiabilidade

� Manutenibilidade� Pseudolinguagem – Portugol

� Raciocínio matemático

� Noções de Lógica� Existe Lógica no dia-a-dia?� Algoritmizando a Lógica

Page 4: Introducao a Logica de Programacao - GERAL_ALUNOS

Tópicos

� Algoritmos� Por que precisamos de algoritmos?� Características� Algoritmo x QualidadeMétodo para construção de algoritmos� Método para construção de algoritmos�Método Cartesiano� Planejamento Reverso� Tabelas de Decisão

� Exercícios

Page 5: Introducao a Logica de Programacao - GERAL_ALUNOS

Introdução

Muitos anos se passaram desde os primórdios da história da computação.

Já vivemos vários paradigmas de programação.

Uma base de conhecimento que não mudou e não mudará nunca – a Lógica de Programação .

Lógica de Programação e Raciocínio Matemático - interpretação de um problema e a utilização correta de uma fórmula. Não existem “fórmulas” em Informática. Aperfeiçoamento de nossa forma de pensar e raciocinar sobre um problema.

Extrair do mesmo uma solução eficiente e eficaz.É preciso aprender a pensar sobre os problemas, extraindo deles o máximo de informações

Page 6: Introducao a Logica de Programacao - GERAL_ALUNOS

Introdução

A solução que criamos para um determinado problema necessita ser exteriorizada e expressa numa linguagem publicamente conhecida.

Assim, utilizamos a lógica de programação para Assim, utilizamos a lógica de programação para desenvolver nossas soluções e os algoritmos para apresentar essas soluções ao mundo.

Page 7: Introducao a Logica de Programacao - GERAL_ALUNOS

Introdução

A maioria do material se concentra em ensinar como representamos estruturas de controle e atribuições, ou como declaramos variáveis, poucos orientam o aluno na forma de pensar.

Precisamos mais do que “fórmulas”, precisamos Aprender A Pensar!

Page 8: Introducao a Logica de Programacao - GERAL_ALUNOS

Introdução

Inicialmente, veremos conceitos gerais sobre Programação.

Posteriormente, vocês terão exercícios de Raciocínio Matemático que lhes exercitarão o poder de PENSAR!

Em seguida, apresentaremos como desenvolver algoritmos de soluções para Sistemas.

E por último, vamos conhecer uma Linguagem a fim de vermos nossos algoritmos funcionando – ao vivo e à cores !

Page 9: Introducao a Logica de Programacao - GERAL_ALUNOS

Programação Estruturada

A Programação Estruturada pode ser entendida como uma forma de programar que visa facilitar a escrita, entendimento, validação e manutenção de programas.

Para Dijkstra, “a arte de programar consiste na arte de organizar e dominar a complexidade”.dominar a complexidade”.

A Programação Estruturada procurar reduzir o nível de complexidade através de três níveis:a) desenvolvimento do programa em diferentes fases por refinamento

sucessivo (desenvolvimento top-down);b) decomposição do programa total em módulos funcionais, organizados de

preferência num sistema hierárquico;c) uso de um número limitado de estruturas básicas de fluxo de controle

dentro de cada módulo.

Page 10: Introducao a Logica de Programacao - GERAL_ALUNOS

Desenvolvimento Top-down

Na Programação Estruturada, ao desenvolvermos um algoritmo, temos como objeto um produto final – o programa.

Para termos esta transição, passamos por várias fases, no sentido “cima para baixo”.“cima para baixo”.

Cada fase é documentada e principalmente obtida por “refinamento” da fase anterior

Até chegarmos a um nível de detalhamento que permita implementar o algoritmo diretamente na linguagem de programação.

Page 11: Introducao a Logica de Programacao - GERAL_ALUNOS

Modularização

A solução final de um problema é obtida através de soluções de subproblemas

Permite dividir o programa em módulos com subfunções claramente delimitadassubfunções claramente delimitadas

Podem ser implementados separadamente, por diversos programadores de uma equipe.

Page 12: Introducao a Logica de Programacao - GERAL_ALUNOS

Estruturas de controle

São representadas pela seqüência simples, o comando condicional e o comando repetitivo

Fornecem ao programador um aumento da legibilidade e compreensão de cada módulo de legibilidade e compreensão de cada módulo de programa.

Assim, temos como uma das principais normas da Programação Estruturada: não usar comandos de desvio (GOTO).

Page 13: Introducao a Logica de Programacao - GERAL_ALUNOS

Confiabilidade

Medimos a confiabilidade de um sistema através de sua resposta ao uso constante, no tocante a:

� não apresentar erros;

� corresponder às especificações.

Atualmente, a sociedade está totalmente dependente dos sistemas de Atualmente, a sociedade está totalmente dependente dos sistemas de computação.

Nos fins dos anos 60, constatou-se que as sistemáticas usadas pelos programadores eram os grandes responsáveis pela baixa confiabilidade dos programas.

Como solução destes problemas, surgiu a Programação Estruturada (PE).

Page 14: Introducao a Logica de Programacao - GERAL_ALUNOS

Manutenibilidade

As revisões sofridas por um programa (releases) tanto para correção de erros quanto para mudanças de especificação, são consideradas como manutenção de software.

Os programas devem passar por testes exaustivos de confiabilidade antes de serem colocados em produção.

Falhas nesta fase levam a altos níveis de manutenção, que conseqüentemente, levam a altos custos.

Page 15: Introducao a Logica de Programacao - GERAL_ALUNOS

PseudoLinguagem - PORTUGOL

Não podemos representar nossas soluções em algoritmos totalmente escritos em português.

É fácil perceber que a linguagem natural, não formalizada, geraria ambigüidades.formalizada, geraria ambigüidades.

Assim, temos o PORTUGOL, que é uma pseudolinguagem de programação (simbiose do Português com o ALGOL e PASCAL)

Page 16: Introducao a Logica de Programacao - GERAL_ALUNOS

PseudoLinguagem - PORTUGOL

Permite pensarmos no problema e não na máquina que vai executar o algoritmo.

Além disso, não perdemos a flexibilidade e continuamos a ter a proximidade com a linguagem continuamos a ter a proximidade com a linguagem humana, facilitando, portanto, a interpretação.

Page 17: Introducao a Logica de Programacao - GERAL_ALUNOS

Raciocínio Matemático

As crianças aprendem facilmente como adicionar e subtrair valores.

Suas dificuldades começam no momento em que elas se deparam com problemas e necessitam identificar quais operações trarão soluções para os mesmos.soluções para os mesmos.

Podemos pensar também num algoritmo como um “mecanismo” de transformação de entradas em saídas.

Assim, um algoritmo ao ser “executado”, receberá algumas entradas, que serão processadas e nos devolverá algumas saídas.

Page 18: Introducao a Logica de Programacao - GERAL_ALUNOS

Noções de Lógica

O QUE É LÓGICA?

Lógica trata da correção do pensamento.

Como filosofia, ela procura saber por que Como filosofia, ela procura saber por que pensamos assim e não de outro jeito.

Com arte ou técnica, ela nos ensina a usar corretamente as leis do pensamento.

Page 19: Introducao a Logica de Programacao - GERAL_ALUNOS

Noções de Lógica

Poderíamos dizer também que a Lógica é a arte de pensar corretamente e, visto que a forma mais complexa do pensamento é o raciocínio, a Lógica estuda ou tem em vista a correção do raciocínio.

Podemos ainda dizer que a lógica tem em vista a ordem da Podemos ainda dizer que a lógica tem em vista a ordem da razão.

Isto dá a entender que a nossa razão pode funcionar desordenadamente, pode pôr as coisas de pernas para o ar.

Por isso a Lógica ensina a colocar “Ordem no Pensamento”.

Page 20: Introducao a Logica de Programacao - GERAL_ALUNOS

Noções de Lógica

Exemplos:1) Todo o mamífero é animal.

Todo cavalo é mamífero.

Portanto, todo cavalo é animal.

2) Todo mamífero bebe leite.2) Todo mamífero bebe leite.

O homem bebe leite.

Portanto, todo homem é mamífero e animal.

3) Argos é um país do planeta Krypton

Todos os argonautas são do planeta Argos

Logo, todos os argonautas são kryptonianos

Sologismos: um argumento composto de duas premissas e uma conclusão, e estabelece uma relação que pode ser válida ou não.

Page 21: Introducao a Logica de Programacao - GERAL_ALUNOS

LÓGICA DE PROGRAMAÇÃO

Definição:

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

Page 22: Introducao a Logica de Programacao - GERAL_ALUNOS

Existe Lógica no dia-a-dia?

Sempre que pensamos, o raciocínio e a lógica nos acompanham necessariamente.

Também quando falamos, pois a palavra falada é a representação do pensamento; e, visto que a palavra escrita é a representação da palavra falada, também pensamos quando escrevemos, utilizando a Lógica ou falada, também pensamos quando escrevemos, utilizando a Lógica ou a Ilógica.

Daí percebemos a importância da Lógica na nossa vida não só na teoria, como também na prática, já que quando queremos pensar, falar ou escrever corretamente precisamos colocar em Ordem o Pensamento, isto é, utilizar a Lógica.

Page 23: Introducao a Logica de Programacao - GERAL_ALUNOS

Existe Lógica no dia-a-dia?

Exemplos:

a) A gaveta está fechada.

A bala está na gaveta.

Preciso primeiro abrir a gaveta, para depois pegar a bala.Preciso primeiro abrir a gaveta, para depois pegar a bala.

b) João é mais velho que José.

Marcelo é mais novo que José.

Portanto, João é mais velho que Marcelo.

Page 24: Introducao a Logica de Programacao - GERAL_ALUNOS

Algoritmizando a Lógica

Construir algoritmos é o objetivo fundamental de toda a programação, mas, afinal,

O que é Algoritmo?

“Algoritmo é uma seqüência de passos que visam atingir um objetivo bem definido.”objetivo bem definido.”

Apesar de achar este nome estranho, algoritmos são comuns em nosso cotidiano, como, por exemplo, uma receita de bolo.

Nela está descrita uma série de ingredientes necessários, uma seqüência de diversos passos - ações - a serem cumpridos para que se consiga fazer determinado tipo de bolo - objetivo bem definido aguardado ansiosamente por todos.

Page 25: Introducao a Logica de Programacao - GERAL_ALUNOS

Algoritmizando a Lógica

Para aprimorar nosso conceito de algoritmo, vamos tornar mais evidente alguns outros conceitos, como, por exemplo, o de ação:

“Ação é um acontecimento que a partir de um estado inicial, após um período de tempo finito, produz um estado final previsível e bem definido”, em que: “Estado é a situação atual de dado objeto.”definido”, em que: “Estado é a situação atual de dado objeto.”

Page 26: Introducao a Logica de Programacao - GERAL_ALUNOS

Algoritmo

Outros algoritmos freqüentemente encontrados são:

� instruções para se utilizar um aparelho eletrodoméstico;

� uma receita para preparo de algum prato;� uma receita para preparo de algum prato;

� guia de preenchimento para declaração do imposto de renda;

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

� a maneira como as contas de água, luz e telefone são calculadas mensalmente; etc.

Page 27: Introducao a Logica de Programacao - GERAL_ALUNOS

Algoritmo

São vários os conceitos para algoritmo. Escolhemos alguns para serem apresentados aqui:

� “Um conjunto finito de regras que provê uma seqüência de operações para resolver um tipo de problema específico” [KNUTH][KNUTH]

� “Seqüência ordenada, e não ambígua, de passos que levam à solução de um dado problema” [TREMBLAY]

� “Processo de cálculo, ou de resolução de um grupo de problemas semelhantes, em que se estipulam, com generalidade e sem restrições, as regras formais para a obtenção do resultado ou da solução do problema” [AURÉLIO]

Page 28: Introducao a Logica de Programacao - GERAL_ALUNOS

Algoritmo

Portanto, podemos redefinir Algoritmo como:

“Algoritmo é a descrição de um conjunto de ações que, obedecidas, resultam numa sucessão finita de passos, atingindo o objetivo.”

Em geral um algoritmo destina-se a resolver um problema: fixa um padrão de comportamento a ser seguido, uma norma de execução a ser trilhada, com o objetivo de alcançar a solução de um problema.

O que é padrão de comportamento?

Page 29: Introducao a Logica de Programacao - GERAL_ALUNOS

Algoritmo

Imagine a seguinte seqüência de números:

1, 6, 11, 16, 21, 26....

Para determinar o sétimo elemento da série, precisamos Para determinar o sétimo elemento da série, precisamos descobrir qual a sua regra de formatação, isto é, seu padrão de comportamento.

Para tal, observamos que a série obedece uma constância; visto que existe uma diferença constante entre cada elemento, a qual pode ser facilmente determinada, somos capazes de determinar o sétimo e qualquer outro termo.

Page 30: Introducao a Logica de Programacao - GERAL_ALUNOS

Algoritmo

Podemos, então, descrever uma atividade bem cotidiana, como, por exemplo, trocar uma lâmpada.

Apesar de aparentemente óbvias demais, muitas vezes fazemos esse tipo de atividade inconscientemente. Sem percebermos seus pequenos detalhes.detalhes.

Vejamos se ela fosse descrita passo a passo:� pegue a escada;

� posicione-a embaixo da lâmpada;

� busque uma lâmpada nova;

� suba na escada;

� retire a lâmpada velha;

� coloque a lâmpada nova.

Page 31: Introducao a Logica de Programacao - GERAL_ALUNOS

Algoritmo

E se a lâmpada não estivesse queimada?

Page 32: Introducao a Logica de Programacao - GERAL_ALUNOS

Algoritmo

�pegue a escada;

�posicione-a embaixo da lâmpada;

�busque uma lâmpada nova;

�acionar o interruptor

se a lâmpada não acender, então:�se a lâmpada não acender, então:• suba na escada;

• retire a lâmpada velha;

• coloque a lâmpada nova.

Page 33: Introducao a Logica de Programacao - GERAL_ALUNOS

AlgoritmoOTIMIZANDO

Para otimizar, o condicional deve ir para o inicio:

�acionar o interruptor

�se a lâmpada não acender, então:• pegue a escada;• pegue a escada;

• posicione-a embaixo da lâmpada;

• busque uma lâmpada nova;

• suba na escada;

• retire a lâmpada velha;

• coloque a lâmpada nova.

Page 34: Introducao a Logica de Programacao - GERAL_ALUNOS

AlgoritmoAPRIMORANDO

Trocar a lâmpada com teste de repetição

�acionar o interruptor

�se a lâmpada não acender, então:

•pegue a escada;

•posicione-a embaixo da lâmpada;

•busque uma lâmpada nova;•busque uma lâmpada nova;

•acionar o interruptor

•suba na escada;

•retire a lâmpada velha;

•coloque a lâmpada nova.

•se a lâmpada não acender, então

�retirar a lâmpada velha;

�colocar outra lâmpada nova;

•se a lâmpada não acender, então

•retirar a lâmpada velha;

•colocar outra lâmpada nova; (...) ATÉ QUANDO?

Page 35: Introducao a Logica de Programacao - GERAL_ALUNOS

AlgoritmoAPRIMORANDO

Trocar a lâmpada com teste de repetição, com condição de parada.

�acionar o interruptor

�se a lâmpada não acender, então:

•pegue a escada;

•posicione-a embaixo da lâmpada; •posicione-a embaixo da lâmpada;

•busque uma lâmpada nova;

•acionar o interruptor

•suba na escada;

•retire a lâmpada velha;

•coloque a lâmpada nova.

•enquanto a lâmpada não acender, faça

�retirar a lâmpada velha;

�colocar outra lâmpada nova;

Page 36: Introducao a Logica de Programacao - GERAL_ALUNOS

AlgoritmoAPRIMORANDO

Conseguimos elaborar um algoritmo e aprimorá-lo para deixar a solução do nosso problema da melhor forma possível, mas isso para uma única lâmpada.

E para 10 Lâmpadas? Como seria?

Page 37: Introducao a Logica de Programacao - GERAL_ALUNOS

AlgoritmoCOMPLICANDO!!!

�acionar o interruptor do primeiro soquete

�se a lâmpada não acender, então:

•pegue a escada;

•posicione-a embaixo da lâmpada;

•busque uma lâmpada nova;

•acionar o interruptor•acionar o interruptor

•suba na escada;

•retire a lâmpada velha;

•coloque a lâmpada nova.

•enquanto a lâmpada não acender, faça

�retirar a lâmpada velha;

�colocar outra lâmpada nova;

�acionar o interruptor do segundo soquete

�se a lâmpada não acender, então: (...)

Page 38: Introducao a Logica de Programacao - GERAL_ALUNOS

AlgoritmoAJUSTANDO

�ir até o interruptor do primeiro soquete

�enquanto a quantidade de soquetes testados for menor que dez, faça

� acionar o interruptor

�se a lâmpada não acender, então:

•pegue a escada;

•posicione-a embaixo da lâmpada;

•busque uma lâmpada nova;

•acionar o interruptor

•suba na escada;

•retire a lâmpada velha;

•coloque a lâmpada nova.

•enquanto a lâmpada não acender, faça

�retirar a lâmpada velha;

�colocar outra lâmpada nova;

�ir até o interruptor do próximo soquete;

Page 39: Introducao a Logica de Programacao - GERAL_ALUNOS

Algoritmo

Algoritmo não computacional cujo objetivo é usar um telefone público.

S

E

Início

1. Tirar o fone do gancho;

2. Ouvir o sinal de linha;

3. Introduzir o cartão;público.

E

Q

U

Ê

N

C

I

A

L

DESVIO

3. Introduzir o cartão;

4. Teclar o número desejado;

5. Se der o sinal de chamar

5.1 Conversar;

5.2 Desligar;

5.3 Retirar o cartão;

6. Senão

6.1 Repetir;

Fim.

Page 40: Introducao a Logica de Programacao - GERAL_ALUNOS

Algoritmo

Involuntariamente, já seguimos uma determinada seqüência de ações que, representadas neste algoritmo, fazem com que ele seja seguido naturalmente por pessoas, ele seja seguido naturalmente por pessoas, estabelecendo um padrão de comportamento.

É assim também com os algoritmos escritos para computador, você deve especificar todos os passos, para que o computador possa chegar ao objetivo.

Page 41: Introducao a Logica de Programacao - GERAL_ALUNOS

Exercícios

1. Um homem precisa atravessar um rio com um barco que possui capacidade de carregar apenas ele mesmo e mais uma de suas três cargas, que são: um lobo, um bode e um maço de capim. O que o homem deve fazer para conseguir atravessar o rio sem perder suas cargas?

2. Três senhoras – dona Rosa, dona Branca 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 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 42: Introducao a Logica de Programacao - GERAL_ALUNOS

Exercícios

3. Construa um algoritmo que mostre todos os passos que você segue para escolher o tipo de roupa com que vai sair, após levantar, levando em consideração apenas o tempo (bom, nublado, chuvoso) e a temperatura (quente, moderado, frio).

4. Elabore um algoritmo que mova três discos de uma Torre de Hanói, que consiste em três hastes (a - b - c), uma das quais serve de suporte para três discos diferentes (1 - 2 - 3), os menores sobre os maiores.

Pode-se mover um disco de cada vez para qualquer haste, contanto que nunca seja colocado um disco maior sobre um menor. O objetivo é transferir os três discos para outra haste.

Page 43: Introducao a Logica de Programacao - GERAL_ALUNOS

Exercícios

Exercícios de Raciocínio Lógico (Anexo)

Page 44: Introducao a Logica de Programacao - GERAL_ALUNOS

Algoritmo

Involuntariamente, já seguimos uma determinada seqüência de ações que, representadas neste algoritmo, fazem com que ele seja seguido naturalmente por pessoas, ele seja seguido naturalmente por pessoas, estabelecendo um padrão de comportamento.

É assim também com os algoritmos escritos para computador, você deve especificar todos os passos, para que o computador possa chegar ao objetivo.

Page 45: Introducao a Logica de Programacao - GERAL_ALUNOS

Algoritmo

� Por exemplo:Dados os números naturais(N)0, 1, 2, 3, 4, 5, 6, ...

passo 1 faça N igual a zeropasso 2 some 1 a Npasso 3 volte ao passo 2

Soma dos primeiros 100 números naturais:passo 1 faça N e Soma iguais a zeropasso 2 some 1 a Npasso 3 some N a Somapasso 4 se N for menor que (100 – 1)

então volte ao passo 2senão pare

� Nos dois exemplos acima, o primeiro possui repertório bem definido mas não

finito, enquanto que o segundo tem um critério de parada, ou seja, é finito e

descreve um padrão de comportamento, ou seja, temos um algoritmo.

Page 46: Introducao a Logica de Programacao - GERAL_ALUNOS

Por que precisamos de algoritmos?

Vejamos o que algumas pessoas importantes, para a Ciência da Computação, disseram a respeito de algoritmo:

� “A noção de algoritmo é básica para toda a programação de computadores”. [KNUTH - Professor da Universidade de Stanford, autor da coleção “The art of computer programming”]

� “O conceito central da programação e da ciência da computação é o conceito de algoritmo”. [WIRTH - Professor da Universidade de Zurique, autor de diversos livros na área e responsável pela criação de linguagens de programação como ALGOL, PASCAL e MODULA -2]

� A importância do algoritmo está no fato de termos que especificar uma seqüência de passos lógicos para que o computador possa executar uma tarefa qualquer, pois o mesmo por si só não tem vontade própria, faz apenas o que mandamos.

Page 47: Introducao a Logica de Programacao - GERAL_ALUNOS

Características

Todo algoritmo deve apresentar algumas características básicas:

� ter fim;

� não dar margem à dupla interpretação (não ambíguo);� não dar margem à dupla interpretação (não ambíguo);

� capacidade de receber dado(s) de entrada do mundo exterior;

� poder gerar informações de saída para o mundo externo ao do ambiente do algoritmo;

� ser efetivo (todas as etapas especificadas no algoritmo devem ser alcançáveis em um tempo finito).

Page 48: Introducao a Logica de Programacao - GERAL_ALUNOS

Algoritmo x Qualidade

Todo algoritmo deve ser feito de maneira lógica e racional, visando principalmente a sua eficiência e

clareza.

Ao construir algoritmos devemos:Ao construir algoritmos devemos:1. Saber que estes serão lidos por outras pessoas, permitindo sua fácil correção.

2. Escrever comentários na sua elaboração. Devem acrescentar alguma coisa, não apenas frasear.

3. Sempre atualizar os comentários, em caso de manutenção. Pior do que um programa sem comentários, é um programa com comentários errados.

Page 49: Introducao a Logica de Programacao - GERAL_ALUNOS

Algoritmo x Qualidade

1. Use comentários, também, no cabeçalho do algoritmo, incluindo, principalmente:�descrição do que faz o algoritmo�autor�data de criação

5. Os comandos nos dizem o que está sendo feito, os comentários dizem o porquê.

6. Utilizar espaços e/ou linhas em branco para melhorar a legibilidade.

Page 50: Introducao a Logica de Programacao - GERAL_ALUNOS

Algoritmo x Qualidade

5. Uso de parênteses aumenta a legibilidade e previne erros.

6. Escolha nomes representativos para variáveis, todavia evite nomes muito longos. Ex:todavia evite nomes muito longos. Ex:�Prefira SalBruto ou SalarioBruto ao invés de SB ou VAR1

�Prefira TotAlunosAprovDireta ao invés de TotalAlunosAprovacaoDireta

Page 51: Introducao a Logica de Programacao - GERAL_ALUNOS

Algoritmo x Qualidade

5. Destaque as palavras-chave das estruturas de controle e comandos com sublinhado.Ex: se media >= 7 então

...senãosenão...

fim-se

10.Um comando por linha é suficiente.

Page 52: Introducao a Logica de Programacao - GERAL_ALUNOS

Algoritmo x Qualidade

10.Utilize identação, pois mostra a estrutura lógica do algoritmo. Use identação nos comandos de acordo com o nível que estejam, ou seja, alinhe comandos de mesmo nível e desloque comandos de nível inferior. Ex.:iníciocomando 1;comando 1;se condicao1 então

comando2;comando3;

senãocomando4;comando5;

fim-secomando6;

fim

Page 53: Introducao a Logica de Programacao - GERAL_ALUNOS

Método para construção de algoritmos

� Ler atentamente o enunciado.

É justamente o enunciado do exercício que fornece o

encaminhamento necessário à resolução do problema, que se

torna, portanto, dependente de sua completa compreensão.

� Retirar do enunciado a relação das entradas de dados.

� Retirar do enunciado a relação das saídas de dados.

Determinar o que deve ser feito para transformar as entradas

determinadas nas saídas específicas

Page 54: Introducao a Logica de Programacao - GERAL_ALUNOS

Método para construção de algoritmos

Nesta fase é que determinamos a construção de algoritmos

propriamente dito, pois, a partir de alguns requisitos

especificados, devemos determinar qual a seqüência de ações é

capaz de transformar um conjunto definido de dados nas

informações de resultado.informações de resultado.

Para isso, podemos:

� Utilizar o Método Cartesiano;

� Aplicar o Planejamento Reverso;

� Montar uma Tabela de Decisão.

Page 55: Introducao a Logica de Programacao - GERAL_ALUNOS

Método Cartesiano

Utilizar o Método Cartesiano quando a complexidade (variedade) não estiver totalmente absorvida, conhecida.

Nosso principal objetivo enquanto programadores é vencer a complexidade, o que mantém célebre a frase de Descartes “Dividir para Conquistar”.

Este método consiste justamente em atacar o problema abrangente dividindo-o em partes menores, a fim de torná-lo mais simples ou específico e, se necessário, dividir novamente as partes não compreendidas.

Podemos esquematizar o seguinte procedimento (algoritmo) para o método:� Dividir o problema em suas partes principais.

� Analisar a divisão obtida para garantir coerência.

� Se alguma parte não for bem compreendida, aplicar a ela o método.

� Analisar o objeto para garantir entendimento e coerência.

Page 56: Introducao a Logica de Programacao - GERAL_ALUNOS

Planejamento Reverso

� Processo utilizado que, a partir das saídas (informações de resultado).

� Procura desagregar, desmontando a informação, a fim de atingir os dados de entrada

� Quando então teríamos (do fim para o início) todas as ações.� Quando então teríamos (do fim para o início) todas as ações.

� “Engenharia Reversa”

Page 57: Introducao a Logica de Programacao - GERAL_ALUNOS

Tabelas de Decisão

� Utilizar quando uma ou mais ações dependentes de um conjunto de condições assumirem determinadas combinações de valores.

Objetiva basicamente relacionar as ações que dependem de alguma condição com as próprias condições, a fim de esclarecer e visualizar facilmente quais valores o conjunto de condições deve assumir para que se efetue sua respectiva ação.

� Construir o algoritmo.

� Executar o algoritmo.

Implica executar todas as ações descritas seguindo o fluxo de execução estabelecido, verificando se os resultados obtidos correspondem ao esperado quando da montagem do algoritmo, detectando então algum possível erro no desenvolvimento deste.

Essa atividade é conhecida por “teste de mesa”.

Page 58: Introducao a Logica de Programacao - GERAL_ALUNOS

Exercícios

Suponha que você possua um robô e queira fazê-lo trocar uma lâmpada, sendo que o mesmo foi programado para obedecer aos seguintes comandos:1. pegue <objeto>2. pressione <objeto>3. gire garras 180° no sentido horário4. gire garras 180° no sentido anti-horário4. gire garras 180° no sentido anti-horário5. mova <objeto> para <lugar>6. desloque-se para <lugar>

e ainda é capaz de:� perceber quando algum comando não pode mais ser executado� sentir alguma fonte de calor

Que ordens você daria para que seu robô trocasse a lâmpada?

Page 59: Introducao a Logica de Programacao - GERAL_ALUNOS

Vamos Pensar!!

1. Três jesuítas e três canibais precisam atravessar um rio; para tal, dispõem de um barco com capacidade para duas pessoas. Por medidas de segurança não se permite que em alguma margem a quantidade de jesuítas seja inferior à de canibais. Qual a seqüência de passos que permitiria a travessia com segurança?

2. Numa determinada noite, acontece uma queda de energia. Você sabia que poderia encontrar uma vela na gaveta da cozinha, um lampião embaixo da cama, fusíveis de reserva no armário da sala e fósforos na estante da cozinha. Descreva a seqüência de passos que poderia ser utilizada para diagnosticar e resolver o problema, que pode ser previsto em duas possibilidades:

a) o fusível queimou;

b) a queda é na estação da companhia elétrica.

Page 60: Introducao a Logica de Programacao - GERAL_ALUNOS

Formas de representação

Algoritmos podem ser representados, dentre outras maneiras, por:

� Descrição narrativa;

Fluxograma;� Fluxograma;

� Linguagem algorítmica.

Page 61: Introducao a Logica de Programacao - GERAL_ALUNOS

Descrição Narrativa

Faz-se uso do Português para descrever algoritmos.Exemplo: Receita de Bolo:

Providencie manteiga, ovos, 2 Kg de massa, etc.Misture os ingredientesDespeje a mistura na fôrma de boloLeve a fôrma ao fornoEspere 20 minutosEspere 20 minutosRetire a fôrma do fornoDeixe esfriarProve

VANTAGENS:� O Português é bastante conhecido por nós;

DESVANTAGENS:� Imprecisão;� Pouca confiabilidade (a imprecisão acarreta a desconfiança);� Extensão (normalmente, escreve-se muito para dizer pouca coisa).

Page 62: Introducao a Logica de Programacao - GERAL_ALUNOS

Fluxograma

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

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

TERMINAL

FLUXO DE DADOS

PROCESSAMENTO

ENTRADA DE DADOS(MANUAL)

ENTRADA E SAIDADE DADOS

SAIDA DE DADOSEM VÍDEO

SAIDA DE DADOSEM IMPRESSORA

DECISÃO

CONECTOR

CONECTORESPECIFICO

Page 63: Introducao a Logica de Programacao - GERAL_ALUNOS

Fluxograma

Exemplo Explicação

Início do algoritmo

Entrada do númeroEntrada do número

Cálculo do dobro do número

Apresentação do resultado

Fim do algoritmo

Page 64: Introducao a Logica de Programacao - GERAL_ALUNOS

Fluxograma

Exemplo Cálculo da Média

??

Page 65: Introducao a Logica de Programacao - GERAL_ALUNOS

Fluxograma

VANTAGENS:

� Uma das ferramentas mais conhecidas;

� Figuras dizem muito mais que palavras;

� Padrão mundial

DESVANTAGENS:

� Pouca atenção aos dados, não oferecendo recursos para descrevê-los ou representá-los;

� Complica-se à medida que o algoritmo cresce.

Page 66: Introducao a Logica de Programacao - GERAL_ALUNOS

Linguagem algorítmica

Consiste na definição de uma pseudolinguagem de programação, cujos comandos são em português, para representar algoritmos.

Exemplo: Algoritmo CALCULA_DOBRONUM, DOBRO: inteiroinício

Leia NUMLeia NUMDOBRO ← 2 * NUMEscreva DOBRO

fim

VANTAGENS:� Usa o português como 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.

Page 67: Introducao a Logica de Programacao - GERAL_ALUNOS

Funcionamento do nosso computador

Resumidamente, podemos afirmar que existem 4 operações básicas que qualquer computador pode executar:

a) operações de entrada e saída: ler dados do teclado e escrever dados na tela são exemplos destas operações. Elas servem para introduzir dados na memória do nosso computador e exibir dados que já estejam lá armazenados;

b) operações aritméticas: são utilizadas na realização de operações b) operações aritméticas: são utilizadas na realização de operações matemáticas (adição, subtração, multiplicação e divisão);

c) operações lógicas e relacionais: têm aplicabilidade em comparações, testes de condições lógicas (2>6 ? X=Y ?);

d) movimentação de dados entre os vários componentes: as operações aritméticas são executadas na Unidade Lógica e Aritmética, necessitando da transferência dos dados para essa unidade e da volta do resultado final para ser guardado na memória.

Page 68: Introducao a Logica de Programacao - GERAL_ALUNOS

Resolvendo um problema

Suponha que queiramos resolver o seguinte problema:

“a partir de dois números que serão informados,

calcular a adição dos mesmos.”

Se você fosse encarregado de efetuar essa tarefa, seria bem provável que utilizasse 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.

Page 69: Introducao a Logica de Programacao - GERAL_ALUNOS

Resolvendo um problema

Em resumo, pode-se dizer que escrever algoritmos ou, em última análise, programar consiste em dividir qualquer problema em muitos pequenos passos, usando uma ou mais das quatro operações básicas citadas.

Esses passos que compõem o algoritmo são denominados de comandos.

Os comandos de uma linguagem de programação podem estar mais próximos da máquina (linguagens ??) ou serem mais facilmente entendidos pelo homem máquina (linguagens ??) ou serem mais facilmente entendidos pelo homem (linguagens ??).

A seqüência de operações básicas, dada anteriormente, para resolver o problema de adicionar dois números, está em uma linguagem de baixo nível para o nosso computador hipotético.

Em uma linguagem de alto nível teríamos um resultado assim:Leia X,Y

SOMA ← X + Y

Escreva SOMA

Page 70: Introducao a Logica de Programacao - GERAL_ALUNOS

Estruturas chaves da construção de algoritmos

Existem 3 estruturas básicas de controle nas quais se baseiam os algoritmos:

� Sequênciação

� Decisão ou seleção� Decisão ou seleção

� Repetição ou iteração

Page 71: Introducao a Logica de Programacao - GERAL_ALUNOS

Seqüenciação

Os comandos do algoritmo fazem parte de uma seqüência, onde é relevante a ordem na qual se encontram os mesmos, pois serão executados um de cada vez, estritamente, de acordo com essa ordem.

De uma forma genérica, poderíamos expressar uma seqüência da seguinte maneira:Comando-1

Comando-2

Comando-3Comando-3

:

Comando-n

Tem-se uma seqüênciação de n comandos na qual os comandos serão executados na ordem em que aparecem, isto é, o comando de ordem i+1 só será executado após a execução do de ordem i (o 3° só será executado após o 2°).

Todo algoritmo é uma seqüência. A seqüênciação é aplicada quando a solução do problema pode ser decomposta em passos individuais.

Page 72: Introducao a Logica de Programacao - GERAL_ALUNOS

Decisão ou Seleção

Essa estrutura também é conhecida por estrutura condicional.

Há a subordinação da execução de um ou mais comandos à veracidade de uma condição.

Vejamos o funcionamento:Se <condição>

então <seq. de comandos-1>

senão <seq. de comandos-2>senão <seq. de comandos-2>

Se a <condição> for verdadeira será executado a <seq. de comandos-1> e, em caso contrário, teremos a execução da <seq. de comandos-2>.

A decisão deve ser sempre usada quando há a necessidade de testar alguma condição e em função da mesma tomar uma atitude.

Em nosso dia-a-dia, estamos sempre tomando decisões, vejamos um exemplo:Se tiver dinheiro suficiente, então vou almoçar em um bom restaurante.

Caso contrário (senão), vou comer um sanduíche na lanchonete da esquina.

Page 73: Introducao a Logica de Programacao - GERAL_ALUNOS

Repetição ou Iteração

Essa estrutura também é conhecida por “looping” ou laço.

A repetição permite que tarefas individuais sejam repetidas um número determinado de vezes ou tantas vezes quantas uma condição lógica permita.

Vejamos alguns exemplos:a) vou atirar pedras na vidraça até quebrá-la;a) vou atirar pedras na vidraça até quebrá-la;

b) baterei cinco pênaltis;

c) enquanto tiver saúde e dinheiro, vou desfrutar a vida.

No exemplo (a), vai-se repetir a ação de atirar pedras na janela até que seja satisfeita a condição de quebrar a janela.

No exemplo (b), haverá a repetição da atitude de bater um pênalti um número determinado de vezes (cinco).

No exemplo (c), a condição que me permitirá continuar desfrutando a vida é ter dinheiro e saúde.

Page 74: Introducao a Logica de Programacao - GERAL_ALUNOS

Refinamentos sucessivos

Um algoritmo é considerado completo se os seus comandos forem do entendimento do seu destinatário.

Num algoritmo, um comando que não for do entendimento do destinatário 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.destinatário.

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

Page 75: Introducao a Logica de Programacao - GERAL_ALUNOS

Refinamentos sucessivos

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, a menos que o destinatário não saiba fazer as operações de adição e divisão, ou não seja capaz de entender diretamente algum comando.

Page 76: Introducao a Logica de Programacao - GERAL_ALUNOS

Refinamentos sucessivos

O algoritmo estando completo, podemos reescrevê-lo, inserindo o refinamento na posição do comando que foi refinado.

Assim sendo, obtém-se:Assim sendo, obtém-se:Algoritmo CALCULA_MÉDIA

Início

Receba os dois números

Soma os dois números

Divida o resultado por 2

Exiba o resultado

Fim

Page 77: Introducao a Logica de Programacao - GERAL_ALUNOS

Refinamentos sucessivos

Reescrever um algoritmo completo, com os refinamentos sucessivos inseridos nos seus devidos lugares, permite ter uma visão global de como o algoritmo deve ser executado.como o algoritmo deve ser executado.

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

Page 78: Introducao a Logica de Programacao - GERAL_ALUNOS

Aplicação Prática

� Faça o Algoritmo de Trocar Lâmpada em?

� Descrição narrativa, Fluxograma e Linguagem algorítmica.