Solucionado (ver solução)
Solucionado
(ver solução)
9
respostas

Desafio Javacript Matemática #6 Equações de 1º Grau

Faça um programa que resolva qualquer equação de primeiro grau no estilo x+5=10

Resolva o problema, coloque o código no post e coloque o código em algum site de compilação online tipo o https://codepen.io/ ou https://jsfiddle.net/ ou https://codesandbox.io ou https://stackblitz.com/ ou qualquer outro que dê para compartilhar a página.

O primeiro que responder corretamente ganha 1000 xp (pois vai ter a resposta marcada como solucionada).

E depois de 24 horas se ninguém postar a resposta eu mesmo posto.

9 respostas

Não há muito código pronto na internet. Mas cheguei num site onde o cara tinha um resolvedor de expressões e também fez um gráfico.

Eu arrumei dei uma melhorada e coloquei aqui https://codepen.io/neoandrevictor/pen/gQxrZv no estilo steampunk é claro.

Agora eu preciso mecher no código do gráfico pra ele me retornar a raiz do gráfico. E depois disso fazer ele isolar a equação. Porque ele não aceita x+5=10 mas sim x+5-(10) . Mas isso é moleza é só o programa jogar o lado direito da equação em parênteses subtraindo. Ai eu escondo o gráfico como quem não quer nada e se mostro a raiz rsrsrs e problema resolvido.

Mas to cansado de programar por hora. Vou jogar um pouco e depois volto pra cá.

Nesse pedacinho de código ele começa a substituir x por alguns valores para plotar o gráfico

 for (var i = -10 / STEP; i < 10 / STEP; i += 1) {
        var x = i * STEP;
        var y = solveStr(reformat(replaceAll(fxString.toLowerCase(), "x", "(" + x + ")")));

Lembrei de um programa de redes neurais que tinha feito no passado. Era em Excel VBA. Neste programa eu tinha uma fórmula em uma célula. E meu programa em VBA tinha que descobrir a raiz dessa célula. Então ele ia testando mas quando testava ele mudava o único neuronio dele para ficar mais parecido cada vez mais com a resposta. Vou postar ele aqui e vou passar ele pra Javascript e embutir no GRAFICO.EXE (nome que dei pra minha página).

Sub RedeNeural()

Range("F2:H2").ClearContents

m = 8
tamanhodoj = 1000



    a = 1
    j = 1
    While 2 < 3

        tamanhodageracao = 10

        For k = 3 To tamanhodageracao


    '        VarA = Trunc(Rnd(1) * 10 + 1, 0)
    '        VarB = Trunc(Rnd(1) * 10 + 1, 0)

            VarA = Rnd * 2 ^ m
            VarB = Rnd * 2 ^ m

            VarC = Range("F2")
            VarD = Range("G2")

            If Range("H2") = "" Then

                Range("A2") = VarA
                Range("B2") = VarB

            Else

                nivel = (1 / Range("d2") * 10 ^ m) - 1 / (nivel + 0.000001)


                If Round(k / 2) = k / 2 Then

                    Range("A2") = (VarA * nivel + VarC) / (nivel + 1)
                    Range("B2") = (VarB * nivel + VarD) / (nivel + 1)

                Else

                    Range("A2") = (-VarA * nivel + VarC) / (nivel + 1)
                    Range("B2") = (-VarB * nivel + VarD) / (nivel + 1)



                End If

            End If


            Cells(k, 1) = Range("A2")
            Cells(k, 2) = Range("B2")
            If Range("C2") <> 0 Then
                Cells(k, 4) = 1 / Sqr(Range("C2") ^ 2)
            Else
                MsgBox ("Resultado:" & Range("A2") & " e " & Range("B2"))
                Exit Sub
            End If

            precisaodoresultado = 10

            Range("A2") = Round(Range("F2"), precisaodoresultado)
            Range("B2") = Round(Range("G2"), precisaodoresultado)
            If Round(Range("C2"), precisaodoresultado) <> 0 Then

            Else
                MsgBox ("Resultado:" & Range("A2") & " e " & Range("B2"))
                Exit Sub
            End If

            Cells(k, 3) = Range("C2")
            Cells(k, 5) = k
            Cells(k, 6) = VarA
            Cells(k, 7) = VarB

        Next


        For k = 3 To tamanhodageracao


            scoreAtual = Range("D2")

            If maiorScore < Cells(k, 4) Then

                maiorScore = Cells(k, 4)
                maiorC = Cells(k, 1)
                maiorD = Cells(k, 2)


            End If




        Next

         If maiorScore <= scoreAtual Then

                maiorC = Range("F2")
                maiorD = Range("G2")
                contadordederrota = contadordederrota + 1

                If nivel <> 0 Then
                    Range("H3") = contadordederrota / (nivel / 1000)
                End If


                If contadordederrota > nivel / 10000 And contadordederrota > 1 Then

                  m = m + 1
                  contadordederrota = 0


                End If

            End If

        Range("F2") = maiorC
        Range("G2") = maiorD
        Range("D2") = maiorScore

    Range("H2") = Range("H2") + 1
    j = j + 1
    Wend





End Sub
Public Function Trunc(ByVal value As Double, ByVal num As Integer) As Double
  Trunc = Int(value * (10 ^ num)) / (10 ^ num)
End Function

Pensando bem não era esse código que tava procurando. Esse faz parecido mas usa 8 gerações de algoritimo genético...

Oi André, estava aqui esperando qual seria a solução que você ia publicar. Fiquei na dúvida quanto as suas questões, você pede um programa que resolva o cálculo mas não informa como vai ser o input e como deve ser o output do programa.

Analisando de longe, não é algo nada simples de fazer. Exige um pensamento lógico bem avançado. Isso justamente por que você não definiu muito bem o que espera.

O input e output não é o foco mas sim o algoritmo.

Eu deixei um pouco de lado os desafios porque tem outras dúvidas do fórum que me envolvi e acho mais importante ressolver ela do que resolver esses.

Eu cheguei na solução para resolver equações de primeiro grau. Mas não me lembro como fiz para resolver todas as equações através de rede neural. Eu acho que perdi o arquivo.

Mas basicamente o que eu fazia era resolver um ponto de função e verificar o quanto ele estava proximo do resultado esperado e assim ir ajustando numa função que servia de parametro que usava para multiplicar a entrada que seria a nova tentativa.

Enfim, meio que abandonei esses tópicos porque acho mais importante resolver a dúvida de outros alunos e isso nem era mais uma dúvida, mas sim um treino conjunto de javascript.

A solução desse logo posto. Ia postar agora mas o facebook tá fora do ar pra manutençao... E meu login do codepen é por meio do facebook. (Já imaginou o caos que será seo o facebook acabar e ninguém conseguir se autenticar em um monte de coisa). Mas só funciona pra equação de primeiro grau, pras outras equações ele dá um número nada a ver , pq programei pra resolver a equação ax+b=0

Poderia deletar os topicos destes desafios do número 7 em adiante por gentileza. Temo não conseguir voltar a resolver eles estou tentando resolver 15 tópicos de outros alunos e pra poder resolver eles tenho que estudar a matéria do curso. E parece que as pessoas não compraram a ideia de ser um desafio e quererem resolver.

Hm, não temos essa opção de deleção de tópico André, mas você pode ir até eles e responder que desistiu dos desafios e marcar seu post como solução. Assim eles saem da lista de não resolvidos e fica claro que você desistiu deles.

Pode fazer isso pra gente?

Claro, sorry for the trouble.

Sim, entendo que o foco é o algoritmo, mas mesmo pra que o algoritmo seja construído, você precisa especificar a entra e a saída ou o algoritmo não poderá ser construído com uma base lógica que faça sentido.

O algoritmo é apenas um processo e como todo processo, é preciso conhecer as entradas e saídas, assim você possibilita e consegue validar se o algoritmo faz sentido ou não, sem isso, você perde validações.

solução!

https://codepen.io/neoandrevictor/pen/PxKbwp