Вопрос №55845 от пользователя Сириус в уроке «Типизация», курс «Введение в программирование»

Сириус

На код вычисления первого числа потратил 15 мин., остальное время, 17.5 часов (с 5:00 по 22:30 воскресенья), потратил на то, что бы понять, как вернуть функцию. Болела голова, глаза пухли, экран плыл, но не хотел сдаваться. У меня просто ничего не выводилось на экран, вообще ничего. Волшебным образом (помог консоль.лог) почти в бреду что-то сделал и заработало!!! Потратил ещё несколько часов, что бы понять свой код, что я сделал. Второй функции не сделал, но мне и этого достаточно, я очень доволен своим кодом. По своему коду есть вопросы к вам, но вы "не обсуждаете рабочие коды", поэтому забуду эту шалость. Увидев решение учителя, я могу точно сказать, что я этого бы не повторил, даже близко (оно мне даже не нравится...) и если кто из студентов решил так, как учитель, значит они пришли сюда уже со знаниями (неплохими) и для них этот курс слаб. Материала вашего курса недостаточно для такого кода (даже для моего кода). Код учителя не сложный, но хитрый и надо знать тонкости. Поэтому по коду учителя у меня к вам вопрос: Если мы задали длинное число и требуется повторить цикл. На первом круге получается, к примеру, трёхзначное число. Как оно попадает "второй" раз в аргумент основной функции, когда аргументом там стоит =(num)=> ...? - Я для себя решил, что когда функция выполняется второй раз, она минует первые две строчки (определение функции и переменной) и сразу переходит к циклу и это есть правило... Дополните меня ***или* исправьте.** Второй вопрос уже общий. Почему результат начинает глючить, показывать неверный ответ при достижении 16-и значного числа и выше, а при достижении 22-х значного и выше выдаёт NaN??? __мой код:__ https://ru.hexlet.io/code_reviews/422299

3 0

Вячеслав Павлов

Сириус, здравствуйте.

  • Если мы задали длинное число и требуется повторить цикл. На первом круге получается, к примеру, трёхзначное число. Как оно попадает "второй" раз в аргумент основной функции, когда аргументом там стоит =(num)=> ...?

В аргумент основной функции число второй раз не попадает. Все вычисления происходят в цикле.

Для примера возьмем число 169. Код из тела цикла while выполняется пока условие 'result >= 10' истинно.

  1. Запускается цикл. (169 >= 10).
  2. Выполняется функция sumDigits(169), возвращается результат 16. (16 >= 10 цикл продолжается).
  3. Выполняется функция sumDigits(16), возвращается результат 7.
  4. Так как результат не удовлетворяет условию цикла, происходит выход из цикла и функция addDigits возвращает результат.
  • Почему результат начинает глючить, показывать неверный ответ при достижении 16-и значного числа и выше, а при достижении 22-х значного и выше выдаёт NaN?

В JavaScript тип «number» не может содержать числа больше, чем 2 в степени 53, состоящее из 16 цифр (или меньше, чем -2 в степени 53 для отрицательных). Это техническое ограничение вызвано их внутренним представлением. Для 'гигантских чисел' используют тип BigInt.

0

Семён

Привет, кажется я пошел твоим путем, вот код, скажи пожалуйста ты разобрался с этим решением? если да, то подскажи, что у меня не так

0

Сириус

Семён, я сейчас немножко отошёл от темы, поэтому с ходу все твои ошибки разобрать не смогу. Парюсь над "Основы командной строки", работаю с терминалом. Но сразу видно, что у тебя весь код не годен. Весь код наполнен странными решениями, не соблюдаешь синтаксис (!!!), а это очень важно. Даже при "правильном" решении, но с ошибками синтаксиса интерпретатор может не принять код, решение не пойдёт. Мне кажется тебе надо начинать всё с начала. Скрупулёзно выполняя все требования до мелочей. Может ты уже прошёл, но всё же ещё раз дам ссылку на полезный ресурс для новичков https://ru.code-basics.com/languages/javascript , он более понятен и даёт основу, его нужно было пройти до этого курса. \ Ещё советую при тупиковых ситуациях 1) применять метод Утёнка; 2) Не бояться ломать и полностью удалять свой код, начиная всё с чистого листа, иногда ошибка кроется в замыливании сознания, ты её автоматом пропускаешь; 3) Везде, всегда суй console.log();, очень помогает понять ход программы. \ Удачи, отпишись, как успехи.

1

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

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

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

Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Фронтенд-разработчик
Профессия
Разработка фронтенд-компонентов веб-приложений
1 июня 10 месяцев
Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
1 июня 10 месяцев
Иконка программы PHP-разработчик
Профессия
Разработка веб-приложений на Laravel
1 июня 10 месяцев
Иконка программы Node.js-разработчик
Профессия
Разработка бэкенд-компонентов веб-приложений
1 июня 10 месяцев
Иконка программы Fullstack-разработчик
Профессия
Новый
Разработка фронтенд и бэкенд компонентов веб-приложений
1 июня 16 месяцев
Иконка программы Верстальщик
Профессия
Вёрстка с использованием последних стандартов CSS
в любое время 5 месяцев
Иконка программы Java-разработчик
Профессия
Разработка приложений на языке Java
1 июня 10 месяцев
Иконка программы Разработчик на Ruby on Rails
Профессия
Создает веб-приложения со скоростью света
1 июня 5 месяцев