Buscar

Estrutura de decisão

Prévia do material em texto

Técnicas de 
Programação
Material Teórico
Responsável pelo Conteúdo:
Prof.a Esp. Margarete Eliane da Silva Almendro
Revisão Técnica:
Prof. Me. Douglas Almendro
Revisão Textual:
Prof. Me. Luciano Vieira Francisco
Estruturas de Decisão
5
• Introdução
• Estrutura Condicional Simples – If
• Tabela Verdade
• Estrutura If-Else
• Estrutura If-Else Aninhada
• Estrutra Switch-Case
 · Desenvolver a visão de algoritmos, bem como da análise de problemas de decisão 
e da formulação de algoritmos.
 · Traduzir algoritmos em programas, especificamente na linguagem de programação 
Java.
 · Estimular o pensamento de programação computacional.
Caro(a) aluno(a),
Nesta Unidade você terá uma visão do que vem a ser algoritmos de programação, assunto 
que lhe proporcionará uma metodologia de análise de problemas e formulação de algoritmos, 
utilizando os comandos básicos de atribuição e comparação. Ou seja, ajudando-o a traduzir os 
algoritmos em programas com uma linguagem de alto nível.
Especificamente nesta Unidade, utilizaremos a linguagem Java.
Estruturas de Decisão
6
Unidade: Estruturas de Decisão
Contextualização
Reflita sobre a seguinte situação:
Você precisa desenvolver um programa que apresente a média da nota de um estudante de 
determinado centro de ensino. Ao programar, precisará também fazer constar se o aluno está 
aprovado ou reprovado, conforme a média obtida. 
Observe que será necessário analisar a média desse estudante para, então, tomar uma decisão.
Assim, torna-se importante aprender os recursos de tomadas de decisão, os quais conhecidos 
como If, Else e Switch.
7
Introdução
Em nosso dia a dia frequentemente encontramos situações de decisão. Usar o ônibus, o 
trem ou o carro particular? Quando tratamos de programação não é diferente, pois também 
nos deparamos com diversas situações de decisão, tais como mostrar o status final de uma 
disciplina, especificamente se o aluno foi aprovado ou se deverá fazer o exame?
Tais estruturas são utilizadas para controlar o fluxo de execução dos programas, 
possibilitando que caminhos alternativos sejam seguidos de acordo com o resultado de uma 
condição ou mais condições.
If é o comando que define os caminhos a serem seguidos pelo fluxo do algoritmo, permitindo 
que apenas valores booleanos sejam testados. Se o valor passado como parâmetro para o 
comando if for true – verdadeiro – o bloco if é executado; caso contrário, o bloco else é 
executado. Dito de outra forma, o parâmetro passado para o comando if deve ser um valor 
booleano, ou o código não compilará. O comando else e seu bloco são opcionais.
Existem três tipos de estruturas de decisão, a saber:
 · If;
 · If-else;
 · Switch-case.
Nesta Unidade veremos cada uma, quais suas particularidades tanto em pseudocódigo, 
quanto em programação Java. 
8
Unidade: Estruturas de Decisão
Estrutura Condicional Simples – If
É chamada de estrutura de decisão única, pois seleciona uma única ação ou um grupo de ações.
Quando temos tal situação, o caminho apenas será executado caso a decisão seja verdadeira. 
Como vimos, o comando de decisão somente se utilizará de um valor booleano.
 · Pseudocódigo:
se(condição) 
 instruções
fi m_se
se(altura >= 1.80)
 Exiba(“Você é Alto”)
fi m se
 · Java:
if(condição){
 instruções;
}
if( altura >= 1.80){ 
JOptionPane.showMessageDialog(null,
 “Você é Alto”);
}
Onde:
• Executa as <instruções> se a condição for verdadeira, enquanto condição é uma expressão 
lógica e, portanto, deve resultar no valor lógico F ou V.
Verifiquemos um exemplo completo do comando if simples. Escreva um algoritmo que 
solicite um número inteiro ao usuário e mostre-o caso seja par.
 · Pseudocódigo:
Algoritmo par
 inteiro num
Inicio
 escreva “Entre com um número inteiro”
 leia num
 se (num%2==0)
 escreva “O número: “ + num + “ é par”
 fim-se
fim.
Nesses algoritmos notamos que existe um caminho que pode ou não ser executado, daí 
vem a decisão: caso o módulo do número por dois for igual a zero, esse seguirá o caminho 
de exibição, que é mostrar que o número digitado é par. Vamos agora implementar o nosso 
algoritmo em linguagem de programação Java.
9
 · Em Java:
Figura 1
Importante!
Note que esse exemplo é uma imagem, assim como os demais 
apresentados nesta Unidade. A ideia é tornar a linguagem mais 
próxima do programador fazendo um exercício de digitação 
pertinente ao seu aprendizado.
Assim, ao fazê-lo, não esqueça de fechar as chaves e organizar a 
endentação – “organização de seu código”.
Note também que o alinhamento das chaves é fundamental para 
a leitura de qualquer pessoa que fizer uma possível manutenção.
Vamos fazer um teste de mesa do último exemplo?
Caso o usuário tenha atribuído o valor 55 para a variável num, qual mensagem deverá 
aparecer?
Como temos a condição:
if (num%2==0)
Esta sentença será falsa, logo, não deverá aparecer a mensagem “O número 55 é par”.
10
Unidade: Estruturas de Decisão
Tabela Verdade
Abaixo temos a tabela verdade, a qual nos ajudará nos testes de mesa:
Variável A Variável B Variável E, &&
V V V
V F F
F V F
F F F
Variável A Variável B Operador OU, ll
V V V
V F V
F V V
F F F
A tabela verdade é uma regra que deve ser aplicada na construção de uma sentença de 
decisão. Em nosso caso, como o computador só entende 0 e 1 – ou verdadeiro e falso –, essa 
se encaixa para as sentenças de condicionais.
Uma sentença condicional pode ter várias condições dentro de si, por exemplo:
Se((A<B) e(A>C))
Note que esta sentença só poderá gerar uma resposta válida.
Assim, testaremos tal sentença com os seguintes valores
A = 10.
B = 8.
C = 12.
Qual será o valor booleano que essa mostrará?
Vamos por partes:
Se ((A<B) e (A>C))
F
Testemos com outros valores:
A = 10.
B = 8.
C = 8.
11
Eis o valor booleano que essa mostrará:
Se ((A<B) e (A>C))
Testemos com outros valores:
A = 10.
B = 12.
C = 8.
Eis o valor booleano que essa mostrará:
Se ((A<B) e (A>C))
F
Testemos com outros valores:
A = 8.
B = 9.
C = 10.
Eis o valor booleano que essa mostrará:
Se ((A<B) e (A>C))
F
F
As demais estruturas deste material teórico deverão obedecer às regras da tabela verdade.
Fique atento(a), pois segundo Pressman (2011), em programação e construção de algoritmos 
estima-se que 90% dos erros ocorrem nas estruturas de decisão.
F
V e F
V e
12
Unidade: Estruturas de Decisão
Estrutura If-Else
Nesta estrutura temos a possibilidade de dois caminhos distintos, porém, um dos quais é 
obrigatório.
Exemplo: é preciso ir ao trabalho! Deve-se então ir de carro ou de ônibus.
Ou seja: você deverá ir ao trabalho de qualquer jeito, seja de carro ou de ônibus. Ainda 
que a decisão sobre o meio de transporte que será utilizado seja sua, não lhe é dada a 
possibilidade de não ir ao trabalho!
Essa é chamada de estrutura condicional composta, pois seleciona entre duas ações ou 
diferentes grupos de ações.
 · Pseudocódigo:
se(condição) 
 instruções 1
senão
 instruções 2
fim_se
se(velocidade>60)
 inicio
 escreva(“Velocidade acima do permitido”)
 fim
senão
 inicio
 escreva(“Velocidade controlada”)
 fim
fim se
 · Java:
if (condição){
 instruções 1
}
else {
 instruções 2
}
if(velocidade>60){
 JOptionPane.showMessageDialog(null, 
 “Velocidade acima do permitido”);
 }
else
 {
 JOptionPane.showMessageDialog(null, 
 “Velocidade controlada”);
 }
Onde:
• Condição é uma expressão lógica e, portanto, deve resultar no valor lógico F ou V.
• Executa as <instruções 1> se a condição for verdadeira, se for falsa executa as <instruções 2>.
Verifiquemos um exemplo completo do comando if-else:
Implementar um programa em Java para determinar se uma pessoa é maior ou menor 
de idade.13
 · Pseudocódigo:
Algoritmo idade_maior
int Idade
Início
 escreva “Digite sua idade”
 leia Idade
 se (Idade >= 18) 
 escreva “Maior de idade”
 senão
 escreva “Menor de idade”
 fim_se
Fim
Nesse algoritmo notamos dois caminhos.
Lembre-se que nesse caso – de se senão – um dos caminhos obrigatoriamente será executado, 
seja a idade menor, igual ou superior a dezoito anos com a respectiva mensagem exibida.
Implementemos agora nosso algoritmo em linguagem de programação Java:
Figura 2
Importante!
Além dos cuidados já mencionados sobre digitação, fechamento das chaves 
e alinhamento, perceba também que:
 · A diretiva if deve ter suas expressões sempre contidas entre parênteses;
 · O único argumento válido para if é uma expressão lógica ou variável 
booleana – condição;
 · Os sinais de comparação (==) inseridos em if, se não entendidos como 
tais, podem ser confundidos com operadores de atribuição (=);
 · As chaves não são obrigatórias para blocos if, uma vez que possuem apenas 
uma instrução; todavia, tome cuidado com eventuais erros de endentação.
14
Unidade: Estruturas de Decisão
Estrutura If-Else Aninhada
A estrutura condicional aninhada é similar à estrutura condicional simples. Um comando sempre 
será executado, independentemente da condição. Dito de outra forma, caso a condição seja 
verdadeira, seus comandos serão executados, ou ainda os comandos da condição falsa o serão.
É empregada quando várias condições devem ser testadas.
Dentro de uma estrutura se-então-senão é perfeitamente possível utilizarmos mais de uma 
linha de comando, ou até mesmo outras estruturas se-então-senão.
Há situações em que os caminhos para a tomada de uma decisão acabam formando uma 
espécie de árvore com diversas ramificações, onde cada caminho é um conjunto de ações. 
Nesses casos podemos recorrer à utilização de várias estruturas se-então-se não embutidas 
umas dentro das outras, comumente chamadas Estrutura aninhada.
 · Pseudocódigo:
se(condição1) 
 instruções 1
senão 
 se(condição2) 
 instruções 2
 senão 
 instruções 3
 fim_se
fim_se
se(velocidade>60)
 inicio
 escreva(“Velocidade acima do permitido”)
 fim
senão
 se(num_placa%2==0)
 inicio
 escreva(“Placa final Par”)
 fim
 senão
 inicio
 escreva(“Placa final Impar”)
 fim
 fim se
fim se
 · Java:
if (condição1){
 instruções 1
}
else{ 
 if (condição2){
 
instruções 2
 }
 else{ 
 
instruções 3
 }
}
if(velocidade>60){
 JOptionPane.showMessageDialog(null,” 
 (“Velocidade acima do permitido”);
}
else{
 JOptionPane.showMessageDialog(null,” 
 (“Velocidade controlada”);
 if(num_placa%2==0){
 JOptionPane.showMessageDialog(null,” 
 (“Placa fi nal Par”);
 }
 else{
 JOptionPane.showMessageDialog(null,” 
 (“Placa fi nal Ímpar”);
 }
}
15
Exemplo:
A partir de três valores – A, B, C –, verifique se esses podem ser os comprimentos dos lados 
de um triângulo. Se forem, escreva uma mensagem, informando se se trata de um triângulo 
equilátero, isósceles ou escaleno.
Observações:
 · O comprimento de um lado do triângulo é sempre menor do que a soma dos outros dois lados;
 · Equilátero = três lados iguais;
 · Isósceles = dois lados iguais;
 · Escaleno = três lados diferentes entre si.
Algoritmo triangulo
 real a,b,c
Inicio
 escreva “Entre com o valor de a: “
 leia a
 escreva “Entre com o valor de b: “
 leia b
 escreva Entre com o valor de c: “
 leia c
 se ((a<b+c) e (b<a+c) e (c<a+b))
 escreva “Estes valores formam um triangulo”
 se ((a=b) e (b=c))
 escreva “Triangulo Equilátero”
 senão
 se ((a=b) ou (b=c) ou (a=c)) 
 escreva “Triângulo Isósceles”
 senão
 escreva “Triangulo Escaleno”
 fi m_se
 fi m_se
 senão
 escreva “Estes valores não formam um triângulo”
 fi m_se
fi m
 · Em Java:
Figura 3 – Parte lógica – apenas – das estruturas de decisão.
16
Unidade: Estruturas de Decisão
Importante!
Somando-se aos aspectos já frisados, perceba que fechar todas as chaves { } 
apenas implica no acerto da sintaxe da linguagem. Nesse sentido, tome muito 
cuidado, pois ao fechar um bloco no meio, você comprometerá toda a estrutura 
de seu algoritmo!
A seguir temos outro exemplo do tipo de estrutura aninhada if-else:
Caso determinado motorista mantenha seu veículo com velocidade abaixo de 60km/h, 
verificar-se-á apenas o final da placa para fins de rodízio. Todavia, se esse motorista mantiver 
velocidade acima de 60km/h, aparecerá uma mensagem de “Velocidade acima do permitido” 
e também será verificado o final da placa para fins de rodízio:
 · Pseudocódigo:
se(condição1) 
 se(condição2) 
 instrução1
 senão 
 instrução2
senão
 instrução4
 se(condição3)
 instrução1
 senão 
 instrução2
 fi m se
Fim_se
 
se(velocidade<60)
 se(num_placa%2==0)
 inicio
 escreva(“Placa final Par”)
 fim
 senão
 inicio
 escreva(“Placa final Impar”)
 fim
 senão
 inicio
 escreva(“Velocidade acima do permitido”)
 se(num_placa%2==0)
 inicio
 escreva(“Placa final Par”)
 fim
 senão
 inicio
 escreva(“Placa final Impar”)
 fim
 fim se
 fim se
fim se
 · Java:
if (condição1){
 if (condição2){
 instruções1
 }
 else{ 
 instruções2
 }
}
else{
 instrução 4
 if (condição3){
 instruções1
 }
 else{ 
 instruções2
 }
}
if(velocidade<60){
 if(num_placa%2==0){
 JOptionPane.showMessageDialog(null, 
 “Placa fi nal Par”);
 }
 else{
 JOptionPane.showMessageDialog(null, 
 “Placa fi nal Ímpar”);
 }
 else{
 JOptionPane.showMessageDialog(null, 
 “Velocidade acima do permitido”);
 if(num_placa%2==0){
 JOptionPane.showMessageDialog(null, 
 “Placa fi nal Par”);
 }
 else{
 JOptionPane.showMessageDialog(null, 
 “Placa fi nal Ímpar”);
 }
}
17
Vamos colocar em prática outra situação:
Imagine que necessitamos desenvolver um algoritmo e um programa que atenda às 
seguintes necessidades:
Ao saber das notas de n1 e n2, um aluno precisa verificar se está “Aprovado”, de “Exame”, 
ou ainda “Reprovado”.
Para ser aprovado, esse estudante deve ter a nota média de n1 e n2 igual ou superior a 6.0; 
para realizar o exame sua média de n1 e n2 deve ser menor que 6.0 e maior ou igual a 3.0; 
finalmente, a reprovação se dará se a média for abaixo de 3.0.
Observação: muito embora a tarefa de construir o algoritmo seja solitária e sem um teste 
tão eficaz dos possíveis casos, trata-se ainda da melhor forma de corrigir o pensamento lógico 
do fluxo de desenvolvimento desse algoritmo.
Algoritmo media
 real n1,n2,media
Inicio
 escreva “Entre com a primeira nota”
 leia n1
 escreva “Entre com a segunda nota”
 leia n2
 m=(n1+n2)/2
 se (m>=6)
 escreva “Aprovado”
 senão
 se (m>=3)
 escreva “Exame”
 senão
 escreva “Reprovado”
 fi m_se
Fim
 · Em Java:
Figura 4.
18
Unidade: Estruturas de Decisão
Estrutura Switch-Case
É uma forma simples para se definir diversos desvios no código a partir de uma única variável.
Utilizada quando há várias seleções com muitas alternativas.
Os comandos if-else e switch são de tomada de decisão. Sem dúvida alguma o mais 
importante é o if, mas o comando switch possui aplicações valiosas.
Mais uma vez vale lembrar que devemos usar o comando correto no local certo. Isto assegura 
um código limpo e de fácil entendimento.
O comando switch é próprio para se testar uma variável em relação a diversos valores 
pré-estabelecidos. Pode-se testar somente o tipo char e todos os tipos inteiros, menos long.
 · Pseudocódigo:
escolha(variável)
 caso <valor1>: 
 instruções 1;
 pare;
 caso <valor2>: 
 instruções 2;
 pare;
 caso <valor n>: 
 instruções n;
 pare;
 padrão:
 instruções;
Fim_escolha
escolha(mes)
 caso<1>
 escreva(“Janeiro”);
 pare;
 caso<2>
 escreva(“Fevereiro”);
 pare;
 caso<3>
 escreva(“Março”);
 pare;
 caso<4>
 escreva(“Abril”);
 pare;
 caso<5>
 escreva(“Maio”);
 pare;caso<6>
 escreva(“Junho”);
 pare;
 caso<7>
 escreva(“ Julho” );
 pare;
 caso<8>
 escreva(“Agosto”);
 pare;
 caso<9>
 escreva(“Setembro”);
 pare;
 caso<10>
 escreva(“Outubro”);
 pare;
 caso<11>
 escreva(“Novembro”);
 pare;
 caso<12>
 escreva(“Dezembro”);
 pare;
19
 · Em Java:
switch (variável){
 case <valor1>: 
 instruções 1;
 break;
 case <valor2>: 
 instruções 2;
 break;
 case <valor n>: 
 instruções n;
 break;
 default:
 instruções;
}
switch(mes){
 case 1:
 JOptionPane.showMessageDialog
 (null,“ Janeiro” );
 break;
 case 2:
 JOptionPane.showMessageDialog
 (null,“ Fevereiro” );
 break;
 case 3:
 JOptionPane.showMessageDialog
 (null,“ Março” );
 break;
 case 4:
 JOptionPane.showMessageDialog
 (null,“ Abril” );
 break;
 case 5: 
 JOptionPane.showMessageDialog
 (null,“ Maio” );
 break;
 case 6: 
 JOptionPane.showMessageDialog
 (null,“ Junho” );
 break;
 case 7: 
 JOptionPane.showMessageDialog
 (null,“ Julho” );
 break;
 case 8:
 JOptionPane.showMessageDialog
 (null,“ Agosto” );
 break;
 case 9: 
 JOptionPane.showMessageDialog
 (null,“ Setembro” );
 break;
 case 10: 
 JOptionPane.showMessageDialog
 (null,“ Outubro” );
 break;
 case 11:
 JOptionPane.showMessageDialog
 (null,“ Novembro” );
 break;
 case 12:
 JOptionPane.showMessageDialog
 (null,“ Dezembro” );
 break;
default: JOptionPane.showMessageDialog(null,
“Mês inesistente”);
}
20
Unidade: Estruturas de Decisão
Observação: todas as declarações case devem conter valores de um mesmo tipo.
O tipo da variável deve ser compatível com os valores das declarações case.
Em cases com valores duplicados será gerado um erro em tempo de compilação.
A declaração default é opcional.
Break faz um desvio para a linha posterior ao final do bloco. Não é obrigatório – não dá 
erro em tempo de execução –, porém, se for deixado de lado todos os outros cases serão 
testados e as instruções do default serão executadas.
Exemplo:
Criar um algoritmo que solicite ao usuário o valor total da compra e a quantidade de 
parcelas a financiar, de modo que o sistema imprima o valor de cada parcela de acordo com 
os juros do seguinte Quadro:
Quadro 2.
N.º de parcelas % de juros
2 3%
4 7%
6 9%
8 12%
Algoritmo parcela
real valor_parcelado, valor_compra, valor_final
inteiro qtde_parcelas, juros
Início
 escreva “Entre com o valor da compra”
 leia valor_compra
 escreva “Entre com a qtde de parcelas”
 leia qtde_parcelas
 escolha (qtde_parcelas)
 Caso 2: juros = 3
 pare
 Caso 4: juros = 7
 pare
 Caso 6: juros = 9
 pare 
 Caso 8: juros = 12
 pare 
 padrão juros = -1
 fim_escolha
 se(juros == -1) 
 escreva “Número de Parcelas incorreto”
 senão
 valor_final = valor_compra + valor_compra * juros / 100
 valor_parcelado = valor_final/qtde_parcelas
 Escreva “O valor de cada parcela é “ + valor_parcelado
 fim_se
fim
21
 · Em Java:
Figura 5.
22
Unidade: Estruturas de Decisão
Material Complementar
Vídeos:
LÓGICA de programação – operadores e expressões lógicas. v. 9. 5 abr. 2013. 
Disponível em: https://www.youtube.com/watch?v=G8haXi-EgSc. Acessado em 15 de janeiro de 2018.
Livros:
MANZANO, J. A. N. G.; OLIVEIRA, J. F. de. Programação com sequência. In: Estudo 
dirigido de algoritmos. São Paulo: Érica, 2010a.
______. Programação com decisão. In: Estudo dirigido de algoritmos. São Paulo: 
Érica, 2010b.
WIRTH, N. Algoritmos e estruturas de dados. Rio de Janeiro: Livros Técnicos e 
Científicos, 1999.
23
Referências
ASCENCIO, A. F. G.; CAMPOS, E. A. V. Fundamentos da programação de 
computadores: algoritmos, Pascal, C/C e Java. 2. ed. São Paulo: Pearson, 2010.
CHRISTOS, P.; UMESH, V. Algoritmos. Porto Alegre, RS: Grupo A, 2011.
DEITEL, H. M. Java: como programar. 6. ed. Porto Alegre, RS: Bookman, 2003.
EDELWEISS, N.; GALANTE, R. Estruturas de dados. Porto Alegre, RS: Grupo A, 2011.
FARRER, H. Algoritmos estruturados. 3. ed. Rio de Janeiro: Livros Técnicos e 
Científicos, 1999.
FORBELLONE, A. L. V.; EBERSPACHER, H. F. Lógica de programação: a construção de 
algoritmos e estrutura de dados. 3. ed. São Paulo: Makron Books do Brasil, 2005.
FURGERI, S. Java 6: ensino didático: desenvolvendo e implementando aplicações. 2. ed. 
São Paulo: Érica, 2009.
GOODRICH M. T.; TAMASSIA R. Estruturas de dados e algoritmos em Java. Porto 
Alegre, RS: Grupo A, 2011.
HORSTMANN, C. Conceitos de computação com Java. 5. ed. Porto Alegre, RS: 
Grupo A, 2009.
MANZANO, J. A. N. G. Algoritmos: lógica para desenvolvimento de programação. 24. 
ed. São Paulo: Érica, 2010.
OLIVEIRA, J. F.; MANZANO, J. A. N. G. Tipos de dados e instruções primitivas. In: Algoritmos 
– lógica para desenvolvimento de programação de computadores. [S.l.: s.n., 20--].
PRESSMAN, R. S. Engenharia de software. [S.l.]: McGraw Hill Brasil, 2011.
VILARIM, G. O. Algoritmos: programação para iniciantes. Rio de Janeiro: Ciência 
Moderna, 2004.
24
Unidade: Estruturas de Decisão
Anotações

Continue navegando