I’m trying to find a solution(fix errors) in my programme which must count the binomial theorem from definition. Firstly I created the definition of “factorial” – “silnia”.
1) The algorithm determines the value of SN1 (n,k) of the definition. (newton function)
2) The algorithm determines the value of SN3 (n,k) recursively by the formula. (newton_rek function).
INPUT:
File name: In0101.txt
OUTPUT:
File name: Out0101.txt
In this file I want to save the values calculated from the formulas.
EXAMPLE:
In0101.txt
8 2// n k
Out0101.txt
n=8 k=2
SN1 = 28; count= 14
And there is an error I can’t fix. Does anybody can help me with this ?
MY CODE:
#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;
}
Your calculations both generate Pascal’s triangle. I have done a short test: http://ideone.com/jHA8EJ
I think your problem is that you are not outputting correctly. You did not state the problem you were having in your question, so people suspected it was algorithmic due to your lack of description.
I believe the problem is actually here:
There’s two things wrong:
You should replace those calls with something like this:
As Daniel Fischer pointed out:
That is:
Same two principles apply. You are reading binary values and you are doing it incorrectly. Instead, read text:
You should test that
nvalsis 2, indicating that both values were read successfully.