a. Cú pháp, lưu đồ và ý nghĩa
Trong một số trường hợp, khi phải lựa chọn một việc trong nhiều việc thì các cấu trúc IF lồng nhau tỏ ra rắc rối, khó viết, khó kiểm tra tính đúng đắn của nó. Việc dùng cấu trúc CASE có thể khắc phục được nhược điểm này.
Lệnh CASE có hai dạng, chúng chỉ khác nhau ở một điểm là trong dạng 2 có ELSE LệnhQ, còn trong dạng 1 thì không (hình 3.2). CASE biểuthức OF hằng1: LệnhP1; hằng2: LệnhP2; . . . . hằngk: LệnhPk END; CASE biểuthức OF hằng1: LệnhP1; hằng2: LệnhP2; . . . . hằngk: LệnhPk; ELSE LệnhQ END;
Dạng 1 Dạng 2
Cú pháp của lệnh Case
Chú ý là lệnh CASE phải kết thúc bằng END;
Các yêu cầu:
• Kiểu dữ liệu của biểuthức chỉ có thể là nguyên, ký tự, Lôgic, hoặc kiểu liệt kê hay kiểu đoạn con. Xin nhấn mạnh rằng: biểuthức không được là kiểu thực hay kiểu chuỗi, và đây chính là hạn chế của lệnh CASE so với lệnh IF.
• Các hằng1, hằng2, ..., hằngk phải có kiểu dữ liệu phù hợp với kiểu dữ liệu của biểuthức.
Ý nghĩa: Tùy theo giá trị của biểuthức bằng hằng nào trong các hằng1, hằng2, ..., hằngk mà quyết định thực hiện lệnh nào trong các lệnhP1, lệnhP2, ..., LệnhPk.
b.Cách thức thực hiện của lệnh CASE như sau:
• Bước 1: Tính toán giá trị của biểuthức
• Bước 2: So sánh và lựa chọn:
o Nếu giá trị của biểuthức = hằng1 thì thực hiện LệnhP1, rồi chuyển sang lệnh kế tiếp sau End, ngược lại:
o Nếu giá trị của biểuthức = hằng2 thì thực hiện LệnhP2, rồi chuyển sang lệnh kế tiếp sau End, ngược lại:
o .v.v.
o Nếu giá trị của biểuthức = hằngk thì thực hiện LệnhPk, rồi chuyển sang lệnh kế tiếp sau End, ngược lại:
a) chuyển ngay sang lệnh kế tiếp sau End(nếu là dạng 1)
b) thực hiện LệnhQ, rồi chuyển sang lệnh kế tiếp sau End (nếu là dạng 2) .
Ví dụ 3: Nhập vào họ tên và năm sinh của một người, cho biết người này thuộc lứa tuổi nào: sơ sinh, nhi đồng, thiếu niên, thanh niên, trung niên hay người lớn tuổi, biết rằng: Sơ sinh có tuổi từ 0 đến 1
Nhi đồng: có tuổi từ 2 đến 9 Thiếu niên có tuổi từ 10 đến 15 Thanh niên có tuổi từ 16 đến 32 Trung niên có tuổi từ 33 đến 50 Người lớn tuổi có tuổi trên 50. Chương trình được viết như sau:
Var
Ho_ten: String[20];
Namsinh, Namnay, Tuoi: Integer ; Phanloai: String[14];
Begin
Write(‘ Nhập họ và tên: ‘); Readln(Ho_ten);
Write(‘ Nhập năm sinh và năm nay: ‘); Readln(Namsinh, Namnay);
Tuoi:=Namnay - Namsinh;
If Tuoi< 0 then writeln(‘Nhập sai ‘) else
begin
Case Tuoi OF
0 ,1: Phanloai:= ‘so sinh’; 2 ..9: Phanloai:= ‘nhi đong’; 10 ..15: Phanloai:= ‘thieu nien’; 16 ..32: Phanloai:= ‘thanh nien’; 33 ..50: Phanloai:= ‘trung nien’; else Phanloai:= ‘nguoi lon tuoi’ End; { hết Case }
Writeln(Ho_ten, #32 , Tuoi, #32 , Phanloai) end;
Readln End.