Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Отрицательный факториал


Автор: dimmon123 13.10.2012, 19:31
У меня есть код, препод сказал надо сделать так чтоб считал отрицательный факториал, например -5. Подскажите что надо изменить в коде?вот код:

Код
// Лаба2.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include "stdio.h"
#include "math.h"
#include "conio.h"
#include "windows.h"

long factorial (long x)
{
    if (x==0) return 1;
    if (x==1) return 1;
    else
    return x*factorial(x-1);
}

void fQE()
{
    system("cls");
    float a=0, b=0,c=0;
    printf ("Quadratic equations: \n a*(x^2)+b*x+c = 0\n\n");
    printf ("a,b,c :");
    scanf_s ("%f,%f,%f",&a,&b,&c);

    printf ("a=%f, b=%f, c=%f\n\n",a,b,c);
    if(a==0) {printf("not quadratic equations"); _getch(); return;}
    float d = b*2-4*a*c;
    if (d<0) {printf("no roots"); _getch(); return;}
    printf("x1 = %f\nx2 = %f\n",(-b +sqrt (d)/2*a),(-b -sqrt (d)/2*a));
    
    _getch();

}


void main()
{

    int nfac=0;
    long ifac=1;


    do {
        system ("cls");
        printf ("(1) - Quadratic equations\n (2) - Factorial\n (3) - Factorial (recursively)\n \n Please select: ");
        char iSelect = _getch();
        switch (iSelect)
        {
        case '1': 
            fQE();
        break;

        case '2':
            system("cls");
            printf ("Factorial.\n \n Please enter n: ");
            ifac=1;
            scanf_s("%i",&nfac);
            if (nfac >=0 )
               {
                for (int i=2;i<=nfac;i++)
                   {
                       ifac =ifac*i;
                   }
                  printf ("%i! = %i",nfac,ifac);                
                }
            else printf("n can't be less that 0!\n");
            _getch(); _getch();
        break;
        
        case '3':
            system("cls");
            printf ("Factorial (recursively).\n \n Please enter n: ");
            scanf_s("%i",&nfac);
            
            if (nfac >=0 )
               {
                  printf ("%i! = %i",nfac,factorial(nfac));                
                }
            else printf("n can't be less that 0!\n");
            _getch(); _getch();


        break;

        default: 
            printf ("\n\nBad select, try again"); 
            _getch(); _getch(); 
         break; 
        
        }
     }
     while (true);
          
}


Модератор: не забываем пользоваться кнопочкой "Код"

Автор: volatile 13.10.2012, 20:28
Цитата(dimmon123 @  13.10.2012,  19:31 Найти цитируемый пост)
препод сказал надо сделать так чтоб считал отрицательный факториал, например -5. 


Скажите преподу пусть "убъоцца ап стену".

Отрицательных факториалов не существует.
Есть гамма функция, (родственник факториала), но и она не определена для целых отрицательных чисел.

Автор: dimmon123 13.10.2012, 20:57
Цитата(volatile @  13.10.2012,  20:28 Найти цитируемый пост)
Отрицательных факториалов не существует.

это понятно что не существует, но сказал что можно написать чтоб считал, вот и вопрос как это сделать

Автор: feodorv 13.10.2012, 21:14
Цитата(dimmon123 @  13.10.2012,  21:57 Найти цитируемый пост)
сказал что можно написать чтоб считал, вот и вопрос как это сделать 

Может, он имел в виду (-5)! = (-1) * (-2) * (-3) * (-4) * (-5)?

Автор: dimmon123 13.10.2012, 21:27
скорее всего))но точно сказать не могу.но если так то что тогда в коде надо изменить?

Автор: dimmon123 14.10.2012, 17:16
так как из вышенаписаного кода сделать так чтобы считалось (-5)! = (-1) * (-2) * (-3) * (-4) * (-5)?

Автор: volatile 14.10.2012, 23:34
Цитата(dimmon123 @  14.10.2012,  17:16 Найти цитируемый пост)
сделать так чтобы считалось (-5)! = (-1) * (-2) * (-3) * (-4) * (-5)? 

Вот вам универсальный факторил. Сгодится как для положительных так и отрицательных (хотя это еще тот маразм)
Код

int fUck_torial (int a) {
   int res = 1;
   while (a) {
      res *= a,
      a += 2 * (a < 0) - 1;
   }
   return res;
}


Автор: kilopmer 15.10.2012, 08:51
http://ru.wikipedia.org/wiki/%D0%A4%D0%B0%D0%BA%D1%82%D0%BE%D1%80%D0%B8%D0%B0%D0%BB
Факториал определён только для целых неотрицательных чисел.
Странный препод)

Автор: LeonidPr 15.10.2012, 15:38
возможно имелось в виду -(5!)  smile

Добавлено через 47 секунд
хотя получится то же что и 
Цитата(feodorv @  13.10.2012,  21:14 Найти цитируемый пост)
Может, он имел в виду (-5)! = (-1) * (-2) * (-3) * (-4) * (-5)? 


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)