6.2.2 Câu lệnh lựa chọn CASE
6.2.2.1 Ý nghĩa
Câu lệnh IF chỉ thực hiện rẽ 2 nhánh tương ứng với giá trị của biểu thức <Điều kiện>. Khi cần lựa chọn để thực hiện một trong nhiều khả năng khác nhau ta phải dùng rất nhiều lệnh IF. Câu lệnh CASE sẽ giới thiệu sau đây là lệnh rẽ nhánh theo giá trị cho phép lựa chọn để thực hiện 1 trong nhiều công việc.
6.2.2.2 Cú pháp
Dạng khuyết
|
Dạng đủ
|
Case of
Tập hằng 1: ;
Tập hằng 2: ;
....
Tập hằng i: ;
....
Tập hằng n: ;
End;
|
Case of
Tập hằng 1: ;
Tập hằng 2: ;
....
Tập hằng i: ;
....
Tập hằng n: ;
Else ;
End;
|
Trong đó:
- <Điều kiện> là biểu thức số học, cho kết quả là một kiểu vô hướng đếm được (nguyên, ký tự, logic, liệt kê).
(i=1,..,n) có thể là các hằng và các đoạn hằng, ví dụ:
3: ;
5, 10..15: ;
2, 4, 6: ;
<5 : ;
’a’..’z’: ;
có thể là lệnh đơn giản hoặc khối lệnh. Nếu 1 khối lệnh phải được đặt trong Begin..End;
Giá trị của phải cùng kiểu với kiểu của và cũng phải là kiểu vô hướng liệt kê.
|
6.2.2.3 Sự hoạt động
Sự thực hiện của lệnh CASE ..OF phụ thuộc vào giá trị của
Dạng khuyết
|
|
Dạng đủ
|
Nếu giá trị của thuộc thì được thực hiện và ra khỏi lệnh CASE; Nếu giá trị của không thuộc tập hằng nào thì thoát ra khỏi lệnh CASE mà không làm gì.
|
|
Nếu giá trị của thuộc thì được thực hiện và ra khỏi lệnh CASE; Nếu giá trị của không thuộc tập hằng nào thì thực hiện rồi thoát ra khỏi lệnh CASE .
|
Có thể biểu diễn câu lệnh theo sơ đồ hoạt động sau:
...... ......
Hình 6.2a: Sơ đồ hoạt động của câu lệnh CASE dạng đủ.
...... ......
Hình 6.2b: Sơ đồ hoạt động của câu lệnh CASE dạng khuyết.
6.2.2.4 Lệnh IF .. THEN .. ELSE có thể chuyển thành CASE .. OF như sau
-
IF <Điều kiện> THEN
ELSE
;
|
Case <Điều kiện> of
TRUE : ;
FALSE: ;
End;
|
Ví dụ 6.2: Viết chương trình nhập vào tháng (và năm nếu cần), máy sẽ đưa ra số ngày của tháng đó.
Program VIDU_6_2;
Uses Crt;
Var songay, thang: Byte;
nam: Integer;
BEGIN
ClrScr;
Write('Cho biet thang (dang so): '); ReadLn(thang);
Write('Cho biet nam '); ReadLn(nam);
Case thang of
4,6,9,11: songay:=30;
2:If nam mod 4 = 0 then
if (nam mod 100 = 0)and(nam mod 400 <> 0)then
songay:=28
else songay:=29;
Else songay:=28;
Else { else cua CASE}
songay:=31;
End; {của Case}
{In ket qua }
WriteLn('Thang ', thang, '/',nam,' co: ',songay,' ngay')
ReadLn;
END.
V
Nếu x>y
Nếu x<=y
í dụ 6.3: Nhập vào hai số x, y. Tính giá trị biểu thức sau: F=
Với bài này ta có thể giải bằng cách sử dụng câu lệnh IF hoặc CASE
Cách 1: sử dụng câu lệnh IF
Program vidu_6_3_IF;
Var x,y,F:real;
Begin
Write(‘ Nhap x = ’);readln(x);
Write(‘ Nhap y = ‘);readln(y);
If x>y then
F:= x+y
Else {nguoc lai cua x>y tuc la x<=y}
F:=abs(x+y);
Writeln(‘ Gia tri cua bieu thuc F = ‘,F:8:2);
Readln;
End.
Cách 2: sử dụng câu lệnh CASE
Program vidu_6_3_CASE;
Var x,y,F:real;
Begin
Write(‘ Nhap x = ’);readln(x);
Write(‘ Nhap y = ‘);readln(y);
Case x>y of
True: F:= x+y;
False: F:=abs(x+y);
End;
Writeln(‘ Gia tri cua bieu thuc F = ‘,F:8:2);
Readln;
End.
Ví dụ 6.4: Lập chương trình tính chiều dài đoạn thẳng AB khi đã biết toạ độ hai đầu mút (Xa, Ya) và (Xb, Yb).
Program VIDU_6_4;
Uses Crt;
Var Xa, Ya, Xb, Yb, d: Real;
BEGIN
ClrScr;
Write('Nhap toa do x cua diem A Xa= '); ReadLn(Xa);
Write('Nhap toa do y cua diem A Ya= '); ReadLn(Ya);
Write('Nhap toa do x cua diem B Xb= '); ReadLn(Xb);
Write('Nhap toa do y cua diem B Yb= '); ReadLn(Yb);
{ Tinh do dai doan thang AB }
d := SQRT(SQR(Xa-Xb)+SQR(Ya-Yb));
{ In ket qua }
WriteLn('Do dai doan thang AB = ', d:10:4);
ReadLn;
END.
Ví dụ 6.5: Lập chương trình biện luận nghiệm của phương trình bậc hai ax2+bx+c=0 với các hệ số a, b nhập vào từ bàn phím.
Program VIDU_6_5;
Uses Crt;
Var a, b, c, x1, x2, delta: Real;
BEGIN
ClrScr;
Write('Nhap he so thu nhat a= '); ReadLn(a);
Write('Nhap he so thu hai b= '); ReadLn(b);
Write('Nhap he so thu ba c= '); ReadLn(c);
If a=0 then
WriteLn('Phuong trinh bac hai suy bien, khong xet!')
Else
Begin
delta := SQR(b)-4*a*c; { Tinh delta }
{ Xet delta }
If delta < 0 then WriteLn('Phuong trinh vo nghiem')
Else
If Delta = 0 then
Begin
WriteLn('Phuong trinh co nghiem kep');
x1:=-b/(2*a);
WriteLn('PT co nghiem kep x1=x2= ',x1:8:3);
end
Else
Begin
WriteLn('PT co hai nghiem rieng biet');
x1:=(-b+SQRT(Delta))/(2*a);
x2:=(-b-SQRT(Delta))/(2*a);
WriteLn('Nghiem thu nhat cua PT la x1= ',x1:8:3);
WriteLn('Nghiem thu hai cua PT la x2= ',x2:8:3);
End;
End;
ReadLn;
END.
5>
Chia sẻ với bạn bè của bạn: |