Форум программистов, компьютерный форум CyberForum.ru

Функция вычисляющая N!! - C++

Восстановить пароль Регистрация
 
Ivan2012
0 / 0 / 0
Регистрация: 06.06.2012
Сообщений: 19
06.07.2012, 10:31     Функция вычисляющая N!! #1
Задача: Описать функцию Fact2(N)вещественного типа, вычисляющую двойной факториал: N!!=135...N, если N - нечетное; N!!=246...N, если N - четное (N>0 - параметр целого типа;вещественное возращаемое значение используется для того, чтобы избежать целлочисленного переполнения при больших значениях N).С помощью этой функции найти двойные факториалы пяти данных целых чисел.
//---------------------------------------------------------------------------
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
#include <vcl.h>
#include <conio.h>
#include <iostream.h>
 
void Fact2();
int i,a,j;
function Fact(int n):real;
cout << " vvedite n "; cin >> n;
cout << " vvedite j "; cin >> j;
{
n=1
for(j=1;j<n;j++)
 {
   if((n%2==0)&(j%2==0)) n=n*j;
   if((n%2!=0)&(j%2!=0)) n=n*j;
 }
fact:=n;
}
{
cout << " vvedite 5 shelux shisel " << " " ;
for(i=1;i<n;i++)
 {
  cout << " 'znashenie factoriala',a,'=',Fact(a)";
  cin >> a;
 }
getch();
}
Программа не правильная,выдает ошибки, помогите,пожалуйста.[/CPP]
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Catstail
Модератор
 Аватар для Catstail
21434 / 10219 / 1666
Регистрация: 12.02.2012
Сообщений: 17,092
06.07.2012, 13:41     Функция вычисляющая N!! #2
Это не С++, а "суржик", какой-то (С+Pascal).

Вот более правильный код:

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
#include <iostream.h>
 
double Fact2(int n);
 
{
   double p=1;
   int j;
 
   for(j=1;j<n;j++)
   {
      if((n%2==0) && (j%2==0)) p=p*(double)j;
      if((n%2!=0)  && (j%2!=0)) p=p*(double)j;
   }
   return p;
}
 
void main ()
 
{
 
    int n;
 
    cout << " Enter number " << " " ;
    cin >> n;
    cout << "Fact2(" << n << ")=" << Fact2(n) << endl;
 
}
Ivan2012
0 / 0 / 0
Регистрация: 06.06.2012
Сообщений: 19
09.07.2012, 08:48  [ТС]     Функция вычисляющая N!! #3
Ошибку выдает
Catstail
Модератор
 Аватар для Catstail
21434 / 10219 / 1666
Регистрация: 12.02.2012
Сообщений: 17,092
09.07.2012, 08:54     Функция вычисляющая N!! #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Вот рабочий код:

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
#include <iostream.h>
 
double Fact2(int n)   // ";" убрал - наследие Паскаля
 
{
   double p=1;
   int j;
 
   for(j=1;j<=n;j++)   // "<" заменил на "<="
   {
      if((n%2==0) && (j%2==0)) p=p*(double)j;
      if((n%2!=0)  && (j%2!=0)) p=p*(double)j;
   }
   return p;
}
 
void main ()
 
{
 
    int n;
 
    cout << " Enter number " << " " ;
    cin >> n;
    cout << "Fact2(" << n << ")=" << Fact2(n) << endl;
 
}
Проверил. Работает.
Ivan2012
0 / 0 / 0
Регистрация: 06.06.2012
Сообщений: 19
09.07.2012, 16:44  [ТС]     Функция вычисляющая N!! #5
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
#include <iostream.h>
 
double Fact2(int n)   
 
{
   double p=1;
   int j;
 
   for(j=1;j<=n;j++)
   {
      if((n%2==0) && (j%2==0)) p=p*(double)j;
      if((n%2!=0)  && (j%2!=0)) p=p*(double)j;
   }
   return p;
}
 
int main()
{
    int n;
 
    while (printf("enter n: ") && scanf("%d", &n)
        && n && printf("%.0f\n", Fact2(n)));
    return 0;
}
А вот так ,я думаю,больше подходит.
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,040
09.07.2012, 17:06     Функция вычисляющая N!! #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Catstail Посмотреть сообщение
if((n%2==0) && (j%2==0)) p=p*(double)j;
if((n%2!=0) && (j%2!=0)) p=p*(double)j;
я дико извиняюсь... А чем разница??
p=p*(double)j;
в обоих строках
нельзя сделать проще
По крайней мере понятней алгоритм( и быстрее ветвлений нет)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
double Fact2(int n);
{
   double p=1.0;
 int j
 if(n%2)
    j=1;
 else 
    j=2;
 
for(;j<=n;j+=2)// отсчет с шагом 2 при нечетном 1 3 5 при четном 2 4 6
   {
     p=p*(double)j;
   }
   return p;
}
можно вообще так
j=2-(n%2)
при нечетном числе (n%2)=1
j=2-1=1
при нечетном числе (n%2)=0
j=2-0=2

соответственно функция выглядит так
C++
1
2
3
4
5
6
7
double Fact2(int n);
 {
   double p=1.0;
 for(int j=2-(n%2);j<=n;j+=2)// отсчет с шагом 2 при нечетном 1 3 5 при четном 2 4 6
        p=p*(double)j;
     return p;
}
ITALIANO
1 / 1 / 1
Регистрация: 24.10.2014
Сообщений: 139
05.12.2015, 04:23     Функция вычисляющая N!! #7
Catstail, а что описывается в 11 и 12 строчке?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2015, 09:13     Функция вычисляющая N!!
Еще ссылки по теме:

C++ Функция вычисляющая значение выражения
Функция вычисляющая значение выражения C++
Рекурсивная функция вычисляющая факториал числа C++

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,040
05.12.2015, 09:13     Функция вычисляющая N!! #8
Цитата Сообщение от ITALIANO Посмотреть сообщение
а что описывается в 11 и 12 строчке?
а что непонятно?
Цитата Сообщение от Ivan2012 Посмотреть сообщение
if((n%2==0) && (j%2==0)) p=p*(double)j;
если n четное (n%2),остаток от деления на два равен 0, то перемножаем только четные числа
в следующей строчке соответственно наоборот
Yandex
Объявления
05.12.2015, 09:13     Функция вычисляющая N!!
Ответ Создать тему
Опции темы

Текущее время: 06:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru