Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM BCC701 Programação de Computadores I www.decom.ufop.br/red 2017-1 AULA TEÓRICA 03 COMANDO CONDICIONAL 1
Programação Estruturada Programação Estruturada é uma forma de programação de computadores que preconiza que todos os programas possíveis podem ser reduzidos a apenas três estruturas: Sequência Decisão (desvio, condição) iteração 2
Programação Estruturada Sequência Os programas constituem-se de uma sequência de instruções, ou comandos, executados um após o outro, conforme o fluxograma ao lado. 3
Comando Condicional Comando Condicional Os programas possuem um, ou mais, comandos condicionais, que permitem a alteração na ordem de execução do programa, ou seja, do fluxo de execução dos comandos. Você tem que tomar uma decisão! Obter um %t ou %f. 4
Comando Condicional Problema Seu carro tem combustível para rodar 15 Km. Qual caminho escolher? Posto B 25 km Posto A 10 km 5
Comando Condicional Problema Seu carro tem combustível para rodar 15 Km. Qual caminho escolher? Se 15 >= 25 Então Fim Vou para o Posto B; // se 15 >= 25 resultar em #t Se 15 >= 10 Então Vou para o Posto A; // se 15 >= 10 resultar em #t Fim 6
Comando Condicional if then end Estrutura 1 if <condição> then <bloco de comandos> end 1) A condição é avaliada; 2) Se for %t executa-se o bloco de comandos, e a seguir os comandos que estiverem após o end; 3) Se for %f executa-se somente os comandos que estiverem após o end; OBSERVAÇÕES: um bloco é um conjunto de quaisquer comandos Scilab sintaticamente corretos (inclusive outro if). if, then e end: são palavras reservadas do Scilab e não podem ser usadas para nomear variáveis. 7
Comando Condicional if then end if condição é verdadeira Comando 1; Comando 2; Comando n; end Comando n+1; Comando n+2; then 8
Comando Condicional if then end if condição é falsa Comando 1; Comando 2; Comando n; end Comando n+1; Comando n+2; then 9
Comando Condicional if then end Fluxograma início x = 16 %f x > 0 %t x = sqrt(x)... 10 fim
Equação do Segundo Grau Fórmula de Bhaskara A nome Fórmula de Bhaskara foi dada em homenagem ao matemático Bhaskara Akaria, considerado o mais importante matemático indiano do século XII. ax 2 + bx + c = 0 a 0 11
Equação do Segundo Grau Programa V1 printf("\n Raízes Reais de uma Equação do Segundo Grau"); a = input(" Digite o Coeficiente a: "); b = input(" Digite o Coeficiente b: "); c = input(" Digite o Coeficiente c: "); delta = b^2-4 * a * c; x1 = (-b + sqrt(delta)) / (2*a); x2 = (-b - sqrt(delta)) / (2*a); printf(" x1 = %g\n", x1); printf(" x2 = %g\n", x2); 12
Equação do Segundo Grau Programa V1 Execução 1 Raízes Reais de uma Equação do Segundo Grau Digite o Coeficiente a: -2.25 Digite o Coeficiente b: 1.45 Digite o Coeficiente c: 3.26 x1 = -0.923858 x2 = 1.5683 Verificação: -->-2.25 * (1.5683)^2 + (1.45 * 1.5683)... --> + 3.26 ans = 0.0000140 Está correto? 13
Equação do Segundo Grau Programa V1 Execução 2 Raízes Reais de uma Equação do Segundo Grau Digite o Coeficiente a: 0 Digite o Coeficiente b: 2 Digite o Coeficiente c: 8 / (2*a)!--error 27 Divisão por zero... at line 7 of exec file called by : ce', -1 O coeficiente a não pode ser nulo! Uma solução é solicitar ao usuário uma nova entrada. 14
Equação do Segundo Grau Programa V2 clc; clear; printf("\n Raízes Reais de uma Equação do Segundo Grau"); a = input(" Digite o Coeficiente a: "); if (a == 0) then a = input(" Digite o Coeficiente a: "); end b = input(" Digite o Coeficiente b: "); c = input(" Digite o Coeficiente c: "); delta = b^2-4 * a * c; x1 = (-b + sqrt(delta)) / (2*a); x2 = (-b - sqrt(delta)) / (2*a); printf(" x1 = %g\n", x1); printf(" x2 = %g\n", x2); 15
Equação do Segundo Grau Programa V2 Execução 1 Raízes Reais de uma Equação do Segundo Grau Digite o Coeficiente a: 0 Digite o Coeficiente a: 1 Digite o Coeficiente b: 2 Digite o Coeficiente c: -3 x1 = 1 x2 = -3 16
Equação do Segundo Grau Programa V2 Execução 2 Raízes Reais de uma Equação do Segundo Grau Digite o Coeficiente a: 0 Digite o Coeficiente a: 0 Digite o Coeficiente b: 1 Digite o Coeficiente c: -3 ) / (2*a)!--error 27 Divisão por zero... at line 10 of exec file called by : sce', -1 Zero na segunda digitação! Solução: encerrar o programa se o for digitado 0 para o coeficiente a. 17
Comando Condicional Estrutura 2 if then else end if <condição> then <bloco de comandos a> else <bloco de comandos b> end OBSERVAÇÃO: else é palavra reservada do Scilab e não pode ser usada para nomear variáveis. 1) A condição é avaliada; 2) Se for %t executa-se o bloco de comandos a, e a seguir os comandos que estiverem após o end; 3) Se for %f executa-se o bloco de comandos b, e a seguir os comandos que estiverem após o end; 18
Comando Condicional if end condição é verdadeira Comando 1; Comando 2; Comando n; else Comando a;... Comando b; Comando n+1; Comando n+2; if then else end then 19
Comando Condicional if else end condição é falsa Comando a;... Comando b; Comando 1; Comando 2; Comando n; Comando n+1; Comando n+2; if then else end then 20
Comando Condicional Fluxograma if then else end início x = 16 %f x > 0 %t x = sqrt(-x) x = sqrt(x)... 21 fim
Equação do Segundo Grau Programa V3 clc; clear; printf("\n Raízes Reais de uma Equação do Segundo Grau"); a = input(" Digite o Coeficiente a: "); if (a == 0) then printf("\n ERRO: coeficiente a = 0"); printf("\n F I M D O P R O G R A M A!"); else b = input(" Digite o Coeficiente b: "); c = input(" Digite o Coeficiente c: "); delta = b^2-4 * a * c; x1 = (-b + sqrt(delta)) / (2*a); x2 = (-b - sqrt(delta)) / (2*a); printf(" x1 = %g\n", x1); printf(" x2 = %g\n", x2); 22 end
Equação do Segundo Grau Programa V3 Execução 1 Raízes Reais de uma Equação do Segundo Grau Digite o Coeficiente a: 0 ERRO: coeficiente a = 0 F I M D O P R O G R A M A! OBS.: a = 0 23
Equação do Segundo Grau Programa V3 Execução 2 Raízes Reais de uma Equação do Segundo Grau Digite o Coeficiente a: -4 Digite o Coeficiente b: 2 Digite o Coeficiente c: 1 x1 = -0.309017 x2 = 0.809017 OBS.: a 0 24
Equação do Segundo Grau Programa V4 Raízes Reais clc; clear; printf("\n Raízes Reais de uma Equação do Segundo Grau"); a = input(" Digite o Coeficiente a: "); if (a == 0) then printf("\n ERRO: coeficiente a = 0"); printf("\n F I M D O P R O G R A M A!"); else b = input(" Digite o Coeficiente b: "); c = input(" Digite o Coeficiente c: "); delta = b^2-4 * a * c; if delta < 0 then printf("\n ERRO: Delta < 0 - FIM DO PROGRAMA!"); else x1 = (-b + sqrt(delta)) / (2*a); x2 = (-b - sqrt(delta)) / (2*a); printf(" x1 = %g\n", x1); printf(" x2 = %g\n", x2); end end 25
Equação do Segundo Grau Programa V4 Raízes reais Execução 1 Raízes Reais de uma Equação do Segundo Grau Digite o Coeficiente a: 2 Digite o Coeficiente b: 1 Digite o Coeficiente c: 4 ERRO: Delta < 0 - FIM DO PROGRAMA! Execução 2 Raízes Reais de uma Equação do Segundo Grau Digite o Coeficiente a: 1 Digite o Coeficiente b: 4 Digite o Coeficiente c: -6 x1 = 1.16228 x2 = -5.16228 26
Equação do Segundo Grau Programa V4 Raízes reais Execução 3 Raízes Reais de uma Equação do Segundo Grau Digite o Coeficiente a: -1 Digite o Coeficiente b: 4 Digite o Coeficiente c: -4 x1 = 2 x2 = 2 OBS.: as raízes são iguais; Seria suficiente somente imprimir x1 = x2 = 2. Caso das raízes iguais. Basta alterar o quadrado azul do slide 23. 27
Equação do Segundo Grau Programa V5 Raízes Reais clc; clear; printf("\n Raízes Reais de uma Equação do Segundo Grau"); a = input(" Digite o Coeficiente a: "); if (a == 0) then printf("\n ERRO: coeficiente a = 0"); printf("\n F I M D O P R O G R A M A!"); else b = input(" Digite o Coeficiente b: "); c = input(" Digite o Coeficiente c: "); delta = b^2-4 * a * c; if delta < 0 then printf("\n ERRO: Delta < 0 - FIM DO PROGRAMA!"); else if (delta == 0) then x = -b / (2*a); printf(" x1 = x2 = %g\n", x); else // delta > 0 x1 = (-b + sqrt(delta)) / (2*a); x2 = (-b - sqrt(delta)) / (2*a); printf(" x1 = %g\n", x1); printf(" x2 = %g\n", x2); end end end 28
Equação do Segundo Grau Programa V5 Raízes reais Execução 1 Raízes Reais de uma Equação do Segundo Grau Digite o Coeficiente a: -1 Digite o Coeficiente b: 4 Digite o Coeficiente c: -4 x1 = x2 = 2 Execução 2 Raízes Reais de uma Equação do Segundo Grau Digite o Coeficiente a: 1 Digite o Coeficiente b: 4 Digite o Coeficiente c: -6 x1 = 1.16228 x2 = -5.16228 29
Operador Relacional Condição A condição de um if é uma expressão relacional, que utiliza operadores relacionais: <expr 1> <operador Relacional> <expr 2> Onde: <expr n> é uma expressão, que pode ser um valor numérico, ou uma expressão matemática que resulta em um valor numérico. a avaliação de uma expressão relacional pode resultar em verdadeiro (%t ou %T) ou falso (%f ou %F). 30
Operador Relacional Scilab Operador Descrição > Maior que. >= Maior ou igual a. < Menor que. <= Menor ou igual a. == Igual a. <> ou ~= Diferente de. 31
Operador Relacional Scilab Exemplos -->p = %t p = T -->q = 5 + 3 < 2 q = F -->a = 0 a = 0. -->a == 0 ans = T -->a <> 0 ans = F Os operadores aritméticos têm precedência sobre operadores relacionais Expressão relacional: 5 + 3 < 2 32
Operador Relacional Scilab Exemplos Prioridade de Execução Quando temos uma combinação entre expressões matemáticas e expressões lógicas, primeiramente o Scilab calcula as expressões matemáticas; a seguir, o Scilab calcula as expressões lógicas. os operadores matemáticos tem maior prioridade de execução, com relação aos operadores relacionais. 33
Armazenando nomes em variáveis Exemplo ler o nome de um aluno ler a nota desse aluno se a nota for maior ou igual a 6, imprimir que o aluno passou caso contrário, imprimir que o aluno está reprovado. 34
Armazenando nomes em variáveis // Leitura do nome do usuário Nome = input("digite seu nome, por favor, s ) // Leitura da pontuação Pontos = input(nome + ", qual foi sua pontuação? ") // Impressão do resultado if Pontos >= 60 then printf("%s, com %g pontos você passou!",nome,pontos); else printf("%s, com %g pontos você não passou :(",... Nome,Pontos); end 35
Armazenando nomes em variáveis Execução 1 Digite seu nome, por favor: Bart Simpson Bart Simpson, qual foi sua pontuação? 5.9 Bart Simpson, com 5.9 pontos você não passou :( Execução 2 Digite seu nome, por favor: Sheldon Cooper Sheldon Cooper, qual foi sua pontuação? 10 Sheldon Cooper, com 10 pontos você passou! 36
Um certo nerd... Certa vez a mãe disse ao filho estudante de computação: Filho, por favor vá ao mercado e compre 1 caixa de leite. Se eles tiverem ovos, traga 6. Ele retornou com 6 caixas de leite. A mãe disse: "Porque diabos você comprou 6 caixas de leite?". Ele disse: "PORQUE ELES TINHAM OVOS!". 37
Um certo nerd... compre uma caixa de leite; if eles tem ovos? then traga 6 caixas de leite; end 6 leite caixas trazer! 38
39 EXERCÍCIOS
Exercício 1 Codifique um programa que calcule o volume de uma pirâmide, em cm 3, através da fórmula: onde Volume = 1/3 * ÁreaBase * altura ÁreaBase = comprimento * largura O usuário deve fornecer os valores do comprimento, da largura e da altura. Ao entrar um valor, ele também será solicitado a indicar se o valor digitado foi em polegadas ( p ) ou em centímetros ( c ). Quando a entrada for em polegadas, o programa a converte automaticamente para centímetros. Ao final, o programa imprime o volume calculado. Observação: 2.54 cm = 1 polegada. 40
Exercício 1 Solução 41
Exercício 1 Solução 42
Exercício 1 Solução 43
Exercício 2 Na química, o ph de uma solução aquosa é medido por sua acidez. A escala do ph varia entre 0 e 14, inclusive. Uma solução como ph igual a 7 é dita neutra; uma solução com o ph maior que 7 é dita básica; e uma solução com o ph menor que 7 é dita ácida. Codifique um programa que tenha como entrada o ph de uma solução. O programa imprime se o ph é neutro, básico ou ácido. 44
Exercício 3 Codifique um programa que converta uma temperatura em graus celsius para graus kelvin, ou para graus fahrenheit. Após o usuário fornecer a temperatura em celsius, o usuário deve responder f para conversão em fahrenheit, ou k para conversão em kelvin. Fórmulas: 45
Exercício 4 Codifique um programa que gere um valor inteiro aleatório. A seguir o programa imprime a mensagem O NÚMERO GERADO É PAR caso o número gerado seja par; caso contrário imprime a mensagem: O NÚMERO GERADO É ÍMPAR Dica: floor(rand() * 1000) 46
Perguntas? 47