Program TinhGiaThua;
uses crt;
{$DEFINE DeQui} {Dan huong bien dich de chuyen huong su dung ham Giaithua}
VAR
k:byte;
{--------------------------}
Procedure Nhapso(Var M:byte);
BEGIN
CLRSCR;
Writeln('Tinh giai thua.');
Write('Cho so N= '); Readln(M);
END;
{-----Khong-de-qui---------}
{$IFDEF KhongDeQui}
FUNCTION Giaithua(k:byte):longint;
var i:byte; P:longint;
BEGIN
P:=1;
For i:=1 to k do
P:=P*i;
Giaithua:=P;
END;
{--------De-qui------------}
{$ELSE}
FUNCTION Giaithua(k:byte):longint;
{Thuc hien de qui duoi}
BEGIN
(*
if k = 0 then {Dieu kien neo - dam bao bai toan la dwng}
giaithua:=1 {Thieu dieu kien nay se gay Error:STACK OVERFLOW}
{Hoac loi: Range ckeck error}
else
*)
giaithua:=giaithua(k-1)*k;
END;
{$ENDIF}
{--------------------------}
Function TiepTuc:Boolean;
Var ch:char;
BEGIN
write('Tiep Tuc (Y/N/C/K:)');
Repeat
ch:=readkey;
Until ch in ['Y','y','N','n','C','c','K','k'];
Writeln(ch);
Case Upcase(ch) of
'Y','C':TiepTuc:=TRUE;
'N','K':TiepTuc:=FALSE;
End;
END;
{------- MAIN --------------}
BEGIN
REPEAT
Nhapso(k);
Writeln('Ket qua: ',K,'!=',Giaithua(K));
UNTIL NOT TiepTuc;
Readln;
END.
===========================================
p/s: chương trình do Su vjk, có saj xjn chỉ giùm nha