Câu lệnh lựa chọn.

Một phần của tài liệu Giáo trình dạy học Ngôn ngữ lập trình Pascal (Trang 32 - 36)

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 BeginEnd 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’);

Một phần của tài liệu Giáo trình dạy học Ngôn ngữ lập trình Pascal (Trang 32 - 36)