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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Ivan2012
0 / 0 / 0
Регистрация: 06.06.2012
Сообщений: 19
#1

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

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

Задача: Описать функцию 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.07.2012, 10:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция вычисляющая N!! (C++):

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

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

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

Функция вычисляющая значение выражения - C++
Здравствуйте, дорогие форумчане! Мне очень неудобно просить у Вас помощи, но у меня нет другого выхода, программу задали, а объяснения...

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

Функция вычисляющая n-е число Фибоначчи - C++
Последовательность чисел Фибоначчи 0, 1, 1, 2, 3, 5, 8, 13, 21, ... начинается с 0 и 1 и имеет то свойство, что каждый следующий...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Catstail
Модератор
22615 / 10976 / 1779
Регистрация: 12.02.2012
Сообщений: 18,114
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
Ivan2012
0 / 0 / 0
Регистрация: 06.06.2012
Сообщений: 19
09.07.2012, 08:48  [ТС] #3
Ошибку выдает
0
Catstail
Модератор
22615 / 10976 / 1779
Регистрация: 12.02.2012
Сообщений: 18,114
09.07.2012, 08:54 #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;
 
}
Проверил. Работает.
1
Ivan2012
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
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,847
09.07.2012, 17:06 #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;
}
1
ITALIANO
1 / 1 / 1
Регистрация: 24.10.2014
Сообщений: 176
05.12.2015, 04:23 #7
Catstail, а что описывается в 11 и 12 строчке?
0
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,847
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2015, 09:13
Привет! Вот еще темы с ответами:

Функция вычисляющая значение выражения - C++
помогите пожалуйста написать данное задание Заданные действительные числа s , t , a . Получить p(1)-p ( t )+p2(st)+p3(1), где p ( x ) =...

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

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

Функция вычисляющая значение выражения - C++
Помогите пожалуйста Заданные действительные числа s , t , a . Получить p (1) -p ( t ) + p2 ( st ) + p3 (1), где p ( x ) = ( a -12)...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.12.2015, 09:13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru