Chuong IV - Turbo Pascal
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: AzTruyen.Top