プログラムで、定義から二項定理を数えなければならない解決策(エラーの修正)を見つけようとしています。まず、" factorial " - "silnia" の定義を作成しました。
1) アルゴリズムは、定義の SN1 (n,k) の値を決定します。(ニュートン関数)
2) アルゴリズムは、式によって再帰的に SN3 (n,k) の値を決定します。( newton_rek関数)。
入力: ファイル名: In0101.txt
OUTPUT: ファイル名: 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;
}