Você está na página 1de 8

Universidade Federal de Ouro Preto BCC701

Instituto de Ciências Exatas e Biológicas Programação de Computadores I


Departamento de Computação Semestre: 2021-01

Aula prática – Estrutura de Decisão (1)

Pré-requisitos:

• Estar familiarizado com o conteúdo das aulas anteriores e ter realizado as tarefas correspondentes.
• Ler o capı́tulo 4 do livro texto da disciplina.
• Assistir os vı́deos e/ou aulas teóricas correspondentes.

Resumo:
• As estruturas de decisão permitem alterar o fluxo de execução de um programa, de acordo com o valor
de uma expressão condicional que resulte em Verdadeiro (True) ou Falso (False).
• Em Python temos as seguintes estruturas de decisão:
– if (se), utilizado quando precisamos decidir se um determinado bloco de comandos do programa
deve ou não ser executado, sintaxe:
1 if <condição>:
2 <Bloco de comandos caso a condição seja True>

– if .. else (se .. senão): neste caso, um bloco de comandos será executado se a condição for
verdadeira e outro se a condição for falsa, sintaxe:
1 if <condição>:
2 <Bloco de comandos caso a condição seja True>
3 else:
4 <Bloco de comandos caso a condição seja False>

– if .. elif .. else (se .. senão se .. senão): se houver diversas condições, cada uma associada
a um bloco de comandos, utiliza-se o elif. Somente o bloco de comandos associado à primeira
condição que resultar em True será executado. Se nenhuma das condições resultar em True, executa
o bloco de comandos else (que é opcional), sintaxe:
1 if <condição 1>:
2 <Bloco de comandos caso a condição 1 seja True>
3 elif <condição 2>:
4 <Bloco de comandos caso a condição 2 seja True>
5 :
6 else:
7 <Bloco de comandos caso todas as condições sejam False>

• As expressões condicionais podem ser elaboradas utilizando-se de expressões aritméticas e operadores


relacionais de igualdade (==), desigualdade (!=), maior que (>), maior ou igual a (>=), menor que (<) e
menor ou igual a (<=).
• Expressões condicionais também podem ser compostas de operadores lógicos de negação (not), conjunção
“E” (and) e disjunção “OU” (or).
• Nesta prática a intenção é reforçar seus conhecimentos em todos estes recursos e praticar sua utilização
na construção de programas que resolvam algum problema especı́fico. Se você não está familiarizado com
os itens listados acima, consulte os pré-requisitos da prática, listados no inı́cio desta página.

1
Tarefa 1: Decisão baseada em faixas de valores

As estruturas de decisão são muito úteis para variados tipos de situações. Muitos problemas demandam
decisões para realizar determinadas tarefas com base em uma faixa de valores. Suponha o seguinte problema:

Implemente um programa que define a um conceito para o aluno com base na seguinte graduação de
sua nota final:

• Nota final >= 0 e < 3: E

• Nota final >= 3 e < 5: D

• Nota final >= 5 e < 7: C

• Nota final >= 7 e < 9: B

• Nota final >= 9 e <= 10: A

Conceitos A e B determinam que o aluno está Aprovado, C e D que ele está em Recuperaç~ ao e E que
ele está Reprovado. O programa solicita a nota final do aluno e em seguida imprime o conceito e a situação
do aluno. No caso de aluno em recuperação, a nota do aluno na recuperação deve ser solicitada e a situação
será definida para esta nota como Aprovado, se a nota for maior ou igual a 7 e Reprovado, caso contrário.
Não é necessário validar as notas fornecidas.

Este problema pode ser perfeitamente resolvido com apenas uma decisão usando if / elif / else. Veja
como ficaria um código que resolve o problema:
1 nota = float(input(’Informe a nota final: ’))
2 if nota < 3:
3 print(f’O conceito do aluno é E e a situação é Reprovado’)
4 elif nota < 5:
5 print(f’O conceito do aluno é D e a situação é Recuperação’)
6 nota = float(input(’Informe a nota da recuperação: ’))
7 if nota >= 7:
8 print(’Aluno Aprovado na recuperação.’)
9 else:
10 print(’Aluno Reprovado na recuperação.’)
11 elif nota < 7:
12 print(f’O conceito do aluno é C e a situação é Recuperação’)
13 nota = float(input(’Informe a nota da recuperação: ’))
14 if nota >= 7:
15 print(’Aluno Aprovado na recuperação.’)
16 else:
17 print(’Aluno Reprovado na recuperação.’)
18 elif nota < 9:
19 print(f’O conceito do aluno é B e a situação é Aprovado’)
20 else:
21 print(f’O conceito do aluno é A e a situação é Aprovado’)

Destacamos o fato de que, uma vez avaliando as faixas de valores em ordem (crescente ou decrescente),
não precisamos avaliar sempre os dois valores (superior e inferior) da faixa. Por exemplo, na linha 2 nós já
testamos o valor 3 para a primeira faixa, na linha 4, quando avaliamos a segunda faixa, não precisamos testar
novamente o valor 3, apenas o valor 5. O mesmo acontece para as faixas posteriores, na linha 4 já testamos o
valor 5, então, na linha 11 testamos apenas o valor 7. E assim por diante.

2
No entanto, o código anterior tem um problema. Ele resolve todas as situações realizando print’s para
cada uma delas, e replicando código, como no tratamento da recuperação. Nestas situações, é recomendado
separar processamento de saı́da, e tentar implementar o que é comum em mais de uma situação uma única vez.
Segundo esta lógica, um programa mais apropriado para resolver o problema é apresentado a seguir:
1 nota = float(input(’Informe a nota final: ’))
2 if nota < 3:
3 grad = ’E’
4 situacao = ’Reprovado’
5 elif nota < 5:
6 grad = ’D’
7 situacao = ’Recuperação’
8 elif nota < 7:
9 grad = ’C’
10 situacao = ’Recuperação’
11 elif nota < 9:
12 grad = ’B’
13 situacao = ’Aprovado’
14 else:
15 grad = ’A’
16 situacao = ’Aprovado’
17 print(f’O conceito do aluno é {grad} e a situação é {situacao}’)
18 if situacao == ’Recuperação’:
19 nota = float(input(’Informe a nota da recuperação: ’))
20 if nota >= 7:
21 print(’Aluno Aprovado na recuperação.’)
22 else:
23 print(’Aluno Reprovado na recuperação.’)

Observe que, para separar o processamento da saı́da foi necessário criar variáveis durante o processamento,
que são utilizadas na saı́da. Apesar disso, concentramos a primeira saı́da em um único print. Além disso,
tratamos a situação de recuperação em um único bloco de comandos, eliminando a replicação de código. Fazer
eventuais alterações no programa agora é mais fácil e menos propı́cio a erros. Além disso, podemos perceber
que o código ficou mais “legı́vel”, ou seja, mais “limpo”, menos confuso e mais fácil de ler e entender.
Observe também que utilizamos uma única variável para as duas notas (nota final e nota de recuperação) –
variável nota. Neste problema isso pode ser feito, pois a nota final já foi avaliada quando substituı́mos o valor
com a nota da recuperação e o seu valor não será mais utilizado no programa.
Implemente os programas no Thonny e faça testes de execução e depuração.

3
Tarefa 2: Separando validação do processamento

A tarefa anterior mostrou uma situação muito corriqueira, que é a avaliação de faixas de valores. Muitos
problemas demandam decisões que envolvem também a validação de dados. Suponha o seguinte problema:

Implemente um programa de vendas que aplica descontos graduais de acordo com a seguinte regra:

• Valor da compra <= 100: sem desconto

• Valor da compra > 100 e <= 300: desconto de 2%

• Valor da compra > 300 e <= 700: desconto de 6%

• Valor da compra > 700: desconto de 10%

Valores de compra menores ou iguais a zero são considerados inválidos. O programa solicita o valor da
compra e em seguida imprime uma mensagem de erro, caso o valor seja inválido. Caso contrário, calcula e
imprime o desconto e o valor final da compra.

Assim como o anterior, este problema pode ser resolvido com apenas uma decisão usando if / elif
/ else. Porém, na maioria das vezes isso faz com que o código fique grande, confuso e difı́cil de alterar.
Separando a validação do processamento e a saı́da, o resultado fica bem melhor. Apresentamos a seguir a
estrutura de solução recomendada para este tipo de situação:
1 var = entrada do usuário
2 # validação
3 Se var possui um valor inválido:
4 imprima a mensagem de erro
5 senão:
6 # processamento
7 se condição 1:
8 defina variáveis que determinam a solução para o caso 1:
9 senão se condição 2:
10 defina variáveis que determinam a solução para o caso 2:
11 senão ...: # outras condições
12 defina variáveis que determinam a solução para os demais casos:
13 # saída
14 imprima a mensagem de resultado padrão

Veja a solução para o problema proposto seguindo esta estrutura:


1 valor = float(input(’Informe o valor da compra: ’))
2 if valor <= 0:
3 print(’Erro: valor inválido’)
4 else:
5 if valor <= 100:
6 desc = 0
7 elif valor <= 300:
8 desc = 2
9 elif valor <= 700:
10 desc = 6
11 else:
12 desc = 10
13 valor = valor * (1 − desc / 100)
14 print(f’Desconto de {desc}%, valor final da compra é R$ {valor}’)

Implemente o programa no Thonny e faça testes de execução e depuração.

4
Questão 1

Você empresta dinheiro com cobrança de juros simples, que é calculada da seguinte forma:

J =C ×t×m

onde: J é o valor dos juros devido; C é o capital emprestado; t é a taxa de juros do perı́odo; e m é a quantidade
de meses para quitação da dı́vida.
A taxa de juros depende do capital emprestado: para valores menores ou iguais a R$ 10.000,00, a taxa de
juros é de 10% ao mês (ou seja, t = 0, 1), já para valores maiores do que R$ 10.000,00, a taxa de juros é de 7%
ao mês (ou seja, t = 0, 07).
Implemente um programa que receba como entradas os valores de: C (real) e m (inteiro). Em seguida ele
determina a taxa de juros t, levando em consideração o valor do capital emprestado, e calcula o valor de juros
devido. Ao final, o programa imprime a taxa de juros aplicada (valor percentual, com 0 casas decimais), o
juros devido calculado (J, com 2 casas decimais) e o valor total da dı́vida (soma do capital emprestado e o
juros devido, também com 2 casas decimais). Exemplos de execução a seguir.

Exemplo 1:
Capital emprestado: 1560.89
Quantidade de meses para quitação: 6
Taxa de juros aplicada: 10%
Juros devido: 936.53
Valor total: 2497.42

Exemplo 2:
Capital emprestado: 10000
Quantidade de meses para quitação: 7
Taxa de juros aplicada: 10%
Juros devido: 7000.00
Valor total: 17000.00

Exemplo 3:
Capital emprestado: 15900.99
Quantidade de meses para quitação: 3
Taxa de juros aplicada: 7%
Juros devido: 3339.21
Valor total: 19240.20

5
Questão 2

Implemente o programa descrito pelo fluxograma a seguir. Siga o formato de saı́da indicado nos exemplos
e note que o programa imprime o peso que deve ser perdido com exatamente 2 casas decimais.

Ler valores do Peso,


Início
Altura e Sexo

Calcular IMC

Não Sexo é Sim


masculino (M)?

Não Sim Não Sim


Sexo é Valor de IMC
feminino (F)? é maior que 25?

Informe ao usuário Calcular o peso para


Informe que a entrada Não Valor de IMC Sim que ele não precisa obter IMC = 25
contém dados não é maior que 24? perder peso para ter
reconhecidos IMC <= 25
Imprimir o peso que
Informe à usuária Calcular o peso para o usuário deve perder
que ela não precisa obter IMC = 24 para ter IMC=25
perder peso para ter
IMC <= 24
Imprimir o peso que
a usuária deve perder
para ter IMC=24

Fim

Peso
Dica: lembre-se que IMC = e, portanto, Peso = IMC × Altura2 .
Altura2

Exemplo 1:
Digite seu peso (em kg): 90
Digite sua altura (em metros): 1.9
Seu sexo é masculino (M) ou feminino (F)? M
Você não precisa perder peso para ter IMC <= 25

Exemplo 2:
Digite seu peso (em kg): 60
Digite sua altura (em metros): 1.6
Seu sexo é masculino (M) ou feminino (F)? F
Você não precisa perder peso para ter IMC <= 24

6
Exemplo 3:
Digite seu peso (em kg): 60
Digite sua altura (em metros): 1.57
Seu sexo é masculino (M) ou feminino (F)? F
Você deve perder 0.84kg para ter IMC = 24

Exemplo 4:
Digite seu peso (em kg): 85
Digite sua altura (em metros): 1.75
Seu sexo é masculino (M) ou feminino (F)? M
Você deve perder 8.44kg para ter IMC = 25

Exemplo 5:
Digite seu peso (em kg): 85
Digite sua altura (em metros): 1.75
Seu sexo é masculino (M) ou feminino (F)? A
A entrada contém dados não reconhecidos

7
Questão 3

Implemente um programa para ler a quantidade de lados (q, inteiro) de um polı́gono regular, e a medida do
lado (L, real), classificar o polı́gono, calcular e imprimir o valor da área (A, com duas casas decimais), conforme
as descrições a seguir:

• q < 3, “Não é um polı́gono”;



L2 × 3
• q igual a 3, “triângulo” com área: A = 4 ;

• q igual a 4, “quadrado” com área: A = L2 ;


5×L2
• q igual a 5, “pentágono” com área: A = 4×tan(0,6283) ;

3×L2 × 3
• q igual a 6, “hexágono” com área: A = 2 ;

• q > 6, “Polı́gono não identificado”.

Veja os exemplos de execução a seguir, observe que a medida do lado é solicitada apenas quando o polı́gono
é válido, ou seja, primeiro é necessário avaliar a quantidade de lados e: (a) imprimir uma das mensagens de
entrada inválida; ou (b) solicitar a medida do lado e realizar o processamento.

Exemplo 1:
Digite a quantidade de lados: 2
Não é um polígono

Exemplo 2:
Digite a quantidade de lados: 7
Polígono não identificado

Exemplo 3:
Digite a quantidade de lados: 5
Digite a medida do lado: 8.3
O polígono é um pentágono com área: 118.53

Exemplo 4:
Digite a quantidade de lados: 3
Digite a medida do lado: 30
O polígono é um triângulo com área: 389.71

Exemplo 5:
Digite a quantidade de lados: 6
Digite a medida do lado: 10.5
O polígono é um hexágono com área: 286.44

Você também pode gostar