Ví dụ cấu trúc điều kiện if

Cấu trúc điều kiện if là cấu trúc điều khiển thường được giới thiếu đầu tiên trong môn lập trình. Ví dụ ứng dụng cho cấu trúc này có rất nhiều.

Một ví dụ có thể được xem là “kinh điển” cho cấu trúc này là chương trình cho biết một năm là nhuận hay không nhuận.

Giải thích:

Thật ra, có nhiều cách để diễn giải thế nào là năm nhuận. Ở đây, nói ngắn gọn thế này:

Năm nhuận là năm chia hết cho 4. Nếu năm đó chia hết cho 100 thì nó cũng phải chia hết cho 400.

Ví dụ: năm 1996 là năm nhuận, vì nó chia hết cho 4.

Năm 2000 là năm nhuận, vì nó chia hết cho 100 và chia hết cho 400.

Năm 1900 không phải là năm nhuận, vì nó chia hết cho 100 nhưng không chia hết cho 400.

Giải quyết:

Chính vì có nhiều cách giải thích, nên cũng có nhiều cách trình bày thuật toán. Sau khi nặng óc khá mệt mỏi (vì chỉ số IQ thấp), mình sẽ giới thiệu 2 cách viết chương trình khác nhau.

Điểm chung của 2 cách là phần khai báo biến và câu lệnh xuất kết quả.

Biến n đại diện cho năm người dùng nhập vào. Biến này kiểu word, có phạm vi giá trị từ 0 đến 65535.

Sử dụng kiểu word là hợp lí nhất, do các kiểu khác có phạm vi giá trị hoặc âm, hoặc không đủ lớn, hoặc quá lớn.

Biến nhuan kiểu boolean, được gán giá trị true hoặc false và dựa vào đó, ta dùng cấu trúc if để xuất kết quả.

Đoạn mã thứ nhất:

Cách viết này dựa trên cách giải thích năm nhuận mà mình vừa nói ở trên. Tức là ta xét một năm có chia hết cho 4 hay không, nếu có thì cho nhuan:=true, nếu không thì khỏi xét tiếp luôn.

Nếu chia hết cho 4 thì xét tiếp: nếu năm đó có chia hết cho 100 thì nó phải chia hết cho 400.

Ở đây, cách viết mã có hơi khác với phần giải thích thuật toán.

var n: word;

nhuan: boolean;

begin

write('Nhap vao nam: '); readln(n);

nhuan:=false;

if n mod 4 = 0 then

begin

nhuan:=true;

if (n mod 100 = 0) and (n mod 400 <> 0) then nhuan:=false;

end;

if nhuan then

write('Nam ',n,' la nam nhuan.')

else

write('Nam ',n,' khong phai la nam nhuan.');

readln;

end.

Đoạn mã thứ hai:

Đối với cách này, ta xét năm nhập vào có chia hết cho 100 không, nếu có thì xét tiếp nó có chia hết cho 400 không.

Ngược lại (tức không chia hết cho 100), thì nó phải chia hết cho 4, nó mới được công nhận là năm nhuận.

var n: word;

nhuan: boolean;

begin

write('Nhap vao nam: '); readln(n);

if n mod 100 = 0 then

nhuan:=(n mod 400)=0

else

nhuan:=(n mod 4)=0;

if nhuan then

write('Nam ',n,' la nam nhuan.')

else

write('Nam ',n,' khong phai la nam nhuan.');

readln;

end.

Một vài lưu ý:Cách viết nhuan:=(n mod 400)=0 (đoạn mã 2) sẽ gây bỡ ngỡ với phần lớn học sinh. Giáo viên nên giảng kĩ cách viết này.

(n mod 400)=0 là biểu thức. Biểu thức này sẽ cho giá trị true hoặc false. Giá trị của biểu thức này sau đó sẽ được gán cho biến nhuan.

Đây là cách viết mã chuyên nghiệp, ngắn gọn và rõ ràng.

---Năm nhuận được đề cập ở trên được mặc nhiên hiểu là năm nhuận của dương lịch, gọi chính xác là lịch thuần dương. Đây là lịch phổ biến mà ta và thế giới đang sử dụng. Lịch này xuất phát từ vùng văn hóa lưu vực sông Nil (Ai Cập), được tính dựa vào chu kì chuyển động của mặt trời.

Dương lịch cứ 4 năm thì nhuận 1 năm, nói đúng hơn là cứ 4 năm nhuận 1 ngày, nên ta có thuật giải như trên. Nếu đem thuật giải này áp dụng cho các loại lịch khác thì hẳn nhiên là sai rồi.

Đối với lịch thuần âm, cứ 2 tháng nhuận 1 ngày. Đây không phải là lịch âm mà người Việt Nam đang dùng để tính rằm, hay ngày giỗ... Lịch này có xuất sứ từ vùng văn hóa Lưỡng Hà (một phần nằm trong vùng lãnh thổ của hai nước Iran và Iraq), được tính dựa trên chu kì của mặt trăng. Lịch này hiện chỉ còn được sử dụng ở một số nước Hồi giáo.

Còn lịch của ông bà ta hay dùng để tính giỗ (chẳng hạn giỗ Tổ mồng 10 tháng 3) được gọi chính xác là lịch âm dương, kết hợp cả chu kì chuyển động của mặt trời và mặt trăng.

Lịch âm dương cứ gần 3 năm sẽ nhuận 1 tháng, hoặc nói cách khác, cứ 19 năm thì có 7 năm nhuận. Theo đó, thì thuật giải cũng khác: lấy năm dương lịch chia cho 19, nếu số dư là 0, 3, 6, 9 , 11, 14, 17 thì năm đó là năm nhuận.

About these ads

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s