Você está na página 1de 19

Disciplina: Informática para Engenharia

Aula 6: Estruturas de Seleção

Apresentação
A tomada de decisão não é uma tarefa fácil; é composta geralmente por um conjunto
de condições que devem ser satisfeitas parcial ou totalmente. Em muitas situações
cotidianas, temos de escolher uma opção entre as várias apresentadas. Modelar tais
situações de maneira correta e de fácil entendimento é um grande desafio em
programação.

Em função da complexidade da regra de negócio, podemos utilizar desde simples


estruturas de decisão até combinações mais complexas, usualmente pelo
encadeamento de tais estruturas condicionais em conjunto com operadores lógicos e
relacionais.

Objetivos
Examinar problemas que envolvem uma tomada decisão e empregar estratégias
de resolução;
Analisar o uso das relações lógicas e aritméticas em estruturas de decisão;
Desenvolver programas com o uso de estruturas condicionais simples e
compostas.
Estruturas para a Tomada de
Decisão
Em muitas situações do dia a dia, nós nos deparamos com alguma condição a
ser verificada. Em programação, tratamos essas situações com uso de
estruturas de seleção, que permitem realizar um grupo de ações quando
determinadas condições são ou não satisfeitas. Tais estruturas podem ser
combinadas de várias maneiras, com o apoio de expressões aritméticas e
lógicas.

Vamos considerar o cálculo de imposto


de determinada quantia.

Devemos aplicar uma taxa de 6% somente em compras acima de R$ 100. O


trecho do pseudocódigo abaixo ilustra a solução para esse problema.

1 SE (quantia >= 100) ENTAO

2 quantia ← quantia * 1.06

3 FIMSE

Podemos observar nesse exemplo que a variável quantia só terá seu valor
alterado se a condição “quantia maior ou igual a 100” for satisfeita.
Agora imagine um simples processo para saber se um aluno está aprovado ou
reprovado de acordo com sua média.

Resumidamente, teríamos de comparar a média calculada com algum valor


preestabelecido, que determina a nota para passar ou reprovar o aluno. Ou
seja, teremos uma estrutura um pouco mais complexa que a anterior. O
pseudocódigo abaixo ilustra essa situação.

1 SE (media >= 7) ENTÃO

2 ESCREVA(“Aprovado”)

3 SENÃO

4 ESCREVA(“Reprovado”)

5 FIMSE

Nesse caso, a mensagem “Aprovado” só será exibida se a condição (linha 1)


for verdadeira. Caso a condição da linha 1 seja falsa, a mensagem exibida
será “Reprovado” (linha 4).

Considere agora que, dependendo da média, o aluno pode ser reprovado,


aprovado ou ir para o exame final. Temos nesse caso três condições distintas.
Uma provável solução seria:

1 SE (media < 5) ENTÃO

2 ESCREVA(“Reprovado”)

3 FIM SE

4 SE (media >=5) E (MEDIA<7) ENTAO

5 ESCREVA(“Final”)

6 FIM SE

7 SE (media >= 7) ENTÃO


8 ESCREVA(“Aprovado”)

9 FIMSE

Particularmente para o aluno que tem média para ir à “final”, temos de


atender simultaneamente a duas condições (linha 4). Além do uso de
operadores relacionais (menor, maior ou igual), observamos o uso de um
conector lógico “E” entre as condições da linha 4.

Operadores Aritméticos,
Relacionais e Lógicos

Além dos operadores aritméticos, nos exemplos anteriores notamos dois


importantes componentes existentes nas estruturas condicionais: os
relacionais e os lógicos.

Os operadores relacionais comparam os valores em ambos os lados e decidem


a relação entre eles. O resultado dessa comparação é “falso” ou “verdadeiro”.
Eles também são chamados de operadores de comparação. Por exemplo,
assuma que as variáveis x e y recebam 10 e 20, respectivamente. O quadro a
seguir ilustra os operadores relacionais (pseudocódigo e Python) e o resultado
de cada relação “x” e “y”.

Relação Pseudocódigo Python x “relação” y


Igual == = falso
Diferente != <> verdadeiro
Maior > > falso
Menor < < verdadeiro
Maior ou igual >= >= falso
Menor ou igual <= >= verdadeiro

Estruturas condicionais são uma ótima maneira de tomar decisões


perguntando se algo é verdadeiro ou não. Mas, muitas vezes, uma condição
não é suficiente. Em diversas situações, temos de combinar diferentes
condições. Isso pode ser feito com os operadores lógicos.
Pseudocódigo Python Função Prioridade
não não not negação 1ª
e e and conjunção 2ª
ou ou or disjunção 3ª

Considere o exemplo anterior sobre a regra em que o aluno iria para a final
((media>=5) e (media<7)).

Note que a nota tinha de satisfazer a primeira E a segunda condições. Ou


seja, o resultado do operador lógico “e” será verdadeiro se TODAS as
condições forem satisfeitas (verdadeiras).

Já o resultado do uso do operador lógico “ou” será falso se TODAS as


condições forem falsas.

De maneira a ilustrar melhor os conceitos, vamos considerar somente duas


situações (V ou F) e os respectivos resultados das operações lógicas com
apoio de tabela-verdade.

A não A
V F
F V

Por exemplo, no terminal do Python podemos testar a primeira condição:

>>> a=True

>>> not a

False

A B AeB
F F F
F V F
V F F
V V V

Podemos testar a terceira condição (A=V e B=F) no terminal da seguinte


maneira:

>>> a=True

>>> b=False

>>> a and b

False

A B A ou B
F F F
F V V
V F V
V V V

Para o operador disjunção, a terceira condição pode ser testada no terminal


da seguinte maneira:

>>> a=True

>>> b=False
>>> a and b

True

É importante ter em mente que podemos combinar esses diferentes


operadores, lembrando-nos sempre das precedências! Por exemplo:

>>> a=True

>>> b=False

>>> c=True

>>> a and b or c

True


Exemplo

Assim como nas operações aritméticas, utilizamos os parênteses para


tornar explícita qual operação deve ser realizada primeiro. Vamos supor
que, no exemplo anterior, queremos realizar primeiro a operação “ou”:

>>> a and (b or c)

A questão de prioridade no uso dentre todos os operadores pode ser resumida


da seguinte maneira:
1

Parênteses mais internos

Operadores aritméticos

Operadores relacionais

Operadores lógicos

Estruturas Condicionais
Basicamente, um programa é composto por uma sequência de comandos ou
blocos, executados de forma linear de cima para baixo. No entanto, em
algumas situações queremos controlar quais blocos serão executados ou não
de acordo com determinada condição. Isso é possível com o uso de estruturas
condicionais ou de seleção. A figura a seguir ilustra uma estrutura condicional
básica.
A figura ilustra um fluxograma que representa uma estrutura condicional
básica.

Iniciando em um círculo preto, uma seta direcional aponta para um losango


que representa uma decisão. Nessa estrutura, uma condição é testada
levando a dois caminhos distintos.

Uma seta direcional aponta para um retângulo, que representa um bloco de


código se a condição for verdadeira. Outra seta direcional aponta para um
círculo preto envolto em um anel externo que indica o fim.

Caso a condição do losango seja falsa, uma seta direcional aponta


diretamente para o fim.

Seleção Simples

Pseudocódigo

SE <condição(s)> ENTAO

comando 1;

comando 2;


comando N;

FIMSE

Python

if (<condição(s)>):

comando 1;

comando 2;

comando N;

Por exemplo, o código para o cálculo do imposto para determinada quantia em


Python pode ser observado a seguir:

>>> quantia = 200.0

>>> if (quantia >=100):

>>> quantia=quantia*1.06

>>>

>>> print(quantia)

212.0

Podemos adicionar operadores lógicos na condição. Por exemplo, suponha que


essa regra seja aplicada a quantias entre $100 e $150. Veja o código Python
resultante:

>>> quantia = 200.0

>>> if (quantia >=100) and (quantia<=150):

>>> quantia=quantia*1.06

>>>

>>> print(quantia)
212.0

Seleção Composta
Em situações em que duas alternativas dependem de uma mesma condição,
utilizamos a seleção composta. Assim, podemos realizar um conjunto de
operações se a condição for verdadeira e outro conjunto de operações se a
mesma condição for falsa.

A figura ilustra um fluxograma que representa uma estrutura condicional


composta.

Iniciando em um círculo preto, uma seta direcional aponta para um losango


que representa uma decisão.

Nessa estrutura, uma condição é testada levando a dois caminhos distintos:


uma seta direcional aponta para um retângulo, que representa um bloco de
código se a condição for verdadeira; em seguida, uma seta direcional aponta
para um círculo preto envolto em um anel externo, que indica o fim.

Caso a condição do losango seja falsa, outra seta sai do losango para outro
retângulo, que representa um bloco de código distinto. Em seguida, uma seta
direcional partindo desse retângulo aponta diretamente para o fim.
Podemos observar a sintaxe da estrutura composta em pseudocódigo e
Python:

Pseudocódigo

SE <condição(s)> ENTAO

comandos;

SENÃO

comandos;

FIMSE

Python

if (<condição(s)):

comandos;

else:

comandos;

Como exemplo, considere o problema do cálculo da situação acadêmica de um


aluno (aprovação/reprovação) segundo uma média obtida a partir de duas
notas informadas pelo usuário. O respectivo código é observado a seguir:

>>> nota1 = float(input("Informe a 1ª nota: "))

>>> nota2 = float(input("Informe a 2ª nota: "))

>>> media = (nota1+nota2)/2

>>> if (media>=7):

... print("Aprovado")

... else:

... print("Reprovado")

...
Reprovado

Seleção Encadeada
Em algumas situações, pode ser necessário agrupar várias estruturas de
seleção, em que uma depende de outras condições. Em outras palavras,
podemos, por exemplo, inserir uma estrutura SE dentro de um SENÃO, que
por sua vez pode utilizar outra estrutura SE, e por aí vai ! A figura a seguir
ilustra esse comportamento.

A figura ilustra um fluxograma que representa uma estrutura condicional


encadeada.

Iniciando em um círculo preto, uma seta direcional aponta para um losango


que representa uma decisão. Nessa estrutura, uma condição é testada
levando a dois caminhos distintos.

Se a condição for verdadeira, uma seta direcional aponta para um retângulo,


que representa um bloco de código. De maneira oposta, uma seta direcional
aponta para outro losango, o qual avalia outra condição.

Caso a condição seja verdadeira, uma seta direcional aponta para outro
retângulo, que representa um bloco de comandos distinto do anterior.
Considerando a condição falsa, uma seta direcional leva à outra estrutura na
forma de losango.
Essa condição se repete infinitamente até a que todas as setas se encontrem
em um círculo preto envolto em um anel externo, que indica o fim.

A sintaxe da estrutura de seleção composta em Pseudocódigo e Python é


apresentada a seguir:

Pseudocódigo

SE <condição> ENTAO

comandos;

SENÃO

SE <condição> ENTAO

comandos;

SENÃO

SE <condição> ENTAO

SENÃO

FIMSE

FIMSE

FIMSE

Python

if (<condição>):

comandos;

else:

if (<condição>):

comandos;
else:

if (<condição>):

else:

De maneira a ilustrar melhor o conceito, considere novamente o problema do


cálculo de média. Diferentemente do anterior, considere que o aluno estará
reprovado com nota inferior a 5 na final se possuir nota maior ou igual 5 e
menor do que 7 e aprovado caso obtenha 7 ou mais pontos. O código a seguir
apresenta o código Python para o problema.

>>> nota1 = float(input("Informe a 1ª nota: "))

>>> nota2 = float(input("Informe a 2ª nota: "))

>>> media = (nota1+nota2)/2

>>> if (media>=7):

... print("Aprovado")

... else:

... if (media>=5):

...print("Final")

... else:

...print("Reprovado")

...

Particularmente em Python, nesses casos podemos reescrever o código


utilizando o comando “elif”. Devemos utilizar esse comando para avaliar as
condições intermediárias antes do “else”. O código a seguir adapta o problema
do cálculo de média com uso do “elif”.
>>> nota1 = float(input("Informe a 1ª nota: "))

>>> nota2 = float(input("Informe a 2ª nota: "))

>>> media = (nota1+nota2)/2

>>> if (media>=7):

... print("Aprovado")

... elif (media>=5):

...print("Final")

... else:

...print("Reprovado")

...

Atividade
1. Supondo que A, B e C são variáveis de tipo inteiro, com valores iguais
a 5, 10 e -8, respectivamente, e uma variável real D, com valor de 1.5,
quais os resultados das expressões aritméticas a seguir? Considere V
para uma sentença verdadeira e F falsa.

a) not (A==B) and (C>=0) or (D<=2)


b) (A==B) and (C>=0) or (D<=2)
c) not ((A==B) and (C>=0)) or (D<=2)
d) not (A==B) and (C>=0)) or (D<=2))
2. Considere o seguinte trecho de código abaixo e informe a saída do
programa. Considere os seguintes valores digitados par as variáveis:
altura=1.74 e peso=84. Qual será a saída do programa?

>>> peso = float(input("Informe seu peso (em Kg):"))

>>> altura = float(input("Informe sua altura (em metros):"))

>>> imc = peso / (altura**2)

>>> if (imc<=18.5):

... print("abaixo do peso")

... elif (imc<=24.9):

... print("peso normal")

... elif (imc<=29.9):

... print("sobrepeso")

... elif (imc <=34.9):

... print("obesidade grau I")

... elif (imc<=39.9):

... print("obesidade grau II")

... else:

... print("obesidade grau III")


3. Elabore um algoritmo em Python em que, dada a idade de um
nadador, seja possível classificá-lo em uma das seguintes categorias:

Infantil A: de 5 a 7 anos;
Infantil B: de 8 a 10 anos;
Juvenil A: de 11 a 13 anos;
Juvenil B: de 14 a 17 anos;
Sênior: maior de 18 anos;

Com uso do comando “elif”, deverá ser mostrada ao final a classificação


do nadador.

Referências

GRUS, J. Data science from scratch: first principles with Python. Beijing: O’Reilly,
2015.

MENEZES, N. N. C. Introdução à programação com Python: algoritmos e lógica


de programação para iniciantes. 1. ed. São Paulo: Novatec, 2017.

MUELLER, J. P. Começando a programar em Python para leigos. Alta Books,


2016.

PERKOVIC, L. Introduction to computing using Python: an application


development focus. 2. ed. [s.l.] Wiley Publishing, 2015.

Próximos Passos

Apresentar técnicas para a resolução de problemas que envolvem situações


repetitivas;
Analisar o uso das estruturas de repetição de maneira a evitar a duplicação de
código;
Ilustrar como esses conceitos podem auxiliar em tarefas que envolvem
contagem e somas repetitivas.

Explore mais
Assista ao vídeo “Aulas Python – 019 - Operadores Lógicos
<https://www.youtube.com/watch?v=czW7I2CCcUM> ”;
Assista ao vídeo “Curso de Python - Aula 19 - Operadores Relacionais –
eXcript <https://www.youtube.com/watch?v=JN1jHtlRqLA> ”;
Assista ao vídeo “Aulas Python - 011 - Estrutura de Decisões II: if, elif e
else <https://www.youtube.com/watch?v=kY47B3StnWg> ”;
Assista ao vídeo “Aulas Python - 012 - Múltiplos if VS if, elif e else
<https://www.youtube.com/watch?v=zfj3F2FXKmg> ”.

Você também pode gostar