Este texto-base aborda os seguintes temas:
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
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.
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
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.
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
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á?
Governo do Estado de São Paulo
Secretaria de Desenvolvimento Econômico | Secretaria da Educação
Centro Paula Souza
Diretora-SuperintendenteLaura Laganá
Coordenador do Ensino Médio e TécnicoAlmério Melquíades de Araújo
Diretor do Grupo de Estudo de Educação a DistânciaRogério Teixeira
Coordenador de Curso de Assistente de Desenvolvimento de SistemasEliana Cristina Nogueira Barion
Coordenação PedagógicaWelington Luis Sachetti
Universidade Virtual do Estado de São Paulo – Univesp
PresidenteRodolfo Jardim de Azevedo
Diretora AcadêmicaSimone Telles Martins Ramos
Coordenação de Desenvolvimento e Produção de Material DidáticoÉdison Trombeta
Equipe
Professores responsáveisEliana Cristina Nogueira Barion, Marcelo Fernando Iguchi, Paulo Henrique Mendes Carvalho e Rute Akie Utida
Roteirização e Design InstrucionalClara Viola Goyeneche
IlustraçãoFrancesco Micieli e Natasha Higa
LayoutNatasha Higa
ProgramaçãoAlberto Ortiz
Junho/2019