Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Comissão da Disciplina Programação de Computadores I – CDPCI Programação de Computadores I – BCC701 www.decom.ufop.br/bcc701 2014/1 Aula Teórica 04 Material Didático Prof. Red 1 Conteúdos da Aula Comando de Desvio de Fluxo Operadores Lógicos Exercícios 2 Comando de Desvio de Fluxo 3 Comando de Desvio de Fluxo O comando if é um comando de desvio do fluxo de execução. Duas estruturas para o comando if são: if <condição> then <comandos> end if <condição> then <comandos> else <comandos> end Podemos ter cada uma destas estruturas compondo o bloco de comandos de um determinado if. Assim, teremos o aninhamento de if’s, ou seja, um if dentro de outro if. 4 Comando de Desvio de Fluxo if´s aninhados Quando existe este tipo de disposição do comando if, ocorre o que denominamos de if’s aninhados um end para cada if correspondente if <condição_a> then <comando_1>; <comando_n>; else if <condição_b> then <comando_1>; <comando_m>; else <comando_1>; <comando_p>; end end 5 Comando de Desvio de Fluxo usando elseif independente da quantidade de testes teremos somente um end if <condição_a> then <comando_1>; <comando_n>; elseif <condição_b> <comando_1>; <comando_m>; else // opcional <comando_1>; <comando_p>; end 6 Comando de Desvio de Fluxo if ... then ... else ... end if <condição1> then <bloco “então1”> else if <condição2> then <bloco “então2”> else if <condição3> then <bloco “então3”> else if <condiçãoN> then <bloco “entãoN”> else <bloco “senão”> end end end end if ... then ... elseif ... end if <condição1> then <bloco “então1”> elseif <condição2> <bloco “então2”> elseif <condição3> <bloco “então3”> elseif <condiçãoN> <bloco “entãoN”> else <bloco “senão”> end 7 Operadores Lógicos 8 Operadores Lógicos • As expressões lógicas podem ser combinadas através de operadores lógicos. • Eles são usados para construir expressões mais complexas, que combinam condições múltiplas: <exprLógica1> <operadorLógico> <exprLógica2> • Ou para negar uma condição: <operador_de_negação> <exprLógica> 9 Operadores Lógicos Operadores lógicos definidos no Scilab: E (Conjunção): • Resulta verdadeiro se as duas expressões forem verdadeiras; OU (disjunção não exclusiva): • Resulta verdadeiro se pelo menos uma das duas expressões forem verdadeiras; Não (negação): • Inverte o valor lógico da expressão, se ela for verdadeira o resultado é falso, se ela for falsa o resultado é verdadeiro. 10 Operadores Lógicos Operadores lógicos podem ser definidos por Tabelas Verdade 11 Operadores Lógicos Usando Operadores Lógicos, Relacionais e Aritméticos • Primeiro os operadores aritméticos e relacionais são avaliados, para depois serem avaliados os operadores lógicos. 12 Operadores Lógicos Usando Operadores Lógicos, Relacionais e Aritméticos • A ordem de precedência dos operadores lógicos é: negação (~), E (&) e OU (|), ou seja ~ X & Y | Z, corresponde a (((~X) & Y) | Z) 13 Operadores Lógicos Exemplo Em um parque de diversões apenas pessoas entre 18 e 50 anos podem andar na montanha russa. Considerando a existência de uma variável chamada idade, a expressão lógica para permitir a entrada no brinquedo seria: • (idade >= 18) & (idade <= 50) • Mais uma vez, o uso dos parênteses é bom para facilitar a leitura. Atenção: a expressão: idade >= 18 & <= 50, está incorreta pela sintaxe do Scilab. A expressão 18 <= idade <= 50 também está incorreta. 14 Operadores Lógicos Exemplo: Intervalo Numérico 15 Operadores Lógicos Exemplo: Intervalo Numérico 16 Exercícios 1 7 Exercício 1 A função f(x), no domínio + (reias não negativos), e definida por: Codifique um programa que calcule o valor da função para um argumento de entrada pertencente ao domínio da função. A seguir a ilustração de execução do programa. 18 Exercício 1 – Execução A 19 Exercício 1 – Execução B 20 Exercício 1 - Código 21 Exercício 1 – Código Alternativo O código alternativo exibido a seguir não representa uma boa prática de programação, pois: não se beneficia dos valores em ordem crescente, naturalmente especificados no intervalo; a cada elseif, devemos testar o subintervalo usando o operador and, sem reaproveitar o teste do subintervalo anterior; 22 Exercício 1 – Código Alternativo 23 Exercício 2 Codifique um programa em Scilab que leia 3 valores inteiros a partir do teclado. Estes valores inteiros representam os lados de um triângulo. O Programa deve verificar a condição de existência do triângulo. Em caso afirmativo, o programa classifica o triângulo de acordo com seus lados: equilátero, ou isósceles, ou escaleno. A seguir uma ilustração da execução do programa. 24 Exercício 2 - Execução 25 Exercício 2 - Código 26 Exercício 3 De acordo com o site Wikipedia: • São bissextos todos os anos múltiplos de 400, p. ex.: 1600, 2000, 2400, 2800... • São bissextos todos os múltiplos de 4 e não múltiplos de 100, p. ex.: 1996, 2004, 2008, 2012, 2016… • Não são bissextos todos os demais anos. Codifique um programa que tenha como entrada um determinado ano. O programa imprime uma mensagem dizendo se o ano é ou não bissexto. 27 Exercício 3 - Código 28 Exercício 4 Escreva os programas Scilab para os itens a seguir. a) se x é maior ou igual a zero, calcule o valor da raiz quadrada da variável x na variavel sqrt_X e mostre o resultado. Caso contrário, mostre uma mensagem de erro sobre o argumento da função de raiz quadrada e coloque o valor zero em sqrt_X. b) uma variável denominada fun é calculada como numerador/denominador. Se o valor absoluto de denominador for menor do que 1.0D-300, escreva "Erro de divisão por zero". Caso contrário, calcule o valor de fun. 29 Exercício 5 A função tangente é definida como tan = sen / cos . Esta expressão pode ser avaliada para obter a tangente se a magnitude de cos não se aproximar demais de zero. Se cos for zero, a avaliação produzirá um erro de divisão por zero. Assuma que seja dado em graus e escreva os códigos Scilab para avaliar tan , desde que a magnitude de cos seja maior ou igual a 10-20. Se a magnitude de cos for menor que a 10-20, escreva uma mensagem de erro. Observação: a leitura do ângulo deve ser feita em graus, mas deve-se convertê-lo para radianos antes de utilizar as funções trigonométricas do Scilab. 30 Exercício 6 Escreva um programa que permita que um usuário forneça uma cadeia de caracteres que contenha um dia da semana ("segunda-feira", "terça-feira", etc.) e utilize uma construção select para converter o dia em um número correspondente, de maneira que domingo seja considerado o primeiro dia da semana e sábado seja considerado o último. Mostre o número de dia resultante. Lembre-se de considerar o caso de um nome ilegal de dia da semana. 31 Exercício 7 Escreva um programa que permita que um usuário forneça uma cadeia de caracteres representando o nome de uma disciplina. Após a leitura da string, o programa imprime uma mensagem informando a disciplina que o aluno foi matriculado. OBS: disciplinas: ingles, historia, astronomia e literatura 32