Mathematics">
Aula 3 - Lógica de Programação e Algoritimo
Aula 3 - Lógica de Programação e Algoritimo
Aula 3 - Lógica de Programação e Algoritimo
LÓGICA DE PROGRAMAÇÃO E
ALGORITMOS
AULA 3
CONVERSA INICIAL
linguagem Python.
dependendo de uma
condição existente nele, as instruções executadas poderão ser distintas.
composta, a
aninhada e a de múltipla escolha. Essas condicionais são existentes em todas as
colocados em
linguagem Python com seus respectivos fluxogramas.
Todos
os algoritmos que você desenvolveu anteriormente são chamados de algoritmos
em conteúdos
anteriores, é válido e deve ser respeitado). Vamos
relembrar, a seguir, um algoritmo
Um
lenhador está junto de sua fogueira e precisa ir até a floresta cortar mais
lenha antes que seu
serem cortadas.
https://univirtus.uninter.com/ava/web/roa/ 2/35
12/08/2021 UNINTER - LÓGICA DE PROGRAMAÇÃO E ALGORITMOS
O
lenhador optou pelo caminho da esquerda. Nesse caminho, ele precisou seguir até
a floresta,
Figura
1 – Exemplo lúdico de um algoritmo. Caminho da esquerda
Créditos:
Macrovector; ivector; Incomible; FARBAI/Shutterstock.
da seguinte
forma:
Início
2. Tomar o caminho da
ESQUERDA.
https://univirtus.uninter.com/ava/web/roa/ 3/35
12/08/2021 UNINTER - LÓGICA DE PROGRAMAÇÃO E ALGORITMOS
5. Retornar ao seu
acampamento.
Créditos:
Macrovector; ivector; Incomible; FARBAI/Shutterstock, Hennadii H/Shutterstock.
https://univirtus.uninter.com/ava/web/roa/ 4/35
12/08/2021 UNINTER - LÓGICA DE PROGRAMAÇÃO E ALGORITMOS
disperse
o lobo antes de conseguir cortar lenha, gerando um passo a mais em nosso
algoritmo.
_______________________________________________
Início
2.Tomar o caminho da
DIREITA.
3.Enfrentar o lobo.
6.Retornar ao seu
acampamento.
Fim
Dependendo de uma
condição existente, neste caso, a decisão de qual caminho tomar, as ações
Tabela
1 – Comparativo de ações de ambos caminhos a serem tomados
3 - Enfrentar o lobo.
https://univirtus.uninter.com/ava/web/roa/ 5/35
12/08/2021 UNINTER - LÓGICA DE PROGRAMAÇÃO E ALGORITMOS
seguida?
Neste
caso, podemos reorganizar nossas ações de uma maneira com que a Ação 2 defina o
que
instruções.
Em
nosso exemplo, podemos reorganizar as ações conforme o pseudocódigo a seguir.
Observe
que existe uma decisão a ser tomada. Se o caminho for o da esquerda,
execute todas as linhas dentro
Início
1. se ( caminho = esquerda )
2. senão
b. Enfrentar o lobo
3. fim-se
Fim
Você
conseguiu notar que, dentre todas as ações tomadas, muitas delas se repetem em
ambos
https://univirtus.uninter.com/ava/web/roa/ 6/35
12/08/2021 UNINTER - LÓGICA DE PROGRAMAÇÃO E ALGORITMOS
Em
programação, não é uma boa prática repetir a mesma instrução diversas vezes.
Sempre que
for possível evitar isso, faça. Neste caso, podemos otimizar nosso
algoritmo para que todas as
instruções iguais sejam colocadas fora da
condicional. Puxamos uma ação para antes da condição, e
Inicio
1. Seguiratéaentradadafloresta
2. se ( caminho = esquerda )
3. senão
a. Enfrentarolobo
4. fimse
5. Seguiratéastorasdemadeira
6. Cortarumalenha
7. Retornaraoseuacampamento
Fim
caso, podemos
melhorar a legibilidade do nosso programa caso alteremos a condição de
verificação.
Podemos, assim, inclusive remover o senão. Observe como
ficaria a seguir.
Início
2. se ( caminho = direita )
a. Enfrentar o lobo
3. fimse
Fim
https://univirtus.uninter.com/ava/web/roa/ 7/35
12/08/2021 UNINTER - LÓGICA DE PROGRAMAÇÃO E ALGORITMOS
Aprendemos
e compreendemos o que são estruturas condicionais e como são usadas em um
exemplo fora da computação. Agora, vamos formalizar os tipos de condicionais
existentes e aprender
Todas
as condicionais apresentadas ao longo deste documento existem de alguma maneira
em
toda e qualquer linguagem de programação, portanto, todos os conceitos podem
ser facilmente
A
estrutura condicional simples existe para quando precisamos decidir se um
conjunto de
instruções precisa ser executado ou não.
Caso
um teste lógico realizado resulte em um valor verdadeiro, isso significa que as
instruções
dentro da condição deverão ser executadas. Caso contrário, ou seja,
caso o teste lógico resulte em
Na
Figura 3, temos o fluxograma de decisão de uma estrutura condicional simples.
Lembrando
que o padrão adotado para construção de fluxogramas está apresentado
no livro da Sangra Puga,
A
forma geométrica do losango representa uma decisão. Com base nela, dois
caminhos distintos
podem ser tomados. Um caminho representa o resultado
verdadeiro (V), e o outro o falso (F).
algoritmo.
Figura
3 – Fluxograma de uma estrutura de seleção simples
https://univirtus.uninter.com/ava/web/roa/ 8/35
12/08/2021 UNINTER - LÓGICA DE PROGRAMAÇÃO E ALGORITMOS
E como
escrevemos a condicional simples em linguagem Python? A Figura 4 ilustra isso.
Note
Após o
if, abrimos parênteses (é opcional) e colocamos a condição lógica que
deve ser satisfeita
O
símbolo de # representa comentários em Python (vimos isso anteriormente).
Veja que todas as
instruções devem estar indentadas para serem reconhecidas
como pertencentes ao bloco
https://univirtus.uninter.com/ava/web/roa/ 9/35
12/08/2021 UNINTER - LÓGICA DE PROGRAMAÇÃO E ALGORITMOS
delimitador. O Python
trabalha com a indentação para identificar o que pertence ao seu bloco,
portanto não requer um finalizador para ele.
Estamos
falando bastante sobre como construir o código em Python, mas até o momento não
praticamos nada e também não vimos como criar a tão comentada condição da
estrutura. Vejamos
um exemplo prático e executável em nossa ferramenta online.
Lembrando que você pode inserir esse
O
exercício a seguir lê dois valores numéricos inteiros e compara se o primeiro é
maior do que o
segundo, utilizando uma condicional simples. Caso seja
(resultado verdadeiro), ele imprime na tela a
maior do que o
primeiro. Veja como ficaria abaixo. Realize testes para diferentes valores de x
e y.
https://univirtus.uninter.com/ava/web/roa/ 10/35
12/08/2021 UNINTER - LÓGICA DE PROGRAMAÇÃO E ALGORITMOS
Sua
vez de praticar
aparecer na
tela para o usuário? Explique.
2.2 INDENTAÇÃO
Gostaria
de pausar aqui um pouco nosso estudo sobre condicionais para frisar a
importância da
indentação do código.
Indentar
o código significa deixá-lo visualmente organizado e tabulado. Observe com
atenção os
Na
maioria das linguagens de programação, a indentação é um aspecto que não tem
impacto no
funcionamento do programa. Apesar disso, indentar um código é
considerado uma boa prática de
Em
linguagem Python, o indentação assume um papel ainda mais importante. Isso
porque a
https://univirtus.uninter.com/ava/web/roa/ 11/35
12/08/2021 UNINTER - LÓGICA DE PROGRAMAÇÃO E ALGORITMOS
A
estrutura condicional composta existe para quando precisamos decidir se um
conjunto de
instruções A precisa ser executado, ou se será outro conjunto de
instruções B a ser executado.
Na
Figura 6, temos o fluxograma da estrutura condicional composta. Se a condição a
ser testada
resultar em um valor lógico verdadeiro, observe na representação
que executamos um conjunto A de
executadas.
Note
que nunca acontecerá de ambos os conjuntos de instruções serem executadas em um
Não
obstante, o conjunto A e o conjunto B podem conter instruções completamente
distintas
entre si, podendo inclusive apresentar uma quantidade de instruções
bastante diferentes. Não
Figura
6 – Fluxograma de uma estrutura de seleção composta
https://univirtus.uninter.com/ava/web/roa/ 12/35
12/08/2021 UNINTER - LÓGICA DE PROGRAMAÇÃO E ALGORITMOS
#
Instrução (ões) B
# Instrução (ões) B
fim-se
resultar em
resto zero, sabemos que o número digitado é divisível por 2, e, portanto, é par[1]. Caso
o
resto desta divisão não dê zero, isso significa que o número não é divisível
por 2, e, portanto, é ímpar.
de percentual.
Deste modo, podemos escrever a expressão lógica , ou seja, obtemos o
resto da
divisão por 2 e, em seguida, pela comparação lógica de igualdade verificamos se
é igual a
zero.
Ademais, a ordem de
precedência dos operadores também deve ser respeitada aqui. Primeiro, o
cálculo
aritmético é realizado, e por último, o teste lógico. Ficamos com o algoritmo a
seguir.
Sendo
assim, a cada execução desse programa, ou a linha de Código 4 ou a Linha 6 será
Figura 7 – Fluxograma
de uma estrutura de seleção composta. Exemplo do par ou ímpar
https://univirtus.uninter.com/ava/web/roa/ 13/35
12/08/2021 UNINTER - LÓGICA DE PROGRAMAÇÃO E ALGORITMOS
empregando somente
condicionais simples, é possível? A resposta é sim. Vejamos o resultado a
seguir.
Na Linha
5, acabamos por substituir o else da condição composta por outro teste
simples. Nesse
algoritmo também
funcionará corretamente.
Você
pode estar se perguntando agora, ambas maneiras estão corretas? Posso utilizar
qualquer
uma? Bom, de fato, ambas funcionam, porém, a solução que acabamos de
ver não é recomendável
E
existe um motivo muito importante para que não se utilize duas condicionais
simples neste
https://univirtus.uninter.com/ava/web/roa/ 14/35
12/08/2021 UNINTER - LÓGICA DE PROGRAMAÇÃO E ALGORITMOS
Para
compreender melhor isso, precisamos entender o que o computador faz para
executar uma
realizado.
Caso
estivermos com nosso algoritmo realizando o teste lógico em uma estrutura
composta, o
teste será feito uma única vez e, dependendo do seu resultado (V ou
F), irá saltar para uma
Agora,
caso nosso algoritmo for construído com duas condicionais simples, faremos o
mesmo
Imagine
uma situação em que o número digitado é par. No algoritmo com condicional
Já no
algoritmo com condicionais simples, independentemente de o nosso número já ter
sido
identificado como par, por exemplo, o teste para ímpar ainda será
desenvolvido (e dará falso), o que
Em
resumo, sempre que for possível substituir 2 testes simples por um composto, o
faça! Certo,
No
nosso exercício, ambos testes serviam para verificar se o número é par ou
ímpar, portanto
têm o mesmo objetivo e podem ser trocados por um único teste
composto.
Expandindo
o exercício. Se quiséssemos, além de verificar se o número é par ou ímpar,
encontrar
par.
A
seguir, temos o algoritmo com duas condicionais compostas. Para a verificação
do múltiplo de
7, podemos novamente fazer o teste com o resto da divisão, pois
um múltiplo de 7 deve,
https://univirtus.uninter.com/ava/web/roa/ 15/35
12/08/2021 UNINTER - LÓGICA DE PROGRAMAÇÃO E ALGORITMOS
2.5 EXERCÍCIOS
Vamos
praticar alguns exercícios de condicional simples e composta.
Exercício
2.5.1: desenvolva um algoritmo que solicite o seu ano de
nascimento e o ano atual.
Para
fins de simplificação, despreze o dia e o mês do ano. Após o cálculo, verifique
se a idade é
Python
Fluxograma
https://univirtus.uninter.com/ava/web/roa/ 16/35
12/08/2021 UNINTER - LÓGICA DE PROGRAMAÇÃO E ALGORITMOS
seus
funcionários com mais de 5 anos de empresa. Todos os outros que não se
enquadram nessa
Python
Fluxograma
https://univirtus.uninter.com/ava/web/roa/ 17/35
12/08/2021 UNINTER - LÓGICA DE PROGRAMAÇÃO E ALGORITMOS
No
tópico anterior, aprendemos a construir algoritmos com estruturas condicionais
simples e
Deste
modo, vamos dedicar um tópico inteiro nesta aula para estudarmos mais a fundo
as
expressões lógicas que podemos criar, bem como estudaremos a álgebra booleana,
essencial para a
Aprendemos
em conteúdos anteriores os principais operadores aritméticos e também os
operadores relacionais. Todos esses operadores podem ser combinados em
expressões lógicas que
Esses
operadores servem para agrupar operações e expressões lógicas e têm
comportamentos
Tabela
2 – Lista de operadores lógicos em Python e pseudocódigo
and e conjunção
or ou disjunção
verdade do
operador. A tabela verdade demonstra o resultado de uma operação com um ou
Operador not:
Vamos iniciar pelo mais simples deles. O
operador de negação not serve para
negar um resultado lógico ou o
resultado de uma expressão booleana. Na prática, isso significa que o
Como
em Python um valor booleano verdadeiro é representado pelo seu termo em
inglês True, e
Tabela
3 – Tabela verdade do operador not (não)
V not V
True False
False True
ambos valores
lógicos existentes (Atenção! Lembre-se que a linguagem Python compreende os
valores lógicos escritos sempre com a primeira letra da palavra em maiúscula.
Portanto, true e false
https://univirtus.uninter.com/ava/web/roa/ 19/35
12/08/2021 UNINTER - LÓGICA DE PROGRAMAÇÃO E ALGORITMOS
resultado
verdadeiro se, e somente se, ambas entradas forem verdadeiras. A tabela verdade
do and é
Tabela
4 – Tabela verdade do operador and (e)
V1 V2 V1 and
V2
ao menos
uma das entradas forem verdadeiras. A tabela verdade do or é apresentada
a seguir, em
estão
apresentadas na Tabela 5.
V1 V2 V1 or
V2
https://univirtus.uninter.com/ava/web/roa/ 20/35
12/08/2021 UNINTER - LÓGICA DE PROGRAMAÇÃO E ALGORITMOS
Agora
que vimos os operadores lógicos, vamos então aprender a combiná-los em
expressões
Porém,
primeiramente, precisamos deixar bem claro a ordem de precedência na execução
de
De
modo geral, para operações aritméticas, a ordem de execução segue o que já
aprendemos na
matemática básica da escola. Por exemplo, divisão e multiplicação
sempre executa antes da adição e
1) Parênteses;
2) Operadores
aritméticos de potenciação ou raiz;
3) Operadores
aritméticos de multiplicação, divisão e módulo;
4) Operadores
aritméticos de adição e subtração;
5) Operadores
relacionais;
6) Operadores
lógicos not;
7) Operadores
lógicos and;
8) Operadores
lógicos or;
https://univirtus.uninter.com/ava/web/roa/ 21/35
12/08/2021 UNINTER - LÓGICA DE PROGRAMAÇÃO E ALGORITMOS
9) Atribuições.
Todas
as operações de mesmo grau de importância são executadas sempre da esquerda
para a
direita na seguinte pelo programa. Por exemplo, se tivermos duas adições
numa mesma expressão,
Vejamos
uma série de exemplos para colocar em prática tudo isso. No primeiro exemplo,
temos
Seguindo
a precedência apresentada, primeiro é realizado o operador relacional, fazendo
o teste
10 > 1, que irá resultar em True. Após, ele é negado,
invertendo e ficando False.
or.
Assim, teremos a disjunção True or False, que irá resultar em True,
pois a or fornece uma saída
True caso ao menos uma das entradas
também sejam True.
https://univirtus.uninter.com/ava/web/roa/ 22/35
12/08/2021 UNINTER - LÓGICA DE PROGRAMAÇÃO E ALGORITMOS
A
seguir, é apresentada a sequência de passos que levam até o resultado True
apresentado
como saída:
1) Operação
aritmética de divisão: 5.5 / 10 = 0.55;
2) Operação
aritmética de adição y + 0.55: 1 + 0.55 = 1.55;
3) Operações
lógicas relacionais. Como temos três delas, ficam:
b. z == y → 5.5 == 1 = False;
4) Operação
lógica not False = True;
6) Operação
lógica or: True or True = True
Suponha que A, B, C, X, Y e Z
são variáveis numéricas, e V1 e V2 variáveis booleanas, e Nome e
Rua são
strings, com os respectivos valores:
A
= 1, B = 2, C = 3, X = 20, Y = 10, Z = -1;
V1
= True, V2 = False;
Nome =
‘Pedro’, Rua = ‘Pedrinho’.
a) A
+ C / B
b) C
/ B / A
c) -X
** B
d) (-X)
** B
e) V1
or V2
f) V1
and not V2
g) V2
and not V1
h) not
Nome == Rua
k) C – 3 * A < X + 2 * Z
3.4 EXERCÍCIOS
Agora
vamos juntar nossos conhecimentos resolvendo alguns exercícios de condicionais
simples
e compostas em que o uso de expressões lógicas na condição de decisão é
fundamental.
Exercício
3.3.1 (adaptado de Menezes, p. 60): Um aluno, para
passar de ano, precisa estar
https://univirtus.uninter.com/ava/web/roa/ 24/35
12/08/2021 UNINTER - LÓGICA DE PROGRAMAÇÃO E ALGORITMOS
Assuma
que a média para aprovação é a partir de 7, e que o aluno cursa 3 matérias,
somente.
Escreva um algoritmo que leia a nota final do aluno em cada matéria, e
informe na tela se ele passou
de ano ou não.
Python
Exercício 3.3.2: Escreva um algoritmo que lê um valor inteiro qualquer. Após, verifique se este
valor está contido dentro dos seguintes intervalos:
-100 <= x <= -1 e 1 <= x <= 100. Imprima na tela
uma mensagem caso ele esteja em um dos intervalos.
Python
Muitos
dos programas computacionais envolvem uma complexidade maior do que somente
empregar uma única estrutura condicional simples, ou mesmo uma composta. É bastante
comum
que venhamos a utilizar duas ou mais condicionais aninhadas em um mesmo
algoritmo, ou seja, uma
https://univirtus.uninter.com/ava/web/roa/ 25/35
12/08/2021 UNINTER - LÓGICA DE PROGRAMAÇÃO E ALGORITMOS
Na
Figura 6, vemos duas estruturas condicionais aninhadas representadas em um
fluxograma.
Entenda que podemos aninhar quantas condicionais quisermos, e não
somente duas. Para fins
Figura
6 – Fluxograma de uma estrutura de seleção com dois níveis de aninhamento
No
fluxograma, ambas condicionais são compostas. Perceba que, caso a Condição 1
resulte em
Agora,
vamos resolver um exemplo para que você compreenda melhor como aninhar
estruturas
bonificação de 10%.
Vamos
inserir mais uma camada de restrição neste exercício. Agora, além dos critérios
acima,
funcionários com mais de 10 anos de empresa têm direito a uma
bonificação de 30%.
Neste
caso, temos agora 3 possíveis resultados de bonificação: 30%, 20% e 10%. No
algoritmo
em Python, podemos inserir uma primeira condicional composta que
verifica se o funcionário tem
https://univirtus.uninter.com/ava/web/roa/ 26/35
12/08/2021 UNINTER - LÓGICA DE PROGRAMAÇÃO E ALGORITMOS
Puxe
na memória o que você estudou na seção 2.4 Comparando desempenho.
No
algoritmo que acabemos de resolver, se em vez de duas condicionais aninhadas,
usássemos
elas de maneira separada, testando individualmente cada necessidade
do exercício, o algoritmo teria
4.1 EXERCÍCIOS
Vamos
praticar alguns exercícios de condicionais aninhadas.
Exercício
4.1.1: Escreva um algoritmo em Python
em que o usuário escolhe se ele quer comprar
maçãs, laranjas ou bananas. Deverá
ser apresentado na tela um menu com a opção 1 para maçã, 2
para laranja e 3
para banana.
https://univirtus.uninter.com/ava/web/roa/ 27/35
12/08/2021 UNINTER - LÓGICA DE PROGRAMAÇÃO E ALGORITMOS
Após
escolhida a fruta, deve-se digitar quantas unidades se quer comprar. O
algoritmo deve
calcular o preço total a pagar do produto escolhido e mostrá-lo
na tela. Considere que uma maçã
Python
Fluxograma
https://univirtus.uninter.com/ava/web/roa/ 28/35
12/08/2021 UNINTER - LÓGICA DE PROGRAMAÇÃO E ALGORITMOS
representando os
lados de um triângulo fornecidos pelo usuário. Verifique se os valores formam
um
triângulo e classifique como:
a) Equilátero
(três lados iguais);
b) Isósceles
(dois lados iguais);
c) Escaleno
(três lados diferentes).
Python
https://univirtus.uninter.com/ava/web/roa/ 29/35
12/08/2021 UNINTER - LÓGICA DE PROGRAMAÇÃO E ALGORITMOS
Fluxograma
Durante
os programas que desenvolveu utilizando condicionais aninhadas, deve ter
percebido
Existe
uma maneira de deixar a implementação com múltiplos aninhamentos mais atrativa
e
legível para o desenvolvedor, a qual chamamos de condicional de múltipla
escolha. Essa solução não
será sempre implementável para substituir
qualquer aninhamento, mas pode ajudar em algumas
situações.
https://univirtus.uninter.com/ava/web/roa/ 30/35
12/08/2021 UNINTER - LÓGICA DE PROGRAMAÇÃO E ALGORITMOS
A
condicional múltipla existe em as linguagens de programação, no pseudocódigo
chamamos
cadastros.
Em
linguagem Python, escrevemos a múltipla escolha utilizando uma cláusula chamada
de elif. A
Note
que lemos primeiro um nome e uma idade. Aí, caso o nome seja Vinicius, uma
mensagem
aparece na tela. Agora, caso você digite qualquer outra palavra ao
invés de Vinicius, o programa irá
cair em um dos dois no elif e irá
executar ou a Linha 6 ou a Linha 8, dependendo da idade que você
digitou.
objetivo de, para cada uma delas, calcular um dos produtos. Vamos reescrever esse
exercício, mas
agora com a estrutura elif.
https://univirtus.uninter.com/ava/web/roa/ 31/35
12/08/2021 UNINTER - LÓGICA DE PROGRAMAÇÃO E ALGORITMOS
A implementação usando a
múltipla escolha não tem impacto no desempenho do algoritmo em
relação a
solução aninhada. Ou seja, algoritmo não tende a executar mais rápido, ou mais
lento,
devido a ela.
5.1 EXERCÍCIOS
Python
Exercício
5.1.2: Uma loja de departamentos está oferecendo
diferentes formas de pagamento,
conforme opções listadas a seguir. Faça um
algoritmo que leia o valor total de uma compra e calcule
o valor do pagamento
final de acordo com a opção escolhida.
Se a
escolha for por pagamento parcelado, calcule também o valor de cada parcela. Ao
final,
Pagamento
à vista – conceder desconto de 5%;
Pagamento
em 3x – o valor não sofre alterações;
Pagamento
em 5x – acréscimo de 2%;
Pagamento
em 10x – acréscimo 8%.
Python
https://univirtus.uninter.com/ava/web/roa/ 33/35
12/08/2021 UNINTER - LÓGICA DE PROGRAMAÇÃO E ALGORITMOS
FINALIZANDO
REFERÊNCIAS
https://univirtus.uninter.com/ava/web/roa/ 34/35
12/08/2021 UNINTER - LÓGICA DE PROGRAMAÇÃO E ALGORITMOS
https://univirtus.uninter.com/ava/web/roa/ 35/35