Почему я получаю неправильный вывод для этой программы? - PullRequest
0 голосов
/ 29 сентября 2019
int main()
{
    int n = 0;
    int *n_in = &n;
    int r = 0;
    int *r_in = &r;
    unsigned long result1= 0;
    unsigned long result2 = 0;
    unsigned long *result1_out = &result1;
    unsigned long *result2_out = &result2;
    input(&n,&r);
    fact(&n,&r);
    find_nPr(&n,&r,&result1);
    find_nCr(&n,&r,&result2);
    output(&result1,&result2);
}

void input(int *n_in ,int *r_in)
{
    printf("Enter the values of n and r: ");
    scanf("%d %d",n_in,r_in);
}

unsigned long fact_n(int *n_in)
{
    long result_n = 1;
    for(int i = 1;i < *n_in;i++)
    {
        result_n= result_n*i;
    }
    return result_n;
}

unsigned long fact_r(int *r_in)
{
    long result_r = 1;
    for(int i = 1;i < *r_in;i++)
    {
        result_r= result_r*i;
    }
    return result_r;
}
unsigned long fact(int *n_in,int *r_in)
{
    long result = 1;
    for(int i = 1;i < (*n_in - *r_in);i++)
    {
        result= result*i;
    }
    return result;
}


unsigned long find_nPr(int *n_in,int *r_in,unsigned long *result1_out)
{
    *result1_out = fact_n(n_in)/fact(n_in,r_in);
    return *result1_out;
}

unsigned long find_nCr(int *n_in,int *r_in,unsigned long *result2_out)
{
    *result2_out = fact_n(n_in)/(fact_r(r_in)*fact(n_in,r_in));
    return *result2_out;

}

void output(unsigned long *result1_out,unsigned long *result2_out)
{
    printf("nPr : %lu\n",*result1_out);
    printf("nCr : %lu\n",*result2_out);
}

Итак, я использовал несколько функций.Я использовал 3 отдельные факторные функции для n, r и nr.В моем коде нет ошибок ..... Я думаю, что-то не так с моими факториальными функциями.Как я могу реализовать все факториалы в одной функции. Я использовал unsigned long для большинства функций.Условия не должны использовать printf или scanf в основных функциях, и должна быть отдельная функция ввода и вывода.Пожалуйста, помогите

1 Ответ

0 голосов
/ 29 сентября 2019

Для вычисления n! необходимо выполнить цикл от 1 до n.Но ваш предел цикла до n-1.Изменить предел петли.

unsigned long fact_n(int *n_in)
{
    long result_n = 1;
    for(int i = 1;i <= *n_in;i++) // <= added
    {
        result_n= result_n*i;
    }
    return result_n;
}

unsigned long fact_r(int *r_in)
{
    long result_r = 1;
    for(int i = 1;i <= *r_in;i++) // <= added
    {
        result_r= result_r*i;
    }
    return result_r;
}

unsigned long fact(int *n_in,int *r_in)
{
    long result = 1;
    for(int i = 1;i <= (*n_in - *r_in);i++) // <= added
    {
        result= result*i;
    }
    return result;
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...