Você está na página 1de 13

Curso: Engenharia de Produo

Disciplina: Computao II
Autor: Tiago Arajo Neves.

Aula 3
Desvio Condicional Parte I

Meta
Expor os conceitos de desvio condicional e as estruturas usadas para esse fim

Objetivos
Aps esta aula, voc dever ser capaz de:
1. Identificar o conceito e uso de variveis e expresses lgicas simples;
2. Fazer algoritmos que utilizem expresses lgicas simples e desvios condicionais.

1 Introduo
Muitas vezes, necessitamos executar certas aes em funo de algumas condies.
Alguns exemplos do cotidiano: devemos lavar roupa, caso exista roupa suja; levamos o
guarda-chuva, se o dia est chuvoso; usamos casaco, se est frio; se temos caf,
tomamos, seno, bebemos ch.

Essa necessidade de executar aes na presena de certas condies tambm existe


dentro da computao, como voc viu na disciplina de Computao I. Para analisar tais
condies, so utilizadas estruturas condicionais, tambm chamadas de estruturas de
desvio de fluxo. O uso destas estruturas frequente e seu domnio indispensvel para a
construo de algoritmos. Nesta aula, voc ver vrios tipos de estruturas de desvio que
Java possui. Mas primeiro preciso dominar o uso de expresses lgicas.

2 Variveis e Expresses Lgicas


Uma Expresso Lgica nada mais do que um conjunto de operaes que pode resultar
em dois possveis valores: Verdadeiro ou Falso. Exemplos de expresses lgicas simples
so expresses que usam os operadores relacionais como o operador > (maior que). A
Tabela 3.1 mostra os operadores relacionais e os operadores de igualdade como

1
comumente vistos na Matemtica, seus correspondentes em Java, exemplos de uso e
seus significados.

Operador Matemtico Operador em Java Exemplo Significado


= == a==b a igual a b?
!= a!=b a diferente de b?
> > a>b a maior que b?
< < a<b a menor que b?
>= a>=b a maior ou igual a b?
<= a<=b a menor ou igual a b?

Tabela 3.1 Operadores matemticos e seus correspondentes em Java.

Um exemplo de avaliao de um operador relacional pode ser a<b, tendo a varivel a o


valor 2 e a varivel b o valor 5. Neste caso, a expresso traduzida para 2 < 5, que
resulta em verdadeiro. Agora, se mantivermos os valores das variveis e mudarmos o
operador para >, temos a expresso a>b, que traduzida para 2 > 5, que resulta em
falso. Em Java, verdadeiro e falso so constantes expressas por true e false,
respectivamente.

importante mencionar que o resultado de operaes relacionais e de igualdade podem


ser armazenadas em variveis do tipo lgicas, que em Java so expressas pelo tipo
boolean, isto , ilustrado pelo programa da Figura 3.1, que ir imprimir true ou false,
dependendo dos valores digitados para as variveis. importante mencionar que
variveis do tipo boolean s podem assumir dois valores: true ou false.

Figura 3.1 Utilizando variveis lgicas para armazenar resultados de expresses


relacionais

2
Os operadores relacionais e de igualdade podem ser utilizados com expresses mais
elaboradas como, por exemplo, 2+2 > 5-0. Neste caso, as expresses aritmticas so
resolvidas primeiramente, e somente ento so avaliados os operadores relacionais e de
igualdade. Isto ocorre devido precedncia desses operadores.

Inicio atividade
Atividade 1 Atende ao Objetivo 1
Avalie o resultado das seguintes expresses Java como true ou false:
a) sendo a=2 e b=3, a expresso a%b%a != b%a
b) sendo a=3 e b=1, a expresso -1*a-b == -1*(b-a)
c) sendo a=1 e b=2, a expresso a*b != b*a
Inicio Resposta
Resposta comentada
Analisaremos a primeira expresso. Como as expresses so resolvidas primeiro, e
sempre da esquerda para a direita, 2%3%2 resolvida primeiro. Como o resto da diviso
de 2 por 3 2, este resultado usado na segunda operao. Logo 2%3%2 parcialmente
resolvido como 2%2. Esta segunda parte da expresso resulta em 0, ento, temos 0 !=
3%2. Em seguida, resolvido 3%2, que resulta em 1. Assim, a expresso fica 0 != 1.
Como 0 diferente de 1, a expresso resulta em true.
De maneira anloga, a segunda expresso resulta em false, e a terceira em false.
fim atividade

3 Estrutura de Desvio Simples


A estrutura de desvio simples, tambm chamada de Estrutura if, utilizada quando
devemos executar certas aes, caso uma condio seja atendida. Esta instruo
equivalente a estrutra Se-Ento que voc aprendeu na disciplina de Computao I. Esta
estrutura tem duas possveis sintaxes:

Figura 3.2: Sintaxes da Estrutura if

3
A Figura 3.2 mostra as sintaxes da Estrutura if. Como sintaxe obrigatria da estrutura,
temos: if, ( e ). A palavra if indica o incio da instruo condicional. O smbolo ( marca o
incio da expresso lgica que mostrar a condio que queremos avaliar. O smbolo )
marca o fim da expresso lgica. A estrutura if, em Java, pode ser seguida, ou no, por
um bloco de comandos. O bloco sempre inicia com { e sempre termina com }. Caso
seja seguida de um bloco, todas as instrues do bloco sero executadas caso a
expresso lgica resulte em true. Porm, caso a expresso resulte em false, todas as
instrues do bloco sero ignoradas. Caso a estrutura no seja seguida de um bloco,
apenas a prxima instruo ser executada ou ignorada, dependendo do resultado da
expresso.

A Figura 3.3 mostra um exemplo de uso da sintaxe com bloco. As instrues antes do if
so executadas normalmente (de cima para baixo). Dentro do bloco do if existem trs
instrues, que sero executadas somente se a for maior que b. Aps o if existe uma
instruo que ser executada por ltimo.

Figura 3.3
Uso de if com bloco

J a Figura 3.4 mostra o uso de if sem bloco. Os dois programas so muito parecidos,
contudo, os resultados so distintos. Neste programa, o if se aplica apenas para a
instruo da linha 12. Todas as demais instrues so executadas independente do
resultado da expresso. Note portanto que, se voc precisa executar somente uma
instruo caso a condio seja verdadeira, voc pode usar qualquer uma das sintaxes.
Agora se voc necessita executar mais de uma instruo, voc deve optar pelo uso do
bloco.

4
Figura 3.4 Uso de if sem bloco

Inicio Atividade
Atividade 2 - Atende aos Objetivos 1 e 2
a) Faa um programa que calcule o valor absoluto de um nmero inteiro. A equao do
valor absoluto descrita abaixo:

x= x, se x 0,
{ x, c . c . }
b) Faa um programa que leia um nmero Inteiro e verifique se tal nmero pertence ao
conjunto dos nmeros naturais.

c) Faa um programa que verifique se um determinado nmero, informado pelo usurio,


mltiplo de 2.

d) Faa um programa que verifique se um determinado nmero x mltiplo de outro


nmero y. Os valores de x e y devem ser informados pelo usurio.

5
Inicio Resposta

Resposta comentada
a) De acordo com a equao, o valor absoluto de um nmero x, tambm chamado mdulo
de x, o prprio x, se x for maior ou igual a zero, ou x, em caso contrrio. Desse modo,
devemos fazer um programa que imprima o valor de x multiplicado por -1, caso x seja
menor que zero. Uma possvel soluo para este problema a seguinte:

Nesse programa, a varivel x utilizada tanto para leitura do nmero quanto para o
resultado do valor absoluto. O primeiro passo ler o nmero do qual se deve calcular o
mdulo. O passo crtico deste algoritmo a estrutura de desvio. Neste caso, se x for
maior ou igual a zero, nada precisa ser feito, pois em x j est o valor absoluto de x (x
positivo), o que atende equao. Caso x seja menor que zero, o valor contido em x
multiplicado por -1, e o resultado armazenado na prpria varivel x (x = -x). Isso ocorre
porque o operador de inverso de sinal precedncia maior que o de atribuio, logo o lado
direito da expresso avaliado e s depois a operao de atribuio executada. Note
que isto atende definio da equao, uma vez que, se x menor que zero ao
invertermos o sinal,encontramos o valor absoluto de x.

b) O conjunto dos nmeros naturais est contido no conjunto dos nmeros inteiros. Assim,
um nmero natural necessariamente inteiro, mas o contrrio no verdadeiro. Os
nmeros naturais so compostos de todos os nmeros inteiros positivos mais o zero.
Assim, para verificar se um nmero inteiro pertence ao conjunto dos nmeros naturais,
basta verificar se ele maior ou igual a zero.

6
d) Como a atividade c um caso particular da atividade d, apenas uma soluo para a
atividade d ser apresentada. Para verificar se um nmero x mltiplo de outro nmero y,
deve-se verificar se a diviso de x por y exata, ou seja, tem resto igual a zero. Para uma
possvel soluo, primeiramente, so criadas duas variveis com a mesma nomenclatura
do problema. A seguir, estas variveis so lidas e o resto da diviso entre elas
analisado. Caso o resto seja zero, isto implica que x um mltiplo de y. Caso contrrio, x
no mltiplo de y. A resposta pode ser feita atravs de construo de texto ou usando
dois ifs (um para cada caso). Um programa que faz uso de construo de texto
mostrado a seguir:

Nesta soluo, um texto montado para dar a resposta. Exp: se os nmeros so 4 e 2, o


texto Os nmeros 4 e 2 so mltiplos exibido. Caso os nmeros no fossem mltiplos,
um no seria colocado para indicar.

fim Atividade

box ateno

A estrutura if no possui ; em sua sintaxe. Isso ocorre porque o ; marca o fim de uma
instruo. Logo uma fonte frequente de erros o uso da estrutura if (com ou sem bloco)
seguido de ; . Como voc pode notar pelas atividades, a posio da primeira instruo

7
do if pode ser colocada na mesma linha ou aps linhas em branco. O if considera como
sua instruo aquela que esta antes do primeiro ; aps sua colocao. Veja o seguinte
programa:

Na linha 11 h um if, seguido de um ;. Neste caso o if considera como sendo sua


instruo somente aquilo que precede o primeiro ; depois dele, ou seja a instruo antes
do ; da linha 11. Note que esta uma instruo vazia, mas ainda sim uma instruo.
Portanto, neste caso, o que vai ser executado caso a condio seja verdadeira uma
instruo vazia, o que faz com que a linha 12, seja executada independente do resultado
da expresso lgica, fazendo assim um programa que no funciona como o desejado.

O mesmo pode acontecer caso voc esteja utilizando o if com bloco. Isso ocorre porque
Java permite que voc use blocos sem estruturas (isto ser visto em mais detalhes em
momento oportuno).

Portanto, se seu programa no est funcionando como deveria, veja se voc no


posicionou ; em locais indesejados.

fim box

8
4 Estrutura de Desvio Composto
Em muitos casos, devemos tomar cursos de ao diferentes, de acordo com uma
condio. Um exemplo do cotidiano decidir como pagar o restaurante na hora do
almoo. Se temos dinheiro suficiente, pagamos em dinheiro; seno, pagamos com carto.

A estrutura condicional composta, tambm chamada de estrutura if-else, utilizada para


resolver problemas deste tipo. Esta estrutura equivalente a estrutura Se-Seno que
voc aprendeu em Computao I. As possveis sintaxes da estrutura composta so
mostradas na Figura 3.5.

Figura 3.5 Sintaxe da estrutura if-else

Note que a estrutura if e a estrutura if-else tm muitos elementos em comum. A diferena


que depois da instruo (ou conjunto de instrues) do if, existe a palavra reservada
else e uma outra instruo (ou conjunto de instrues).

A semntica da estrutura if-else um pouco mais elaborada que a da estrutura if. Nesta
estrutura, caso a expresso lgica resulte em true, o conjunto de instrues I (entre o if e
o else) executado e o conjunto de instrues II (posicionadas depois do else)
ignorado. Caso a expresso lgica resulte em false, o conjunto de instrues I ignorado
e o conjunto de instrues II executado. Note que, independente do resultado da
expresso, sempre haver um conjunto de instrues que executado e outro que
ignorado.

Exemplo de uso: fazer um programa que determine se uma equao do segundo grau
possui ou no razes reais.

9
Uma equao do segundo grau comumente representada por ax 2 +bx +c =0; possu
razes reais quando b2 -4ac maior ou igual a zero. Assim, uma possvel soluo para o
problema a seguinte:

Figura 3.6: Programa para verificar se uma equao do segundo grau possui razes reais.

5 - O operador ?:
O Operador ?:, tambm chamado de operador condicional, est intimamente ligado
estrutura if-else. Este operador utilizado para montar uma expresso condicional em
uma nica linha e sua sintaxe a seguinte:
(<Condio>) ? <resultado I>: <resultado II>

A execuo deste operador procede da seguinte forma: primeiro, a condio avaliada.


Caso ela resulte em true, o resultado do operador ?: ser o resultado I. Caso a condio
resulte em false, o resultado do operador ser o resultado II. Veja um exemplo de
programa que utiliza este operador.

10
Figura 3.7: Uso do operador condicional.

Neste exemplo x recebe um valor dependendo do valor digitado para z. Caso z seja maior
que zero, x assume o valor 1. Caso contrrio, x assume -1. O trecho da linha 12
equivalente a escrever o seguinte trecho:
if(z>0)
x=1;
else
x=-1;

Inicio Atividades
Atividade 3 Atende aos Objetivos 1 e 2
a) Complete o exemplo da Figura 3.7, inserindo as instrues necessrias para calcular
quais as razes da equao informada, caso a equao possua razes reais.

b) Faa um programa que determine se um determinado nmero informado pelo usurio


par ou mpar usando o operador condicional.

c) Faa um programa que leia a idade de um indivduo e determine, de acordo com a


legislao em vigor atualmente, se este indivduo maior ou menor de idade.

11
d) O ndice de Massa Corporal (IMC) uma medida utilizada pelos profissionais de sade
para avaliar se um indivduo est ou no acima do peso. Para calcular este ndice,
dividimos a massa do indivduo, chamada de m (obtida em KG por uma balana) pelo
quadrado da sua altura, chamada de h (medida em metros), ou seja, IMC=m /h 2 . Para os
homens, caso o IMC seja maior que 26,4, o indivduo considerado acima do peso. Para
as mulheres, esse limiar 25,8. Faa um programa para calcular o IMC de pessoas do
mesmo sexo que voc. O algoritmo deve ler as informaes necessrias (massa e altura),
calcular o IMC e exibir uma mensagem informando se o indivduo est ou no acima do
peso ideal.

Inicio Respostas
Resposta comentada

a) Para determinar as razes de uma equao do segundo grau, devemos utilizar a

b+
x 1=
frmula de Bhaskara, que diz que a primeira raiz, chamada x 1, dada por 2a ea

b
x 2=
segunda raiz, denominada x 2, dada por 2a , onde delta dado por

=b 2 4ac . Para fazer uma raiz quadrada, basta usar o mtodo sqrt da classe Math (aula

2) ou fazer uma potenciao fracionria, ou seja, b =b1/ 2 . Para fazer isso use o mtodo
pow, da classe Math, que tem a seguinte sintaxe: Math.pow(base,expoente), sendo base
e expoente nmeros reais.

b) Para verificar se um nmero par ou mpar, basta verificar se ele mltiplo de dois,
utilizando o operador modulos (%). A mesma estrutura pode ser usada para a atividade c,
mudando apenas a condio e as mensagens a serem impressas.

d) O primeiro passo para resolver esta questo perceber que os valores de massa e
altura e do limiar de IMC so nmeros reais. Assim, uma possvel soluo para a questo,
considerando-se o sexo masculino, dada a seguir. Uma soluo para o sexo feminino
facilmente obtida trocando a mensagem inicial e substituindo o valor 26.4 para 25.8 .

12
Fim Atividades

Resumo
Nesta aula, voc aprendeu a lidar com expresses lgicas (que retornam verdadeiro ou
falso) simples e a utilizar estas expresses em estruturas de desvio condicional, simples e
compostas. Tambm foi visto que, dependendo do resultado de uma expresso lgica, um
determinado conjunto de instrues pode ser executado ou ignorado, dependendo do de
estrutura de desvio utilizada.

Informaes sobre a prxima aula

Na prxima aula, voc ver como lidar com expresses lgicas mais elaboradas e como
construir estruturas de desvio encadeadas e o uso de aninhamento.

Referncias

Ascencio, A. F. G.; Campos, E. A. V. Fundamentos da Programao de Computadores.


Pearson, 2012.

Cormen, T. H. et al. Introduction to Algorithms. 3rd Edition. MIT Press, 2009.

Deitel, P.; Deitel, H. Java: How to Program. 9th Edition. Boston: Prentice Hall, 2012.
Farrer, H. et al. Programao Estruturada de Computadores. 2 Edio. Guanabara, 1989.

13