#1
Đã gửi 21-12-2011 - 03:37
PASCAL là một ngôn ngữ lập trình cơ bản, hầu hết mọi người trong chúng ta đều đã từng học qua. Nó là một ngôn ngữ lập trình đơn giản rất dễ học, tuy ứng dụng không được phong phú, vì Pascal và sản phẩm của nó chạy trên nền DOS, nhưng ngôn ngữ này rất mạnh về cấu trúc logic của nó!
Trong bài viết này, tôi sẽ giới thiệu với các bạn cách sử dụng PASCAL để giải quyết các bài toán tổ hợp chọn số. Một mặt các bạn sẽ giải bằng kiến thức tổ hợp thông thường, mặt khác các bạn sẽ có được một công cụ để kiểm tra kết quả của mình.
Các bạn có thể Download chương trình PASCAL tại http://www.mediafire.com/?dzazztnza1w
Trước tiên, tôi xin nêu ra một số đề bài:
Bài toán 1: Có bao nhiêu số tự nhiên lẻ có $5$ chữ số, trong số đó phải có mặt chữ số $3$?
Bài toán 2: Cho các chữ số $\{0,1,2,3,4,5,6\}$ Tính tổng của các số tự nhiên chẵn, có $4$ chữ số đôi một khác nhau, được lập từ $7$ chữ số trên.
Bài toán 3: Cho $A=\{0,1,2,3,5,7,8,9\}$. Có bao nhiêu số tự nhiên chẵn có $5$ chữ số, trong số đó phải có mặt số $1$ và số $3$, được tạo thành từ $A$
____________________________________
$\boxed{1}$ Bây giờ ta bắt tay vào giải quyết Bài toán 1 (bằng PASCAL)
Bước1:Xây dựng thuật toán:
- Ta cần xây dựng số $\overline{abcde}$, vậy cần có $5$ biến $a,b,c,d,e$ kiểu shortint
- Thêm một biến $S$ kiểu longint để nhận kết quả.
- Đầu tiên gán kết quả $S:=0$
- Vì $a \ne 0$ nên ta sẽ cho $a$ chạy từ $1$ đến $9$
- $b,c,d$ ta cho chạy từ $0$ đến $9$
- Vì $\overline{abcde}$ là số lẻ nên ta cho $e$ chạy từ $1$ đến $9$ và chỉ thực hiện công việc tiếp nếu $e \in \{1,3,5,7,9\}$
- Cuối cùng nếu số tạo thành thoả mãn điều kiện "có mặt chữ số 3"
thì ta cho kết quả $S$ tăng thêm 1 đơn vị.
Thuật toán thật đơn giản phải không nào!
Bước 2: Viết code và trình bày kết quả:
[quotename='PASCAL CODE 01']
Var a,b,c,d,e: shortint;
S: longint;
Begin
S:=0;
for a:=1 to 9 do
for b:=0 to 9 do
for c:=0 to 9 do
for d:=0 to 9 do
for e:=1 to 9 do
if ((e=1)or(e=3)or(e=5)or(e=7)or(e=9))and((a=3)or(b=3)or(c=3)or(d=3)or(e=3)) then
S:=S+1;
Write('So cac so thoa man la S= ',S);
Readln;
End.
[/quote]
Chạy chương trình trên ta được kết quả là $\text{So cac so thoa man la S= }21672$
$\boxed{2}$ Giải bài toán 2:
Bài toán 2: Cho các chữ số $\{0,1,2,3,4,5,6\}$ Tính tổng của các số tự nhiên chẵn, có $4$ chữ số đôi một khác nhau, được lập từ $7$ chữ số trên.
Bước1:Xây dựng thuật toán:
- Ta cần xây dựng số $\overline{abcd}$, vậy cần có $4$ biến $a,b,c,d$ kiểu shortint
- Thêm một biến $S$ kiểu longint để nhận kết quả.
- Đầu tiên gán kết quả $S:=0$
- Vì $a \ne 0$ nên ta sẽ cho $a$ chạy từ $1$ đến $6$
- $b,c$ ta cho chạy từ $0$ đến $6$
- Vì $\overline{abcd}$ là số chẵn nên ta cho $d$ chạy từ $0$ đến $6$ và chỉ thực hiện công việc tiếp nếu $d \in \{0,2,4,6\}$
- Cuối cùng nếu số tạo thành thoả mãn điều kiện "các chữ số đôi một khác nhau"
thì ta cho kết quả $S$ cộng thêm giá trị của $\overline{abcd}=1000*a+100*b+10*c+d$
Thuật toán thật đơn giản phải không nào!
Bước 2: Viết code và trình bày kết quả:
[quotename='PASCAL CODE 02']
Var a,b,c,d: shortint;
S: longint;
Begin
S:=0;
for a:=1 to 6 do
for b:=0 to 6 do
for c:=0 to 6 do
for d:=0 to 6 do
if ((d=0)or(d=2)or(d=4)or(d=6))and((a<>b)and(a<>c)and(a<>d)and(b<>c)and(b<>d)and(c<>d)) then
S:=S+1000*a+100*b+10*c+d;
Write('So cac so thoa man la S= ',S);
Readln;
End.
[/quote]
Chạy chương trình trên ta được kết quả là $\text{So cac so thoa man la S= }1577160$
$\boxed{3}$ Giải bài toán 3
Bài toán 3: Cho $A=\{0,1,2,3,5,7,8,9\}$. Có bao nhiêu số tự nhiên chẵn có $5$ chữ số, trong số đó phải có mặt số $1$ và số $3$, được tạo thành từ $A$
Bước1:Xây dựng thuật toán:
- Ta cần xây dựng số $\overline{abcde}$, vậy cần có $5$ biến $a,b,c,d$ kiểu shortint
- Thêm một biến $S$ kiểu longint để nhận kết quả.
- Đầu tiên gán kết quả $S:=0$
- Vì $a \ne 0$ nên ta sẽ cho $a$ chạy từ $1$ đến $9$ và chỉ lấy các giá trị thuộc A
- $b,c,d$ ta cho chạy từ $0$ đến $9$ và chỉ lấy các giá trị thuộc A
- Vì $\overline{abcde}$ là số chẵn nên ta cho $e$ chạy từ $0$ đến $8$ và chỉ thực hiện công việc tiếp nếu $e \in \{0,2,8\}$
- Cuối cùng nếu số tạo thành thoả mãn điều kiện "phải có mặt chữ số 1 và chữ số 3"
thì ta cho kết quả $S$ tăng thêm 1 đơn vị
Thuật toán thật đơn giản phải không nào!
Bước 2: Viết code và trình bày kết quả:
[quotename='PASCAL CODE 03']
Var a,b,c,d,e: shortint;
S: longint;
Begin
S:=0;
for a:=1 to 9 do
for b:=0 to 9 do
for c:=0 to 9 do
for d:=0 to 9 do
for e:=0 to 8 do
if ((e=0)or(e=2)or(e=8))and((a<>4)and(a<>6))and((b<>4)and(b<>6))and((c<>4)and(c<>6))
and((d<>4)and(d<>6))
and(((a=1)and((b=3)or(c=3)or(d=3)))or((b=1)and((a=3)or(c=3)or(d=3)))
or((c=1)and((a=3)or(b=3)or(d=3)))or((d=1)and((a=3)or(b=3)or(c=3))))
then
S:=S+1;
Write('So cac so thoa man la S= ',S);
Readln;
End.
[/quote]
Chạy chương trình trên ta được kết quả là $\text{So cac so thoa man la S= }1644$
_______________________________________________
Qua 3 ví dụ trên, các bạn có thể thấy rằng:
Ta dùng vòng lặp for ... to ...do liên tiếp cho mọi biến, cho đến khi điều kiện logic được thoả (yêu cầu của đề bài)
Ta phải "giải thích" cho ngôn ngữ PASCAL hiểu cái yêu cầu đó bằng ngôn ngữ logic and (và) or (hoặc)
not (phủ định), ...
Bài viết sau tôi sẽ post lên các bài tập cho các bạn tự luyện.
- E. Galois, perfectstrong, phuonganh_lms và 6 người khác yêu thích
#2
Đã gửi 21-12-2011 - 11:49
- Một vé xe buýt bất kỳ có mã số là một dãy gồm $6$ số tự nhiên, được gọi là vé xe hạnh phúc nếu tổng của $3$ chữ số đầu bằng tổng của $3$ chữ số cuối. Tính xem có tất cả bao nhiêu vé xe hạnh phúc.
Bài toán 5: (Câu VIIb - Đề thi thử số 2 - VMF)
- Cho tập $A=\{0,1,2,5,7,8\}$. Có bao nhiêu số tự nhiên chia hết cho 6, có đúng 5 chữ số, được chọn từ tập $A$
Bài toán 6:
- Cho tập $A=\{0,1,2,4,7,8,9\}$. Có bao nhiêu số tự nhiên nhỏ hơn 80000 mà chia hết cho 3, có các chữ số được chọn từ tập $A$
Bài toán 7:
- Cho tập $A=\{0,1,2\}$. Có bao nhiêu số tự nhiên có đúng $6$ chữ số được tạo thành từ $A$, sao cho số đó có ít nhất một cặp số $0,2$ đứng cạnh nhau.
Bài toán 8:
- Có bao nhiêu số tam giác (số tam giác là số tự nhiên $n$ có dạng $n=\dfrac{k(k+1)}{2}$) lớn hơn $500$ và nhỏ hơn $50000$ ?
- E. Galois và Cao Xuân Huy thích
#3
Đã gửi 21-12-2011 - 16:31
Bài làmBài toán 4: Vé xe hạnh phúc:
- Một vé xe buýt bất kỳ có mã số là một dãy gồm $6$ số tự nhiên, được gọi là vé xe hạnh phúc nếu tổng của $3$ chữ số đầu bằng tổng của $3$ chữ số cuối. Tính xem có tất cả bao nhiêu vé xe hạnh phúc.
Var a,b,c,d,e,f: shortint; S: longint; Begin S:=0; for a:=0 to 9 do for b:=0 to 9 do for c:=0 to 9 do for d:=0 to 9 do for e:=0 to 9 do for f:=0 to 9 do if a + b + c = d + e + f then S:=S+1; Write('So cac so thoa man la S= ',S); Readln; End.
- hxthanh yêu thích
1) Xem cách đăng bài tại đây
2) Học gõ công thức toán tại: http://diendantoanho...oạn-thảo-latex/
3) Xin đừng đặt tiêu đề gây nhiễu: "Một bài hay", "... đây", "giúp tớ với", "cần gấp", ...
4) Ghé thăm tôi tại http://Chúlùnthứ8.vn
5) Xin đừng hỏi bài hay nhờ tôi giải toán. Tôi cực gà.
#4
Đã gửi 21-12-2011 - 17:15
#5
Đã gửi 21-12-2011 - 18:29
- hoangtrong2305 yêu thích
1) Xem cách đăng bài tại đây
2) Học gõ công thức toán tại: http://diendantoanho...oạn-thảo-latex/
3) Xin đừng đặt tiêu đề gây nhiễu: "Một bài hay", "... đây", "giúp tớ với", "cần gấp", ...
4) Ghé thăm tôi tại http://Chúlùnthứ8.vn
5) Xin đừng hỏi bài hay nhờ tôi giải toán. Tôi cực gà.
#6
Đã gửi 25-12-2011 - 13:09
Bài toán 8:
- Có bao nhiêu số tam giác (số tam giác là số tự nhiên $n$ có dạng $n=\dfrac{k(k+1)}{2}$) lớn hơn $500$ và nhỏ hơn $50000$ ?
Nhận xét:
ta có $k$ và $k+1$ là 2 số liên tiếp => $k(k+1)\vdots 2$
Mà $500<n<50000$
=> $32<k<315$
Vậy ta có bài làm như sau:
Kết quả
Vậy có $284$ số tam giác lớn hơn $500$ và nhỏ hơn $50000$
- hxthanh yêu thích
Toán học là ông vua của mọi ngành khoa học.
Albert Einstein
(1879-1955)
-------------------------------------------------------------------------------------------------------------------
Click xem Đạo hàm, Tích phân ứng dụng được gì?
và khám phá những ứng dụng trong cuộc sống
#7
Đã gửi 26-12-2011 - 12:35
Bài toán 6:
- Cho tập $A=\{0,1,2,4,7,8,9\}$. Có bao nhiêu số tự nhiên nhỏ hơn 80000 mà chia hết cho 3, có các chữ số được chọn từ tập $A$
Số tự nhiên lớn nhất nhưng nhỏ hơn $80000$ là $79999$
vậy ta cho a chạy từ 1 -> 7 và b,c,d,e chạy từ 0 -> 9, điều kiện a,b,c,d,e khác 3;5;6 (do 3;5;6 không có trong tập A)
Thêm điều điện chia hết cho 3 là a+b+c+d+e chia hết cho 3
vậy ta có bài làm sau
Kết quả là
Vậy có $3201$ số chia hết cho 3 mà nhỏ hơn $80000$, được chọn từ tập A
Bài viết đã được chỉnh sửa nội dung bởi hoangtrong2305: 26-12-2011 - 12:36
- hxthanh yêu thích
Toán học là ông vua của mọi ngành khoa học.
Albert Einstein
(1879-1955)
-------------------------------------------------------------------------------------------------------------------
Click xem Đạo hàm, Tích phân ứng dụng được gì?
và khám phá những ứng dụng trong cuộc sống
#8
Đã gửi 26-12-2011 - 12:50
Bài toán 7:
- Cho tập $A=\{0,1,2\}$. Có bao nhiêu số tự nhiên có đúng $6$ chữ số được tạo thành từ $A$, sao cho số đó có ít nhất một cặp số $0,2$ đứng cạnh nhau.
Câu này e ko chắc với ý tưởng của mình
do 0 và 2 đứng cạnh nhau nên tổng của chúng bằng 2, ngoài ra trong tập A, ngoài 0 và 2 thì không còn số nào có tổng bằng 2 nên ta có bài làm sau
Kết quả là
Vậy đáp số là $422$ số thoả mãn đề bài
Toán học là ông vua của mọi ngành khoa học.
Albert Einstein
(1879-1955)
-------------------------------------------------------------------------------------------------------------------
Click xem Đạo hàm, Tích phân ứng dụng được gì?
và khám phá những ứng dụng trong cuộc sống
#9
Đã gửi 26-12-2011 - 13:02
Tuy nhiên lời giải của em gần chính xác rồi
điều kiện đối với 2 số liên tiếp phải là: $\fbox{(a+b=2) and (a<>b)}$
- hoangtrong2305 yêu thích
#10
Đã gửi 26-12-2011 - 13:35
1+1= mấy hả em?
Tuy nhiên lời giải của em gần chính xác rồi
điều kiện đối với 2 số liên tiếp phải là: $\fbox{(a+b=2) and (a<>b)}$
sr thầy e wên cái đề cho phép các số giống nhau
Toán học là ông vua của mọi ngành khoa học.
Albert Einstein
(1879-1955)
-------------------------------------------------------------------------------------------------------------------
Click xem Đạo hàm, Tích phân ứng dụng được gì?
và khám phá những ứng dụng trong cuộc sống
#11
Đã gửi 26-12-2011 - 13:42
Bài làm
Var a,b,c,d,e,f: shortint; S: longint; Begin S:=0; for a:=0 to 9 do for b:=0 to 9 do for c:=0 to 9 do for d:=0 to 9 do for e:=0 to 9 do for f:=0 to 9 do if a + b + c = d + e + f then S:=S+1; Write('So cac so thoa man la S= ',S); Readln; End.
a thế ơi, bài của a có vấn đề ở khúc if a + b + c = d + e + f then S:=S+1;
khi lập trình trong pascal, pascal sẽ ưu tiên phần so sánh trước rồi mới tới cộng trừ sau, tức thay vì nó cộng 2 vế như ý muốn của a thì nó đi so sánh $c=d$ vì thế nên phần mềm sẽ báo lỗi.
Theo e khúc đó nên viết thành if (a + b + c) = (d + e + f) then S:=S+1;
thì pascal sẽ ưu tiên phần trong ngoặc rồi mới bắt đầu so sánh, lúc này máy sẽ chạy đúng với ý tưởng của a
Write('So cac so thoa man la S= ',S); theo e thì nên viết thành Write('So cac so thoa man la S= ',S:3);
thật ra phần này ko bắt buộc, nhưng nếu sử dụng S thì kết quả ra dạng 3.00000000000000E+0000, rất xấu, nếu viết S:3 thì máy hiển thị là 3, dễ nhìn hơn
Toán học là ông vua của mọi ngành khoa học.
Albert Einstein
(1879-1955)
-------------------------------------------------------------------------------------------------------------------
Click xem Đạo hàm, Tích phân ứng dụng được gì?
và khám phá những ứng dụng trong cuộc sống
#12
Đã gửi 26-12-2011 - 14:59
Kết quả của S: (kiều số nguyên lớn longint) làm gì có phần thập phân đâu?
Nên S:3 là thừa!
Còn về việc so sánh logic phải viết đúng như em nói, thậm chí nếu nhiều hơn một điều kiện thì phải viết $\fbox{if ((a+b+c)=(d+e+f)) and (...)}$
biểu thức logic cần so sánh, đưa vào ngoặc sẽ chính xác hơn.
- hoangtrong2305 yêu thích
#13
Đã gửi 23-04-2013 - 18:18
Đây là một topic hay, Pascal quả thật là một ngôn ngữ rất tuyệt vời và rất thích hợp cho những bạn học sinh, sinh viên thích và tìm hiểu về ngôn ngữ lập trình
Nhân tiện xin đưa ra một bài toán có thể nói là rất thực tiễn và có khá nhiều ứng dụng trong đời sống hàng ngày
Bài toán: Cho biết ngày, tháng và năm bất kì tương ứng. Hãy lập trình và cho biết ngày đó là thứ mấy trong tuần ?
- hxthanh yêu thích
Luận văn, tài liệu tham khảo toán học : http://diendantoanho...ảo/#entry499457
Sách, Luận Văn, Tài liệu tham khảo https://www.facebook...TailieuLuanvan/
#14
Đã gửi 23-04-2013 - 18:39
Đây là một topic hay, Pascal quả thật là một ngôn ngữ rất tuyệt vời và rất thích hợp cho những bạn học sinh, sinh viên thích và tìm hiểu về ngôn ngữ lập trình
Nhân tiện xin đưa ra một bài toán có thể nói là rất thực tiễn và có khá nhiều ứng dụng trong đời sống hàng ngày
Bài toán: Cho biết ngày, tháng và năm bất kì tương ứng. Hãy lập trình và cho biết ngày đó là thứ mấy trong tuần ?
Về bài toán này, thì tính tương đối thì cũng không khó lắm
Em xem thử cái này (bài số #47) để xem có gì hay không nhé!
- zipienie yêu thích
#15
Đã gửi 09-05-2013 - 09:19
có ai rảnh online giúp mình bài toán này vơi hoặc mail cho mình [email protected] nếu đc thanks các bạn nhá
Bài 1
Cho DT1,DT2..DTn và SL1,SL2..SLn là diện tích canh tác và sản lượng tương ứng của N xã trong một huyện.viết chương trình pascanl để nhập dữ liệu tính và in ra năng suất trung bình toàn huyện và tổng sản lượng các xã có năng xuất cao hơn năng xuất trung bình của toàn huyện
Bài 2
Vẽ sơ đồ thuật toán dữ liệu tính và đưa ra số lượng các phần tử có giá trị dưới 50 từ 50 đến 100 của dẫy số gồm phần tử
#16
Đã gửi 27-10-2016 - 18:49
Vân nhận được một món quà chứa trong hộp hình lập phương (hộp bị khoá)
Hộp được khoá như sau: bản thân hộp là một hình lập phương hoàn hảo với lỗ khảm ở mỗi mặt. Gửi kèm với hộp là 6 viên ngọc khớp với lỗ khảm trên mỗi mặt. Hộp chỉ mở ra được nếu được trang trí bằng cách 6 viên ngọc vào đúng vị trí. Hai cách trang trí là như nhau nếu có thể dung phép quay để từ cách này qua cách kia
Hãy giúp Vân mở món quà đó
Yêu cầu: biết màu của mỗi viên ngọc, hỏi trong trường hợp xấu nhất, cần bao nhiêu lần thử để mở được họp? Chú ý, hai viên ngọc cùng màu giống hệt nhau
Dữ liệu: vào từ tập tin văn bản HOPQUA.INP, gồm một dòng duy nhất chứa 6 kí tự cách nhau khoảng trắng lấy từ tập {R,O,Y,G,B,V} đó là màu của 6 viên ngọc
In ra một số nguyên duy nhất là số cách trang trí hộp
- DPhat yêu thích
Được gắn nhãn với một hoặc nhiều trong số những từ khóa sau: Tổ hợp, Lập trình, Pascal
Toán Trung học Phổ thông và Thi Đại học →
Đại số →
Tổ hợp - Xác suất và thống kê - Số phức →
Chia $n$ kẹo cho $k$ người sao cho mỗi người nhận được ít nhất $l$ viên và nhiều nhất $h$ viênBắt đầu bởi Leonguyen, 01-05-2024 tổ hợp |
|
|||
|
Toán Trung học Cơ sở →
Đại số →
Tổ hợp gây lúBắt đầu bởi huucong, 30-04-2024 tổ hợp |
|
||
|
Toán Trung học Cơ sở →
Đại số →
Không biết sai ở đâuBắt đầu bởi huucong, 30-04-2024 tổ hợp |
|
||
Toán Trung học Phổ thông và Thi Đại học →
Đại số →
Tổ hợp - Xác suất và thống kê - Số phức →
Không biết sai ở đâu: Chọn ngẫu nhiên 5 hs từ đội văn nghệ sao cho lớp nào cũng có học sinh được chọn, hỏi có bao nhiêu cáchBắt đầu bởi huucong, 30-04-2024 tổ hợp |
|
|||
Toán thi Học sinh giỏi và Olympic →
Tổ hợp và rời rạc →
Có bao nhiêu cách viết số nguyên dương n thành tổng các số nguyên dương?Bắt đầu bởi Explorer, 24-04-2024 tổ hợp, đếm, nguyên dương và . |
|
2 người đang xem chủ đề
0 thành viên, 2 khách, 0 thành viên ẩn danh