Cách đếm có bao nhiêu số lẻ viết bằng pascal năm 2024

Các bạn thân mến! 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.