Tin học Viết chương trình Pascal 11

HThieu3177

Học sinh mới
Thành viên
17 Tháng một 2019
6
1
6
21
Hà Nội
THPT Liien ha
PROGRAM to_hop;
USES crt;
VAR n,k:word; C:longint
Functiom gt(a:byte):longint;
var i:byte; kq:longint;
begin
kq:=1;
if a=0 then kq:=1 else for i:=1 to a do kq:=kq*i;
gt:=kq;
end;
BEGIN
clrscr;
repeat
write('Nhap n va k (n > k > 0): '); readln(n,k);
until (n>k) and (k>0);
C:=gt(n)/(gt(k)*gt(n-k));
write('To hop chap k cua n la: ',C);
readln
END.
Bạn cũng có thể viết hàm tính giai thừa và tính tổ hợp chập k của n như sau:
Function gt(a:byte):longint;
begin
if a=1 then gt:=1 else gt:=gt(a-1)*a;
end;
Function C(k,n:byte):longint;
Var
Begin
if (k=0) and (k=n) then C:=1 else
C:=C(k-1,n-1) + C(k,n-1);
End;
Hai hàm trên sử dụng thuật toán đệ quy, tuy thuật toán đơn giản nhưng độ phức tạp tính toán lớn. Bạn cũng có thể tính tổ hợp bằng Quy hoạch động:
Function C(k,n:byte):longint;
Var a:array[0..100,0..100] of longint; i,j:byte;
Begin
for i:=0 to k do
for j:=i to n do
if (i=0) or (i=j) then a[i,j]:=1 else a[i,j] = a[i-1,j-1] + a[i,j-1];
C:=a[n,k];
End;
 
  • Like
Reactions: Nguyễn Thị Cúc

Nguyễn Thị Cúc

Học sinh chăm học
Thành viên
20 Tháng chín 2017
351
430
119
21
Hà Nam
PROGRAM to_hop;
USES crt;
VAR n,k:word; C:longint
Functiom gt(a:byte):longint;
var i:byte; kq:longint;
begin
kq:=1;
if a=0 then kq:=1 else for i:=1 to a do kq:=kq*i;
gt:=kq;
end;
BEGIN
clrscr;
repeat
write('Nhap n va k (n > k > 0): '); readln(n,k);
until (n>k) and (k>0);
C:=gt(n)/(gt(k)*gt(n-k));
write('To hop chap k cua n la: ',C);
readln
END.
Bạn cũng có thể viết hàm tính giai thừa và tính tổ hợp chập k của n như sau:
Function gt(a:byte):longint;
begin
if a=1 then gt:=1 else gt:=gt(a-1)*a;
end;
Function C(k,n:byte):longint;
Var
Begin
if (k=0) and (k=n) then C:=1 else
C:=C(k-1,n-1) + C(k,n-1);
End;
Hai hàm trên sử dụng thuật toán đệ quy, tuy thuật toán đơn giản nhưng độ phức tạp tính toán lớn. Bạn cũng có thể tính tổ hợp bằng Quy hoạch động:
Function C(k,n:byte):longint;
Var a:array[0..100,0..100] of longint; i,j:byte;
Begin
for i:=0 to k do
for j:=i to n do
if (i=0) or (i=j) then a[i,j]:=1 else a[i,j] = a[i-1,j-1] + a[i,j-1];
C:=a[n,k];
End;
bạn ơi cái chỗ until .... ấy là gì thế ạ
 

Baczzkt01

Học sinh mới
Thành viên
3 Tháng năm 2019
1
1
1
21
Thái Bình
THPT Nam Duyên Hà
Mọi nguoi cho em hỏi nếu viết mà sử dụng chương trình con thì viết như thế nào ạ
 
  • Like
Reactions: Deathheart

Deathheart

Cựu TMod Vật Lí
Thành viên
18 Tháng năm 2018
1,535
2,868
411
Quảng Trị
THPT Đông Hà
Top Bottom