Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 07.12.2017
Сообщений: 17

Расчёт факториала за формулой

22.09.2018, 22:56. Показов 2310. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Как реализовать данную формулу на C#?

Знаю как найти факториал но как сделать это с математической точки зрения нет
C#
1
2
3
4
5
6
int n = 15; // количество циклов в факториале 
int factorial = 1; // значение факториала 
for (int i = 2; i <= n; i++) 
{ 
factorial = factorial * i; 
}
Изображения
 
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.09.2018, 22:56
Ответы с готовыми решениями:

Расчёт факториала
Здравствуйте! Столкнулся вот с таким заданием, снизу прикрепил. (Задание на C#) Преподаватель сказал нужно сделать всё по простому,...

Расчёт факториала
Здравствуйте. Я написал очень простенькую программку, которая рассчитывает факториал: static void Main(string args) { ...

Расчет факториала натурального числа n
Помогите, пожалуйста.. Составить программу для расчета факториала натурального числа n (факториал числа n равен 1*2*3*..*n).

29
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16137 / 11261 / 2888
Регистрация: 21.04.2018
Сообщений: 33,099
Записей в блоге: 2
22.09.2018, 23:40
Пишите метод который возвращает факториал
C#
1
2
3
4
5
6
7
8
9
10
        public static ulong Factorial(uint n)
        {
                 if ( n < 2) return 1;
                 ulong factorial = 1; // значение факториала 
                 for (int i = 2; i <= n; i++) 
                 { 
                      factorial = factorial * i; 
                 }
                 return factorial;
        }
Добавлено через 3 минуты
Потом используете этот метод в приложении
C#
1
double rezult = ((dounle)(Factorial(15)-Factorial(13)))/(Factorial(13)*209.0);
0
Заблокирован
22.09.2018, 23:59
C#
1
2
3
4
5
6
7
8
9
10
11
12
       private void button2_Click(object sender, EventArgs e)
        {
             MessageBox.Show(
                ((long)(Faktorial(15)-Faktorial(13))/(Faktorial(13)*209) )
                .ToString());
        }
        private int Faktorial(int i)
        {
            if (i == 0 || i == 1)
                return 1;
            return i * Faktorial(i - 1);
        }
Вроде, такой код.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16137 / 11261 / 2888
Регистрация: 21.04.2018
Сообщений: 33,099
Записей в блоге: 2
23.09.2018, 00:00
Моя говорить, у Вас в этой строке
C#
1
(Faktorial(15)-Faktorial(13))/(Faktorial(13)*209))
все типы целые, а значит результатом будет целочисленное деление - это ошибка!
0
Заблокирован
23.09.2018, 00:02
Цитата Сообщение от Элд Хасп Посмотреть сообщение
все типы целые, а значит результатом будет целочисленное деление - это ошибка!
В смысле? Там дробь должна быть?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16137 / 11261 / 2888
Регистрация: 21.04.2018
Сообщений: 33,099
Записей в блоге: 2
23.09.2018, 00:04
Цитата Сообщение от Моя говорить Посмотреть сообщение
В смысле?
3 / 2 = 1
а 3.0 / 2.0 = 1.5
0
Заблокирован
23.09.2018, 00:08
Элд Хасп, согласись, что мой факториал круче?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16137 / 11261 / 2888
Регистрация: 21.04.2018
Сообщений: 33,099
Записей в блоге: 2
23.09.2018, 00:09
Цитата Сообщение от Моя говорить Посмотреть сообщение
согласись, что мой факториал круче?
Чем Чей?
0
Заблокирован
23.09.2018, 00:10
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Чем Чей?
чем

C#
1
2
3
4
5
6
7
8
9
10
public static ulong Factorial(uint n)
 {
 if ( n < 2) return 1;
 ulong factorial = 1; // значение факториала 
 for (int i = 2; i <= n; i++) 
 { 
 factorial = factorial * i; 
 }
 return factorial;
 }
Гораздо изящней:
C#
1
2
3
4
5
6
        private int Faktorial(int i)
        {
            if (i == 0 || i == 1)
                return 1;
            return i * Faktorial(i - 1);
        }
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16137 / 11261 / 2888
Регистрация: 21.04.2018
Сообщений: 33,099
Записей в блоге: 2
23.09.2018, 00:17
Цитата Сообщение от Моя говорить Посмотреть сообщение
чем
Ну это не мой вариант. Это подправленный вариант автора темы Keniro.
Сравните с этим
C#
1
    static long Faktorial(int n) => Enumerable.Range(1, n > 0 ? n : 1).Aggregate((i, j) => i * j);
Добавлено через 2 минуты
Моя говорить, а в Вашем варианте надо поменять
C#
1
if (i == 0 || i == 1)
на это
C#
1
if (i < 2)
0
Заблокирован
23.09.2018, 00:21
Нет, менять не нужно: там целые числа в факториале, и участвуют два конкретные значения - удобочитаемость кода, как бы.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16137 / 11261 / 2888
Регистрация: 21.04.2018
Сообщений: 33,099
Записей в блоге: 2
23.09.2018, 00:30
Цитата Сообщение от Моя говорить Посмотреть сообщение
Нет, менять не нужно...
Защиту "от дурака" надо делать, особенно, если это ни чего не стоит.

Добавлено через 1 минуту
И лучше применять беззнаковые типы
C#
1
2
3
4
5
6
        private ulong Faktorial(uint i)
        {
            if (i < 2)
                return 1;
            return i * Faktorial(i - 1);
        }
0
Заблокирован
23.09.2018, 00:36
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Защиту "от дурака" надо делать, особенно, если это ни чего не стоит.
В смысле? Что при вычислении факториала введут не int а double? - так это на уровне ввода нужно контролировать чтоб ввели int. Факториал на не целых не работает(((.
Вот где в коде:
C#
1
2
3
4
5
6
7
8
9
10
public static ulong Factorial(uint n)
 {
 if ( n < 2) return 1;
 ulong factorial = 1; // значение факториала 
 for (int i = 2; i <= n; i++) 
 { 
 factorial = factorial * i; 
 }
 return factorial;
 }
"Защита от дурака"?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16137 / 11261 / 2888
Регистрация: 21.04.2018
Сообщений: 33,099
Записей в блоге: 2
23.09.2018, 00:50
Цитата Сообщение от Моя говорить Посмотреть сообщение
Что при вычислении факториала введут не int а double?
Нет. У Вас установлен тип int для параметра, поэтому не целое ввести не могут. Но могут ввести отрицательное. Поэтому для параметра лучше тип uint.

Добавлено через 9 минут
Цитата Сообщение от Моя говорить Посмотреть сообщение
так это на уровне ввода нужно контролировать
У меня привычка, и Вам советую, по возможности делайте проверки на ошибки, допуски.
Когда пишите реальные приложения, это порой занимает длительное время или части кода делают другие, и лучше не надеяться, что всё всегда Вашему методу будут передавать как надо.
Это, кстати, официальная рекомендации при создании классов. Методы и свойства должны принимать любые значения и возвращать корректные значения.
0
Заблокирован
23.09.2018, 01:01
Собственно, с добавлением бесзнаковых переменных мы можем выиграть только в том что(грубо говоря, я не помню уже, вычислим не 17!, а 18!, к примеру).
Если мы замыслимся вычислить большой факториал, нам ulong не поможет, по сравнению с uint(разве что будет типа не !X, а !(X+5)).
Все, если задаче не требуется конкретно уложиться в значения заданных типов, то зачем мудорствовать?

Цитата Сообщение от Элд Хасп Посмотреть сообщение
Когда пишите реальные приложения, это порой занимает длительное время или части кода делают другие
В том то и прикол, что я на предприятии все контролю по поводу кода и весь код я пишу .(ну, 1С-ников там расплодилось - я их не считаю за проггеров, вот, как, с Элд Хасп про факториал с ними поспорить - да они не знают что это такое)

Добавлено через 7 минут
ывапвапа
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16137 / 11261 / 2888
Регистрация: 21.04.2018
Сообщений: 33,099
Записей в блоге: 2
23.09.2018, 01:03
Цитата Сообщение от Моя говорить Посмотреть сообщение
Собственно, с добавлением бесзнаковых переменных мы можем выиграть только в том что(грубо говоря, я не помню уже, вычислим не 17!, а 18!, к примеру
Вы имеете ввиду лишний знак? В данном случае один бит - несущественно. Я имел ввиду, что это уменьшает вероятность ошибок и даёт информацию пользователю о допустимых значениях.
Цитата Сообщение от Моя говорить Посмотреть сообщение
Если мы замыслимся вычислить большой факториал, нам ulong не поможет...
Для большого надо использовать BigInteger
Цитата Сообщение от Моя говорить Посмотреть сообщение
В том то и прикол, что я на предприятии все контролю по поводу кода.
... Ну... Тогда я Вас, вооще, не понимаю....

Добавлено через 1 минуту
Цитата Сообщение от Моя говорить Посмотреть сообщение
с Элд Хасп про факториал с ними поспорить
НУ... хоть для этого, на старости лет, гожусь....
0
Заблокирован
23.09.2018, 01:19
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Для большого надо использовать BigInteger
Не, реально, я когда еще учился(когда помнил С++), сделал массив и там контроллил переливы(переполнения) между элементами вроде до 500! вычислял в консольке, не помню, мне тоже это число громадным кажется. Кода уже нет, алгоритмы могу восстановить.
Цитата Сообщение от Элд Хасп Посмотреть сообщение
... Ну... Тогда я Вас, вооще, не понимаю....
В смысле?

Цитата Сообщение от Элд Хасп Посмотреть сообщение
НУ... хоть для этого, на старости лет, гожусь....
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
23.09.2018, 01:47
Цитата Сообщение от Моя говорить Посмотреть сообщение
Собственно, с добавлением бесзнаковых переменных мы можем выиграть только в том что
это вы почему то думаете что дефолтный вариант int, а не uint. С тем же успехом я напишу "с добавлением знаковых переменных мы можем выиграть только в том что" и на этом основании топить за беззнаковый.
А так у беззнакового ровно 1 огромное преимущество и ровно 0 недостатков относительно int.
Хотя может быть у вызывающего рука отсохнет кастовать инты к uint
Цитата Сообщение от Моя говорить Посмотреть сообщение
Гораздо изящней:
и в 5 раз медленнее
если вам так жалко строчки кода то
C#
1
2
3
4
5
6
        public static ulong Factorial2(uint n)
        {
            ulong res = 1;
            for (uint i = 2 ; i <= n; res *= i++) { }
            return res;
        }
вообще спор непонятно о чем вышел
1
Заблокирован
23.09.2018, 02:03
Цитата Сообщение от КОП Посмотреть сообщение
это вы почему то думаете что дефолтный вариант int, а не uint. С тем же успехом я напишу "с добавлением знаковых переменных мы можем выиграть только в том что" и на этом основании топить за беззнаковый.
А так у беззнакового ровно 1 огромное преимущество и ровно 0 недостатков относительно int.
Гм, если у нас будет проблемма что n! переполнит int - то ( (n+2)! ) переполнит uint.
Но! Так как нас не устраивает то что нас тупо и жестоко могут переполнить, нам нужно придумать ЗАРАНЕЕ алгоритм для просчета того, чего вам нужно.

Добавлено через 3 минуты
Я заведомо допустил ошибку - докажите, что она есть.
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
23.09.2018, 02:15
Цитата Сообщение от Моя говорить Посмотреть сообщение
согласись, что мой факториал круче?
Нет, ваш вариант хуже (безотносительно к ошибкам в обоих вариантах кода).
Итерация всегда лучше чем рекурсия.
Рекурсия выполняется дольше из-за постоянных вызовов функции, и занимает больше памяти из-за расходов на стек.
Также рискует выпасть в StackOverflowException.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.09.2018, 02:15
Помогаю со студенческими работами здесь

Расчет факториала
Создайте внешний отчет &quot;Факториал&quot;, который рассчитывает значение факториала для заданного числа (задать его как реквизит диалога формы) и...

Расчет факториала
Помогите найти ошибку! Задание: ((2*5!) + (3+8!)) / (6!+4!) &lt;html&gt; &lt;head&gt; &lt;script type=&quot;text/javascript&quot;&gt; var y=5; ...

расчет функции, заданой формулой
помогите решить эту не большую проблему)))) Большая трудность во второй часть задания (область определения) За ранее спасибо!!!

Расчёт факториала натурального числа
Составить программу для расчёта факториала натурального числа n(факториал числа n равен 1,2...).

Расчет факториала от потенциально бесконечного числа С++
Здравствуйте. Сравнительно недавно встала задача написать программу которая высчитывает факториал не стандартным методом, а конкретно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru