gpt4 book ai didi

c - 二项式定理 - C 中的算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:38:10 24 4
gpt4 key购买 nike

我试图在我的程序中找到一个解决方案(修复错误),该解决方案必须从定义中计算二项式定理。首先,我创建了“factorial”-“silnia”的定义。

1)算法确定SN1(n,k)的定义值。 (牛顿函数)

2) 算法通过公式递归确定SN3(n,k)的值。 (newton_rek 函数)。

输入:文件名:In0101.txt

输出:文件名称:Out0101.txt在这个文件中我想保存从公式计算的值。

示例:In0101.txt

8 2// n k 

Out0101.txt

n=8 k=2
SN1 = 28; count= 14

还有一个我无法修复的错误。有人可以帮我解决这个问题吗?

我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

long silnia(int a)
{
long s;
if (a == 0 || a == 1)
{
return 1;
}
else
{
s = 1;
for (int i = 1; i <= a; i++)
{
s *= i;
}
}
return s;
}

long newton(int n, int k)
{
return silnia(n)/(silnia(k)*silnia(n-k));
}

unsigned long int newton_rek(long int n ,long int k)
{
if ( n == k || k == 0 )
{
return 1;
}

if (k > n)
{
return 0;
}

else return newton_rek(n-1,k-1) + newton_rek(n-1,k);
}

int main()
{
int n = 0;
int k = 0;
long funkcja1 = 0;
long funkcja2 = 0;

FILE *f = fopen("In0101.txt", "r+");
if (f == NULL)
{
printf("Nie udalo sie otworzyc pliku In0101.txt\n");
return 1;
}
fread(n, sizeof(long), 1 , f);
fread(k, sizeof(long), 1 , f);
fclose(f);

FILE *ff = fopen("Out0101.txt", "w+");

if (ff == NULL)
{
printf("Nie udalo sie otworzyc pliku Out0101.txt\n");
return 1;
}

funkcja1 = newton(n,k);
funkcja2 = newton_rek(n,k);
fwrite(funkcja1, sizeof(long), 1 , ff);
fwrite(funkcja2, sizeof(long), 1 , ff);
fclose(f);

return 0;
}

最佳答案

您的计算都生成了帕斯卡三角形。我做了一个简短的测试:http://ideone.com/jHA8EJ

我认为你的问题是你没有正确输出。您没有说明您在问题中遇到的问题,因此由于您缺乏描述,人们怀疑它是算法问题。

我认为问题实际上出在这里:

fwrite(funkcja1, sizeof(long), 1 , ff);
fwrite(funkcja2, sizeof(long), 1 , ff);

有两点不对:

  1. 您没有获取正在写入的变量的地址。这可能会导致崩溃(您可能已经提到过);
  2. 您正试图将它们写成二进制,但您似乎需要文本。

你应该用这样的东西替换那些调用:

fprintf( ff, "%d %d\n", funkcja1, funkcja2 );

正如 Daniel Fischer 指出的那样:

The address thing also applies to reading the input file (and also the byte/text representation thing), furthermore fread gets the wrong size parameter.

即:

fread(n, sizeof(long), 1 , f);
fread(k, sizeof(long), 1 , f);

同样适用两个原则。您正在读取二进制值,但操作不正确。相反,阅读文本:

int nvals = fscanf( f, "%d%d", &n, &k );

你应该测试nvals是2,表示两个值都被成功读取。

关于c - 二项式定理 - C 中的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13130654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com