Вопрос пользователя alex_de_suzo в уроке «Инварианты», курс «JS: Абстракция с помощью данных»

alex_de_suzo

https://ru.hexlet.io/code_reviews/394727 Не понимаю почему должно быть при сложении 3,а не 6 в результате работы функции add? И в целом я правильно двигаюсь?

8 0

Максим Литвинов

Изучите файл с тестами:

  const rat1 = makeRational(3, 9);
  const rat2 = makeRational(10, 3);
  expect(add(rat1, rat2)).toEqual(makeRational(11, 3));

Здесь складываются два рациональных числа: 3/9 + 10/3. После сокращения мы получим 1/3 + 10/3 = 11/3. Поэтому в знаменателе ожидается 3, а не 6.

Сейчас у вас в решении отсутствует функция sub. Доведите свое решение до конца, и попробуйте отладить его при помощи отладочной печати, ориентируясь на вывод тестов. Если возникнут сложности, пишите

0

Максим Литвинов

Добрый день! Удалось ли вам найти решение и справиться с этим упражнением?

0

alex_de_suzo

Максим Литвинов, нет, к сожалению. https://ru.hexlet.io/code_reviews/394727 Вот последняя версия.

0

Максим Литвинов

Без отладки тяжело сказать, где происходит ошибка. Опирайтесь на вывод тестов:

expect(received).toEqual(expected) // deep equality

    Expected: "43/20"
    Received: "11/-1"

      19 |
      20 |   const rat4 = makeRational(12, 5);
    > 21 |   expect(add(rat3, rat4)).toEqual(makeRational(43, 20));
         |                           ^

При сложении чисел -4/16 и 12/5 должно получиться число 43/20, а получается 11/-1. Добавьте в код отладочную печать, это поможет вам определить, в какой момент происходит ошибка.

0

alex_de_suzo

я просто не понимаю как при сложении -4/16 и 12/5 должно получиться число 43/20?

0

Максим Литвинов

При создании дроби должна происходить её нормализация, об этом говорится в задании к упражнению. Дробь -4/16 после нормализации становится дробью -1/4 (числитель и знаменатель делятся на наибольший общий делитель 4). Вторую дробь сократить не получится, НОД для 12 и 5 равен 1.

При сложении дробей сначала они приводятся к общему знаменателю, это 20. Затем числитель первой умножается на знаменатель второй дроби, а числитель второй - на знаменатель первой. Потом числители двух дробей складываются.

-1/4 + 12/5 = -5/20 + 48/20 = (-5 + 48)/20 = 43/20
0

alex_de_suzo

Максим Литвинов вот последняя версия, вывод печати показывает корректный вывод,но тест не проходит и пишет ожидаемое значение другое почему-то https://ru.hexlet.io/code_reviews/394727

0

Максим Литвинов

Обратите внимание, что в [рациональном числе] числитель и знаменатель должны быть целыми числами, число "-1/0.37735849056603776" не является корректным рациональным числом. Без отладки тяжело что-то сказать, добавьте больше отладочной печати и посмотрите, как меняются значения. Вероятно, дело в функции makeRational(), в том, как она выполняет нормализацию дроби. Расскажите своими словами, как вы понимаете, что значит сделать нормализацию рациональной дроби.

0

Есть вопрос или хотите участвовать в обсуждении?

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг».

Похожие вопросы

Анна 08 января 2021 →

https://ru.hexlet.io/code_reviews/360154 Не проходит проверку 4ый тест

Роман Коваленко 25 декабря 2020 →

https://ru.hexlet.io/code_reviews/356013 Подскажите как нужно было правильно все сделать ... Все работает к...

Daria Sidorenko 15 декабря 2020 →

Здравствуйте! Не проходит первый же тест, потому что тест ожидает получить число, а у меня строка. Не могу...

Дмитрий Епихин 07 ноября 2020 →

У меня одного сложилось впечатление, что 2 последних абзаца, как будто, выдернуты из другого курса? :)

Владимир Лоскутов 04 ноября 2020 →

Добрый вечер. Непонятен момент про нормализацию. Сначала говорится: Разберёмся на примере. Когда мы описали...