0 / 0 / 0
Регистрация: 06.06.2012
Сообщений: 19
1

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

06.07.2012, 10:31. Показов 2133. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задача: Описать функцию 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]
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.07.2012, 10:31
Ответы с готовыми решениями:

Функция вычисляющая (x^n)/n
помогите пожалуйста!!! Разработать метод f(n, x), которая для заданного натурального числа n и...

Функция вычисляющая факториал
хочу создать программу с функцией. мне надо посчитать 3 заданных факториала ( я не! ввожу числа они...

Функция, вычисляющая объем цилиндра
Доброй ночи! Помогите, пожалуйста, разобраться с задачей. Нужно найти Объем цилиндра при помощи...

Функция вычисляющая разность дат
Помогите,пожалуйста написать программу на C++. Создать функцию, которая принимает на вход даты...

7
Модератор
Эксперт функциональных языков программированияЭксперт Python
36568 / 20298 / 4218
Регистрация: 12.02.2012
Сообщений: 33,598
Записей в блоге: 13
06.07.2012, 13:41 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;
 
}
1
0 / 0 / 0
Регистрация: 06.06.2012
Сообщений: 19
09.07.2012, 08:48  [ТС] 3
Ошибку выдает
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36568 / 20298 / 4218
Регистрация: 12.02.2012
Сообщений: 33,598
Записей в блоге: 13
09.07.2012, 08:54 4
Лучший ответ Сообщение было отмечено ValeryS как решение

Решение

Вот рабочий код:

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;
 
}
Проверил. Работает.
1
0 / 0 / 0
Регистрация: 06.06.2012
Сообщений: 19
09.07.2012, 16:44  [ТС] 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;
}
А вот так ,я думаю,больше подходит.
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,510
09.07.2012, 17:06 6
Лучший ответ Сообщение было отмечено ValeryS как решение

Решение

Цитата Сообщение от 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;
}
1
1 / 1 / 4
Регистрация: 24.10.2014
Сообщений: 200
05.12.2015, 04:23 7
Catstail, а что описывается в 11 и 12 строчке?
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,510
05.12.2015, 09:13 8
Цитата Сообщение от ITALIANO Посмотреть сообщение
а что описывается в 11 и 12 строчке?
а что непонятно?
Цитата Сообщение от Ivan2012 Посмотреть сообщение
if((n%2==0) && (j%2==0)) p=p*(double)j;
если n четное (n%2),остаток от деления на два равен 0, то перемножаем только четные числа
в следующей строчке соответственно наоборот
0
05.12.2015, 09:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.12.2015, 09:13
Помогаю со студенческими работами здесь

Функция вычисляющая заданное выражение
Использовать функцию пользователя. Константы присутствующие в формуле расчета функции представить в...

Функция вычисляющая сумму ряда
Кто-нибудь знает как это решается?%-) П.5.18.Правил Запрещено размещать задания и решения в...

Функция вычисляющая доход по вкладу
Написать функцию Dohod, которая вычисляет доход по вкладу. Исходными данными для функции являются:...

Функция вычисляющая площадь треугольника
помогите из Паскаля перевести в с++ П.5.18.Правил Запрещено размещать задания и решения в виде...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru