├── .gitignore ├── README.md └── scripts ├── proportion.functional.js └── proportion.js /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | 6 | # Runtime data 7 | pids 8 | *.pid 9 | *.seed 10 | 11 | # Directory for instrumented libs generated by jscoverage/JSCover 12 | lib-cov 13 | 14 | # Coverage directory used by tools like istanbul 15 | coverage 16 | 17 | # nyc test coverage 18 | .nyc_output 19 | 20 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 21 | .grunt 22 | 23 | # node-waf configuration 24 | .lock-wscript 25 | 26 | # Compiled binary addons (http://nodejs.org/api/addons.html) 27 | build/Release 28 | 29 | # Dependency directories 30 | node_modules 31 | jspm_packages 32 | 33 | # Optional npm cache directory 34 | .npm 35 | 36 | # Optional REPL history 37 | .node_repl_history 38 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Matemática para todos 2 | 3 | Eu, Suissa, sempre falei e acredito que podemos ensinar matemática para qualquer pessoa, utilizando alguns conceitos de programação. 4 | 5 | ![](http://vignette3.wikia.nocookie.net/meme/images/b/b6/Y_wat_2.jpg/revision/latest?cb=20150614223422) 6 | 7 | O primeiro que sempre me vem a cabeça é: a **tipagem forte**. 8 | 9 | > Ué Suissa você não usa JS? 10 | 11 | > - **Uso, mas curto tipos também. Obrigado programação funcional.** 12 | 13 | ![casinha geométrica](http://www.eunascinoviladaserra.com.br/wp-content/uploads/2014/08/brinquedo-5.jpg) 14 | 15 | Essa criança já assimilou, de forma empírica, o conceito de tipos. 16 | 17 | > Quantos tipos você vê abaixo? 18 | 19 | ![](http://gepettobrinquedos.com.br/loja/wp-content/uploads/2013/01/encaixe_form-geo.jpg) 20 | 21 | 22 | Mas se isso não lhe convenceu, analise a sequência abaixo: 23 | 24 | 25 | ``` 26 | 1 27 | +5 28 | __________ 29 | 6 30 | ``` 31 | 32 | ``` 33 | 4 34 | +5 35 | __________ 36 | 9 37 | ``` 38 | 39 | ``` 40 | 3 41 | +4 42 | __________ 43 | 7 44 | ``` 45 | 46 | ``` 47 | 2 48 | +3 49 | __________ 50 | 5 51 | ``` 52 | 53 | > O que você acha que isso significará para uma criança? Que problema está sendo resolvido? Isso muito abstrato,. 54 | 55 | Agora vamos utilizar alguns tipos para dar sentido aos cálculos: 56 | 57 | ``` 58 | 1 bala 59 | +5 balas 60 | __________ 61 | 6 balas 62 | ``` 63 | 64 | ``` 65 | 4 trilhões 66 | +5 trilhões 67 | __________ 68 | 9 trilhões 69 | ``` 70 | 71 | ``` 72 | 3 K 73 | +4 K 74 | __________ 75 | 7 K 76 | ``` 77 | 78 | ``` 79 | 2e7 // 20000000 80 | +3e7 // 30000000 81 | __________ 82 | 5e7 // 50000000 83 | ``` 84 | 85 | > **- O que você achou agora?** 86 | 87 | E hoje estava curtindo umas palestras do TED quando me deparei com essa: [Math isn't hard, it's a language](https://youtu.be/3icoSeGqQtY?t=4m39s) 88 | 89 | 90 | Porém sempre pensei em iniciar o ensino das operações mostrando-as de forma visual e até já demonstrei algumas vezes aqui em casa. Pois para mim é muito mais lógico, para alguém que não possua nenhum pré-conhecimento matemático, que a pessoa visualize o problema a ser solucionado. 91 | 92 | Logo depois veio essa 93 | [How you can be good at math, and other surprising facts about learning | Jo Boaler | TEDxStanford](https://www.youtube.com/watch?v=3icoSeGqQtY) que para meu espanto corroborou o que eu sempre falei. 94 | 95 | Sabendo que, quando calculamos algo, várias áreas do cérebro, o que inclui o córtex visual, os números não são visuais, eles precisam de mais alguma coisa para ter sentido, além disso creio que a Matemática, assim como a Programaçao, só deveriam ser ensinadas após o aluno ter problemas a serem resolvidos. Acredito que quando você conecta algo abstrato com algo que lhe é concreto, você gera uma ligação da teoria com a prática. 96 | 97 | O interessante de utilizar-se a programação é porque ela ao mesmo tempo que é abstrata, tornar-se-á concreta no momento da sua execução (quando mostrará seu resultado) 98 | 99 | Não entrarei nesse assunto aqui, mas levo esse mesmo conceito para explicar programação para qualquer um. 100 | 101 | > **Agora quero SUA atenção!** 102 | > 103 | > Você que desejas contribuir na educação de qualquer pessoa, esta é sua oportunidade de contribuir com a comunidade Open Source e ainda fomentar uma educaçao autodidata a qual é o cerne da Webschool. 104 | 105 | ## Ideia 106 | 107 | Quando você chegar em [4m39s da última palestra](https://www.youtube.com/watch?v=3icoSeGqQtY&feature=youtu.be&t=4m39s) ela irá mostrar diversas formas visuais de demonstrar algumas operações. 108 | 109 | Vale a pena conferir! Minha dica é: Wayne's Wolrd 110 | 111 | ### Desafio 112 | 113 | Desenvolver, **visualmente**, alguma das formas mostradas no vídeo, precisando **obrigatoriamente** implementar a soma e o quadrado. 114 | 115 | **Você poderá fazer com qualquer framework ou biblioteca de JS, ou até sem JS nenhum!** 116 | 117 | As seguintes operações são bônus: 118 | 119 | - subtração 120 | - multiplicação 121 | - divisão 122 | - **raiz quadrada** 123 | 124 | 125 | > E aí? Topa o desafio? 126 | 127 | *ps: um site muito bom para visualizar códigos rodando é [http://www.pythontutor.com/](http://www.pythontutor.com/)*. Além disso você pode conferir alguns tipos do JS [aqui](http://www.pythontutor.com/visualize.html#code=var%20intNum%20%3D%2042%3B%0Avar%20floatNum%20%3D%203.14159%3B%0Avar%20nanNum%20%3D%20NaN%3B%0Avar%20infNum%20%3D%20Infinity%3B%0Avar%20ninfNum%20%3D%20-Infinity%3B%0A%0Avar%20str%20%3D%20%22hello%20world%22%3B%0A%0Avar%20boolTrue%20%3D%20true%3B%0Avar%20boolFalse%20%3D%20false%3B%0A%0Avar%20nullVal%20%3D%20null%3B%0Avar%20undefVal%20%3D%20undefined%3B%0A%0Avar%20lst%20%3D%20%5B'a',%20'b',%203,%204,%205,%20'f'%5D%3B%0A%0Avar%20obj%20%3D%20%7Bname%3A%20'John',%20age%3A%2035,%20hasChildren%3A%20true%7D%3B%0A%0Avar%20i%20%3D%205%3B%0Avar%20obj_lst%20%3D%20%5Bi,%20%7Bfoo%3A%20i%2B1,%20poop%3A%20%5B1,%202,%203%5D%7D,%20%7Bbar%3A%20i%2B2%7D%5D%3B%0A%0Aobj.name%20%3D%20'Jane'%3B&cumulative=false&curInstr=14&heapPrimitives=false&mode=display&origin=opt-frontend.js&py=js&rawInputLstJSON=%5B%5D&textReferences=false). 128 | 129 | ![](http://weknowmemes.com/generator/uploads/generated/g1352217865361546904.jpg) 130 | 131 | ## Regra de 3 132 | 133 | > **Ensinarei-te uma técnica que percebi que calcula automaticamente usando apenas proporções!** 134 | 135 | 136 | Imagine um casal com 4 gatos, os quais comem 25mˆ3 de ração em 30 dias. Porém eles adotaram mais 1 gatinho que come o mesmo tanto que os outros! 137 | 138 | Vamos calcular quanto os 5 gatos irao comer em 5 dias. 139 | 140 | ``` 141 | 4 gatos = 25mˆ3 = 30 dias 142 | 143 | 5 gatos = x = 5 dias 144 | ``` 145 | 146 | Uma dica que sempre dou é: 147 | 148 | > Visulize o que o problema pede como resultado. `5 dias` 149 | 150 | Entao em vez de começar calculando o quanto 5 gatos comem vamos começar pelo final, precisamos calcular qual a proporçao entre: 30 dias e 5 dias. 151 | 152 | No caso é: `6` 153 | 154 | > Por que fizemos isso? 155 | > 156 | > -**Pense comigo!** 157 | 158 | Se a proporcao é 6, vamos calcular a proporçao da comida: 159 | 160 | ``` 161 | 25 / 6 = 4.16 162 | ``` 163 | 164 | Com isso sabemos que 4 gatos comem 4.16m^3 de ração em 5 dias e agora?? Precisamos calcular isso para 5 gatos, eu prefiro fazer assim: 165 | 166 | > -**Calculo quanto 1 gato come e depois somo esse valor ao 4.16, veja comigo:** 167 | 168 | 169 | ``` 170 | 4.16 / 4 = 1.04 171 | 4.16 + 1.04 = 5.20 172 | ``` 173 | 174 | Logo nosso resultado é: 175 | 176 | > Os 5 gatos comem 5.2mˆ3 em 5 dias. 177 | 178 | Eu ainda nao ensinarei como resolver por Regra de 3 Composta pois eu acho essa forma muito mais simples, entao vamos criar uma fórmula para isso. 179 | 180 | ```js 181 | const col1 = [4, 5] 182 | const col2 = [25] 183 | const col3 = [30, 5] 184 | 185 | const colunas = [col1, col2, col3] 186 | 187 | const calculaProporção = (valores) => 188 | valores.sort((a, b) => (a < b)).reduce((a, b) => parseFloat(a / b)) 189 | 190 | const res = colunas.reverse().reduce((a, b, i) => { 191 | switch (i) { 192 | case 0: a.push( calculaProporção(b).toFixed(2) ) 193 | break 194 | case 1: a.push( calculaProporção([colunas[1][0], a[0]]).toFixed(2) ) 195 | break 196 | case 2: a.push( calculaProporção([colunas[2][0], a[1]]).toFixed(2) ) 197 | break 198 | } 199 | if (i === 2) return parseFloat(a[1]) + parseFloat(a[2]) 200 | return a 201 | }, []) 202 | ``` 203 | 204 | 205 | 206 | ### Exercício 207 | 208 | **Utilize o código anterior para agilizar sua vida.** 209 | 210 | Imagine um casal com 4 gatos, os quais comem 25mˆ3 de ração a cada 60 dias. Porém eles adotaram mais 1 gatinho que come o mesmo tanto que os outros! Entretanto o custo de R$30 por pacote de ração de 10Kg. 211 | 212 | Calcular quanto os 5 gatos irao comer em 1 semana e qual o custo anual com rações, se possível em R$ e $ (dólar). 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | -------------------------------------------------------------------------------- /scripts/proportion.functional.js: -------------------------------------------------------------------------------- 1 | /* 2 | 4 gatos = 25mˆ3 = 30 dias 3 | 5 gatos = x = 5 dias 4 | */ 5 | const col1 = [4, 5] 6 | const col2 = [25] 7 | const col3 = [30, 5] 8 | 9 | const colunas = [col1, col2, col3] 10 | 11 | const calculaProporção = (valores) => 12 | valores.sort((a, b) => (a < b)).reduce((a, b) => parseFloat(a / b)) 13 | 14 | const res = colunas.reverse().reduce((a, b, i) => { 15 | switch (i) { 16 | case 0: a.push( calculaProporção(b).toFixed(2) ) 17 | break 18 | case 1: a.push( calculaProporção([colunas[1][0], a[0]]).toFixed(2) ) 19 | break 20 | case 2: a.push( calculaProporção([colunas[2][0], a[1]]).toFixed(2) ) 21 | break 22 | } 23 | if (i === 2) return parseFloat(a[1]) + parseFloat(a[2]) 24 | return a 25 | }, []) 26 | 27 | console.log(` 28 | Imagine um casal com 4 gatos, os quais comem 25mˆ3 de raçao em 30 dias. 29 | Porém eles adotaram mais 1 gatinho que come o mesmo tanto que os outros! 30 | 31 | Vamos calcular quanto os 5 gatos irão comer em 5 dias. 32 | `) 33 | console.log('Resposta: os 5 gatos irão comer em 5 dias: ' + res + 'm^3') 34 | -------------------------------------------------------------------------------- /scripts/proportion.js: -------------------------------------------------------------------------------- 1 | /* 2 | 4 gatos = 25mˆ3 = 30 dias 3 | 4 | 5 gatos = x = 5 dias 5 | */ 6 | 7 | const col1 = [4, 5] 8 | const col2 = [25] 9 | const col3 = [30, 5] 10 | 11 | const colunas = [col1, col2, col3] 12 | 13 | const calculaProporção = (valores) => 14 | valores.sort((a, b) => (a < b)).reduce((acc, cur) => acc / cur) 15 | 16 | const etapa1 = (valores) => calculaProporção(valores).toFixed(2) 17 | const etapa2 = (valores) => calculaProporção(valores).toFixed(2) 18 | const etapa3 = (valores) => calculaProporção(valores).toFixed(2) 19 | 20 | const proporção1 = etapa1(colunas[2]) 21 | const proporção2 = etapa2([colunas[1][0], proporção1]) 22 | const proproção3 = etapa3([colunas[0][0], proporção2]) 23 | const resultado = parseFloat(proporção2) + parseFloat(proproção3) 24 | 25 | // console.log(calculaProporção([5,2])) 26 | console.log('proporção 1: ', proporção1) 27 | console.log('proporção 2: ', proporção2) 28 | console.log('proproção 3: ', proproção3) 29 | console.log('resultado: ', resultado) 30 | --------------------------------------------------------------------------------