• Python
  • 10. Algoritmos
  • Estimando pi

Estimando o valor de pi#

Existem diversas séries infinitas para o cálculo de pi. Abaixo está demonstrada uma série que permite calcular \(\frac{\pi}{2}\). Desenvolva em Python uma função que recebe como argumento o número de elementos que serão usados na série e retorna o valor estimado de \(\pi\).

\[\frac{2}{1}\cdot\frac{2}{3}\cdot\frac{4}{3}\cdot\frac{4}{5}\cdot\frac{6}{5}\cdot\frac{6}{7}\cdot\frac{8}{7}\cdot\frac{8}{9}\cdot\dots = \frac{\pi}{2}\]

Sua função deve se chamar PiWallis.

Acessar exercício "Estimando o valor de pi"

Dica 1

Vamos perceber que existem várias formas de se resolver um mesmo problema. Mas para a resolução dos problemas é sempre útil seguir as dicas que vimos nos handouts.

Dividir para conquistar#

Antes de começarmos a resolver o exercício, vamos gastar um tempo lendo o enunciado e verificando se entendemos tudo o que o enunciado está pedindo e garantir que não deixamos nenhum detalhe passar despercebido.

Exercise 1

O enunciado do exercício pede para construirmos uma função em Python chamada PiWallis. Essa função deve receber um argumento, o que ele representa?

Answer

Ao ler o enunciado do problema, podemos encontrar essa informação. A função recebe como argumento o número de elementos que será utilizado na série. Por exemplo, para a chamada de função PiWallis(5) a função deve calcular a série \(\frac{2}{1}\cdot\frac{2}{3}\cdot\frac{4}{3}\cdot\frac{4}{5}\cdot\frac{6}{5}\).

Exercise 2

\[\frac{2}{1}\cdot\frac{2}{3}\cdot\frac{4}{3}\cdot\frac{4}{5}\cdot\frac{6}{5}\cdot\frac{6}{7}\cdot\frac{8}{7}\cdot\frac{8}{9}\cdot\dots=?\]

O que a série acima calcula?

Answer

A série apresentada pelo enunciado calcula o valor aproximado de \(\frac{\pi}{2}\).

É muito comum calcularmos a série e assumir que o resultado final é o valor de \(\pi\). Por isso, é sempre importante lermos o enunciado com atenção ou consultá-lo quando os seus testes não estiverem passando.

Exercise 3

Olhe para a série apresentada e tente entender o padrão.

\[\frac{2}{1}\cdot\frac{2}{3}\cdot\frac{4}{3}\cdot\frac{4}{5}\cdot\frac{6}{5}\cdot\frac{6}{7}\cdot\frac{8}{7}\cdot\frac{8}{9}\]

Qual será o 9° elemento da série?

Answer

Conseguiu entender como a série funciona? Talvez se pensarmos nos subproblemas para este exercício fique claro como a série se comporta e também comece a surgir possíveis soluções em nossas cabeças. 🧠

Exercise 4

Tente pensar em como você poderia quebrar o exercício em problemas menores. O que te chama a atenção nesta série?

Answer

Neste exercício, o importante é você conseguir pensar em como quebraria este problema em problemas menores que vão nos auxiliar a encontrar uma solução.

Números pares#

Foco nos numeradores.

Uma das primeiras coisas que podem ter chamado a sua atenção é o fato dos numeradores serem composto por números pares. Talvez seja um bom candidato a subproblema. Outro detalhe que chama a atenção nesta sequência dos números pares é que os valores se repetem.

Exercise 5

Vamos simular a sequência dos numeradores? Qual das alternativas abaixo representa a sequência de números pares para uma séria com 5 elementos.

Answer

Para uma sequência com 5 elementos teríamos 2 2 4 4 6, pois a sequência seria da seguinte forma \(\frac{2}{1}\cdot\frac{2}{3}\cdot\frac{4}{3}\cdot\frac{4}{5}\cdot\frac{6}{5}\).

Exercise 6

Agora que já temos bem definido o que devemos fazer para resolver o subproblema da sequência dos números pares. Vamos implementá-lo.

Faça a função sequencia_dos_numeradores que recebe como argumento um número inteiro que representa a quantidade de elementos da sequência e imprima a sequência dos números pares. Ao resolver este exercício, os testes com o nome Sequência de numeradores devem passar com sucesso.

Exemplo: sequencia_dos_numeradores(5)

Saída:

2
2
4
4
6

Números ímpares#

Foco nos denominadores.

Da mesma forma que os numerados chamaram nossa atenção, podemos perceber que os denominadores são compostos somente por números ímpares.

Exercise 7

Vamos simular a sequência dos denominadores? Qual das alternativas abaixo representa a sequência de números ímpares para uma séria com 5 elementos.

Answer

Para uma sequência com 5 elementos teríamos 1 3 3 5 5, pois a sequência seria da seguinte forma \(\frac{2}{1}\cdot\frac{2}{3}\cdot\frac{4}{3}\cdot\frac{4}{5}\cdot\frac{6}{5}\).

Exercise 8

Agora que já temos bem definido o que devemos fazer para resolver este subproblema da sequência dos números ímpares. Vamos implementá-lo.

Faça a função sequencia_dos_denominadores que recebe como argumento um número inteiro que representa a quantidade de elementos da sequência e imprima a sequência dos números ímpares. Ao resolver este exercício, os testes com o nome Sequência de denominadores devem passar com sucesso.

Exemplo: sequencia_dos_denominadores(5)

Saída:

1
3
3
5
5

Intercalando#

Neste ponto do handout, já conseguimos gerar a sequência dos numeradores e denominadores, porém a solução está dividida. O que precisamos fazer agora é junta-las.

Você notou que os valores dos numerados e denominadores são atualizados de forma intercalada. Ou seja, sempre que o valor do numerador muda o valor do denominador se mantém igual e vice e versa.

Intercalando atualização dos valores.

Exercise 9

Vamos combinar as duas soluções feitas nas etapas anteriores para conseguirmos gerar as sequências dos numeradores e denominadores de forma simultânea.

Faça a função sequencia_combinada que recebe como argumento um número inteiro que representa a quantidade de elementos da sequência e imprima a sequência dos numerados e denominadores. Ao resolver este exercício, os testes com o nome Sequência combinada devem passar com sucesso.

Exemplo: sequencia_combinada(5)

Saída:

2/1
2/3
4/3
4/5
6/5

Obs.: Ao combinar os dois exercícios utilize apenas um while

Finalizando#

A parte difícil nós já fizemos!

Exercise 10

Vamos finalizar o exercício construindo a função PiWallis que recebe como argumento o número de elementos da sequência e retorna o valor aproximado de \(\pi\).

Ao resolver este exercício, os testes com o nome Construindo a função piwallis devem passar com sucesso.

Agora que conseguimos resolver este exercício utilizando:

  • Estratégia de dividir o problema em subproblemas;
  • Utilização de padrões de uso do operador while (padrões de contador, somatório e validação);

Utiliza a mesma estratégia para resolver outros exercícios com dificuldades maiores.