Witam,
mam pewien problem, mianowicie mam napisać program, który ma obliczać wartość symbolu Newtona dla dwóch liczb naturalnych z przedziału (0,100>. Niby wszystko super ale pojawiają się dwa kłopoty:
- wzór działa tylko na małe liczby np. 9 po 4, ale już na takie jak 20 po 10 oblicza źle (wychodzi 11)
- czy moglibyście mi poradzić jakiego typu zmiennych mam użyć w programie bo gdy chce obliczyć np.90 po 76 (wynik to 9038619861406740) to jest to za duża liczba i wyskakuje błąd
Tu jest kod:
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
function silnia(a: Longint): Longint;
begin
if a=0 then
silnia := 1
else
silnia := a*silnia(a-1);
end;
var
k,n,wynik: LongInt;
begin
Writeln('OBLICZANIE SYMBOLU NEWTONA');
Writeln('--------------------------');
Writeln('');
Write('Podaj liczbę naturalną n z przedziału (0,100>:');
Readln(n);
while ((n<=0) or (n>100)) do
begin
Writeln('Liczba nie należy do przedziału');
Write('Podaj liczbę jeszcze raz:');
Read(n);
end;
Writeln('Podaj liczbę naturalną k z przedziału (0,100>');
Write('i spełniającą warunek n>k:');
Readln(k);
while ((k<=0) or (n>100) or(n<k)) do
begin
Writeln('Liczba nie należy do przedziału lub nie spełnia warunku');
Write('Podaj liczbę jeszcze raz:');
Readln(k);
end;
wynik := silnia(n)div ((silnia(k))*(silnia(n-k)));
Writeln('Symbol Newtona (',n,' po ',k,')= ',wynik);
readln;
end.
Z góry dzięki za pomoc.
Pozdrawiam
szamot