JS простая математическая задача (повышение числа до степени) - PullRequest
2 голосов
/ 20 июня 2019

У меня есть задача в JS.Моя программа должна взять число от пользователя и включить его в питание, которое также вставлено.Я справился с положительными степенями, но алгоритм отрицательных всегда дает положительный ответ, и после установки опции нулевой степени каждый вариант как-то возвращает -1;Пожалуйста, помогите мне найти ошибку.

function powX(x, pow) {
  x = +prompt('Insert a number: ');
  pow = +prompt('Insert a power: ');
  var result;
  if (x > 0) {
    var result = x;
    for (i = 1; i < pow; i++) {
      result *= x;
    }
  }
  if (x < 0) {
    var result = x;
    for (i = 1; i < Math.abs(pow); i++) {
      result /= x;
    }
  } else {
    result = 1;
  }

  return result;
}

console.log(powX());

Ответы [ 2 ]

1 голос
/ 20 июня 2019

В коде есть несколько ошибок:

  • Вы должны использовать else-if вместо if во втором блоке.
  • Вы должны проверить pow вместоx
  • Вы не используете var или let с i, поэтому он станет глобальной переменной.Используйте let или var
  • Вы снова используете var внутри своих блоков if, но переменные, объявленные с var, имеют область действия функции, поэтому она не будет выдавать ошибку.Но с let это сломает ваш код.Не пересматривайте result снова и снова.

function powX(x, pow) {
  x = +prompt('Insert a number: ');
  pow = +prompt('Insert a power: ');
  var result;
  if (pow > 0) {
    result = x;
    for (let i = 1; i < pow; i++) {
      result *= x;
    }
  }
  else if (pow < 0) {
    result = x;
    for (let i = 0; i <= Math.abs(pow); i++) {
      result /= x;
    }
  } else {
    result = 1;
  }

  return result;
}

console.log(powX());

Вам не нужны две петли, одна для деления, а другая для умножения.Просто вычислите result просто умножив и в конце умножьте результат на x или разделите его на основе условия.

function powX(x, pow) {
  x = +prompt('Insert a number: ');
  pow = +prompt('Insert a power: ');
  if(pow === 0) return 1;
  var result = x;
  for (let i = 1; i < Math.abs(pow); i++) {
    result *= x;
  }
  return pow < 0 ? (x/result/x) : result; 
}

console.log(powX());
0 голосов
/ 20 июня 2019

Используйте else if для второго условия, в противном случае его блок else всегда будет выполняться при x> 0, устанавливая ваш результат равным 1.

function powX(x, pow) {
  x = +prompt('Insert a number: ');
  pow = +prompt('Insert a power: ');
  var result;
  if (x > 0) {
    result = x;
    for (i = 1; i < pow; i++) {
      result *= x;
    }
  }
  else if (x < 0) {
    result = x;
    for (i = 1; i < Math.abs(pow); i++) {
      result /= x;
    }
  } else {
    result = 1;
  }

  return result;
}

console.log(powX());

Кроме того, будет лучше, если вы уберете повторное объявление result в блоках if и else if. Это не повлияет на ваш вывод, но все же.

Примечание: Как правильно заметил @ASDFGerte в комментариях, у кода OP есть и другие недостатки, но я думаю, что это все же отвечает его главной проблеме и актуальному вопросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...