DenysPokatilov / MyProjects

myProject
0 stars 0 forks source link

Факториал #1

Open artyom-yakovenko opened 8 years ago

artyom-yakovenko commented 8 years ago

Поищи и найди, что такое факториал числа N и как он вычисляется. Вкратце опиши алгоритм своими словами, а также каковы требования к числу N. То есть для каких чисел факториал может быть вычислен, а для каких нет. Дай мне знать, когда эта часть готова, и после моей проверки реализуй в коде.

При выборе этой задачи программа должна запросить у пользователя число N, посчитать для него факториал и вывести результат на экран. Не забудь адекватно обрабатывать граничные условия - ситуации, когда факториал не может быть вычислен для введенного числа. В таком случае пользователю должно показываться сообщение об ошибке с кратким объяснением, что не так.

artyom-yakovenko commented 8 years ago

Некорректно работает при вводе нуля: вместо результата показывает сообщение, что я не ввёл число.

Также ты не обрабатываешь ситуацию, когда пользователь вводит отрицательное число. Факториал определён только для целых неотрицательных чисел, поэтому при вводе отрицательного числа необходимо сообщать пользователю, что он ввёл неправильное число. У тебя же программа возвращает для всех отрицательных чисел 1.

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

  1. Отрицательное число: ошибка.
  2. Ноль: это особый случай - результат 1.
  3. Положительное число: корректное значение факториала по формуле.

Исправь, пожалуйста ;)

artyom-yakovenko commented 8 years ago

Originally from #15 by Denys:

Исправил как ты просил! сделал исключение для отрицательно числа и для нуля. Правда сделал через if , по другому я не знаю как.

artyom-yakovenko commented 8 years ago

Всё правильно ты через if сделал - по-другому никак.

Единственное замечание - это то, что ты реализовал логику проверку введенного значения через два if'а, тогда как это всё по сути одна мысль:

Если параметр отрицательный:
    факториал для отрицательных чисел не определён - сообщить об ошибке, 
иначе если параметр равен нулю: 
    это особый случай - необходимо вернуть 1, 
иначе: 
    вычислить результат согласно формуле n! = n * (n - 1)!

В синтаксисе C# это выглядело бы так:

if (value < 0) {
    // факториал для отрицательных чисел не определён - сообщить об ошибке
} else if (value == 0) {
    // это особый случай - необходимо вернуть 1
} else {
    // вычислить результат согласно формуле n! = n * (n - 1)!
}

Но в целом принято.