caotic 393 Postado Janeiro 7, 2014 Share Postado Janeiro 7, 2014 (editado) Bhaskara e um formula matematica capaz de resolver uma equação de segunda grau(ax^2+bx+c) ela é muito abordada no 6°~9° do ensino fundamental chegando também no ensino medio. Eu fiz uma versão com ultlização simples basta colocar a equação de 2 grau numa string que ele irá resolver a sua equação. function string.explode(e, sep) local result = {} e:gsub("[^".. sep .."]+", function(s) table.insert(result, s:match("^%s*(.-)%s*$")) end) return result[1] and result or 0 end function executeFormBashakara(bash) local function validateZero(x) local x = tostring(x) if string.sub(x, 1, 1) == "-" and string.sub(x, 2, 2) == "0" or not tonumber(x) then return 0 end return x end local function adptBhaskSing(bask) bask = string.gsub(bask, " ", "") bask = string.gsub(bask, "-", "+-") return bask end local function stringToNumber(str) for i =1, #str do local y = string.sub(str, 1, i) if y ~= "-" and y ~= "+" then if not tonumber(y) then return tonumber(x) end end x = y end return y end bash = adptBhaskSing(bash) a = string.explode(bash, "+")[1] b = string.explode(bash, "+")[2] c = string.explode(bash, "+")[3] delta = (stringToNumber(b)^2)+(-4*stringToNumber(a)*stringToNumber(c)) if delta < 0 then return false,delta end bhask1 = validateZero((stringToNumber(b)+math.sqrt(delta))/(2*stringToNumber(a))) bhash2 = validateZero((stringToNumber(b)-math.sqrt(delta))/(2*stringToNumber(a))) return bhask1,bhash2 end x,y = executeFormBashakara("4x2 = 0 ") print(x) print(y) Editado Janeiro 19, 2014 por caotic Link para o comentário Compartilhar em outros sites More sharing options...
Desnecessario 59 Postado Janeiro 7, 2014 Share Postado Janeiro 7, 2014 Xô ve se entendi isso funciona como a formula , só que resolve direto a equação ? Link para o comentário Compartilhar em outros sites More sharing options...
Vinc 101 Postado Janeiro 13, 2014 Share Postado Janeiro 13, 2014 funciona direito n... x,y = executeFormBashakara("4x2 + 1x -5 = 0 ")print(x)print(y) deu: false-16 tentei coloca o expoente 1 do segundo x, mas ainda sim n foi. x,y = executeFormBashakara("4x2 = 4 ")print(x)print(y) deu 00 sem coments x,y = executeFormBashakara("1x2 - 2x - 63 = 0 ")print(x)print(y) deu 1.4142135623731-1.4142135623731what the fuck, da onde saiu esse resultado escroto?? o correto seria -7 e 9... tenta fazer menor e de forma simples, fica mais facil de achar os erros, e geralmente da da mais certo. Link para o comentário Compartilhar em outros sites More sharing options...
caotic 393 Postado Janeiro 13, 2014 Autor Share Postado Janeiro 13, 2014 (editado) funciona direito n... funciona direito n... x,y = executeFormBashakara("4x2 + 1x -5 = 0 ") print(x) print(y) deu: false -16 tentei coloca o expoente 1 do segundo x, mas ainda sim n foi. x,y = executeFormBashakara("4x2 = 4 ") print(x) print(y) deu 0 0 sem coments x,y = executeFormBashakara("1x2 - 2x - 63 = 0 ") print(x) print(y) deu 1.4142135623731 -1.4142135623731 what the fuck, da onde saiu esse resultado escroto?? o correto seria -7 e 9... tenta fazer menor e de forma simples, fica mais facil de achar os erros, e geralmente da da mais certo. x,y = executeFormBashakara("4x2 + 1x -5 = 0 ") print(x) print(y) deu: false -16 tentei coloca o expoente 1 do segundo x, mas ainda sim n foi. x,y = executeFormBashakara("4x2 = 4 ") print(x) print(y) deu 0 0 sem coments x,y = executeFormBashakara("1x2 - 2x - 63 = 0 ") print(x) print(y) deu 1.4142135623731 -1.4142135623731 what the fuck, da onde saiu esse resultado escroto?? o correto seria -7 e 9... tenta fazer menor e de forma simples, fica mais facil de achar os erros, e geralmente da da mais certo. Da erro e por causa da função adptBhaskUnknownsNumbers(bash) Foda que quando fui conferir ela tava colocando zeros em valores de b ou c que ja existiam mais to resolvendo o problema. Vou pensar uma maneira de reduzir memoria. Se você retirar vai estar totalmente normal. Acabei de ver também que tinha colocado um (-) na formula final de bashkara ja concertei. Editado Janeiro 13, 2014 por caotic Link para o comentário Compartilhar em outros sites More sharing options...
Oneshot 732 Postado Janeiro 19, 2014 Share Postado Janeiro 19, 2014 Ah, Thiago, como eu amo seus POGs, mas eu prometi para mim mesmo que não vou refazer funções alheias para alimentar meu ego... Link para o comentário Compartilhar em outros sites More sharing options...
caotic 393 Postado Janeiro 19, 2014 Autor Share Postado Janeiro 19, 2014 (editado) Ah, Thiago, como eu amo seus POGs, mas eu prometi para mim mesmo que não vou refazer funções alheias para alimentar meu ego... Não cara. Adoro as suas versões diretas. Chega a um ponto ser engraçado rs. Editado Janeiro 19, 2014 por caotic Link para o comentário Compartilhar em outros sites More sharing options...
dalvorsn 268 Postado Janeiro 30, 2014 Share Postado Janeiro 30, 2014 Eu faria algo assim: local equation = "1x2+2x+1" pattern = "(%d-)x2[+]?[-]?(%d-)x[+]?[-]?(%d-)$" local a, b, c = string.match(equation, pattern) local delta = b^2 - 4 * a * c if delta >= 0 and a ~= 0 then x1 = (- b + math.sqrt(delta))/ (2 * a) x2 = (- b - math.sqrt(delta))/ (2 * a) print(x1, x2) else print("error") end Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados