| | | |

Minicurso de Python para Matemática

Material disponível para compra: e-book livro. Consulte outras formas de colaboração aqui!

3.1 Ramificação

Uma estrutura de ramificação é uma instrução if-[elif-...-elif-else] para a tomada de decisões durante a execução de um programa.

3.1.1 if

Por exemplo, o código abaixo computa as raízes reais do polinômio

p(x)=ax2+bx+c, (3.1)

com a, b e c alocados no início do código.

1import math as m
2a = 1.
3b = -1.
4c = -2.
5dlta = b**2 - 4.*a*c
6if (dlta >= 0.):
7 x1 = (-b - m.sqrt(dlta))/(2.*a)
8 x2 = (-b + m.sqrt(dlta))/(2.*a)
9 print('x1 =', x1)
10 print('x2 =', x2)
x1 = -1.0
x2 = 2.0

Neste código, o bloco de comandos (linhas 7-10) só é executado, se o discriminante do polinômio seja não-negativo. Verifique! Troque os valores de a, b e c de forma que p tenha raízes complexas.

Observação 3.1.1.(Indentação)

Nas linhas 7-10 do código anterior, a indentação dos comandos é obrigatória. O bloco de comandos indentados indicam o escopo da instrução if.

3.1.2 if-else

Vamos modificar o código anterior, de forma que as raízes complexas sejam computadas e impressas, quando for o caso.

1import math as m
2a = 1.
3b = -4.
4c = 8.
5dlta = b**2 - 4.*a*c
6if (dlta >= 0.):
7 # raízes reais
8 x1 = (-b - m.sqrt(dlta))/(2.*a)
9 x2 = (-b + m.sqrt(dlta))/(2.*a)
10else:
11 # raízes complexas
12 rea = -b/(2.*a)
13 img = m.sqrt(-dlta)/(2.*a)
14 x1 = rea - img*1j
15 x2 = rea + img*1j
16print('x1 =', x1)
17print('x2 =', x2)
x1 = (2-2j)
x2 = (2+2j)
Observação 3.1.2.(Número complexo)

Em Python, números complexos podem ser alocados como objetos da classe complex. O número imaginário i=1 é denotado por 1j e um número completo a+bi por a + b*1j.

3.1.3 if-elif-else

A instrução elif é uma conjunção de uma sequência de instruções else-if. Vamos modificar o código anterior, de forma a computar o caso de raízes reais duplas de forma própria.

1import math as m
2a = 1.
3b = 2.
4c = 1.
5dlta = b**2 - 4.*a*c
6if (dlta > 0.):
7 # raízes reais
8 x1 = (-b - m.sqrt(dlta))/(2.*a)
9 x2 = (-b + m.sqrt(dlta))/(2.*a)
10elif (dlta == 0.):
11 x1 = x2 = -b/(2.*a)
12else:
13 # raízes complexas
14 rea = -b/(2.*a)
15 img = m.sqrt(-dlta)/(2.*a)
16 x1 = rea - img*1j
17 x2 = rea + img*1j
18print('x1 =', x1)
19print('x2 =', x2)
x1 = -1.0
x2 = -1.0
E. 3.1.1.

Desenvolva um código para computar a raiz do polinômio

f(x)=ax+b (3.2)

com dados a e b. O código deve lidar com todos os casos possíveis, a saber:

  1. a)

    única raiz (a0).

  2. b)

    infinitas raízes (a=b=0).

  3. c)

    não existe raiz (a=0 e b0).


1# params
2a = 2.
3b = 1.
4# raiz
5if (a != 0.):
6 x = -b/a
7 print('raiz única x = ', x)
8elif (b == 0.):
9 print('infinitas raízes x')
10else:
11 print('não existe raiz')
E. 3.1.2.

Desenvolva um código em que dados três pontos A, B e C no plano, verifique se ABC determina um triângulo. Caso afirmativo, classifique-o como um triângulo equilátero, isósceles ou escaleno.


1import math
2# pts
3A = (0., 0.)
4B = (3., 0.)
5C = (3., 4.)
6# compr. lados
7lado_1 = math.sqrt((B[0]-A[0])**2 + (B[1]-A[1])**2)
8lado_2 = math.sqrt((C[0]-B[0])**2 + (C[1]-B[1])**2)
9lado_3 = math.sqrt((C[0]-A[0])**2 + (C[1]-A[1])**2)
10# triangulo?
11if (lado_1 + lado_2 > lado_3) and \
12 (lado_1 + lado_3 > lado_2) and \
13 (lado_2 + lado_3 > lado_1):
14 print('ABC é triângulo:')
15 # equilátero?
16 if lado_1 == lado_2 == lado_3:
17 print('\tequilátero')
18 elif (lado_1 != lado_2 != lado_3):
19 print('\tescaleno')
20 else:
21 print('\tisósceles')
22else:
23 print('ABC não é triângulo')

Envie seu comentário

Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!

Opcional. Preencha seu nome para que eu possa lhe contatar.
Opcional. Preencha seu e-mail para que eu possa lhe contatar.
As informações preenchidas são enviadas por e-mail para o desenvolvedor do site e tratadas de forma privada. Consulte a política de uso de dados para mais informações.

Licença Creative Commons
Este texto é disponibilizado nos termos da Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional. Ícones e elementos gráficos podem estar sujeitos a condições adicionais.

Pedro H A Konzen
| | | |