Chơng 10 Lệnh có cấu trúc
10.1. Câu lệnh lựa chọn.
Dạng 1 (dạng không đầy đủ) : Sơ đồ câu lệnh Biểu thức sai logic đúng Lệnh_P
Chú ý : Trờng hợp có nhiều lệnh theo sau IF, ta bao các lệnh này lại nh sau :
IF biểu_thức_logic THEN Begin lệnh_1; lệnh_2; ... lệnh_N; End
Lúc này, phần đợc bao giữa Begin và End sẽ đợc xem là một lệnh duy nhất; ta gọi đó là lệnh phức. Từ đây về sau, khi nói đến lệnh, ta hiểu đó là lệnh đơn
hoặc lệnh phức.
Dạng 2 (dạng đầy đủ) : Sơ đồ câu lệnh
Biểu thức sai logic
đúng
Lệnh_1 Lệnh_2
Cách thức hoạt độ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 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ệnh_1, không thực hiện lệnh_2, mà chuyển ngay sang thực hiện lệnh kế tiếp ở sau lệnh_2.
- Ngợc lại, Nếu biểu_thức_logic có giá trị FALSE thì máy không thực hiện lệnh_1, mà thực hiện lệnh_2, mà chuyển ngay sang lệnh kế tiếp ở sau lệnh_2.
IFbiểu_thức_logicTHENlệnh_1 ELSE
lệnh_2
Chú ý :
Trớc từ khoá ELSE không có dấu chấm phẩy.
Lệnh_1, lệnh_2 là các lệnh tuỳ ý, có thể là đơn hoặc ghép.
IFbiểu_thức_logicTHEN lệnh_P
Cách thức hoạt động của lệnh : Khi gặp lệnh này, nếu biểu_thức_logic có giá trị TRUE thì máy thực hiện lệnh_P rồi chuyển sang lệnh kế tiếp ở phía dới. Nếu biểu_thức_logic có giá trị FALSE thì máy không thực hiện lệnh_P mà chuyển ngay sang lệnh kế tiếp.
Ví dụ 1 : Cho hàm F(x) = > ∨ ≤ + − ≤ < + − .1 0 )1 (3 2 1 0 1 5 4 2 2 x x khi x x x khi x x
Viết chơng trình đọc một số thực x từ bàn phím và xuất ra màn hình giá trị của F(x). Program Vidu_1; Uses Crt; Var x, F : Real; Begin ClrScr;
Write(‘Nhập vào giá trị của x : ‘); Readln(x);
If (x > 0) and (x<=1) then F := 4*sqr(x)-5*x+1
else
F := abs(x-2)/3/(sqr(x)+1);
Writeln(‘Kết quả : F(‘,x:1:2,’) = ‘,F:1:2);
End.
Ví dụ 2 : Viết chơng trình nhập từ bàn phím 3 số nguyên a, b, c và in ra màn hình số lớn nhất.
Program Vidu_2;
Uses Crt;
Var a, b, c, max : Integer;
Begin
ClrScr;
Writeln(‘TIM SO LON NHAT TRONG 3 SO’); Writeln(‘---‘); Write(‘Nhập vào 3 số : ‘); Readln(a,b,c);
max :=a;
If max < b then max := b;
If max < c then max := c; Writeln(‘Số lớn nhất là : ‘,max);
Readln
End.
Chú ý : Trong câu lệnh IF này có thể chứa câu lệnh IF khác. Ta gọi trờng hợp
này là IF lồng.
Ví dụ 3 : Viết chơng trình giải phơng trình dạng bậc nhất : ax + b = 0.
Program Vidu_3;
Uses Crt;
ClrScr;
Writeln(‘Giải phơng trình dạng : ax + b = 0’); Writeln(‘---’); Write(‘Nhập a và b: ‘); Readln(a,b);
Ifa <> 0 then writeln(‘PT có nghiệm duy nhất : x = ‘,(-b/a):1:2)
else {a = 0}
If b = 0 then writeln(‘Mọi giá trị của x đều là nghiệm.')
else {a = 0, b ≠ 0}
write(‘PT vô nghiệm.');
End.
Chú ý : Trong câu lệnh IF lồng nhau, cách xác định từ khoá ELSE nào đi với từ khoá IF nào là nh sau : xét ngợc từ dới lên, ELSE luôn đi với IF gần nhất ở phía trên nó mà cha có ELSE để bắt cặp.
Ví dụ 4 : Tính tiền thực lĩnh cho một nhân viên trong xí nghiệp theo công thức:
(lơng chính x số ngày công)
thực lĩnh = + (phụ cấp) - (tạm ứng) 26
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.
Giải thuật :
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 đa 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 Xuất giá trị biến TL
Program Vidu_4; Uses Crt; Var NC : Byte; PC, LC, TU, TL : Real; Begin ClrScr;
Write(‘Lơng chính : ‘); Readln(LC); Write(‘Ngày công : ‘); Readln(NC);
Write(‘Phụ cấp : ‘); Readln(PC); Write(‘Tạm ứng : ‘); 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(‘Tiền thực lĩnh: ’,TL:1:2);
End.
Tối u sử dụng IF lồng.
Đơn giản IF lồng khi cần thiết : Trong nhiều trờng hợp, các IF lồng có thể đơn giản bằng toán tử AND. Chẳng hạn, đoạn chơng trình có IF lồng sau :
If (x<=5) Then
If (x>=12) Then Write(‘x thuộc đoạn [2, 15]’);
có thể đơn giản bằng một lệnh IF duy nhất :
If (x<=5) And (x>=12) Then Write(‘x thuộc đoạn [2, 15]’);
Dùng IF lồng khi phải xét nhiều trờng hợp có chung một số điều kiện. Chẳng hạn, đoạn chơng trình sau :
If diem < 5 Then Write(‘Kem’);
If (diem >= 5) And (diem < 6.5) Then Write(‘Trung binh’); If (diem >= 6.5) And (diem < 8.0) Then Write(‘Khá’); If (diem >= 8) And (diem < 9.0) Then Write(‘Gioi’); If diem >= 9 Then Write(‘Xuất sắc’);
có thể đơn giản bằng IF lồng nh sau :
If diem >= 9 Then Write(‘Xuất sắc’) Else
If diem >= 8 Then Write(‘Gioi’) Else
If diem >= 6.5 Then Write(‘Khá’) Else
If diem >= 5 Then Write(‘Trung binh’) Else
Write(‘Kem’);