5.2.1 Câu lệnh IF (Rẽ nhánh theo điều kiện) Có hai dạng.
a. Dạng 1.
IF <biểu thức logic> THEN <lệnh 1> ELSE <lệnh 2>;
trong đó <biểu thức logic> là biểu thức mà giá trị của nó thuộc kiểu Boolean, còn <lệnh 1>,<lệnh 2> là các lệnh tuỳ ý có thể là đơn hoặc ghép.
Tác dụng của lệnh : Khi gặp lệnh này tuỳ theo kết quả của <biểu thức logic> mà máy có thể thực hiện <lệnh 1> hoặc <lệnh 2>. Nếu <biểu thức logic> có giá trị True thì máy thực hiện
<lệnh1>, nếu không thì máy thực hiện <lệnh 2>.
Ví dụ 2. Chương trình sau đây thực hiện việc đọc vào một giá trị x và cho in ra kết quả của hàm :
x + 1 nÕu x < 0 f(x) =
x - 1 nÕu x 0
⎧⎨ ≥
⎩ Program Tinh_f;
Uses Crt;
Var x, f: Real;
Begin Clrscr;
Write(‘nhap vao gia trị x’);
Readln(x);
If x < 0 then f:= x + 1 else f:= x – 1;
Writeln(f:8:2);
End.
b. Dạng 2
IF <biểu thức logic> THEN <lệnh>;
trong đó <biểu thức logic> là biểu thức mà giá trị của nó thuộc kiểu Boolean, còn <lệnh> là lệnh tuỳ ý có thể là đơn hoặc ghép.
Khi gặp lệnh này nếu <biểu thức logic> có giá trị True thì <lệnh> đ−ợc thực hiện nếu không thì
câu lệnh này đ−ợc bỏ qua để thực hiện lệnh tiếp theo.
Ví dụ 3. Ch−ơng trình sau đây nhập vào 3 số thực và cho in ra giá trị lớn nhất giữa chúng.
Program max3;
Var a,b,c:Real;
Begin
Writeln(‘...’);
Write(‘nhap vao 3 so :’); Readln(a,b,c);
max:=a;
if max < b then max:= b;
if max < c then max:=c;
Writeln(‘so lon nhat là :’ , max);
Readln End.
Chú ý . Trong câu lệnh if này có thể chứa câu lệnh if khác. Phát biểu if <bt logic1> then if
<bt logic 2> then <lệnh 1> else <lệnh 2> t−ơng đ−ơng với phát biểu sau : if <bt logic> then
begin if <bt logic> then <lệnh 1>
else <lệnh 2>
end;
Có nghĩa là else thuộc về câu lệnh if gần nó nhất.
Ví dụ 4. Ch−ơng trình sau đây thực hiện việc giải ph−ơng trình bậc nhất dạng ax + b = 0.
Program Pt_dang_bac_1;
Uses Crt;
Var a,b: Real;
Begin Clrscr;
Writeln(‘Giai phuong trinh dang : ax + b = 0’);
Writeln(‘...’);
Write(‘cho biet gia tri cac he so a, b:’) Readln(a,b);
If a <> 0 then
Writeln(‘pt co nghiem duy nhat : x = ‘,(–b/a):8:2);
else if b = 0 then
Writeln(‘moi gia tri cua x deu la nghiem’);
else write(‘ptrinh vo nghiem’);
Readln End.
Ví dụ 5. Tính tiền thực lĩnh cho một nhân viên trong xí nghiệp theo công thức:
Thực lĩnh = (L−ơng chính Số ngày công) 26
ì + (Phụ cấp) – (Tạm ứng)
Với quy định :
– Nghỉ quá 5 ngày sẽ bị trừ 20% tổng thực lĩnh.
– Làm thêm quá 3 ngày đ−ợc tăng 10% tổng thực lĩnh.
– Nhập thông tin về l−ơng chính, ngày công, phụ cấp, tạm ứng vào các biến LC, NC, PC, TU.
– Tính thực lĩnh vào biến TL theo công thức:
TL = (LC * NC)/26 + PC – TU.
+ NÕu NC < 21 th× TL:= TL * 0.8 + NÕu NC > 29 th× TL:= TL *1.1 Văn bản ch−ơng trình:
Program Luong;
Uses Crt;
Var
NC:Byte;
PC,LC,TU,TL: Real;
Begin Clrscr;
Write(‘luong chinh : ‘); Readln(LC);
Write(‘ngay cong : ‘); Readln(NC);
Write(‘phu cap : ‘); Readln(PC);
Write(‘tam ung : ‘); readln(TU);
Writeln(‘...’);
TL:= (LC*NC)/26 + PC – TU If NC <21 then TL:= TL * 0.8;
If NC> 29 then TL:=TL* 1.1;
Writeln(‘tien thuc linh : ”, TL:10:2);
Readln;
End.
5.2.2. Câu lệnh CASE (Rẽ nhánh theo giá trị)
Câu lệnh IF ở trên chỉ rẽ theo một trong hai nhánh t−ơng ứng với giá trị của biểu thức logic.
Còn câu lệnh CASE sau đây cho phép lựa chọn để thực hiện một trong nhiều công việc.
a. Dạng câu lệnh
Dạng 1 Dạng 2
CASE<biểu thức> OF CASE<biểu thức> OF
<tập hằng 1>: <lệnh 1>; <tập hằng 1>: <lệnh 1>;
<tập hằng 2>: <lệnh 2>; <tập hằng 2>: <lệnh 2>;
... ... ... ...
<tập hằng n>: <lệnh n>; <tập hằng n>: <lệnh n>;
ELSE <lệnh 0>
END; END;
trong đó <biểu thức> là một biểu thức mà giá trị của nó thuộc kiểu dữ liệu vô hướng đếm được
<tập hằng i> (i=1,2,..., n) là một tập hữu hạn các hằng có cùng kiểu với kiểu của <biểu thức>.
Sự thực hiện của lệnh CASE ... OF phụ thuộc vào giá trị của <biểu thức>.
Nếu <tập hằng i> là một tập đầu tiên chứa giá trị trùng với giá trị của <biểu thức> thì máy thực hiện <lệnh i>, sau đó thoát khỏi CASE ... OF.
Trong tr−ờng hợp không có <tập hằng i> nào chứa giá trị của <biểu thức> thì : – Nếu ở dạng 2 (không có ELSE) thì máy thoát ngay ra khỏi lệnh CASE ... OF.
– Nếu ở dạng 1 (có ELSE) thì máy thực hiện <lệnh 0> rồi mới thoát khỏi CASE ... OF.
Ví dụ 6. Ch−ơng trình sau đây thực hiện việc nhập vào 1 điểm kiểm tra từ bàn phím và xuất kết quả xếp loại ra màn hình theo quy định:
– Các điểm <5 : Xếp loại yếu.
– Các điểm 5,6 : Xếp loại trung bình.
– Các điểm 7,8 : Xếp loại khá
– Các điểm 9,10 : Xếp loại giỏi Văn bản ch−ơng trình:
Program Xep_Loai;
Uses Crt;
Var Diem:Byte;
Begin Clrscr;
Write(‘Cho biet diem : ‘); Readln(Diem);
Case Diem Of
0,1,2,3,4 : Writeln(‘Xep loai yeu’);
5,6 : Writeln(‘Xep loai trung binh’);
7,8 : Writeln(‘Xep loai kha’);
9,10 : Writeln(‘Xep loai gioi’);
Else Writeln(‘Diem Nhap Vao Sai’);
End; End.
Ví dụ 7. Viết ch−ơng trình cho biết số ngày của một tháng.
Program So_Ngay_Cua_Thang;
Uses Crt;
Var
So_Ngay,Thang:Byte;
Nam:Integer;
Begin Clrscr;
Write(‘Dua vao thang (dang so) ‘); Readln(Thang);
Case Thang Of
4,6,9,11 : So_Ngay:=30 2 : Begin
Write(‘Cho biet nam:’);
Readln(Nam);
If Nam Mod 4=0 then So_ngay:=29 else So_Ngay:=28;
End;
Else So_Ngay:=31 ; End; (Case)
Writeln(‘ ‘);
Write(‘Thang’,Thang,’nam’,Nam,’co’,So_Ngay,’ngay’) Readln
End.