# Números e Matemática Básica
Se você chegou neste tutorial, é porque ficou sabendo do Python, uma linguagem de programação bem interessante pra quem deseja aprender a programar. Mas que tipo de programas podemos criar com Python? A lista é grande mas vou citar alguns exemplos: gerenciadores de arquivos, editores de texto, jogos, programas para controlar robôs, programas para fazer buscas em bancos de dados, sites de comércio eletrônico e programas que usam aprendizado de máquina e inteligência artificial. E o mais interessante: o Python está disponível em vários sistemas e é de uso livre e gratuito!
## Primeiros passos
Antes de mais nada, você precisa baixa e instalar o Python.
### Instalação do Python
1. Vá no endereço https://www.python.org/downloads/. Logo em cima da página aparece "Download the latest version for Windows" e um botão abaixo. Clique no botão "Download Python" para baixar a última versão estável para o seu sistema operacional (enquanto escrevo este tutorial, é o 3.11).
2. Execute o arquivo de instalação e marque as duas opções "Use admin privileges when installing py.exe" e "Add python.exe to PATH". Clique depois em "Install Now". Aparece uma outra caixa onde é necessário clicar "Sim" para fornecer privilégios de administrador ao instalador.
3. Quando aparecer "Setup was successful", clique em "Close". Já podemos usar o Python. Molezinha né?
### Conhecendo o IDLE
Junto com o Python, foi instalado um ambiente de desenvolvimento integrado chamado IDLE. O que é isso? É um conjunto de ferramentas para desenvolver e testar programas. Agora, abra o IDLE para testar (no Windows, aperte a tecla janela ⊞ e clique em IDLE).
A primeira janela que aparece é a do Shell que oferece uma interface para o Python. Funciona da seguinte forma: você digita os comandos onde aparece a flechinha `>>>`; o Shell envia o comando para o Python; então o Python calcula e devolve o resultado que é mostrado na tela do Shell. Tente digitar alguma coisa e veja os resultados.
Como se pode ver na figura, aparece a versão do Python com qual o Shell está se comunicando (3.11.3). Como em qualquer linguagem, algumas palavras fazem sentido e outras não. Para os comandos que o Python não consegue compreender, ele retorna **SyntaxError** (erro de sintaxe). Você vai aprender toda a sintaxe do Python, começando pelas operações matemáticas.
### Configurando tamanhos e fontes
Antes de prosseguir, vamos alterar as configurações de fonte do IDLE no menu *Options > Configure IDLE*. Aparece a caixa de diálogo *Settings*. Na lista *Font Face*, procure e clique na fonte Consolas, depois altere seu tamanho na caixinha *Size* para 12, e clique em *Ok*. Agora ficou bem melhor para ler e enxergar o código!
## Entendendo as operações básicas
Você pode fazer as contas de matemática mais comuns: soma, subtração, multiplicação e divisão. Digite estes comandos no Shell para testar:
```python
>>> 25+35
60
>>> 25-35
-10
>>> 2*5.5
11.0
>>> 9/2
4.5
```
Note que os símbolos usados (`+`, `-`, `*` e `/`) são chamados de **operadores** e os números são chamados de **operandos**. Juntos, eles compõe uma **operação**.
*Uma dica para copiar os exemplos deste tutorial:* Na janela do Shell, pressione as teclas ⊞ + ˂ (janela mais seta para a esquerda) para colocá-la à esquerda do monitor e, na janela do navegador, pressione ⊞ + ˃ (janela mais seta para a direita) para colocá-la do lado direito.
*Porque `*` e `/` são os operadores de multiplicação e divisão, ao invés de × e ÷?* Você deve saber que dígitos, letras e símbolos são chamados de caracteres. Para mostrar um caractere na tela, o computador precisa ter seu desenho guardado na memória. Só que antigamente as memórias eram limitadas e também o número de caracteres. O principal conjunto de caracteres se chama ASCII, foi criado para os primeiros computadores da IBM e não continha × e ÷. Também não tinha caracteres com acentos ou cedilha para outros idiomas. Eles existem agora em novos conjuntos, como o UTF-8 e o Unicode. Então qual foi a solução encontrada para programar na época? Usar caracteres similares, como o asterisco `*` e a barra invertida `/`.
#### Exemplo 1 - dividindo de laranjas
Veja como é simples usar o Python como uma calculadora. João comprou 3 sacos de 11 laranjas na feira, ganhou mais 6 de brinde, deu 12 pra sua mãe e distribuiu o resto entre ele e suas duas irmãs. Quantas laranjas recebeu cada irmão?
***Resposta:***
```python
>>> 3*11+6-12
27
>>> 27/3
9.0
```
Cada irmão recebeu 9 laranjas.
*Você percebeu?* O python usa a convenção inglesa para separar as casas decimais: ponto no lugar da vírgula. Você deve tomar cuidado ao escrever os números reais, se usar vírgula, o python vai interpretar como algo diferente.
### Precedência de operadores
Olha essa conta: $4+10/2$. Qual é o resultado dela?
Lendo da esquerda para a direita, podemos interpretar de duas formas:
1. Somamos 4 com 10 que dá 14. Agora divide por 2, com resultado igual a 7.
2. A divisão de 10 por 2 é 5. Então, 4 mais 5 gera o resultado igual a 9.
Muita gente se confunde com isso. A segunda é a forma correta de interpretar essa conta, tanto na calculadora como no papel. Também será a resposta do Python. A razão disso é que as operações de multiplicação e divisão precedem as de soma e subtração. Então elas têm **precedência** sobre as demais operações. Significa que serão calculadas antes das outras.
*Existe uma maneira de dar mais importância à soma?* Sim: no papel, escreveríamos
$$
\frac{4+10}{2} \quad\text{ou}\quad (4+10)/2.
$$
Agora não há dúvidas, a resposta é a da alternativa 1. A mudança essencial foi colocar a soma no numerador ou dentro de parênteses. O par de parênteses coloca prioridade no que está dentro dele. Agora você entendeu porque o Exemplo 1 foi calculado com dois comandos separados? Para fazer a conta em apenas uma linha, precisamos colocar prioridade na primeira parte da conta, para que seja efetuada antes. Ficaria `(3*11+6-12)/3`.
Resumindo, as operações são efetuadas nessa ordem:
1. O que está dentro de `( )`
2. Multiplicação `*` e divisão `/`
3. Adição `+` e subtração `-`
#### Exemplo 2 - dinheiro emprestado
Peguei R$ 240,00 emprestado de Mariana. Ela me cobra juros de 2% ao mês. De quanto será minha dívida mês que vem?
***Resposta:***
A dívida no primeiro mês corresponde ao valor inicial mais uma fração de juros:
```python
>>> 240*(1 + 2/100)
244.8
```
Mês que vem, minha dívida será de R$ 244,80.
#### Exemplo 3 - aumentando a horta
Everton tem uma horta de 3,20 m de altura por 5,40 m de comprimento. Depois de aumentar o comprimento em 75 cm, qual será a área total de sua horta?
***Resposta:***
```python
>>> 3.2*(5.4+0.75)
19.680000000000003
```
A área da horta de Everton será 19,68 m².
*Mas porque a resposta do Python tá estranha?* No computador, o Python guarda os números na memória com até 18 dígitos. Note que dificilmente encontraremos em nosso dia-a-dia números que precisem ser escritos com tantos dígitos. Portanto, esses números possuem uma precisão enorme! Mesmo assim é uma precisão limitada. Esse limite pode resultar em operações matemáticas imperfeitas, com pequenos errinhos que costumam aparecer na última casa decimal (o dígito 3 no exemplo). Nesta série de tutoriais, os errinhos podem ser desprezados.
### Potências
A exponenciação é essencial para facilitar as contas matemáticas. No Python, funciona com o operador asterisco-asterisco: `base**potência`. *É importante você lembrar que a exponenciação é calculada antes das outras operações*, exceto pela prioridade do ( ).
#### Exemplo 4 - elevando números
Encontre 2 elevado a 2, 3 e 4.
```python
>>> 2**2
4
>>> 2**3
8
>>> 2**4
16
```
#### Exemplo 5 - volume de um balão
Um balão possui 5 metros de diâmetro. Quantos litros de ar cabem nesse balão?
***Resposta:***
Considerando que um balão é quase uma esfera, podemos aproximar seu volume por $V = 4 \pi R^3 / 3$. Sabendo que o raio é metade do diâmetro e considerando $\pi \simeq 3,14$, podemos escrever:
```python
>>> 4 * 3.14 * (5/2)**2 / 3
65.41666666666667
```
*Repare na ordem das operações (precedência):*
1. 5/2 é calculado primeiro por causa dos parênteses
2. O número é elevado ao quadrado (exponenciação tem precedência)
3. Depois vem as multiplicações e divisões são feitas (da esquerda para a direita)
A resposta é 65,417 m³. Como 1 m³ = 1000 litros, então cabem 65,417×1000 = 65.417 litros, quase 66 mil litros de ar nesse balão!
#### Exemplo 6 - área da pizza
Seus amigos te convidaram pra comer uma "pizza maracanã" de 70 cm (diâmetro)! A pizza veio dividida em 12 partes. Qual é a área de cada pedaço?
**Resposta:**
A área de uma circunferência é $\pi R^2 = \pi (d/2)^2 \simeq 3,14\, (d/2)^2$. ```python >>> 3.14 * (70/2)**2 / 12 320.5416666666667 ``` A área de cada pedaço é 320 cm². ### Raízes Também precisamos da operação inversa da potenciação. A inversa de elevar um número a $n$ é tirar sua $n$-ésima raiz: $$ y = x^n \quad\rightarrow\quad x = \sqrt[n]{y} = y^{1/n} $$ A notação de raiz só é usada de fato com as raízes quadrada $\sqrt{y} = y^{1/2}$ e cúbica $\sqrt[3]{y} = y^{1/3}$. É bom conhecer a outra notação porque podemos usá-la no Python com o operador de potenciação. #### Exemplo 7 - calculando raízes Quais são as raízes quadradas de 25, 36 e 49? E as raízes cúbicas de 512 e 27? ***Resposta:*** ```python >>> 25**0.5 5.0 >>> 36**0.5 6.0 >>> 49**0.5 7.0 >>> 64**(1/3) 3.9999999999999996 >>> 512**(1/3) 7.999999999999999 ``` Novamente, pela questão da precisão, o Python não devolve valores exatos para as raízes cúbicas, mas sim valores muito próximos (de 4 e 8, no caso). *Mas porque foi usado parênteses para 1/3?* Porque a exponenciação tem precedência, então ela será calculada primeiro e com os primeiros operandos que encontrar, no caso `64**1/3` os operandos serão `base=64` e `potência=1`, a próxima / já é outra operação. #### Exemplo 8 - água na caixa Uma caixa em forma de cubo foi preenchida até a borda com 125 litros de água. Em qual altura chegou a água? ***Resposta:***
Precisamos descobrir a medida das arestas da caixa. Para um cubo de aresta $a$, seu volume é $V = a^3$. Então $a = \sqrt[3]{V}$. Lembrando que litro é unidade de volume e que 1000 litros = 1 m³, podemos calcular que 125 litros = 125/1000 m³. Tirando a raiz cúbica do volume, encontramos: ```python >>> 0.125**(1/3) 0.5 ``` Então a reposta é 0,5 m ou 50 cm. #### Exemplo 9 - teorema de Pitágoras Rapunzel quer construir uma rampa pra descer a torre de skate. Do ponto de chegada até a base da torre tem 15 m e a altura até sua janela mais próxima é 8 m. Qual é o comprimento necessário da madeira para construir esta rampa? ***Resposta:***
Esse é um típico problema para usar o Teorema de Pitágoras, que relaciona o comprimento dos catetos com a hipotenusa, de acordo com a fórmula $$ h^2 = a^2 + b^2. $$
A área de uma circunferência é $\pi R^2 = \pi (d/2)^2 \simeq 3,14\, (d/2)^2$. ```python >>> 3.14 * (70/2)**2 / 12 320.5416666666667 ``` A área de cada pedaço é 320 cm². ### Raízes Também precisamos da operação inversa da potenciação. A inversa de elevar um número a $n$ é tirar sua $n$-ésima raiz: $$ y = x^n \quad\rightarrow\quad x = \sqrt[n]{y} = y^{1/n} $$ A notação de raiz só é usada de fato com as raízes quadrada $\sqrt{y} = y^{1/2}$ e cúbica $\sqrt[3]{y} = y^{1/3}$. É bom conhecer a outra notação porque podemos usá-la no Python com o operador de potenciação. #### Exemplo 7 - calculando raízes Quais são as raízes quadradas de 25, 36 e 49? E as raízes cúbicas de 512 e 27? ***Resposta:*** ```python >>> 25**0.5 5.0 >>> 36**0.5 6.0 >>> 49**0.5 7.0 >>> 64**(1/3) 3.9999999999999996 >>> 512**(1/3) 7.999999999999999 ``` Novamente, pela questão da precisão, o Python não devolve valores exatos para as raízes cúbicas, mas sim valores muito próximos (de 4 e 8, no caso). *Mas porque foi usado parênteses para 1/3?* Porque a exponenciação tem precedência, então ela será calculada primeiro e com os primeiros operandos que encontrar, no caso `64**1/3` os operandos serão `base=64` e `potência=1`, a próxima / já é outra operação. #### Exemplo 8 - água na caixa Uma caixa em forma de cubo foi preenchida até a borda com 125 litros de água. Em qual altura chegou a água? ***Resposta:***
Precisamos descobrir a medida das arestas da caixa. Para um cubo de aresta $a$, seu volume é $V = a^3$. Então $a = \sqrt[3]{V}$. Lembrando que litro é unidade de volume e que 1000 litros = 1 m³, podemos calcular que 125 litros = 125/1000 m³. Tirando a raiz cúbica do volume, encontramos: ```python >>> 0.125**(1/3) 0.5 ``` Então a reposta é 0,5 m ou 50 cm. #### Exemplo 9 - teorema de Pitágoras Rapunzel quer construir uma rampa pra descer a torre de skate. Do ponto de chegada até a base da torre tem 15 m e a altura até sua janela mais próxima é 8 m. Qual é o comprimento necessário da madeira para construir esta rampa? ***Resposta:***
Esse é um típico problema para usar o Teorema de Pitágoras, que relaciona o comprimento dos catetos com a hipotenusa, de acordo com a fórmula $$ h^2 = a^2 + b^2. $$
Neste caso, a=15 e b=8.
```python
>>> (15**2 + 8**2)**0.5
17.0
```
O comprimento necessário é 17 m. Claro que isso não inclui a estrutura para suportar a rampa!
### Quociente e resto
Precisamos comentar ainda sobre duas operações que podem ser usadas para resolver vários problemas: o quociente e o resto da divisão. Veja o exemplo de divisão na figura, usando aquele método clássico:
Temos o **dividendo**, o **divisor**, o **quociente** e o **resto**. No ponto onde parou, só podemos continuar dividindo se adicionarmos frações do divisor, já que o resto é menor que o divisor. O resultado seria um número real igual a 6÷3=6,6666... A divisão com uma barra do python (/) funciona exatamente dessa forma.
Mas às vezes ficamos satisfeitos em parar onde parou. No python, podemos obter o quociente e resto usando os operadores:
1. Divisão inteira `//`: `dividendo // divisor = quociente`
2. Resto da divisão `%`: `dividendo % divisor = resto`
Repare uma coisa: o exemplo acima é uma forma de dizer que cabem, no máximo, 6 partes de 3 no número 20. Não cabem 7 pois 7×3 = 21 que é maior que 20. Também podemos dizer o contrário, cabem 3 partes de 6, mas não cabem 4, pois 4×6 = 24 > 20. Então o papel do divisor e quociente podem ser trocados!
Outro detalhe importante: 20÷3 não é uma **divisão exata**, pois sobra 2. *A divisão será exata quando não sobra nada* (resto = 0). Quando a divisão é exata, o dividendo é **múltiplo** do divisor e quociente. Também podemos dizer que divisor e quociente **dividem** o dividendo. Veja por exemplo 20÷5=4.
* 20 é múltiplo de 4 e 5; e podemos escrever 20=4×5
* 4 e 5 dividem 20, pois 20÷4=5 e 20÷5=4
Essa foi uma introdução bem grande, mas espero que os próximos exemplo deixem claro a utilidade destas operações.
#### Exemplo 10 - divisão da barra de chocolate
a) Ana Maria ganhou uma barra de chocolate para dividir entre ela e suas duas irmãs. Ela viu que a barra tem 20 quadradinhos. Quantos quadradinhos cada uma ganha? Quantos sobram?
b) No momento em que ia abrir a barra, apareceram dois primos, e Ana Maria resolve dividir a barra entre todos. Quantos quadradinhos cada um ganha? Quantos sobram?
***Resposta:***
```python
>>> 20//3
6
>>> 20%3
2
>>> 20//5
4
>>> 20%5
0
```
a) Cada uma ganha 8 quadradinhos e ainda sobram 2.
b) Cada um ganha 4 quadradinhos e não sobra nenhum (divisão exata).
#### Exemplo 11 - dinheiro e troco
A mãe de Joãozinho dá 10 reais a ele para comprar bonbons. Mas exige que ele traga o troco certo, caso contrário levará umas boas chineladas! Sabendo que a unidade do bombom custa R$ 1,50, quantos bombons ele consegue comprar e qual será o troco?
***Resposta:***
```python
>>> 10//1.5
6.0
>>> 10%1.5
1.0
```
Joãozinho consegue comprar 6 bombons e recebe R$ 1,00 de troco.
#### Exemplo 12 - conversão de horas, minutos e segundos
(a) Quantos minutos tem em 225 segundos?
(b) Quantas horas tem em 25800 segundos?
***Resposta:***
**(a)** Sabemos que 1 minuto vale 60 segundos.
Podemos reformular a pergunta: quantos minutos (60 seg) cabem em 225 segundos? Podemos descobrir com o operador de divisão inteira:
```python
>>> 225//60
3
>>> 225%60
45
```
Então 225 segundos contém 3 minutos, mas ainda sobram 45 segundos. Podemos dizer que 225 seg = 3 min e 54 seg. Note que a divisão normal resulta em 3,45 min, que é o número inteiro 3 mais uma parte fracionaria.
**(b)** Uma hora tem 60 minutos ou 60×60 = 3600 segundos. Então quantas horas (3600 seg) cabem em 25945 segundos?
```python
>>> 25945//3600
7
>>> 25945%3600
745
```
Dividimos por 3600 e vimos que cabem 7 horas, mas sobraram 745 seg. Podemos repetir os passos do item (a) para obter o equivalente em min + seg:
```python
>>> 745//60
12
>>> 745%60
25
```
Agora o resultado ficará mais bonito se usarmos a notação HH:MM:SS, onde
* HH = horas
* MM = minutos
* SS = segundos
Podemos escrever 25945 seg = 07:12:45.
### Atualizando a precedência
Com estes novos operadores, precisamos de uma nova tabela de precedência:
1. O que está dentro de `( )`
2. Potenciação `**`
3. Multiplicação `*`, divisão real `/`, divisão inteira `//` e resto da divisão `%` (da esquerda para a direita)
4. Adição `+` e subtração `-` (da esquerda para a direita)
## Até a próxima!
Neste tutorial, usamos o Python basicamente como uma calculadora. Mas ele é muito mais do que isso é preciso um pouco de paciência para poder apreciar toda a sua força. Hoje vimos:
* Instalação do Python
* Precedência de operadores
* Precisão limitada dos números
Na próxima aula você aprenderá sobre o uso de variáveis. Deixo aqui alguns exercícios para praticar.
## Exercícios
#### 1.
Obtenha o resultado correto em python para as seguintes contas:
$$\text{a)}\quad (4 - 7)^2 $$
$$\text{b)}\quad 1024^{1/5} \times \frac{3,75}{2,5} $$
$$\text{c)}\quad \frac{3,542 + 4,374/3}{\sqrt{25}} $$
$$\text{d)}\quad \sqrt[3]{\frac{189}{7}} $$
#### 2.
Uma pizzaria está fazendo duas promoções:
1. Uma pizza maracanã (70 cm) por R$ 120
2. Duas pizzas família (35 cm) por R$ 80
e afirma no panfleto da promoção que duas de 35 cm = uma 70 cm. Qual promoção é mais vantajosa?
#### 3.
Peguei R$ 240,00 emprestado de Mariana e não consegui pagá-la no primeiro mês! Ela disse que não tinha problema mas os juros são compostos, de modo que o valor do segundo mês é calculado sobre o primeiro. Se a taxa de juros continua 2% e eu conseguir pagar no segundo mês, quais serão o valor total e o juros?
#### 4.
Laranjinha, Acerola e Limonada (é o apelido dos garotos) querem fazer carrinhos de rolimã. Eles ficaram animados e querem construir um pra cada. Cada carrinho precisa 5 tábuas, 20 pregos e 4 rodas. Foram procurar material, e Laranjinha encontrou 17 tábuas, Acerola encontrou 100 pregos, e Limonada encontrou 9 rodas. Eles possuem material para quantos carrinhos? Quanto material sobra?
### Respostas
#### 1.
a) `(4-7)**2`
b) `1024**(1/5) * 3.75/2.5`
c) `(3.542+4.374/3) / 25**0.5`
d) `(189/7)**(1/3)`
#### 2.
Apesar de ser verdade o que a pizzaria afirma sobre o diâmetro das pizzas (2 × 35 cm = 70 cm), o que se come são pedaços. Ou seja, o que conta é a área. Portanto, para saber qual promoção é mais vantajosa, precisamos calcular a área de pizza por real pago em cada promoção. Lembrando que área de uma circunferência é aproximadamente $3,14\, (d/2)^2$:
```python
>>> 3.14*(70/2)**2 / 120
32.05416666666667
>>> 2 * 3.14*(35/2)**2 / 80
24.040625
```
Veja que a promoção N°1 é melhor! Apesar de ser 50% mais cara, você paga 1 real para comer 32 cm² da pizza maracanã enquanto paga 1 para comer 24 cm² das duas pizzas família.
#### 3.
A dívida no segundo mês será calculada sobre o valor do primeiro mês, que é `240*(1+2/100)`. Portanto:
``` python
>>> 240*(1+2/100)*(1+2/100)
249.69600000000003
>>> 249.696-240
9.695999999999998
```
No segundo mês, devo R$ 249,70 a Mariana e estarei pagando RS 9,70 de juros.
*Observe que os fatores se repetem*, então podemos calcular com potências:
``` python
>>> 240*(1+2/100)**2
249.696
```
De fato, a fórmula geral para juros compostos é
$$
M = C (1+j)^n
$$
onde
* *M* é o valor final (montante)
* *C* é o valor inicial (capital)
* *j* é a taxa de juros
* *n* é o número de meses
#### 4.
Esse é um dos problemas de *quantos cabem?* Mas no caso, são 3 categorias distintas: tábuas, pregos e rodas. Uma unidade de carrinho leva 5 tábuas, 20 pregos e 4 rodas. Então, a conta a ser feita é de quantas unidades de carrinho por tipo de material.
``` python
>>> 17//5
3
>>> 100//20
5
>>> 9//4
2
```
Tem tábuas para 3 carrinhos, tem pregos para 5 e rodas para 2. Portanto, os meninos só têm material para construir 2 carrinhos! Agora vamos descontar o material usado em 2 carrinhos, para ver quanto sobrou:
```python
>>> 17-2*5
7
>>> 100-2*20
60
>>> 9-2*4
1
```
A resposta é 7 tábuas, 60 pregos e uma roda.
Comentários
Postar um comentário