Chuong IV - Turbo Pascal

Màu nền
Font chữ
Font size
Chiều cao dòng

CHƯƠNG 4 : CÁC CÂU LỆNH ĐIỀU KIỆN 

Câu lệnh điều kiện

Hai mẫu câu lệnh như sau : 

IF <Bieu_thuc_Boolean> THEN <viec_1> ;

IF <Bieu_thuc_Boolean> THEN <viec_1> ELSE <viec_2> ; 

Theo lệnh này, nếu <Bieu_thuc_Boolean> nhận giá trị True thì máy sẽ thực hiện <viec_1>, còn nếu không thì hoặc kết thúc ( tức không làm gì cả ) đối với mẫu câu thứ nhất, hoặc máy sẽ đi thực hiện lệnh khác tức là <viec_2> trong mẫu câu lệnh thứ 2. Như vậy mẫu thứ nhất thực ra là mẫu thứ hai thu gọn với <viec_2> là rỗng.

Ví dụ1 : để thực hiện phép chia hai số a, b với điều kiện b < > 0, ta viết : 

If b < > 0 Then t := a / b 

Else Writeln (' Mẫu số bằng 0 ! Không chia được ! ') ;

Ví dụ 2 : tìm giá trị min và max của hai số a, b. 

If a < b Then 

Begin 

Max := b ;

Min := a ;

End

Else 

Begin

Max := a ;

Min := b ;

End ;

Chú yù : trước Else không bao giờ có dấu chấm phẩy. 

Trong ví dụ này, ta thấy luôn vai trò của lệnh hợp thành ( lệnh ghép ). Giả sử ta viết một lệnh như sau : 

If a < b Then

Begin 

Max := b ;

Min := a ;

End ;

Nghĩa là nếu a < b ta phải thực hiện lần lượt hai lệnh là Max := b và Min := a ( được đặt giữa Begin và End ). Nếu không có Begin và End như sau : 

If a < b Then

Max := b ;

Min := a ;

thì ta phải hiểu là lệnh max := b được thực hiện chỉ khi a < b còn lệnh min := a được thực hiện trong mọi trường hợp. 

Cũng trong ví dụ này ta thấy cách viết có cấu trúc nhô ra nhô vào để bố trí chương trình Pascal cho đẹp và thể hiện đươcï thuật toán của chương trình. Đây là một tiêu chuẩn cần phải có cho một chương trình viết bằng Pascal. Chữ Begin và End tương ứng bao giờ cũng cùng ở một cột. Tất nhiên ta có thể viết tùy ý như sau nhưng không đẹp: 

If a < b Then Begin max := b ;

Min := a ;

End Else Begin 

Max := a ;

Min := b ;

End ;

Lưu yù : cách viết lệnh If như sau là hoàn toàn đúng : 

If <Bieu_thuc_Boolean_1> Then If <Bieu_thuc_Boolean_2> Then <viec_1> Else <viec_2> ; 

song rất dễ dẫn đến nhầm lẫn không biết <viec_2> tương ứng với Else của If nào. Vì vậy nên sửa lại cho rõ ràng như sau : 

If <Bieu_thuc_Boolean_1 > Then 

Begin 

If < Bieu_thuc_Boolean_2 > Then < viec_1> Else < viec_2 > End ;

Câu lệnh lựa chọn

Hai mẫu câu lệnh If ở bài trước chỉ thực hiện rẽ hai nhánh tương ứng với 2 giá trị của biểu thức Boolean. Việc thử và chọn một trong nhiều nhánh sẽ được thực hiện với câu lệnh Case như sau : 

Mẫu 1 : Mẫu 2 : 

Case <Bieu_thuc> Of Case <Bieu_thuc> Of 

Gia_tri_1 : <viec_1> ; Gia_tri_1 : < viec_1> ;

Gia_tri_2 : <viec_2> ; Gia_tri_2 : < viec_2> ; 

.................. .................. 

Gia_tri_n : <viec_n> ; Gia_tri_n : <viec_n> 

End ; Else <viec_n+1> ;

End ; 

Trong đó <Bieu_thuc> không còn chỉ là biểu thức Boolean như trong lệnh If …

Nó có thể là có các kiểu vô hướng đếm được (kể cả kiểu liệt kê, kiểu khoảng con sẽ học sau nhưng không được là kiểu Real ) nên nó có thể có nhiều giá trị khác nhau. Mẫu 2 sẽ thực hiện <viec_n+1> ( được viết sau từ khóa Else ) nếu như < Bieu_thuc> không rơi vào các giá trị 1, giá trị 2,… giá trị n kể trên. 

Cần chú ý rằng câu lệnh Case bao giờ cũng kết thúc bằng từ khóa End. 

Ví dụ 1: Với I là một biến nguyên 

Case I + 1 Of 

1 : writeln (' So 1 ') ; 

2 : writeln (' So 2 ') ;

3 : writeln (' So 3 ') ; 

4 : writeln (' So 4 ') ; 

End ;

Ví dụ 2: Tính số ngày của một tháng ; 

Var so_ngay, thang, nam : integer ; 

BEGIN

Write ('Thang : ') ; readln ( thang) ;

Write ('Nam : ') ; readln ( nam) ;

Case thang Of

4, 6, 9, 11 : so_ngay := 30 ;

2 : case nam of 

0 : so_ngay := 29 ;

1, 2, 3 : songay := 28 ;

end 

Else so_ngay := 31 ;

End ;

Writeln (' So ngay cua thang ', thang,' nam ', nam,' la ', so_ngay) ;

END.

Đến đây các bạn có thể hỏi liệu bài toán Giải phương trình bậc 2 có thể dùng Case cho ba trường hợp của biến Delta không ? Điều này không thể được vì biến Delta thuộc kiểu Real, kiểu không đếm được. 

(Hết chương 4)

Bạn đang đọc truyện trên: Truyen2U.Pro