Física Computacional - FSC-5705

só um divisor

Blocos de tomada de decisão

Similar a outras linguagens o python possui o if para tratar da toma de decisões. A principal diferença é que o python utiliza a indentação para definir o bloco lógico ou seja, o bloco que será executado caso a condição do if seja verdadeira, vejamos um exemplo para entender melhor

        #!/usr/bin/env python

        from math import *
        from cmath import sqrt as csqrt

        coef = raw_input("digite os coeficiente a, b, c \
        da eq de II grau, separados por virgula ")

        Parte = coef.split(',')
        a = float(Parte[0])
        b = float(Parte[1])
        c = float(Parte[2])

        radicando = b**2 - 4.0 * a * c

        if (radicando > 0.0):     #se radicando > 0 faz
          raiz = sqrt(radicando)
        elif (radicando < 0.0):   #caso radicando > 0 faz
          raiz = csqrt(radicando)
        else:                     #se nao faz
          raiz = 0.0

        raiz1 = (-b + raiz) / (2.0 * a)
        raiz2 = (-b - raiz) / (2.0 * a)

        print 'as raizes de ax**2 + bx + c = 0 sao:\n \
        raiz 1 = %s\n raiz 2 = %s' % ( str(raiz1), str(raiz2) )
      
[usuario@pclabfis: ]# python exemplo01
digite os coeficiente a, b, c da eq de II grau, separados por virgula 2, 5, 9
as raizes de ax**2 + bx + c = 0 sao:
 raiz 1 = (-1.25+1.7139136501j)
 raiz 2 = (-1.25-1.7139136501j)
[usuario@pclabfis: ]#

Os parenteses à volta da expressão de teste não são obrigatórios. Note que terminada a opção você coloca : para informar o inicio do bloco, a próxima linha (linha 17, 19, 21) é indentada pois se refere ao bloco que deve ser computado caso a linha acima seja verdadeira.

A linha 4 apresenta uma forma de importação de módulo no antes vista, como tanto o módulo math como o cmath possuem a função (método) sqrt foi importada a correspondente ao método cmath como (as) csqrt. Dessa forma temos ambas funções a disposição.

Lembre que a endentação é sumamente importante para o Python. Todo script Python possui pelo menos 1 bloco, que é endentada na coluna 1, em geral. Esse é o script "principal", dentro dele podemos colocar outros blocos os quais se caraterizam por serem endentados. Dentro de um bloco todos os elementos tem que ter a mesma endentação por exemplo, no script a seguir identificamos 3 blocos:

        #!/usr/bin/env python
        
        x = 1
        if x:
          y = 2
          if y:
            print 'bloco 2'
          print 'bloco 1'
        print 'bloco 0'        
      

Esse tipo de construção recebe o nome de bloco aninhado. No exemplo o bloco 0 aninha o bloco 1 e 2 e o bloco 1 aninha o bloco 2 como mostrado na figura embaixo.

Para testar se duas coisas são equivalente utilizamos o operador ==, mas se utiliza o operador is para testar se se trata do mesmo objeto, o dito de forma mais técnica, se está na mesma posição de memoria.

Exercícios

  1. Se se deixa o dinheiro em um banco qualquer por mais de dois anos a taxa de interesse que o banco paga é de 8%, caso contrario é 7% ao ano. Escreva um programa que pergunte a quantidade de dinheiro inicial e a quantidade de anos que esse dinheiro ficou no banco, no fim o programa deve imprimir a quantidade de dinheiro que o correntista ainda possui.
  2. Escreva um programa que calcule e imprima o salário semanal de um trabalhador baseado nas seguintes condições: Se o trabalhador trabalha 40 horas ou menos ele recebe R\$ 38.00, se ele trabalha acima de 40 horas recebe R\$ 1520.00 mais R\$ 57.00 por cada hora trabalhada acima das 40.
  3. Escreva um programa que realize a conversão Fahrenheit e Celsius ou vice-versa utilizando para isso as seguintes equações \[ C = \frac{5.0}{9.0} * (F - 32.0) \nonumber \] e \[ F = \frac{9.0}{5.0} * C + 32.0 \nonumber \] conforme seja necessário. O programa deve inquerir o usuário sobre qual o tipo de conversão que ele precisa e a seguir perguntar a temperatura que será convertida. Finalmente imprime na tela o resultado da conversão. Um exemplo da execução desse programa se apresenta a continuação:
    [usuario@pclabfis: ]# exercicio03
    Digite 1 para converter de Celcius para Fahrenheit
    Digite 2 para converter de Fahrenheit para Celcius
    1
    Agora digite a temperatura em Celcius
    33.0
    O resultado da conversao eh 91.4 Fahrenheit [usuario@pclabfis: ]#
  4. Escreva um programa que dada as coordenadas $x$ e $y$ calcule o ângulo em relação ao eixo $x$ (positivo) medido no sentido anti-horário. O programa deve retornar a resposta em graus.
  5. Crie um programa que dado um número inteiro informe se é ou não par
  6. Crie um programa que dado 3 números, ele imprima eles em ordem ascendente.
  7. Para saber se um ano será bissexto na regra gregoriana que usamos até hoje faz-se a seguinte conta: Tente dividir o ano por 4. Se o resto for diferente de 0, ou seja, se for indivisível por 4, ele não é bissexto. Se for divisível por 4, é preciso verificar se o ano acaba em 00 (zero duplo). Em caso negativo, o ano é bissexto. Se terminar em 00, é preciso verificar se é divisível por 400. Se sim, é bissexto; se não, é um ano normal. Exemplo: 2008 é um número divisível por 4 (o resultado é 502) e que não acaba em 00, já o ano 1900 não foi bissexto: é divisível por 4, termina em 00, mas não é divisível por 400. O ano 2000, por sua vez, foi bissexto: é divisível por 4, termina em 00 e é divisível por 400 (De: Como funciona o ano bissexto). Crie um programa que pergunte ao usuário o ano e informe se o ano é ou não bissexto.
  8. Escreva um programa que calcule o valor do imposto de renta utilizando como base a seguinte tabela:
    Base de cálculo
    anual em R\$
    Alíquota Parcela a deduzir do
    imposto em R\$
    Até 20529.36 0% -
    De 20529.37 até 30766.92 7.5% 1539.70
    De 30766.93 até 41023.08 15% 3847.22
    De 41023.09 até 51259.08 22.5% 6923.95
    Acima de 51259.08 27.5% 9486.91
    O Programa deve solicitar que o usuário digite seu salário anual e o programa deve dizer para o usuário quanto ele deverá pagar ou receber de restituição.
  9. Escreva um programa que lei três doubles os quais representaram três distancias. Como resultado o programa deverá informar ao usuário se essas distâncias corresponde a algum dos seguintes casos e imprimir na tela o caso respetivo:
    1. triangulo: as três distâncias representaram serão os lados de um triângulo se nenhum delas é maior que a soma das outras.
    2. isósceles: além de ser um triângulo, dois de seus lados tem o mesmo tamanho
    3. equilátero: todos os três lados tem o mesmo tamanho
  10. Crie um programa que calcule as raízes de uma equação cúbica. Para isso utilize a teoria abaixo exposta
    Raízes de uma equação cúbica:
    Considere a equação de terceira ordem da forma: \[ \alpha x^3+\beta x^2 + \gamma x + \delta = 0 \] note que essa equação pode ser reescrita como: \[ x^3+a x^2 + b x + c = 0 \] a qual, mediante seguinte mudança de variáveis \[ x = t - \frac{a}{3} \nonumber \] pode ser reduzida à seguinte expressão \[ t^3 + pt + q = 0 \label{eqCubica} \] onde \[ p = \frac{3b-a^2}{3} \label{eqP} \] e \[ q = \frac{2a^3-9ab+27c}{27} \label{eqQ} \] Para resolvermos esta equação devemos pensar na seguinte expressão \[ (u-v)^3+3uv(u-v)=u^3-v^3 \nonumber \] Que reduz à equação $\ref{eqCubica}$ no caso em que \[ p = 3uv \label{eq2} \] \[ -q = u^3 - v^3 \label{eq3} \] \[ t = u - v \label{eq4} \] De $\ref{eq2}$ \[ v = \frac{p}{3u} \nonumber \] e substituirmos esse resultado em $\ref{eq3}$ \[ u^3 - \left( \frac{p}{3u} \right)^3 + q = 0 \nonumber \] que multiplicando por $u^3$ resulta em \[ u^6 + qu^3 - \left( \frac{p}{3} \right)^3 = 0 \nonumber \] e utilizando Baskara, resulta em \[ u^3 = -\frac{q}{2} \pm \sqrt{\left( \frac{q}{2} \right)^2+\left( \frac{p}{3} \right)^3} \nonumber \] e disso junto a $\ref{eq2}$, obtemos \[ v^3 = \frac{q}{2} \pm \sqrt{\left( \frac{q}{2} \right)^2+\left( \frac{p}{3} \right)^3} \nonumber \] (Note que só devemos ter 3 raízes e não 6 como as duas equações acima propõem, na realidade você pode esquecer o $\pm$ e simplesmente utilizar o sinal +)

    A chave das soluções acima é o radicando dentro da raiz: \[ \Delta = \left(\frac{q}{2} \right)^2+\left( \frac{p}{3} \right)^3 \] Note que se:
    1. $\Delta = 0\;\;$, Todas as raizes são reais e duas são iguais
    2. $\Delta > 0\;\;$, então $\sqrt{\Delta}$ é um número real, de forma que uma das raízes é real (a raiz principal) e as outras duas são complexas
    3. $\Delta < 0\;\;$, então $\sqrt{\Delta}$ é imaginaria, assim todas as raízes são reais mas tanto $u$ como $v$ são números complexos. Esse caso se conhece com o caso irredutível.


    Caso a: Todas reais e duas iguais
    A soluções para esse caso são (pode verificar aqui): \[ x_1 = 2 \sqrt[3]{\left( -\frac{q}{2}\right)} - \frac{a}{3} \] e \[ x_{2,3} = \sqrt[3]{\left( \frac{q}{2}\right)} - \frac{a}{3} \] Caso b: Uma real e duas complexas
    \[ x_1 = u_1 - v_1 + \frac{a}{3} \] \[ x_{2,3} = -\frac{1}{2}(u_1 - v_1) \pm \frac{\sqrt{3}}{2}(u_1 + v_1)i - \frac{a}{3} \] onde \[ u_1 = \sqrt[3]{\left(-\frac{q}{2} + \sqrt{\Delta}\right)} \nonumber \] e \[ v_1 = \sqrt[3]{\left(\frac{q}{2} + \sqrt{\Delta}\right)} \nonumber \] Caso c: Toda as raízes reais e diferentes
    Para o caso irredutível, pode se mostrar que utilizando utilizando uma representação trigonométrica para $u$ e $v$: \[ u = r^{\frac{1}{3}} \left( \cos\left( \frac{\phi}{3} \right) + i \sin\left( \frac{\phi}{3} \right)\right) \nonumber \] \[ v = r^{\frac{1}{3}} \left( - \cos\left( \frac{\phi}{3} \right) + i \sin\left( \frac{\phi}{3} \right)\right) \nonumber \] com \[ r = \sqrt{\left( -\frac{p}{3} \right)^3} \nonumber \] e \[ \cos \phi = \left( - \frac{q}{2\sqrt{\left( -\frac{p}{3} \right)^3}}\right) \nonumber \] obtemos as soluções: \[ x_1 = 2 r^{\frac{1}{3}} \cos \left( \frac{\phi}{3} \right) - \frac{a}{3} \] \[ x_2 = 2 r^{\frac{1}{3}} \cos \left( \frac{\phi+2\pi}{3} \right) - \frac{a}{3} \] \[ x_3 = 2 r^{\frac{1}{3}} \cos \left( \frac{\phi+4\pi}{3} \right) - \frac{a}{3} \]