- Câu lệnh điều kiện
Xét ví dụ sau:
“Nếu Manchester thua trong trận này, tôi sẽ bỏ xem bóng đá”
“Nếu em yêu tôi thì em phải bỏ thằng kia, còn không thì ta chia tay”
Câu lệnh điều kiện xảy ra khi ta muốn kiểm soát dòng chương trình theo một hướng nhất định. Trong lập trình, câu lệnh điều kiện còn gọi là rẽ nhánh vì nó có thể rẽ sang các hướng khác nhau. Chúng ta sử dụng câu lệnh điều kiện ở hầu hết các chương trình.
Ví dụ sau mô tả cách sử dụng câu lệnh điều kiện để tìm số lớn nhất trong 3 số.
[codesyntax lang="pascal"]
Program tim_so_lon_nhat;
uses crt;
var a,b,c:integer;
begin
clrscr;
a:=9;
b:=1;
c:=13;
if a>=b and a>=c then write('So lon nhat la A');
if b>=a and b>=c then write('So lon nhat la B');
if c>=b and c>=a then write('So lon nhat la C');
readln
end.
[/codesyntax]
Như vậy kết quả hiển thị ra sẽ là “So lon nhat la C” vì trong 3 số này có C là lớn nhất.
Cú pháp chung:
Dạng 1)
if <điều kiện> then <câu lệnh>;
Dạng 2 (có else)
if <điều kiện> then <câu lệnh 1> else <câu lệnh 2>;
Trong đó:
- Điều kiện là biểu thức logic
- Câu lệnh 1 phải thoả mãn điều kiện mới được thực thi.
- Nếu câu lệnh 1 không thoả mãn chương trình sẽ thực thi câu lệnh 2.
Như vậy ví dụ trên cũng có thể được viết lại:
[codesyntax lang="pascal"]
Program tim_so_lon_nhat;
uses crt;
var a,b,c:integer;
begin
clrscr;
a:=18;
b:=1;
c:=13;
if (a>=b) and (a>=c) then write('So lon nhat la A')
else
if (b>=a) and (b>=c) then write('So lon nhat la B')
else
write('So lon nhat la C');
readln
end.
[/codesyntax]
- Nhóm câu lệnh
Ở ví dụ trên, sau lệnh if ta chỉ thực hiện một câu lệnh. Trong nhiều trường hợp, ta cần phải thực hiện một nhóm câu lệnh. Trường hợp đó, ta sử dụng cặp từ khoá Begin … End;
Hãy xem ví dụ sau:
[codesyntax lang="pascal"]
program giai_pt_bac_2;
uses crt;
var a,b,c,x1,x2,delta: real;
begin
clrscr;
writeln('Nhap A, B, C');
readln(a, b, c);
delta:=b*b-4*a*c;
if(delta<0) then writeln('Vo nghiem');
if(delta = 0) then writeln('Nghiem kep X1 = X2 = ', -b/(2*a):6:3)
else
begin
x1:=(-b+sqrt(delta))/(2*a);
x2:=(-b-sqrt(delta))/(2*a);
writeln('X1 = ',x1:6:3,'X2 = ',x2:6:3);
end;
readln
end.
[/codesyntax]
Ở ví dụ này, khi biệt số Delta > 0 ta đã thực hiện 3 hành động, tính X1, tính X2 và hiển thị kết quả, nếu không có cặp Begin … End; chương trình chỉ có thể thực hiện hành động đầu tiên, tức là tính X1, các hành động sau bị lờ đi.
- Rẽ nhánh với Case … Of
Chúng ta sử dụng Case … Of để rẽ nhánh trong các điều kiện là những con số cụ thể và nhiều hướng. Việc sử dụng Case … Of sẽ làm hệ thống chạy nhanh hơn, thời gian viết cũng giảm đáng kể.
Ví dụ
[codesyntax lang="pascal"]
program hien_thi_sinhnhat;
uses crt;
var thang:byte;
begin
clrscr;
write('Nhap thang');
readln(thang);
case thang of
1: writeln('Sinh nhat Hoa');
2: writeln('Sinh nhat Lan, Quan');
3: writeln('Sinh nhat Hong');
4: writeln('Sinh nhat Hai');
8: writeln('Sinh nhat Duc');
11: writeln('Sinh nhat Yen');
12: writeln('Sinh nhat Thanh');
end;
readln
end.
[/codesyntax]
Với Case … else tương tự như Case … Of, chỉ thêm điều kiện sai (tương tự hàm if … else)
[codesyntax lang="pascal"]
program hien_thi_sinhnhat;
uses crt;
var thang:byte;
begin
clrscr;
write('Nhap thang');
readln(thang);
case thang of
1: writeln('Sinh nhat Hoa');
2: writeln('Sinh nhat Lan, Quan');
3: writeln('Sinh nhat Hong');
4: writeln('Sinh nhat Hai');
8: writeln('Sinh nhat Duc');
11: writeln('Sinh nhat Yen');
12: writeln('Sinh nhat Thanh');
else
writeln('Sinh nhat Hoang');
end; // end of case
readln
end. //end of program
[/codesyntax]