Tải bản đầy đủ (.pdf) (22 trang)

CÂU LỆNH IF pptx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (3.4 MB, 22 trang )

CÂU LỆNH IF
8.1.1. Câu lệnh IF dạng 1:
8.1.1.1. Cú pháp, lưu đồ và ý nghĩa:
Cú pháp :
IF Ðiềukiện THEN LệnhP ;
Ðiềukiện là một biểu thức lôgic cho kết qủa TRUE (đúng) hay FALSE
(sai). LệnhP có thể là một lệnh đơn giản hoặc một lệnh có cấu trúc. Nếu
LệnhP là một lệnh ghép, tức là gồm nhiều lệnh, thì nhớ là các lệnh này phải
được đặt trong khối: begin và end .

Ý nghĩa: Tùy theo Ðiềukiện là đúng hay sai mà quyết định có làm
LệnhP hay không. Nếu Ðiềukiện là đúng thì làm LệnhP rồi chuyển sang lệnh
kế tiếp ở phía dưới. Nếu Ðiềukiện là sai thì không làm LệnhP mà chuyển
ngay sang lệnh kế tiếp. Sơ đồ?cú pháp của lệnh IF được vẽ trong hình 8.1.
8.1.1.2. Các ví dụ :
Ví dụ 8.1: Nhập vào hai số a và b, tìm và in lên màn hình số lớn nhất
của hai số đó.
Ta dùng một biến phụ đặt tên là Max để chứa gía trị lớn nhất phải tìm.
Thuật toán gồm hai bước:
Bước 1: Gán số thứ nhất vào Max, tức là:
Max:=a;
Bước 2: Kiểm tra nếu Max nhỏ hơn số thứ hai thì gán số thứ hai vào
Max:
If Max < b then Max:=b;
Bước 3: In gía trị Max lên màn hình.
Giải thích: Sau bước 1, biến Max có gía trị bằng a. Sang bước 2, có thể
xảy ra hai tình huống :
* Hoặc là Max < b , tức b là số lớn nhất, khi đó gía trị lớn nhất b được
gởi vào biến Max
* Hoặc là Max >= b, tức gía trị của Max là lớn nhất rồi nên không phải
làm gì nữa.


Chương trình cụ thể như sau:
PROGRAM VIDU81;
{ Tim Max của hai so }
Var
a, b, max : Real;
Begin
Write(‘ Nhap a va b :’);
Readln(a,b);
Max :=a ;
If Max < b then Max:=b ;
Writeln(‘ So lon nhat la: ‘ , Max:6:2);
Readln;
End.
Chạy<VD81.EXE>
Chép file nguồn <VD81.PAS>
Nhận xét:
Việc tìm số nhỏ nhất của hai số a, b cũng tương tự, ta dùng biến phụ
Min chứa gía trị nhỏ nhất, và thực hiện các lệnh sau:
Min:=a;
If Min > b then Min:=b;
Có thể mở rộng thuật toán trên để tìm số lớn nhất trong ba số hoặc nhiều
hơn. Ðầu tiên ta tìm số lớn nhất của hai số a và b, ký hiệu là Max, sau đó tìm
số lớn nhất của hai số Max và c, cũng vẫn ký hiệu là Max. Dưới đây là các
lệnh chính để tìm số lớn nhất trong ba số a, b, c :
Max:=a;
If Max < b then Max:=b; { Max là số lớn nhất của a và b }
If Max < c then Max:=c; { Max là số lớn nhất của a, b và c }
Ví dụ 8.2: Nhập vào họ tên và điểm trung bình (DTB) của một sinh
viên. Hãy phân loại sinh viên theo DTB như sau:
Loại là Kém nếu DTB<5,

là Tbình nếu 5  DTB<7,
là Khá nếu 7  DTB<9,
là Giỏi nếu DTB  9.
In họ tên, điểm trung bình và phân loại sinh viên.
Trong chương trình, ta dùng một biến phụ đặt tên là Loai để lưu trữ phân
loại của sinh viên. Vì có năm loại cầ? lưu trữ là các chuỗi ‘Kem’, ‘Tbinh’,
‘Kha’, ‘Gioi’, nên biến Loai phải có kiểu dữ liệu là kiểu chuỗi.
PROGRAM VIDU82;
{ Phân loại sinh viên }
Var
Ho_ten: String[18];
DTB: Real;
Loai: String[6];
Begin
Write(‘ Nhap ho va ten :’);
Readln(Ho_ten);
Write(‘ Nhap điem trung binh :’);
Readln(DTB);
{ phân loại theo DTB }
If DTB< 5 then Loai:=‘Kem’;
If (DTB>= 5) and (DTB<7) then Loai:=‘Tbinh’;
If (DTB >= 7) and (DTB< 9) then Loai:=‘Kha’;
If DTB >= 9 then Loai:=‘Gioi’;
Writeln(Ho_ten, #32 , DTB:4:1 , #32 , Loai); { #32 là ký tự trắng }
Readln;
End.
Chạy<VD82.EXE>
Chép file nguồn <VD82.PAS>

Ví dụ 8.3: Nhập vào ba hệ số A, B, C, (A  0) rồi giải và biện luận

phương trình bậc hai:
Ax
2
+ Bx + C = 0
Việc đầu tiên là phải tính Delta :
Delta = B
2
- 4AC
Sau đó biện luận theo Delta:
Nếu Delta<0 : phương trình vô nghiệm
Nếu Delta=0 : phương trình có nghiệm kép :

Nếu Delta > 0: phương trình có hai nghiệm :

Chương trình cụ thể như sau:
PROGRAM VIDU83;
{ Giải phương trình bậc 2 }
Var
A, B, C, Delta, X1, X2 : Real;
Begin
Repeat
Write( ‘ Nhap he so A khac khong :’);
Readln(A);
Until A<>0;
Write( ‘ Nhap cac he so B, C: ‘);
Readln(B, C);
Delta:=B*B - 4*A* C;
If Delta < 0 then Writeln( ‘ Ptrinh vô nghiệm! ‘);
If Delta = 0 then
begin

X1:=-B/(2*A);
Writeln(‘ Có ng. kép X1=X2= ‘ , X1:8:2);
end;
If Delta > 0 then
begin
X1 := (-B+ Sqrt(Delta) ) / (2*A);
X2 := (-B - Sqrt(Delta) ) / (2*A);
Writeln(‘ Có hai nghiệm : ’);
Writeln(‘X1= ‘ , X1:8:2);
Writeln(‘X2= ‘ , X2:8:2);
end;
Readln;
End.
Chạy<VD83.EXE>
Chép file nguồn <VD83.PAS>
Trong chương trình có ba lệnh IF xét riêng từng trường hợp Delta âm,
bằng không hoặc dương. Chú ý rằng khi Delta=0 thì phải làm hai lệnh:
X1:=-B/(2*A);
Writeln(‘ Có ng. kép X1=X2= ‘ , X1:8:2);
nên hai lệnh này phải được đặt giữa hai từ khóa begin và end để tạo thành
một câu lệnh ghép.
Tương tự, khi Delta>0 thì phải làm năm lệnh, và do đó cả năm lệnh cũng
phải để trong khối begin và end.
Chương trình có sử dụng lệnh Repeat Until (sẽ trình bày ở phần sau) để
buộc người dùng phải nhập hệ số A 0, nếu nhập A=0 thì phải nhập lại cho
đến khi A 0 mới cho làm tiếp các lệnh ở phía dưới.
8.1.2. Câu lệnh IF dạng 2:
Cú pháp :
IF Ðiềukiện THEN LệnhP
ELSE

LệnhQ ;
Chú ý :
Trước từ khóa ELSE không có dấu chấm phẩy.
LệnhP và LệnhQ có thể là một lệnh ghép, tức là gồm nhiều lệnh được đặt
trong khối begin và end.
Ý nghĩa của lệnh:
Tùy theo Ðiềukiện là đúng hay sai mà quyết định làm một trong hai lệnh:
LệnhP hoặc LệnhQ .
Nếu Ðiềukiện là đúng thì làm LệnhP, không làm LệnhQ, mà chuyển ngay
sang thực hiện lệnh kế tiếp ở sau LệnhQ.
Ngược lại, nếu Ðiềukiện là sai thì không làm LệnhP mà làm LệnhQ rồi
chuyển sang lệnh kế tiếp ở sau LệnhQ.

Ví dụ 8.4: Ðể tìm số lớn nhất của hai số a và b, dùng lệnh:
If a<b then Max:=b else Max:=a;
Chương trình dưới đây sẽ nhập vào hai số a và b, tìm và in số nhỏ nhất và
số lớn nhất của chúng:
PROGRAM VIDU84;
{ Tim so lon nhat va so nho nhat của hai so }
Var
a, b, Max, Min : Real;
Begin
Write(‘ Nhap a va b :’);
Readln(a,b);
If a < b then
begin
Max:= b;
Min:= a;
end
else { trước else không có dấu ; }

begin
Max:= a;
Min:= b;
end;
Writeln(‘ So lon nhat la: ‘ , Max:6:2);
Writeln(‘ So nho nhat la: ‘ , Min:6:2);
Readln;
End.
Chạy<VD84.EXE>
Chép file nguồn <VD83.PAS>
8.1.3. Câu lệnh IF lồng nhau :
Trong câu lệnh IF, nếu LệnhP hoặc LệnhQ, hoặc cả hai, lại là câu lệnh
IF thì ta có cấu trúc IF lồng nhau. Chẳng hạn dưới đây là hai câu lệnh IF
ELSE lồng nhau :
IF Ðiềukiện1 THEN
If Ðiềukiện2 then LệnhP
else
LệnhQ
ELSE
LệnhR ;
Ví dụ 8.5: Nhập vào họ tên một chủ hộ, chỉ số điện kế tháng trước
(chiso1) và chỉ số điện kế tháng này (chiso2), tính tiền điện tháng này cho
hộ, biết rằng :
Mỗi kw trong 60 kw đầu tiên có đơn gía là 5đ,
Từ kw thứ 61 đến kw thứ 160 có đơn giá 8đ,
Từ kw thứ 161 trở lên có đơn gía 10đ.
Ví dụ, ông A có chỉ số điện tháng trước là chiso1=1020 và chỉ số điện
tháng này là chiso2=1070, lượng điện tiêu thụ tính ra là Ldtt= 1070-
1020=50, do lượng điện tiêu thụ < 60 nên số tiền sẽ là:
Tien = 50*5= 250đ.

Nếu chiso2=1150 thì Ldtt = 1150-1020=130, do lượng điện tiêu thụ vượt
qúa 60 kw nhưng chưa vượt qúa 160 kw nên tiền điện được tính là:
Tien=60*5 + (130-60) *8 = 860 đ.
Nếu chiso2=1234, thì Ldtt = 1234-1020= 214, do lượng điện tiêu thụ
vượt qúa 160 kw nên tiền điện sẽ là:
Tien=60*5 + 100*8 + (214-160)*10= 300+800+54*10= 1640 đ.
Chương trình được viết như sau:
PROGRAM VIDU85;
{ Tính tiền điện }
Var
Ho_ten: String[18];
chiso1, chiso2, Ldtt, Tien : Real;
Begin
Write(‘ Nhap ho va ten :’);
Readln(Ho_ten);
Write(‘ Nhap chỉ số tháng trước, chỉ số tháng này: ‘);
Readln( chiso1, chiso2);
Ldtt:=chiso2- chiso1;
If Ldtt<= 60 then Tien:=Ldtt*5
else
if Ldtt <=160 then Tien:=60*5+(Ldtt - 60)*8
else
Tien:=60*5 + 100*8 + (Ldtt - 160) * 10;
Writeln(‘ Họ và tên là ‘, Ho_ten);
Writeln(‘ Tiền phải trả là ‘ , Tien:10:2);
Readln;
End.
Chạy<VD85.EXE>
Chép file nguồn <VD85.PAS>
Ví dụ 8.6: Nhập số thực x bất kỳ, tính :

Trong Turbo Pascal không có hàm tính căn bậc ba của x. Ðể tính
ta phải dùng hai hàm Exp(x) và Ln(x).
Áp dụng công thức toán học: x = e
lnx
với x>0, ta có:

Vậy :

Chương trình như sau:
PROGRAM VIDU86;
{ Tinh can bac ba cua x }
Var
x, y : Real;
Begin
Write(‘ Nhap x :’);
Readln(x);
{ tinh y }
If x= 0 then y:=0
else
If x> 0 then y:=Exp( 1/3*ln(x) )
else
y:= - Exp( 1/3*ln(-x) );
Writeln(‘ gia tri y= ‘ , y:8:4);
Readln;
End.
Chạy<VD86.EXE>
Chép file nguồn <VD86.PAS>
Ví dụ 8.7: Nhập tên của ba sinh viên, in các tên đó lên màn hình theo
thứ tự đã sắp xếp theo vần A, B, C, Ví dụ, nhập ba tên là MAI, TUAN,
BINH, thì in ra là BINH, MAI, TUAN.

PROGRAM VIDU87;
{ Sắp xếp ba tên}
Var
T1, T2, T3 : String[8];
Begin
Write( ‘Nhập tên thứ nhất: ‘);
Readln(T1);
Write( ‘Nhập tên thứ hai: ‘);
Readln(T2);
Write( ‘Nhập tên thứ ba: ‘);
Readln(T3);
Writeln(‘ Các tên được sắp thứ tự là:’);
IF T1<T2 THEN
If T2<T3 then writeln(T1, #32 , T2, #32 , T3)
Else { tức T3 <= T2 }
if T1<T3 then writeln(T1, #32 , T3, #32, T2)
else { tức T3 <= T1 }
writeln(T3, #32, T1, #32, T2)
ELSE { tức là T2<= T1}
If T1<T3 then writeln(T2, #32, T1, #32, T3)
Else { tức là T3<= T1}
if T2<T3 then writeln(T2, #32, T3, #32, T1)
else { tức là T3<= T2 }
writeln(T3, #32, T2, #32, T1);
Readln;
End.
Chạy<VD87.EXE>
Chép file nguồn <VD87.PAS>
Lệnh IF trong chương trình trên lồng nhau nhiều cấp nên rất phức tạp.
Khi học cấu trúc mảng ta sẽ giải bài toán này gọn hơn.

Chú y?/strong>: Trong câu lệnh IF lồng nhau, cách xác định từ khóa
ELSE nào đi với từ khóa 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à chưa có ELSE để bắt cặp.

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×