View
108
Download
0
Category
Preview:
Citation preview
Aula 03
Revisão de ExpressõesComando de Seleção
1
Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM
Programação de Computadores I – BCC701www.decom.ufop.br/moodle
UFMG DCC001 2013-1 2
Equações de Segundo Grau: Equação
Raízes (reais se ∆>0)
Calcular as raízes para a = 534.2765, b = 9987.3431 e c = 225.7690
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
Equação de 2º grauComo obter a solução?
Equações de Segundo Grau:Lendo os valores dos coeficientes
UFMG DCC001 2013-1 4
// Cálculo das raízes de equação de 2o grau
// Entrada de dadosa = 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
// Resolvendo a equaçãodelta = 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
Equações de Segundo Grau:Obtendo e imprimindo as raízes
Primeiro pense! Inclua comentários Observe a precedência de operadores O separador decimal é o ponto Teste o seu programa
6
Lembre-se
Teste a Solução 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
UFMG DCC001 2013-1 7
Teste
UFMG DCC001 2013-1 8
-->a*r1^2 + b*r1 + c ans = 3.865D-12 -->a*r2^2 + b*r2 + c ans = - 2.274D-13
Erros Comuns 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
◦ Um erro de semântica, que só pode ser descoberto por meio de testes, que o programador deve fazer
UFMG DCC001 2013-1 9
ab
r .21
Equações de Segundo Grau: 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
Não estamos preparados...
12
a = 0
13
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;
Analisando o valor de aExpressão lógica, cujo valor é verdadeiro (%t) ou falso (%f)
Expressões com Tipo Lógico
UFMG DCC001 2013-1 14
-->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
Note que operadores aritméticos têm
precedência sobre operadores relacionais
15
Operadores Relacionais - Scilab
Operador Descrição
> Maior que.
>= Maior ou igual a.
< Menor que.
<= Menor ou igual a.
== Igual a.
<> ou ~= Diferente de.
O comando if
UFMG DCC001 2013-1 16
if <condição> then <bloco “então”>else <bloco “senão”>end
A condição deve ser uma expressão
lógica
17
Desvio de Fluxo: if
if a == 0 then printf(“Coeficiente a não pode ser 0”);
else // programa como antesend
18
Desvio de Fluxo de Execução - if
19
Desvio de Fluxo de Execução - if
Exemplo 1 de execução do programa:
20
Desvio de Fluxo de Execução - if
Exemplo 2 de execução do programa:
21
se delta for não negativo então apresentamos as raízes reais; senão // caso contrário apresentamos as raízes complexas;
Δ < 0
22
Desvio de Fluxo de Execução - if 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.
23
Desvio de Fluxo de Execução - if
24
Desvio de Fluxo de Execução - if
Exemplo 1 de execução do programa:
25
Desvio de Fluxo de Execução - if
Exemplo 2 de execução do programa:
26
Números reais e números complexosO 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;
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
Identação
28
Desvio de Fluxo: if
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).
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
Um jovem programador
30
O raciocínio na ambiguidade
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
31
Exercício 1
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?
32
Desvio de Fluxo de Execução - if Solução
33
Desvio de Fluxo de Execução - if Solução
Exercício 2 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!
UFMG DCC001 2013-1 34
UFMG DCC001 2013-1 35
Programa PassouNaoPassou.sce// Leitura do nome do usuárioNome = input("Digite seu nome, por favor")
// Leitura da pontuaçãoPontos = input(Nome + ", qual foi sua pontuação? ")
// Impressão do resultadoif 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óxima linha
Seja f :ℛxℛ⟶ℛ definida por:
Construir um programa para calcular o valor de f(x,y), para valores de x e y dados.
36
Mais sobre Comandos de Desvio
Note que o valor de f(x,y) é dado
por 4 expressões diferentes,
conforme sejam os valores de x e
de y
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
Mais sobre Comandos de Desvio
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
38
Mais sobre Comandos de Desvio
Operador lógico &
Operador lógico
Descrição
& Conjunção (ê)
| Disjunção (ou)
˜ Negação (não)
39
Operadores Lógicos
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
40
Precedência de Operadores
Ordem de precedênciamaior
operadores aritméticosoperadores relacionaisoperadores lógicos
menor
Seja f :ℛ⟶ℛ a função definida por:
Escreva um programa que leia o valor de x e imprima o valor de f(x)
41
Exercício
42
Exercício – exemplo de execução
.
.
.
43
Exercício - Solução
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
Exercício
45
Exercício - Solução
Recommended