Cấu trúc rẽ nhánh trong Pascal
Cấu trúc rẽ nhánh trong Pascal - Wiki Pascal |
I – Cấu trúc If…Then…Else…
Hai mẫu câu lệnh như sau :
Code :
IFTHEN ; IF THEN ELSE ;
Theo lệnh này, nếu nhận giá trị True thì máy sẽ thực hiện , 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à 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 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 :
Code:
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.
Code:
If a < b Then Begin Max := b ; Min := a ; End Else Begin Max := a ; Min := b ; End ;
Chú ý : 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 :
Code:
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 :
Code:
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:
Code:
If a < b Then Begin max := b ; Min := a ; End Else Begin Max := a ; Min := b ; End ;
Lưu ý : cách viết lệnh If như sau là hoàn toàn đúng :
Code:
IfThen If Then Else ;
song rất dễ dẫn đến nhầm lẫn không biết
Code:
IfThen Begin If < Bieu_thuc_Boolean_2 > Then < viec_1> Else < viec_2 > End ;
II – Cấu trúc Case…Of…
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 :
Code:
CaseOf Gia_tri_1 : ; Gia_tri_2 : ; .................. Gia_tri_n : ; End ;
Mẫu 2 :
Code:
CaseOf Gia_tri_1 : < viec_1> ; Gia_tri_2 : < viec_2> ; .................. Gia_tri_n : Else ; End ;
Trong đó
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 ( đượ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
Code:
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 ;
Code:
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.
Bài tập:
1. Viết chương trình giải phương trình bậc 2. Đưa nghiệm ra màn hình với 3 số phần thập phân. Gợi ý hàm lấy căn bậc hai là sqrt();.2. Biết chương trình kiểm tra số nhập vào là số lẻ hay số chẵn.
Nhận xét
Đăng nhận xét