[MÚSICA] Vamos então resolver aquele exercício, que era o exercício da fórmula de Bhaskara, que eu queria quebrar ela elementos menores. Eu vou abrir aquela fórmula de Bhaskara que eu implementei outro dia aqui, vejamos, achar aquele arquivo, eu gravei algum lugar aqui. Neste diretório aqui, estava aqui Bhaskara, pronto. Ele abriu. Como funcionava aquele programa? Primeiro, eu importava esse módulo Math, que é para poder usar a função de raiz quadrada, sqrt. Então, tem esse import Math. Depois eu lia do teclado, três números do tipo float, números reais ali, e eu falava para o usuário, digite o valor de a, ele digitava, digite o valor de b, ele digitava, digite o valor de c, ele digitava. Daí, eu calculava o delta, b dois menos quatro ac e daí eu via aquelas várias possibilidades, se o delta era igual a zero, tinha só uma raiz, se delta era menor que zero não tinha nenhuma raiz real, no caso contrário, delta maior que zero tinha duas raízes. Então, vamos dar, fazer o que a gente chama de refatoração, vamos refatorar esse código, ou seja, reorganizar o código, de forma a não mudar o que ele faz, ele vai continuar fazendo exatamente a mesma coisa, mas eu vou tentar tornar ele pouco mais claro, eu estou achando que está muito complicado, está muito longo aqui. Eu vou tentar organizar pedaços melhores, definindo algumas funções. Eu diria que a primeira função que eu gostaria de já definir, era uma função por delta. Esse delta aqui, é uma coisa bem separada, a gente, eu vou tirar isso daqui, e vou criar aqui cima uma função, def delta, uma função delta, que ele recebe como parâmetro três números, a, b e c, e ele devolve vou estar a copiar aqui aquela fórmula, aqui então vai ficar assim: defini uma função delta, que dado valores a, b, e c, ele devolve b dois menos quatro ac. Então, pronto, já tenho pedaço aqui, virou uma função delta, agora ao longo do meu programa aqui, eu vou precisar mudar, isso aqui deixou de ser o nome de uma variável, passou a ser uma função, então, todo o lugar que eu tinha delta, eu vou colocar uma chamada de função para a função delta. Aí, além disso, eu preciso colocar os três parâmetros aqui. [SEM_ÁUDIO] [SEM_ÁUDIO] Na verdade, acabou ficando pouco mais complicado aqui, o uso dessa função delta, mas depois a gente trabalha, dá uma refatorada para melhorar isso também, não tem problema. Outra coisa que eu gostaria, vai, tem dois pedaços completamente diferentes aqui. Tem esse trecho que é, ele está lidando com a entrada de dados do teclado, e depois, tem esse trecho que está lidando com a cálculo das raízes e a impressão das raízes. Então, acho que eu vou separar isso pedaços diferentes. Eu vou fazer o seguinte, eu vou falar, esse pedaço aqui, eu vou chamar essa função de main, que é uma função principal, é a entrada do meu programa, assim que eu começo a executar o meu programa, eu vou querer aqui rodar essa função principal aqui. E essa função principal, eu vou querer ler então, esses três valores do teclado, e daí, seguida, eu vou falar: eu quero que você imprime as raízes da minha equação. E qual é a equação? É a equação que tem a, b, e c como os constantes, os coeficientes da equação. Então, eu estou supondo que tem uma função aqui, imprime_raízes, mas eu não implementei ainda, eu vou implementar. Então, aqui esse trecho que sobrou, eu vou colocar ele dentro dessa função imprime_raízes. Imprime_raízes, recebe a, b, e c como parâmetro, aqui. E daí, eu vou, colocar esse, preciso de, eu vou usar tabs aqui. Tab, pronto, tem que acertar a endentação, não é? Agora esse else aqui vai ficar alinhado aqui, o if pronto. Acertando a endentação aqui, esse aqui é dentro desse, certo? Esse fica alinhado aqui. Pronto, agora acho que, não, esse eu tenho que acertar também aqui a endentação, isso aqui. Isso. Está, então, agora organizei aquele código três funções diferentes. Vamos primeiro executar uma vez aqui para ver se está certo. Então, eu vou salvar isso aqui, e eu vou mandar executar, e aí ao executar, não, ele deu erro de sintaxe, vamos ver, aqui nós temos erro de sintaxe, eu acho que tem a ver com os meus esse aqui, esse else, ele tem que está subordinado a este if. Isso. Então, vamos ver se está compilando aqui. Está, então compilou. Então, aqui nesse ambiente, eu já tenho essas três funções, a função delta, o main e o imprime_raízes, não é? Particular, se eu fizer a função delta aqui, de 10, 20, 30, o delta dá -800, esse é caso de delta negativo, então particular, vamos executar o main aqui e experimentar com esses valores 10, 20, 30. Então, eu vou fazer, executar o main, daí ele, digite o valor de a, 10, b 20, c 30, esta equação não possui raízes reais. Então, deu certo. O que é que aconteceu aqui? Quando eu executei o main ele fez aqui, o a recebeu o valor de 10, o b o valor de 20, o c o valor de 30. Daí ele chamou, o main chamou essa outra função, a função imprime_raízes, passando esse 10, 20, 30 como parâmetro aqui, o a ficou valendo 10, o b 20 e o c 30. Isso foi chamado aqui para essa função imprime_raízes aqui. e os valores de 10, 20, 30 foram passados aqui como a b c para essa função imprime_raízes e daí, ele começou a executar. Quando ele começou a executar, ele fez o seguinte: if delta de a b c, de novo veio outra chamada de função, então esse a b c, que estava com 10, 20, 30, foi passado lá para cima para o delta bc, ele calculou o valor, que dá -800, a gente já viu, né? e daí esse -800 não é igual a zero, então ele cai no else, E daí, ele faz, if, daí ele calculou de novo, ele chamou de novo a função delta, calculou de novo delta, deu -800 de novo né? É menor que zero? Daí sim, é menor que zero, porque -800 é menor do que zero. E daí, ele veio para esse print, imprimiu "esta equação não possuí raízes reais". Então, está funcionando, mas tem uma coisa desagradável que é, ele está calculando delta várias vezes, não precisava calcular delta várias vezes, né? Ele chama o delta aqui, depois ele chama de novo o delta aqui, essa função delta. Então, eu acho que ficaria pouco melhor se, a gente, vez de chamar várias vezes, a gente chamasse uma única vez e guardasse numa variável local dessa função imprime_raízes, como é que eu poderia fazer isso aqui, dentro dessa função imprime_raízes, eu posso criar uma outa variável, que eu posso chamar de delta, ou simplesmente d. Então, esse d passa a ser uma variável que, o escopo dela é essa função imprime_raízes, ela só existe dentro dessa função imprime_raízes, e qual é que vai ser o valor dela? Eu vou chamar essa função a, b, e c, delta desculpem, passando a, b, e c como parâmetro, e o resultado devolvido pelo delta, eu vou guardar nessa variável temporária d. E daí, aqui no resto da minha função imprime_raízes eu não preciso mais chamar de novo a função delta, simplesmente, todas as vezes que tiver o delta aqui, eu simplesmente vou usar aquele valor que eu guardei na variável d. Dessa forma, o programa vai ficar pouquinho mais eficiente, porque é uma única vez que eu vou chamar a função delta. E, também o código vai ficar pouco mais limpo, porque não vou precisar colocar esse delta(a, b, c) várias várias vezes, simplesmente, chamo a primeira vez e depois, simplesmente, uso o d que a gente já sabe ali que é o delta. Poderia usar o nome de delta também, vez de d. Vamos aqui só ver se, compilar de novo, ver se está tudo bem. Parece que está tudo bem, vamos de novo tentar a função main aqui. Vamos dessa vez agora testar com caso diferente, com o delta vamos ver o delta(20, 5, 20). Não eu quero delta positivo então o b2 tem que ser grande, para ter lá delta positivo, então é o contrário, então (5, 20, 5), pronto 300. O delta fica número positivo grande se o b é número maior que. Então, vamos chamar aqui o main, o valor de a é cinco, o valor de b, é 20 e o valor de c é cinco. Daí, me parece que deu certo. Então, o que é que ele fez dessa vez? Executou o main, o a ficou sendo o cinco, o b, 20 e o c 5. Daí, ele chamou a função imprime_raízes passando (5, 20, 5) como parâmetro aqui, executou aqui a função imprime_raízes, com (5, 20, 5) e daí calculou o delta, guardou na variável d, e daí, o delta deu número positivo. Então, não é igual a zero, veio para o else, não é menor que zero, veio para o else, e daí, ele executou esse pedaço aqui, e, portanto, ele imprimiu essas duas raízes. Então, é basicamente isso, nós reorganizamos, refatoramos esse programa Bhaskara, não é, para quebrar o código que estava muito grande, três pedaços menores, três funções menores. Uma coisa que é interessante, que você pode fazer, é pegar o depurador. Lembra que a gente tinha visto que, uma das ferramentas que a gente pode usar aqui é o depurador. Então, experimente rodar passo a passo esse programa no depurador que, você vai vendo que ele vai pulando de uma função para a outra e, você tem os valores das variáveis locais das funções ali, que vão sendo transmitidos, os parâmetros que a gente passa vão sendo passados de uma função para outra. Então, vai executando passo a passo, usando o depurador, que você vai poder ver como as coisas funcionam. [MÚSICA] [MÚSICA] [MÚSICA]