Xô ve se entendi isso funciona como a formula , só que resolve direto a equação ?
- Fórum
- OTServ
- Recursos
- Scripting
- Mods, funções e outros
- Formula de Bhaskara
Formula de Bhaskara
Por caotic, 07 de jan. de 2014 em Mods, funções e outros
info
Grupo: Visconde
Registrado: 04/01/13
Posts: 479
Reputação: +59
Char no Tibia: Lord Pau Listinha

info
Grupo: Conde
Registrado: 30/10/11
Posts: 625
Reputação: +101
Gênero: Masculino

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.
info
Grupo: Infante
Registrado: 04/03/11
Posts: 1.6k
Reputação: +393
Char no Tibia: No Have

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 por caotic
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...
info
Grupo: Infante
Registrado: 04/03/11
Posts: 1.6k
Reputação: +393
Char no Tibia: No Have

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 por caotic
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





info
Grupo: Infante
Registrado: 04/03/11
Posts: 1.6k
Reputação: +393
Char no Tibia: No Have
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 por caotic