Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Comando Condicional Se-Então-
Senão
Até agora, o fluxo de execução de nossos algoritmos é linear, isso significa que os
algoritmos começam na palavra {, os comandos são executados seqüencialmente,
linha a linha, até chegarmos na palavra }.. Todos os comandos são executados,
sem exceção. Para fazermos algoritmos mais elaborados precisamos de
estruturas mais complexas, que nos permita alterar o fluxo de execução de nossos
algoritmos. Existem várias dessas estruturas, uma delas é a estrutura
condicional.
As estruturas condicionais permitem executar, ou não, um ou mais comandos,
dependendo de uma situação. Essas estruturas são muito comuns no nosso dia-a-
dia, como já foi visto quando nós aplicamos o conceito de algoritmo nas tarefas
cotidianas. Por exemplo:
se o estepe estiver vazio então
chamar o borracheiro
senão
trocar o pneu
Repare que o borracheiro vai ser chamado somente se o estepe estiver vazio.
Caso o estepe não esteja vazio, então o pneu furado será trocado pelo estepe.
Na linguagem algorítmica nós temos o comando se-então-senão. Esse comando
utiliza uma expressão lógica para decidir se um ou mais comandos devem, ou
não, ser executados. Uma expressão lógica é similar a uma expressão aritmética,
entretanto essas expressões sempre são avaliadas (resultam) no valor verdadeiro
ou no valor falso.
Por exemplo, dada uma variável x do tipo inteiro, a expressão lógica:
x > 0
realiza um teste para verificar se o valor da variável x é, ou não, maior que 0. Essa
expressão lógica somente pode resultar no valor verdadeiro ou no valor falso.
Caso o valor da variável x seja 5, por exemplo, então a expressão lógica x > 0
resultará no valor verdadeiro, uma vez que 5 é maior do que 0. Caso o valor da
variável x seja -1, por exemplo, então o valor da expressão lógica x > 0 resultará
no valor falso, pois -1 não é maior do que 0.
Uma expressão lógica quase sempre envolve um operador relacional. Os
operadores relacionais são:
• > (maior);
• < (menor);
• == (igual);
• != (diferente);
• >= (maior ou igual);
• <= (menor ou igual);
Alguns exemplos de expressões lógicas são:
• 4 > 4 (Resulta no valor falso, pois 4 não é maior que 4.);
• a < 0 (Resulta no valor verdadeiro caso o valor da variável a seja menor
que 0, ou seja, o valor de a é negativo. Caso a seja maior ou igual a 0,
então resulta em falso.);
• z != 0 (Resulta no valor verdadeiro caso o valor de z seja qualquer valor
diferente de 0. Caso contrário resulta no valor falso.);
• i == 0 (Resulta no valor verdadeiro somente se o valor de i for 0. Caso
contrário, resulta no valor falso.).
Voltando ao comando condicional se-então-senão, esse comando permite
executar, ou não, um ou mais comandos, dependendo do resultado da avaliação
de uma expressão lógica. O comando se-então-senão pode ser utilizado de duas
formas, a forma mais simples é:
se <expressão lógica> então
{
<comandos>;
}
Na forma mais simples, o comando se-então-senão é constituído da palavra se,
seguida de uma expressão lógica, da palavra então e, por fim, de um bloco de
comandos associado ao então. Um bloco de comandos é uma seqüência de zero
ou mais comandos delimitados pelas palavras { e }.
A semântica do comando se-então-senão na sua forma mais simples é a
seguinte: os comandos do bloco de comandos associado ao então somente serão
executados se a expressão lógica resultar no valor verdadeiro.
Por exemplo:
01 | Algoritmo Exemplo;
02 |
03 | {
04 | x: inteiro;
05 |
06 |
07 | leia(x);
08 | se x >= 0 então
09 | {
10 | escreva("O valor digitado é positivo ou igual a zero");
11 | }
12 | }
O que faz o algoritmo acima? A execução inicia na linha 06. Na linha 07 é lido um
número e esse número é atribuído à variável x, que foi declarada como sendo do
tipo inteiro. Na linha 08 o algoritmo testa se o valor da variável x é maior ou igual a
0. Nesse ponto da execução do algoritmo podem ocorrer duas situações:
1. A primeira situação ocorre quando o valor digitado pelo usuário é um valor
maior ou igual a zero. Por exemplo, o valor digitado pode ser 10. Nesse
caso, a expressão lógica x >= 0 resulta no valor verdadeiro. Como a
expressão lógica resultou no valor verdadeiro, os comandos do bloco de
comandos associado ao então são executados. Esse bloco de comandos
inicia na linha 09 e termina na linha 11. O comando escreva na linha 10 é o
único comando desse bloco de comandos que gera uma ação efetiva.
Nesse caso, é escrita a mensagem "O valor digitado é positivo ou igual
a zero".
2. A segunda situação ocorre quando o valor digitado pelo usuário é menor
que 0. Por exemplo, o valor digitado pode ser -5. Nesse caso, a expressão
lógica x >=0 resulta no valor falso, pois -5 não é maior nem igual a 0. Como
a expressão lógica não resultou no valor verdadeiro, os comandos do
bloco de comandos associado ao então não são executados. A execução
do algoritmo salta da linha 08 diretamente para a linha 12. E, na linha 12 a
execução do algoritmo termina.
Vamos melhorar aquele nosso algoritmo que calcula a média, para que ele
escreva uma mensagem dizendo se o aluno foi aprovado, supondo que a média
anual mínima para que o aluno seja aprovado é 7,0.
O que deve ser feito nesse algoritmo para resolver esse problema? Uma vez que
a média anual foi calculada, é necessário verificar se esse valor é igual ou maior
que 7,0. Caso a média seja maior ou igual a 7,0 então nós devemos escrever uma
mensagem informando que o aluno foi aprovado. A solução final fica assim:
01 | Algoritmo Média;
02 |
03 | {
04 | B1, B2, B2, B4: real;
05 | Média: real;
06 |
07 |
08 | escreva("Entre com o valor da primeira nota bimestral: ");
09 | leia(B1); // Nota da primeira prova bimestral
10 | escreva("Entre com o valor da segunda nota bimestral: ");
11 | leia(B2); // Nota da segunda prova bimestral
12 | escreva("Entre com o valor da terceira nota bimestral: ");
13 | leia(B3); // Nota da terceira prova bimestral
14 | escreva("Entre com o valor da quarta nota bimestral: ");
15 | leia(B4); // Nota da quarta prova bimestral
16 | Média (B1 + B2 + B3 + B4) / 4;
17 | se Média >= 7,0 então
18 | {
19 | escreva("Parabéns, você foi aprovado com média ", Média);
20 | }
21 | }
O algoritmo acima já é conhecido, apenas foram acrescentadas as linhas 17, 18,
19 e 20. Esse algoritmo, primeiramente, escreve mensagens pedindo ao usuário
que forneça quatro notas bimestrais, lê essas notas e as armazena nas variáveis
B1, B2, B3 e B4 (da linha 8 à linha 15). Em seguida a média é calculada e o seu
valor é armazenado na variável Média, linha 16. A execução do programa continua
na linha 17. Nessa linha, o comando condicional verifica se o valor da variável
Média é maior ou igual a 7,0. Suponha que a média do aluno tenha sido 7,5. Esse
valor, 7,5, é maior ou igual a 7,0. Logo, a expressão lógica Média >= 7,0 é
avaliada como verdadeiro. Sempre que a expressão lógica de um comando
condicional se-então-senão for avaliada como verdadeiro, o bloco de comandos
associado ao então é executado. No programa acima, o bloco de comandos
associado ao então é constituído das linhas 18, 19 e 20. As linhas 18 e 20 contém
as palavras { e }, indicando respectivamente, o início e fim do bloco de comandos
associado ao então. Na linha 19 está o comando escreva, que irá escrever na
tela a mensagem informando que o usuário foi aprovado e o valor de sua média.
Supondo que a média do aluno tenha sido 7,5, o comando escreva da linha 19 irá
escrever:
Parabéns, você foi aprovado com média 7,5
Executando o algoritmo do início novamente, e supondo agora que a média tenha
sido 4,5, isso fará com que a expressão lógica do comando se-então-senão seja
avaliada como falso.
Nesse caso, o bloco de comandos associado ao então não é
executado e a execução do programa salta da linha 17 diretamente para a linha
21. Como a linha 21 é a última linha do algoritmo, a execução do algoritmo se
encerra.
Nenhuma mensagem é fornecida ao usuário caso ele tenha média menor que 7,0.
O algoritmo acima precisa ser alterado para informar ao usuário caso ele tenha
sido reprovado. Para isso, é necessário utilizar a forma mais completa do
comando se-então-senão:
se <expressão lógica> então
{
<comandos>;
} senão
{
<comandos>;
}
Nessa forma, o comando se-então-senão possui dois blocos de comandos. O
primeiro bloco de comandos está associado ao então, e o segundo está
associado ao senão. O bloco de comandos associado ao então é sempre
executado quando a expressão lógica é avaliada como verdadeiro. O bloco de
comandos associado ao senão é sempre executado quando a expressão lógica é
avaliada como falso. Os dois blocos de comandos são ditos mutuamente
exclusivos, pois dado um comando se-então-senão que possua os dois blocos,
ou o bloco associado ao então é executado ou o bloco associado ao senão é
executado. Nunca haverá uma situação na qual os dois blocos são executados, ou
nenhum deles é executado, durante a mesma execução de um comando se-
então-senão.
Voltando ao algoritmo que calcula a média e informa ao usuário se ele foi
aprovado, é possível adicionar um bloco senão ao comando se-então-senão, de
forma a informar ao usuário se ele foi reprovado. O algoritmo fica assim:
01 | Algoritmo Média;
02 |
03 | {
04 | B1, B2, B2, B4: real;
05 | Média: real;
06 |
07 |
08 | escreva("Entre com o valor da primeira nota bimestral: ");
09 | leia(B1); // Nota da primeira prova bimestral
10 | escreva("Entre com o valor da segunda nota bimestral: ");
11 | leia(B2); // Nota da segunda prova bimestral
12 | escreva("Entre com o valor da terceira nota bimestral: ");
13 | leia(B3); // Nota da terceira prova bimestral
14 | escreva("Entre com o valor da quarta nota bimestral: ");
15 | leia(B4); // Nota da quarta prova bimestral
16 | Média (B1 + B2 + B3 + B4) / 4;
17 | se Média >= 7,0 então
18 | {
19 | escreva("Parabéns, você foi aprovado com média ", Média);
20 | } senão
21 | {
22 | escreva("Você foi reprovado com média ", Média);
23 | }
24 | }
Suponha agora que além de ter média maior ou igual a 7,0, para ser aprovado, o
aluno precise ter freqüência mínima de 75%. Para que o algoritmo inclua essa
alteração é necessário pedir essa informação ao usuário. Podemos fazer isso
declarando uma variável do tipo real que armazenará a freqüência do aluno.
Também, não é mais suficiente verificar apenas se a média do aluno é maior ou
igual a 7,0, é necessário verificar, em conjunto, se ele possui freqüência maior ou
igual a 75%. Portanto, o aluno somente pode ser aprovado se:
Média >= 7,0 e Freqüência >= 75
O operador lógico conjuntivo e faz com que uma expressão lógica seja avaliada
como verdadeiro somente se as duas condições envolvidas forem verdadeiras.
Um outro operador lógico muito utilizado é o operador disjuntivo ou, o qual resulta
em verdadeiro quando uma das duas condições (ou ambas) forem verdadeiras.
Exite mais um operador lógico, o não. O operador lógico não realiza a operação
lógica de negação. Por exemplo, a expressão lógica abaixo:
não(4 > 3)
resulta no valor falso, pois 4 > 3 resulta em verdadeiro e aplicando o operador
não sobre verdadeiro, resulta no valor falso.
Alguns exemplos de expressões lógicas com operadores lógicos são:
• 4 > 4 ou 4 < 4 (resulta no valor falso, pois 4 não é maior que 4. Também, 4
não é menor que 4);
• a < 0 e x > 0 (resulta no valor verdadeiro caso o valor da variável a seja
menor do que 0, e o valor de x seja maior que 0. Caso contrário resulta no
valor falso);
• a >= 0 e a < 0 (resulta em falso pois o valor da variável a nunca pode ser,
ao mesmo tempo, maior ou igual a zero e menor que zero);
• a >= 0 ou a < 0 (resulta no valor verdadeiro pois caso o valor da variável a
sempre será menor ou igual a zero ou maior que zero).
Voltando ao algoritmo da média anual, ele fica assim:
01 | Algoritmo Média;
02 |
03 | {
04 | B1, B2, B2, B4: real;
05 | Média, Freqüência: real;
06 |
07 |
08 | escreva("Entre com o valor da primeira nota bimestral: ");
09 | leia(B1); // Nota da primeira prova bimestral
10 | escreva("Entre com o valor da segunda nota bimestral: ");
11 | leia(B2); // Nota da segunda prova bimestral
12 | escreva("Entre com o valor da terceira nota bimestral: ");
13 | leia(B3); // Nota da terceira prova bimestral
14 | escreva("Entre com o valor da quarta nota bimestral: ");
15 | leia(B4); // Nota da quarta prova bimestral
16 | escreva("Entre com a valor da freqüência anual");
17 | leia(Freqüência);
18 | Média (B1 + B2 + B3 + B4) / 4;
19 | se Média >= 7,0 e Freqüência >= 75 então
20 | {
21 | escreva("Parabéns, você foi aprovado com média ", Média);
22 | } senão
23 | {
24 | escreva("Você foi reprovado com média ", Média);
25 | }
26 | }
Logo abaixo, é apresentada a tabela atualizada de precedência dos operadores da
linguagem algorítmica.
Operador Precedência Categoria
não Primeira (alta) Operadores unários
* / div % Segunda Operadores multiplicadores
+ - Terceira Operadores aditivos
< > <= => Quarta Operadores relacionais
== != Quinta Operadores relacionais igual e diferente
e Sexta Operadores lógico e
ou
Sétima
(Baixa) Operadores lógico ou
Por fim, como já foi visto, um bloco de comandos é uma seqüência de zero ou
mais comandos delimitados pelas palavras { e }. Entretanto, para simplificar a
escritas dos algoritmos, é possível eliminar as palavras { e }, sempre que o bloco
de comandos possui um único comando. Por exemplo, no algoritmo:
01 | Algoritmo Exemplo;
02 |
03 | {
04 | x: inteiro;
05 |
06 |
07 | leia(x);
08 | se x >= 0 então
09 | {
10 | escreva("O valor digitado é positivo ou igual a zero");
11 | }
12 | }
As linhas 09, 10 e 11 constituem um bloco de comandos que possui apenas um
único comando dentro dele, o comando escreva da linha 10. Nesse caso, é
possível eliminar as palavras { e }. O algoritmo fica assim:
01 | Algoritmo Exemplo;
02 |
03 | {
04 | x: inteiro;
05 |
06 |
07 | leia(x);
08 | se x >= 0 então
09 | escreva("O valor digitado é positivo ou igual a zero");
10 | }
Infelizmente, como veremos nas próximas aulas, existem situações nas quais
decidir se é necessário, ou não, utilizar os delimitadores de bloco de comandos { e
} é bem complicado. Na dúvida sempre utilize esses delimitadores.
Resumo
Algumas coisas que você deve lembrar da aula de hoje:
• Uma expressão lógica sempre resulta em verdadeiro ou falso;
• As expressões lógicas sempre realizam um teste, ou seja, verificam se uma
determinada condição é verdadeira ou não no contexto atual;
• Sempre que você pensar em uma expressão lógica, pense em uma
pergunta. Por exemplo: "A variável x possui valor positivo?", é traduzido em
"x > 0";
• O comando condicional se-então-senão utiliza uma expressão lógica para
decidir se um bloco de comandos deve ou não ser executado. Se a
expressão lógica resultar em verdadeiro, então o bloco de comandos
associado ao então é executado. Caso a expressão lógica seja avaliada
em falso, então o bloco de comandos associado ao senão (se houver um)
é executado.
Exercícios
1. Faça um algoritmo que leia um número e escreva o seu valor absoluto, ou
seja, o módulo do número.
2. Faça um algoritmo que leia dois números e escreva qual é o maior. Pense
na possibilidade dos números serem iguais.
3.
Faça um algoritmo que leia três números distintos e escreva o maior deles.