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.