ESTRUTURAS DE DECISÃO

Este texto-base aborda os seguintes temas:

Estruturas de decisão

Até agora, trabalhamos somente com programas que efetuam tarefas simples, como a realização de entrada e saída de dados e pequenos cálculos matemáticos. Você deve ter percebido que os algoritmos criados até aqui não possuem poder de decisão.

Em outras palavras, eles sempre executam as mesmas tarefas, independentemente dos resultados obtidos. Mas, na vida real precisamos tomar decisões que muitas vezes são difíceis e que podem alterar o rumo de nossas vidas. Quando falamos de programas, ocorre a mesma coisa.

Em programação, chamamos essas decisões de Estrutura de Decisão.

As Estruturas de Decisão ou Testes Condicionais nos permitem executar um conjunto diferente de comandos dependendo do resultado de um teste utilizando operadores relacionais. Este resultado pode ser verdadeiro ou falso conforme indicado na tabela a seguir:

PSEUDOCÓDIGO FLUXOGRAMA
SE (condição) Então
    {comando(s)}
Fim-Se
                  

Exemplificando...

Imagine que em um determinado trecho de um programa precisamos tomar uma decisão para saber se uma pessoa é maior de idade. O programa codificado é apresentado a seguir:

PSEUDOCÓDIGO FLUXOGRAMA
          SE (idade >=18) Então
              Escreva (“Maior de idade”)
          Fim-Se

O comando condicional SE testa a condição idade >=18. Ou seja, se a idade for maior ou igual a 18 anos ENTÃO a condição é verdadeira (segue-se o caminho “sim”). Desse modo, será executado o comando Escreva (“Maior de idade”). Caso contrário (se a idade for menor que 18 anos), nada será feito (Fim-Se). Observando o fluxograma, você compreenderá com mais facilidade o que ocorre.

Abaixo, está a representação desse algoritmo no VISUALG:

algoritmo 'IDADE'

   var

   id: inteiro

   inicio

      escreva('Digite a sua idade: ')

      leia(id)

      se(id>=18) entao

          escreva('Você é MAIOR DE IDADE.')

      fimse

fimalgoritmo

Estruturas de Decisão Se....Senão...Fim-se

Você acabou de conhecer uma Estrutura de Decisão que realiza somente uma ação distinta caso o teste condicional seja verdadeiro. Contudo, em geral também costuma ser necessário que alguma ação seja realizada caso o teste condicional seja falso. Para isso, temos o comando se...senão:

PSEUDOCÓDIGO FLUXOGRAMA
SE (condição) Então
    {comando(s) condição verdadeira}
Senão
    {Comando(s) condição falsa}
Fim-Se

Observando a tabela acima, você pode notar que, caso o teste lógico condicional falhe (ou seja, caso a condição não seja atendida), temos um comando ou grupo de comandos a serem executados: os comandos indicados após o Senão.

Retomando o exemplo anterior...

Considere o programa que analisava se uma pessoa era ou não maior de idade. Agora, porém, ele conta com comandos que serão executados se o teste condicional for falso.

PSEUDOCÓDIGO FLUXOGRAMA
SE (idade >=18) Então
                  Escreva (“Maior de idade”)
              Senão
                  Escreva (“Menor de idade”)
              Fim-Se
              

Perceba que o exemplo é praticamente idêntico ao caso anterior, porém, se o teste condicional falhar (caso o resultado seja falso, seguindo a resposta “não” do fluxograma), executamos um comando que exibe a mensagem “menor de idade” para o usuário. Isso é feito por meio da utilização da cláusula Senão, no Pseudocódigo.

Observe o algoritmo abaixo no VISUALG:

Perceba nas codificações abaixo que o 1º Algoritmo calcula a idade a partir do ano atual e do ano de nascimento. Já no quadro à direita, o algoritmo é mais simples porque não calcula a idade. O algoritmo solicita que o usuário digita a idade e a partir disso, apenas verifica se a idade digitada é maior ou menor que 18.

algoritmo 'IDADE'

   var

   aa,an,id: inteiro

   inicio

      escreva('Digite o ano atual: ')

      leia(aa)

      escreva('Digite o ano de nascimento: ')

      leia(an)

      id<-(aa-an)

      escreval('Sua idade é: ', id)

      se(id>=18) entao

          escreva('Você é MAIOR DE IDADE.')

      se(id<=18) senao

          escreva('Você é MENOR DE IDADE.')

      fimse

fimalgoritmo

algoritmo 'IDADE'

   var

   id: inteiro

   inicio

      escreva('Digite a sua idade: ')

      leia(id)

      se(id>=18) entao

          escreva('Você é MAIOR DE IDADE.')

      fimse

fimalgoritmo

Estrutura de decisão aninhada

O que aconteceria se precisássemos de mais de duas alternativas para resolver um problema?

Talvez você tenha reparado que em uma Estrutura de Decisão podemos ter somente duas saídas: verdadeiro ou falso. Mas o que ocorre quando necessitamos de uma saída com mais de duas alternativas simultaneamente? Essa situação é bastante comum e, para isso, usamos as Estruturas de Decisão Aninhadas, que consistem em utilizar um comando SE encadeado no interior de outro.

Retomando o exemplo anterior...

Pensando no software que analisa a maioridade de um indivíduo, suponha que você também queira verificar se a idade é igual a 18 anos. Veja como ficaria a codificação do programa:

PSEUDOCÓDIGO FLUXOGRAMA
SE (idade >=18) Então
    SE (idade = 18) Então
        Escreva (“Igual a 18”)
    Senão
        Escreva (“Maior de 18”)
    Fim-Se
    Senão
       Escreva (“Menor de idade”)
Fim-Se

Note que ao executar a primeira tomada de decisão SE (idade>=18), em caso verdadeiro, sabe-se somente que a idade é maior ou igual a 18. Para saber se a idade é igual a 18, é necessária a execução de outra Estrutura de Decisão SE (idade=18). Em caso afirmativo, sabemos que é igual e em caso negativo, sabemos que é maior de 18. É isso que chamamos de Estrutura de Decisão Aninhada.

O exemplo abaixo demonstra esse algoritmo escrito no VISUALG:

algoritmo "IDADE"

   var

   id: inteiro

   inicio

      escreva("Informe a sua idade: ")

      leia(id)

      se(id>=18) entao

         se(id>=18) entao

            escreva("Idade igual a 18 anos.")

         senao

            escreva("Você é MAIOR DE IDADE.")

         fimse

          senao

             escreva("Você é MENOR DE IDADE.")

      fimse

fimalgoritmo

Conhecendo um novo exemplo

Agora, veja esse segundo exemplo: suponha que você precise fazer um programa em que o usuário insira um número de 1 a 7 e o programa apresente qual é o dia da semana correspondente. Você sabe que domingo é o início da semana, correspondendo ao número 1 e assim sucessivamente.

Como você poderia resolver esse programa?

1. Primeiramente, você deve pensar nas variáveis necessárias:

Como o usuário deverá inserir um número de 1 a 7, é preciso que exista uma variável que vamos chamar de entrada.

Qual seria o tipo da variável entrada?
Se você pensou “inteiro”, acertou, pois a variável irá armazenar somente números inteiros.

Será que mais alguma variável é necessária?
A resposta é não, porque vamos fazer a saída diretamente imprimindo na tela.

2. Em seguida, pense no fluxograma, pois é mais fácil de entender e visualizar:

Você pode também optar por escrever o pseudocódigo. Escolha entre o fluxograma ou pseudocódigo, aquele que você preferir para simbolizar a sequência lógica do seu programa.

Programa Semana
Declare
         dia como inteiro
Início
         Escreva(“Digite um Número de 1 a 7”)
         Leia(dia)
         Se (dia = 1) Então
             Escreva (“Você escolheu domingo”)
         senão
             Se (dia = 2) Então
                Escreva (“Você escolheu segunda”)
             senão
                Se (dia = 3) Então
                    Escreva (“Você escolheu terça”)
                senão
                     Se (dia = 4) Então
                         Escreva (“Você escolheu quarta”)
                     senão
                         Se (dia = 5) Então
                             Escreva (“Você escolheu quinta”)
                         senão
                             Se (dia = 6) Então
                                 Escreva (“Você escolheu sexta”)
                             senão
                                 Se (dia = 7) Então
                                     Escreva (“Você escolheu sábado”)
                                 senão
                                     Escreva(“Número Inválido”)
                                 Fim-Se
                             Fim-Se
                         Fim-Se
                     Fim-Se
                Fim-se
             Fim-Se
         Fim-Se
Fim.

Observe o algoritmo completo no VISUALG:

algoritmo "DIA"

   var

   dia: inteiro

   inicio

      escreva("Digite um número de 1 a 7: ")

      leia(dia)

      se(dia=1) entao

         escreva("Você escolheu Domingo.")

      senao

         se(dia=2) entao

            escreva("Você escolheu Segunda.")

         senao

            se(dia=3) entao

               escreva("Você escolheu Terça.")

            senao

               se(dia=4) entao

                  escreva("Você escolheu Quarta.")

               senao

                  se(dia=5) entao

                     escreva("Você escolheu Quinta.")

                  senao

                     se(dia=6) entao

                        escreva("Você escolheu Sexta.")

                     senao

                        se(dia=7) entao

                           escreva("Você escolheu Sábado.")

                        senao

                           escreva("Número inválido!")

                        fimse

                     fimse

                  fimse

               fimse

            fimse

         fimse

      fimse

fimalgoritmo

Após observar os exemplos sobre Estruturas de Decisão Aninhadas, você deve estar se perguntando:

Existe alguma relação entre o número de alternativas e o número necessário de comparações a serem efetuadas?

Pare e reflita! Se você acredita que sim, você acertou! Existe sim uma relação. O número de comparações necessárias em um programa é o número de alternativas menos uma unidade. Ou seja, se temos 6 alternativas, teremos 5 comparações em nosso programa.

Agora assista ao vídeo do Prof. Sandro Valérius para entender ainda mais sobre a Estrutura de Decisão “Se”. Vamos lá?