Ir para conteúdo
Fórum Script Brasil
  • 0

JS - Não consigo fazer x^y


Search

Pergunta

Olá, sou novo na area de JavaScript, mas estou empenhado a aprender estava tentando criar uma calculador igual a do windows mas na hora de fazer a função x^y me ocorreram diverssos erros.

Este é o codigo que criei para fazer x na potência y:

Essa é a function para escrever o resultado na minha input type text e as variaveis que usei ao longo do trabalho.

<head>
     <script>

        var valor1;
        var valor2;
        var valor3;
        var resultadosoma;

           function resposta(resp){
               respo = resultadosoma;
               resp.value += respo;
           }
     </script>
</head>
Este é o botão que ativa a função x^y:
<input type=button value="x^y" onclick="
        operacao = 4;
        valor1 = parseInt(valores.value);
        valor3 = parseInt(valores.value);
        reset();
">
Este é quando clicar no botão = o if é porque existem varias outras operações alem desta então tive que usalo.
<input type=button value="  =  " onclick="
      valor2 = parseInt(valores.value);
      reset();
            if(operacao == 4){
               for(x=valor2;x<=0;x--){
                  valor1 = valor3*valor1;
               }
            }

A logica que usei neste operação foi a seguinte:

O usuario digita o primeiro número suponhamos q seja 2, então ele clica no botão x^y que vai executar a função que ele está programado para fazer. então usuario digita um novo número suponhamos que seja 4 e clica no botão =.

Até agora temos o seguinte:

A função que o usuario pedio: 2 na quarta potência.

As variaveis: Valor1=2, valor3=2 e valor2=4.

Logo após isso ele vai executar o laço de repetição for que está dentro do if==4.

No laço for temos o seguinte x = valor2 que é 4 agora, ele vai fazer oque está dentro das {} enquanto x<=1; e fara x--.

isso fara com que ele execute 4 vezes o seguinte que é:

primeira vez:

valor1 = valor3*valor1; ou seja valor1 = 2*2

segunda vez:

valor1 agora é 4 então temos valor1=2*4 porque valor3 sempre sera 2.

e assim valor1 passa ser 8.

e ao final de tudo o resultado era para ser 16.

Mas o resultado é sempre o primeiro número que o usuario digitou neste caso 2.

Se alguém achar oque está ocasionando este erro porfavor me informe obrigado.

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Search, seja bem-vindo ao fórum primeiramente.

Olha só seu código:

for(x=valor2;x<=0;x--){
valor1 = valor3*valor1;
}
Para x=4 faça ENQUANTO x seja menor ou igual a 0. x nunca vai ser menor ou igual a zero. Portanto a equação não é realizada como deveria. Um exemplo de exponenciação simples de modo iterativo:
var base=2
var expoente=3
var resultado=1

for(x=expoente; x>0; x--)
resultado*=base

document.write(resultado)

Em Js, como em C, Java, PHP e outras derivadas, o operador *= significa "a variável é igual a ela mesma vezes outro valor"

É a mesma coisa que: resultado = resultado * base

Resultado armazenaria o valor das multiplicações depois das n iterações.

Existem formas mais compactas e mais organizadas de se fazer isso tudo. Se estiver interessado eu te mostro uma das formas, porém é necessário muita abstração e como você está começando, seria apenas a título de curiosidade.

Uma alternativa ao método exponencial iterativo que está fazendo é utilizar uma função nativa do Js, o Math.pow(base, expoente).

Gostaria de dar uns conselhos se me permite.

Use tantas funções quanto precisar para fazer o que deseja. Mesmo que sejam muitas seu código ficará mais organizado. Você irá perceber mais pra frente a importância de se usar funções em javascript, portanto comece desde já a praticar.

EVITE usar códigos dentro das tags. Já que está no começo, faça apenas chamadas de funções nos eventos e crie funções para executar o que deseja.

Não nomeie variáveis dessa forma:

num1, num2, num3 ou

valor1, valor2, valor 3.

Isso faz com que se perca em um código maior. Cada variável tem uma razão de existir, tente usar semântica nelas. Ou seja, uma você poderia chamar de base, outra de expoente e outra de resultado.

Pode parecer besteira, mas não é, mais pra frente você vai entender perfeitamente o que eu estou dizendo.

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Search --

Cometi um erro bem escandaloso não tinha notado, Obrigado pela ajuda e pelas dicas vou reformular minhas linhas de codigos imeatamente. Qualquer dica é bem vinda, tudo que for necessario aprender para melhorar meu desempenho estou disposto a aprender. Novamente Obrigado.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...