Baixe o app para aproveitar ainda mais
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
Compartilhar