Universidade Federal de Ouro Preto - UFOP
Departamento de Computação - DECOM
Programação de Computadores I – BCC701
www.decom.ufop.br/moodle
1

Equação

Raízes (reais se ∆>0)

Calcular as raízes para a = 534.2765, b =
9987.3431 e c = 225.7690
2
UFMG DCC001 2013-1




Ler os valores dos coeficientes a, b e c
Calcular o valor de delta
Obter as raízes da equação
Imprimir as raízes da equação
3
// Cálculo das raízes de equação de 2o grau
// Entrada de dados
a = input("Digite o valor de a:")
b = input("Digite o valor de b:")
c = input("Digite o valor de c:")
Diálogo com
o usuário
4
UFMG DCC001 2013-1
// Resolvendo a equação
delta = b^2 - 4*a*c
r1 = (-b + sqrt(delta))/ (2*a)
r2 = (-b - sqrt(delta))/ (2*a)
// Imprimindo resultados
printf(“Raiz 1 = %g”,r1)
printf(“Raiz 2 = %g”,r2)
5





Primeiro pense!
Inclua comentários
Observe a precedência de operadores
O separador decimal é o ponto
Teste o seu programa
6


Em todo problema de transformação de
informação, temos que pensar em testes que
verifiquem a correção do que fazemos
Nesse caso, o teste é simples: se r é um valor
calculado para uma raiz, o valor da expressão
a*r^2 + b*r + c deve ser zero
7
UFMG DCC001 2013-1
-->a*r1^2 + b*r1 + c
ans =
3.865D-12
-->a*r2^2 + b*r2 + c
ans =
- 2.274D-13
8
UFMG DCC001 2013-1

Escrever delta = b^2 – 4ac, omitindo os
operadores de multiplicação
◦ Um erro de sintaxe, que é apontado pelo Scilab

Escrever r1 = (-b+sqrt(delta))/2*a , o que na
verdade calcula
 b  
.a
r1  

2


◦ Um erro de semântica, que só pode ser descoberto por
meio de testes, que o programador deve fazer
9
UFMG DCC001 2013-1

Equação

Bhaskara (∆>0, a≠0)

Quaisquer valores de coeficiente!

a=0
◦ Equação de primeiro grau
◦ Divisão por zero no nosso programa!

Δ< 0
◦ Raízes complexas
◦ Só imprime a parte real no nosso programa!
11
12
Expressão lógica, cujo valor é
verdadeiro (%t) ou falso (%f)
se a igual a 0 então
mensagem de erro;
resolver equação de primeiro grau;
senão
// caso contrário
apresentamos as raízes reais;
13
Note que operadores
aritméticos têm
precedência sobre
operadores
relacionais
-->p = %t
p =
T
-->q = 5+3 < 2
q =
F
-->a = 0
a =
0
-->a == 0
ans =
T
-->a <> 0
ans =
F
Literal True
Expressão lógica,
usando o operador
relacional <
igual
diferente
14
UFMG DCC001 2013-1
Operador
Descrição
>
Maior que.
>=
<
Maior ou igual a.
Menor que.
<=
Menor ou igual a.
==
Igual a.
<> ou ~=
Diferente de.
15
A condição deve ser
uma expressão lógica
if <condição> then
<bloco “então”>
else
<bloco “senão”>
end
16
UFMG DCC001 2013-1
if a == 0 then
printf(“Coeficiente a não pode ser 0”);
else
// programa como antes
end
17
18
Exemplo 1 de execução do programa:
19
Exemplo 2 de execução do programa:
20
se delta for não negativo então
apresentamos as raízes reais;
senão
// caso contrário
apresentamos as raízes complexas;
21
Exemplo
• quando delta for maior ou igual a zero, a expressão relacional
resultará em %t e, portanto, somente o bloco do então (then)
será executado;
• quando delta for menor que zero, a expressão relacional
resultará em %f e, portanto, somente o bloco do senão (else)
será executado.
22
23
Exemplo 1 de execução do programa:
24
Exemplo 2 de execução do programa:
25
O Scilab possibilita manipular números complexos de
forma simples:
real(x1)  retorna a parte real.
imag(x1)  retorna a parte imaginária.
Exemplos de números complexos:
z1 = 3 + 4 * %i;
z2 = 1 - %i;
z3 = z1 + z2;
z4 = z1 * z2;
26




Afastar os “blocos” para esquerda
Torna mais claro o que está sendo feito em
cada fluxo do programa
Será EXIGIDO
Existe uma tecla especial no SciNotes
27
Forma Alternativa
if <condição> then
<bloco do então>
end
OBS.: um bloco é um conjunto de quaisquer comandos
Scilab sintaticamente corretos (inclusive outro if).
28
Certa vez a mãe disse ao filho estudante de
computação:
"Querido, 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!".
29
se tiverem ovos então
traga 6 caixas de leite;
senão
traga 1 caixa de leite;
http://www.hardware.com.br/artigos/computadores-receitas-bolo-aprendendo-comunicar-com-maquina/aprendendo-pensar-como-maquina.html
30
Considerando o programa que calcula a equação do
segundo grau, observamos que quando as duas raízes são
iguais, o programa calcula e imprime x1 e x2 com os
mesmos valores. Como poderíamos resolver isso?
31
Solução
32
Solução
33

Faça um programa que:
◦ Leia o nome do usuário
◦ Leia o total de pontos feitos pelo usuário
◦ Imprima, conforme o caso, a frase
 <usuário>, com <pontos> você passou!
◦ Ou
 <usuário>, com <pontos> você não passou!
◦ Ex.: José, com 75 pontos você passou!
34
UFMG DCC001 2013-1
// Leitura do nome do usuário
Nome = input("Digite seu nome, por favor")
// 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
Comando continua
na próxima35linha
UFMG DCC001 2013-1

Seja f :ℛxℛ⟶ℛ definida por:
Note que o valor
de f(x,y) é dado
por 4 expressões
diferentes,
conforme sejam
os valores de x e
de y

Construir um programa para calcular o valor
de f(x,y), para valores de x e y dados.
36
se x>= 0 e y>=0 então
r = x + y;
senão se x>= 0 e y<0 então
r = x + y^2;
senão se x< 0 e y>=0 então
r = x^2 + y;
senão
r = x^2 + y^2;
37
if x>= 0 & y>=0 then
r = x + y;
elseif x>= 0 & y<0 then
r = x + y^2;
elseif x< 0 & y>=0 then
r = x^2 + y;
else
r = x^2 + y^2;
end
Operador lógico &
38
Operador lógico
Descrição
&
Conjunção (ê)
|
Disjunção (ou)
˜
Negação
(não)
Sejam e1 e e2 expressões lógicas.
 ~e1 é falsa se e1 é verdadeira; é verdadeira se e1 é falsa
 e1 & e2 é verdadeira se e1 e e2 são ambas verdadeiras;
é falsa nos demais casos
 e1 | e2 é falsa se e1 e e2 são ambas falsas; é verdadeira
nos demais casos
39
Ordem de precedência
maior
operadores aritméticos
operadores relacionais
operadores lógicos
menor
40


Seja f :ℛ⟶ℛ a função definida por:
Escreva um programa que leia o valor de x e
imprima o valor de f(x)
41
.
.
.
42
43

Escreva um programa que determina se 3 valores
dados constituem lados de um triângulo e, em caso
afirmativo, se o triângulo é equilátero, isósceles ou
escaleno.
44
45
Download

4. Comando de Seleção - DECOM-UFOP