Вопрос пользователя alex_de_suzo в уроке «Инварианты», курс «JS: Абстракция с помощью данных»
https://ru.hexlet.io/code_reviews/394727 Не понимаю почему должно быть при сложении 3,а не 6 в результате работы функции add? И в целом я правильно двигаюсь?
Изучите файл с тестами:
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. Доведите свое решение до конца, и попробуйте отладить его при помощи отладочной печати, ориентируясь на вывод тестов. Если возникнут сложности, пишите
Добрый день! Удалось ли вам найти решение и справиться с этим упражнением?
Максим Литвинов, нет, к сожалению. https://ru.hexlet.io/code_reviews/394727 Вот последняя версия.
Без отладки тяжело сказать, где происходит ошибка. Опирайтесь на вывод тестов:
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. Добавьте в код отладочную печать, это поможет вам определить, в какой момент происходит ошибка.
я просто не понимаю как при сложении -4/16 и 12/5 должно получиться число 43/20?
При создании дроби должна происходить её нормализация, об этом говорится в задании к упражнению. Дробь -4/16 после нормализации становится дробью -1/4 (числитель и знаменатель делятся на наибольший общий делитель 4). Вторую дробь сократить не получится, НОД для 12 и 5 равен 1.
При сложении дробей сначала они приводятся к общему знаменателю, это 20. Затем числитель первой умножается на знаменатель второй дроби, а числитель второй - на знаменатель первой. Потом числители двух дробей складываются.
-1/4 + 12/5 = -5/20 + 48/20 = (-5 + 48)/20 = 43/20
Максим Литвинов вот последняя версия, вывод печати показывает корректный вывод,но тест не проходит и пишет ожидаемое значение другое почему-то https://ru.hexlet.io/code_reviews/394727
Обратите внимание, что в [рациональном числе] числитель и знаменатель должны быть целыми числами, число "-1/0.37735849056603776" не является корректным рациональным числом. Без отладки тяжело что-то сказать, добавьте больше отладочной печати и посмотрите, как меняются значения. Вероятно, дело в функции makeRational(), в том, как она выполняет нормализацию дроби. Расскажите своими словами, как вы понимаете, что значит сделать нормализацию рациональной дроби.
Есть вопрос или хотите участвовать в обсуждении?
Зарегистрируйтесь или войдите в свой аккаунт
Похожие вопросы
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 →
Добрый вечер. Непонятен момент про нормализацию. Сначала говорится: Разберёмся на примере. Когда мы описали...