Você está na página 1de 78

Introdução à Lógica de

Programação
Tópicos

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

 Introdução
 Conceitos gerais
 Programação estruturada
 Desenvolvimento top-down
 Modularização
 Estruturas de controle
 Confiabilidade
 Manutenibilidade
 Pseudolinguagem – Portugol

 Raciocínio matemático

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

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

 Exercícios
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
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


desenvolver nossas soluções e os algoritmos para
apresentar essas soluções ao mundo.
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!
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 !
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”.

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

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

Podem ser implementados separadamente, por


diversos programadores de uma equipe.
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
programa.

Assim, temos como uma das principais normas da


Programação Estruturada: não usar comandos de
desvio (GOTO).
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


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

Assim, temos o PORTUGOL, que é uma


pseudolinguagem de programação (simbiose do
Português com o ALGOL e PASCAL)
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
humana, facilitando, portanto, a interpretação.
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.

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.
Noções de Lógica

O QUE É LÓGICA?
Lógica trata da correção do pensamento.

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


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


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.


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.
LÓGICA DE PROGRAMAÇÃO

Definição:

“Lógica de programação é a técnica de encadear


pensamentos para atingir determinado objetivo”
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
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.
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.

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


Marcelo é mais novo que José.
Portanto, João é mais velho que Marcelo.
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.”

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

Outros algoritmos freqüentemente encontrados são:

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

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

 “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]
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?


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


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

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

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


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:
• suba na escada;
• retire a lâmpada velha;
• coloque a lâmpada nova.
Algoritmo
OTIMIZANDO

Para otimizar, o condicional deve ir para o inicio:

 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;
• suba na escada;
• retire a lâmpada velha;
• coloque a lâmpada nova.
Algoritmo
APRIMORANDO

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;
•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?
Algoritmo
APRIMORANDO

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;
•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;
Algoritmo
APRIMORANDO

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?


Algoritmo
COMPLICANDO!!!

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
•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: (...)
Algoritmo
AJUSTANDO

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;
Algoritmo

Algoritmo não
Início
computacional
1. Tirar o fone do gancho;
cujo objetivo é
S 2. Ouvir o sinal de linha;
usar um telefone
E 3. Introduzir o cartão;
público. Q 4. Teclar o número desejado;
U
Ê 5. Se der o sinal de chamar DESVIO
N 5.1 Conversar;
C 5.2 Desligar;
I
A 5.3 Retirar o cartão;
L 6. Senão
6.1 Repetir;
Fim.
Algoritmo

Involuntariamente, já seguimos uma


determinada seqüência de ações que,
representadas neste algoritmo, fazem com que
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.
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?
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.
Exercícios

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


Algoritmo

Involuntariamente, já seguimos uma


determinada seqüência de ações que,
representadas neste algoritmo, fazem com que
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.
Algoritmo

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

passo 1 faça N igual a zero


passo 2 some 1 a N
passo 3 volte ao passo 2

Soma dos primeiros 100 números naturais:


passo 1 faça N e Soma iguais a zero
passo 2 some 1 a N
passo 3 some N a Soma
passo 4 se N for menor que (100 – 1)
então volte ao passo 2
senã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.
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.
Características

Todo algoritmo deve apresentar algumas


características básicas:

 ter fim;

 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).
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:


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.
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.
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:
 Prefira SalBruto ou SalarioBruto ao invés de SB ou
VAR1
 Prefira TotAlunosAprovDireta ao invés de
TotalAlunosAprovacaoDireta
Algoritmo x Qualidade

5. Destaque as palavras-chave das estruturas de controle e


comandos com sublinhado.
Ex: se media >= 7 então
...
senão
...
fim-se

10.Um comando por linha é suficiente.


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ício
comando 1;
se condicao1 então
comando2;
comando3;
senão
comando4;
comando5;
fim-se
comando6;
fim
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
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.

Para isso, podemos:


 Utilizar o Método Cartesiano;
 Aplicar o Planejamento Reverso;
 Montar uma Tabela de Decisão.
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.
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.

 “Engenharia Reversa”
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”.
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ário
4. gire garras 180° no sentido anti-horário
5. 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?
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.
Formas de representação

Algoritmos podem ser representados, dentre outras


maneiras, por:

 Descrição narrativa;
 Fluxograma;
 Linguagem algorítmica.
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 ingredientes
Despeje a mistura na fôrma de bolo
Leve a fôrma ao forno
Espere 20 minutos
Retire a fôrma do forno
Deixe esfriar
Prove

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).
Fluxograma

 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, etc.
TERMINAL ENTRADA E SAIDA
DE DADOS DECISÃO
FLUXO DE DADOS
SAIDA DE DADOS
EM VÍDEO CONECTOR
PROCESSAMENTO
SAIDA DE DADOS
EM IMPRESSORA CONECTOR
ESPECIFICO
ENTRADA DE DADOS
(MANUAL)
Fluxograma

Exemplo Explicação

Início do algoritmo

Entrada do número

Cálculo do dobro do número

Apresentação do resultado

Fim do algoritmo
Fluxograma

Exemplo Cálculo da Média

?
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.
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_DOBRO


NUM, DOBRO: inteiro
início
Leia NUM
DOBRO ← 2 * NUM
Escreva 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.
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


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.
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.
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
(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
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
 Repetição ou iteração
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-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.
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>

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

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


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

À 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.
Aplicação Prática

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

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