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

Вычислить значение выражения

23.01.2015, 13:01. Показов 4765. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Парни, никогда не сталкивался с факториалом, подскажите как реализовать программу которая вычисляет:
с#
S=1!*2!*3!*....N!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.01.2015, 13:01
Ответы с готовыми решениями:

Вычислить значение выражения
Помогите разораться с программой. Вот задание: Вот программа: using System; using System.Collections.Generic; using System.Linq;...

Вычислить значение выражения
Написать программу с циклическим вычислительным процессом, подробное задание в скрине. Заранее спасибо.

Вычислить значение выражения
1) n+++m 2)m- ->n 3)n- -> m

23
23.01.2015, 13:06

Не по теме:

а у вас суперкомпьютер есть в наличии?:D

0
0 / 0 / 1
Регистрация: 26.06.2013
Сообщений: 31
23.01.2015, 13:18  [ТС]
Есть! А как же иначе)
Естественно мы будем вводить N не более 10) просто чтоб работало)
пока сделал так, чет ошибку выдает
Error 1 Since 'ConsoleApplication1.Program.Main(string[])' returns void, a return keyword must not be followed by an object expression C:\Documents and Settings\user\Мои документы\Visual Studio 2005\Projects\ConsoleApplication1\Consol eApplication1\Program.cs 14 31 ConsoleApplication1
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
using System.Collections.Generic;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            double s = 0;
            for (int i = 1; i < 10; i++)
            {
                if (i == 1) { return 1; }
                s = (s + 1);
                s = s * (i - 1);
            }
        }
    }
}
0
 Аватар для aekuznecov
33 / 33 / 17
Регистрация: 25.03.2013
Сообщений: 520
Записей в блоге: 5
23.01.2015, 13:22
Пишите рекурсивную функцию вычисления факториала:
C#
1
2
3
4
static int Fact(int num)
{
  return (num == 0) ? 1 : num * Fact(num - 1);//если равно 0, вернем единицу, иначе - считаем по формуле
}
потом, думаю, надо вам умножать все в цикле while, или for.

Добавлено через 3 минуты
Malay1, ошибка у вас потому, что сам по себе void не может делать return значений, поэтому факториал рассчитывается в функции вне Main()
1
0 / 0 / 1
Регистрация: 26.06.2013
Сообщений: 31
23.01.2015, 13:28  [ТС]
НЕ очень понятно, куда это вписать....
И можно ли мой код как то поправить чтобы работало?
Или обязательно рекурсивную функцию использовать?

Как я понял сначала мы пишем
C#
1
2
3
4
           static int Fact(int num)
{
  return (num == 0) ? 1 : num * Fact(num - 1);
}
далее как и было
C#
1
2
3
double s = 0;
            for (int i = 1; i < 10; i++)
            {
верно?

и дальше пишем перемножение? так?

Добавлено через 1 минуту
Цитата Сообщение от aekuznecov Посмотреть сообщение
Malay1, ошибка у вас потому, что сам по себе void не может делать return значений, поэтому факториал рассчитывается в функции вне Main()
так а в коде
C#
1
2
3
4
 static int Fact(int num)
{
  return (num == 0) ? 1 : num * Fact(num - 1);
}
Тоже есть ретурн
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
23.01.2015, 13:30
Цитата Сообщение от Malay1 Посмотреть сообщение
S=1!*2!*3!*....N!
Цитата Сообщение от Malay1 Посмотреть сообщение
Естественно мы будем вводить N не более 10)
1!*2!*3!*4!*5!*6!*7!*8!*9!*10!=665860658 4104736522240000000
если вспомнить формулу факториала
n!=1*2*3*.......n-1*n;
и подставить в формулу S=1!*2!*3!*....N!
то получим
1N*2N-1*3N-2......N-12*N1
Может так будет проще?
0
 Аватар для aekuznecov
33 / 33 / 17
Регистрация: 25.03.2013
Сообщений: 520
Записей в блоге: 5
23.01.2015, 13:31
Malay1, функция Fact находится вне Main и вызывается в цикле

C#
1
2
3
4
5
6
7
8
9
10
11
12
  static void Main(string[] args)
        {
            for (int i = 0; i < length; i++)
            {
                
            }
        }
 
        static int Fact(int num)
        {
            return (num == 0) ? 1 : num * Fact(num - 1);
        }
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
23.01.2015, 13:32
Цитата Сообщение от Malay1 Посмотреть сообщение
Или обязательно рекурсивную функцию использовать?
не обязательно
факториал можно и циклом подсчитать
C#
1
2
3
int fact=1;
for(int i=1;i<=N;N++)
   fact=fact*i;
0
 Аватар для aekuznecov
33 / 33 / 17
Регистрация: 25.03.2013
Сообщений: 520
Записей в блоге: 5
23.01.2015, 13:37
Цитата Сообщение от Malay1 Посмотреть сообщение
Или обязательно рекурсивную функцию использовать?
Malay1,

Не по теме:

не обязательно, вариантов подсчета факториала разное множество. Я пользуюсь рекурсией, т.к. мне она удобнее кажется, но это на любителя



Добавлено через 35 секунд
но задача интересная, умножение пока что не удалось организовать
0
0 / 0 / 1
Регистрация: 26.06.2013
Сообщений: 31
23.01.2015, 13:38  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using System;
using System.Collections.Generic;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
static void Main(string[] args)
        {
            for (int i = 0; i < length; i++)
            {
                
            }
        }
 
        static int Fact(int num)
        {
            return (num == 0) ? 1 : num * Fact(num - 1);
        }
 
long result = 1;
for(int n = 1; n<=10; n++)
        result = result * Fact(n);
        }
    } 
}
короче и так не работает)
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
23.01.2015, 13:41
а что за пустой цикл в Main?
0
 Аватар для aekuznecov
33 / 33 / 17
Регистрация: 25.03.2013
Сообщений: 520
Записей в блоге: 5
23.01.2015, 13:42
Лучший ответ Сообщение было отмечено Malay1 как решение

Решение

Malay1, вот рабочий вариант из вашего кода

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
 static void Main(string[] args)
        {
            long result = 1;
            for (int i = 1; i <= 10; i++)
                result = result * Fact(i);
            Console.WriteLine(result);
            Console.ReadLine();
        }
 
        static int Fact(int num)
        {
            return (num == 0) ? 1 : num * Fact(num - 1);
        }
1
0 / 0 / 1
Регистрация: 26.06.2013
Сообщений: 31
23.01.2015, 13:44  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
using System.Collections.Generic;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            double s = 0;
            for (int i = 1; i < 10; i++)
            {
                if (i == 1) { return 1; }
                s = (s + 1);
                s = s * (i - 1);
            }
        }
    }
}
Все таки не пойму в чем ошибка и как ее исправить тут, по сути то вроде все логично,
s=0
если i=1 то выводить 1
s=(0+1)
s=1*(1-1) = 0 что с этим делать правильно чтобы было 1

далее повторяется
s=1
s=(1+1)
s=2*(2-1)=2

............ и так далее...
0
 Аватар для aekuznecov
33 / 33 / 17
Регистрация: 25.03.2013
Сообщений: 520
Записей в блоге: 5
23.01.2015, 13:45
также, например, можно расширить до такого состояния:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
static void Main(string[] args)
        {
            Console.Write("Введите N <= 10: ");
            int N = Int32.Parse(Console.ReadLine());
            
            long result = 1;
            for (int i = 1; i <= N; i++)
                result = result * Fact(i);
            Console.WriteLine("\n Произведение факториалов равно: {0}", result);
        }
 
        static int Fact(int num)
        {
            return (num == 0) ? 1 : num * Fact(num - 1);
        }
1
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
23.01.2015, 13:47
Цитата Сообщение от Malay1 Посмотреть сообщение
Все таки не пойму в чем ошибка и как ее исправить тут, по сути то вроде все логично,
ага
при первой же итерации цикла выходим из программы
Цитата Сообщение от Malay1 Посмотреть сообщение
if (i == 1) { return 1; }
здесь нужно два цикла
один для произведения второй для факториала
1
 Аватар для aekuznecov
33 / 33 / 17
Регистрация: 25.03.2013
Сообщений: 520
Записей в блоге: 5
23.01.2015, 13:48
ValeryS,

Не по теме:

на мой взгляд, лучше воспользоваться вспомогательным алгоритмом и вне Main объявить функцию, в которую передавать значения i для подсчета факториала числа. Получается и меньше мороки, и читать код удобнее. Но это ИМХО, не более

1
0 / 0 / 1
Регистрация: 26.06.2013
Сообщений: 31
23.01.2015, 13:50  [ТС]
C#
1
return (num == 0) ? 1 : num * Fact(num - 1);
кто нибудь может расписать?

за 3 года первый раз за c# позабыл всего, синтаксис ни к черту.

я понимаю так:
вернуть( если число соответствует 0) ? -"что там" 1 :-"что то" число*факториал(числа-1);
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
23.01.2015, 13:54
Цитата Сообщение от aekuznecov Посмотреть сообщение
на мой взгляд,
так это на любой взгляд
отдельная сущность в отдельной функции, но при желании можно сделать все в одной( вложенный цикл) чего не сделаешь с рекурсией
есть желание реализовать по другому алгоритму
1N*2N-1*3N-2......N-12*N1
у меня просто ни времени не компилятора нет
1
Life Builder
 Аватар для sk007
531 / 496 / 374
Регистрация: 12.01.2011
Сообщений: 1,755
23.01.2015, 13:55
Цитата Сообщение от Malay1 Посмотреть сообщение
Все таки не пойму в чем ошибка и как ее исправить тут, по сути то вроде все логично,

C#
1
2
3
4
5
6
7
8
9
10
11
12
double chislo = 0;
int N = 5;
 
for(int j=1;j<=N; j++)
{
    int fact=1;
    for(int i=1;i<=j;i++)
       fact=fact*i;
    chislo += fact;
}
 
Console.WriteLine(chislo);

Не по теме:

Прочитайте какую-нибудь книгу. А именно главу, где написана про методов. Тогда сразу все станет ясно.

1
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
23.01.2015, 13:58
Цитата Сообщение от Malay1 Посмотреть сообщение
return (num == 0) ? 1 : num * Fact(num - 1);
кто нибудь может расписать?
если 0 то вернуть 1
0!=1
если нет то num умножить на то что вернет Fact(num - 1)
классическая рекурсия
например 2!
C++
1
2
3
return (2 == 0) ? 1 : 2 * Fact(2 - 1);
                                 return (1 == 0) ? 1 : 1 * Fact(1 - 1);
                                                                  return (0 == 0) ? 1 // сюда не дойдем: 0 * Fact(0 - 1);
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.01.2015, 13:58
Помогаю со студенческими работами здесь

Вычислить значение выражения A=
А=|sin(xy)|sin(x-y)^2cos(x+y)^2

Вычислить значение выражения
Помогите пожалуйста создать консольное приложение C# , обращаюсь потому ,что гугл не помогает. Заранее спасибо!

Вычислить значение выражения
Дано действительное число. вычислить: (х-2)(х-4)(х-8)...(х-64)/(х-1)(х-3)(х-7)...(х-63)

Вычислить значение выражения
Помогите Z=\prod_{j\: 3}^{k}\frac{\left(j+2 \right)j}{j-3}\sum_{i\: j}^{k\: S} \left(\frac{i+5}{i-11}- 3.5i \right)

Вычислить значение выражения
Помогите с заданием Заранее огромное спасибо!


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
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
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru