dcc 001 programação de computadores 1o semestre de 2007a condição de um if é uma expressão...
TRANSCRIPT
AULA TEÓRICA 03
COMANDO CONDICIONAL
Universidade Federal de Ouro Preto - UFOP
Departamento de Computação - DECOM
BCC701 – Programação de Computadores I
www.decom.ufop.br/red
2017-1
1
2
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
Programação Estruturada
3
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.
Programação Estruturada
4
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.
Comando Condicional
Você tem que
tomar uma
decisão !
Obter um
%t
ou
%f.
5
Problema
Seu carro tem combustível para rodar 15 Km.
Qual caminho escolher ?
Comando Condicional
Posto B
25 km
Posto A
10 km
6
Problema
Seu carro tem combustível para rodar 15 Km.
Qual caminho escolher ?
Comando Condicional
Se 15 >= 25 Então
Vou para o Posto B; // se 15 >= 25 resultar em #t
Fim
Se 15 >= 10 Então
Vou para o Posto A; // se 15 >= 10 resultar em #t
Fim
7
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;
Comando Condicional if then 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.
8
if
Comando Condicional if then end
end
then condição é
verdadeira
Comando 1;
Comando 2;
Comando n;
Comando n+1;
Comando n+2;
9
if
Comando Condicional if then end
end
then condição é
falsa
Comando 1;
Comando 2;
Comando n;
Comando n+1;
Comando n+2;
10
Fluxograma
Comando Condicional if then end
início
fim
x = 16
x > 0
x = sqrt(x)
%t %f
. . .
11
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.
• ax2 + bx + c = 0 • a ≠ 0
12
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);
13
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 ?
14
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.
15
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);
16
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
17
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.
18
Estrutura 2
if <condição> then
<bloco de comandos a>
else
<bloco de comandos b>
end
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;
Comando Condicional if then else end
OBSERVAÇÃO: else é palavra reservada do Scilab e não pode ser usada para nomear variáveis.
19
if
end
then condição é
verdadeira
Comando 1;
Comando 2;
Comando n;
Comando n+1;
Comando n+2;
Comando Condicional if then else end
else
Comando a;
...
Comando b;
20
if
end
then condição é
falsa
Comando 1;
Comando 2;
Comando n;
Comando n+1;
Comando n+2;
Comando Condicional if then else end
else
Comando a;
...
Comando b;
21
Fluxograma início
fim
x = 16
x > 0
x = sqrt(x)
%t %f
. . .
Comando Condicional if then else end
x = sqrt(-x)
22
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);
end
23
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
24
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
25
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
26
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
27
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.
28
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
29
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
30
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).
31
Operador Relacional Scilab
Operador Descrição
> Maior que.
>= Maior ou igual a.
< Menor que.
<= Menor ou igual a.
== Igual a.
<> ou ~= Diferente de.
32
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
33
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.
34
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.
35
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
36
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!
37
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!".
38
Um certo nerd ...
compre uma caixa de leite;
if eles tem ovos ? then
traga 6 caixas de leite;
end
6 leite caixas trazer!
EXERCÍCIOS
39
40
Codifique um programa que calcule o volume de uma
pirâmide, em cm3, através da fórmula:
Volume = 1/3 * ÁreaBase * altura
onde
Á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.
Exercício 1
41
Exercício 1 Solução
42
Exercício 1 Solução
43
Exercício 1 Solução
44
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.
Exercício 2
45
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:
Exercício 3
46
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)
Exercício 4
47
Perguntas ?