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 (189.79 KB, 12 trang )
<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>
<b>8.1.1. Câu lệnh IF dạng 1:</b>
<b> 8.1.1.1. Cú pháp, lưu đồ và ý nghĩa:</b>
<i> Cú pháp :</i>
<b> IF Ðiềukiện THEN LệnhP ;</b>
Ð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 .
<i> Ý nghĩa: Tùy theo Ðiềukiện là đúng hay sai mà quyết định có làm LệnhP hay </i>
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.
<b> 8.1.1.2. Các ví dụ :</b>
<b> 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ố đó.</b>
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 tốn gồm hai
bước:
Bước 1: Gán số thứ nhất vào Max, tức là:
<b> Max:=a;</b>
<i> Bước 2: Kiểm tra nếu Max nhỏ hơn số thứ hai thì gán số thứ hai vào Max:</i>
<b> If Max < b then Max:=b;</b>
<i> Bước 3: In gía trị Max lên màn hình.</i>
* 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:
<b> PROGRAM VIDU81;</b>
<b> { Tim Max của hai so }</b>
<b> Var a, b, max : Real;</b>
<b> Begin</b>
<b> Write(‘ Nhap a va b :’); Readln(a,b);</b>
<b> Max :=a ;</b>
<b> If Max < b then Max:=b ;</b>
<b> Writeln(‘ So lon nhat la: ‘ , Max:6:2); </b>
<b> Readln;</b>
<b> End. </b>
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:
<b> Min:=a;</b>
<b> If Min > b then Min:=b;</b>
Có thể mở rộng thuật tố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,
<b> If Max < b then Max:=b; { Max là số lớn nhất của a và b }</b>
<b> If Max < c then Max:=c; { Max là số lớn nhất của a, b và c }</b>
<b> 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 </b>
sinh viên theo DTB như sau:
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.
<b> PROGRAM VIDU82;</b>
<b> { Phân loại sinh viên }</b>
<b> Var</b>
<b> Ho_ten: String[18];</b>
<b> DTB: Real;</b>
<b> Loai: String[6];</b>
<b> Begin</b>
<b> Write(‘ Nhap ho va ten :’);</b>
<b> Write(‘ Nhap điem trung binh :’);</b>
<b> Readln(DTB);</b>
{ phân loại theo DTB }
<b> If DTB< 5 then Loai:=‘Kem’;</b>
<b> If (DTB>= 5) and (DTB<7) then Loai:=‘Tbinh’;</b>
<b> If (DTB >= 7) and (DTB< 9) then Loai:=‘Kha’;</b>
<b> If DTB >= 9 then Loai:=‘Gioi’;</b>
<b> Writeln(Ho_ten, #32 , DTB:4:1 , #32 , Loai); { #32 là ký tự trắng }</b>
<b> Readln;</b>
Chạy<VD82.EXE>
Chép file nguồn <VD82.PAS>
<b> </b>
<b> 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:</b>
Ax2<sub> + Bx + C = 0</sub>
Việc đầu tiên là phải tính Delta :
Delta = B2 <sub>- 4AC</sub>
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ó hai nghiệm :
Chương trình cụ thể như sau:
<b> PROGRAM VIDU83;</b>
<b> { Giải phương trình bậc 2 }</b>
<b> Var</b>
<b> A, B, C, Delta, X1, X2 : Real;</b>
<b> Begin</b>
<b> Repeat</b>
<b> Write( ‘ Nhap he so A khac khong :’);</b>
<b> Readln(A);</b>
<b> Until A<>0;</b>
<b> Readln(B, C);</b>
<b> Delta:=B*B - 4*A* C;</b>
<b> If Delta < 0 then Writeln( ‘ Ptrinh vô nghiệm! ‘); </b>
<b> If Delta = 0 then </b>
<b> begin</b>
<b> X1:=-B/(2*A);</b>
<b> Writeln(‘ Có ng. kép X1=X2= ‘ , X1:8:2);</b>
<b> end;</b>
<b> If Delta > 0 then </b>
<b> begin</b>
<b> X1 := (-B+ Sqrt(Delta) ) / (2*A);</b>
<b> X2 := (-B - Sqrt(Delta) ) / (2*A);</b>
<b> Writeln(‘ Có hai nghiệm : ’);</b>
<b> Writeln(‘X1= ‘ , X1:8:2);</b>
<b> Writeln(‘X2= ‘ , X2:8:2);</b>
<b> end;</b>
<b> Readln;</b>
<b> End.</b>
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:
<b> X1:=-B/(2*A);</b>
<b> Writeln(‘ Có ng. kép X1=X2= ‘ , X1:8:2);</b>
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.
<b> 8.1.2. Câu lệnh IF dạng 2:</b>
<i> Cú pháp :</i>
<b>IF Ðiềukiện THEN LệnhP</b>
<b>ELSE</b>
<b>LệnhQ ;</b>
<i> Chú ý : </i>
<i>Trước từ khóa ELSE khơng có dấu chấm phẩy. </i>
<i>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 </i>
<i>và end.</i>
<i> Ý nghĩa của lệnh: </i>
<i>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 </i>
<i>LệnhQ . </i>
<i>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 </i>
<i>lệnh kế tiếp ở sau LệnhQ.</i>
<i>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ế</i>
<i> </i>
<i><b> If a<b then Max:=b else Max:=a; </b></i>
<i> 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 </i>
<i>chúng:</i>
<i><b> PROGRAM VIDU84;</b></i>
<i><b> { Tim so lon nhat va so nho nhat của hai so }</b></i>
<i><b> Var</b></i>
<i><b> a, b, Max, Min : Real;</b></i>
<i><b> Begin</b></i>
<i><b> Write(‘ Nhap a va b :’);</b></i>
<i><b> Readln(a,b);</b></i>
<i><b> If a < b then</b></i>
<i><b> begin</b></i>
<i><b> Max:= b;</b></i>
<i><b> Min:= a;</b></i>
<i><b> end </b></i>
<i><b> else { trước else khơng có dấu ; } </b></i>
<i><b> begin </b></i>
<i><b> Max:= a;</b></i>
<i><b> Writeln(‘ So lon nhat la: ‘ , Max:6:2);</b></i>
<i><b> Writeln(‘ So nho nhat la: ‘ , Min:6:2);</b></i>
<i><b> Readln;</b></i>
<i><b> End. </b></i>
<i> Chạy<VD84.EXE></i>
<i><b> </b></i> <i><b>8.1.3. Câu lệnh IF lồng nhau : </b></i>
<i> 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 </i>
<i>trúc IF lồng nhau. Chẳng hạn dưới đây là hai câu lệnh IF... ELSE lồng nhau :</i>
<i><b> IF Ðiềukiện1 THEN</b></i>
<i><b> If Ðiềukiện2 then LệnhP</b></i>
<i><b> else</b></i>
<i><b> LệnhQ</b></i>
<i><b> ELSE</b></i>
<i><b> LệnhR ;</b></i>
<i><b> 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ố </b></i>
<i>điện kế tháng này (chiso2), tính tiền điện tháng này cho hộ, biết rằng :</i>
<i>Mỗi kw trong 60 kw đầu tiên có đơn gía là 5đ,</i>
<i>Từ kw thứ 61 đến kw thứ 160 có đơn giá 8đ,</i>
<i>Từ kw thứ 161 trở lên có đơn gía 10đ.</i>
<i> 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à </i>
<i>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ụ < </i>
<i>60 nên số tiền sẽ là:</i>
<i> Tien = 50*5= 250đ.</i>
<i> Nếu chiso2=1150 thì Ldtt = 1150-1020=130, do lượng điện tiêu thụ vượt qúa 60 kw </i>
<i>nhưng chưa vượt qúa 160 kw nên tiền điện được tính là:</i>
<i> Tien=60*5 + (130-60) *8 = 860 đ.</i>
<i> 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</i>
<i>tiền điện sẽ là:</i>
<i> Tien=60*5 + 100*8 + (214-160)*10= 300+800+54*10= 1640 đ.</i>
<i> Chương trình được viết như sau:</i>
<i><b> Ho_ten: String[18];</b></i>
<i><b> chiso1, chiso2, Ldtt, Tien : Real;</b></i>
<i><b> Begin</b></i>
<i><b> Write(‘ Nhap ho va ten :’);</b></i>
<i><b> Readln(Ho_ten);</b></i>
<i><b> Write(‘ Nhap chỉ số tháng trước, chỉ số tháng này: ‘);</b></i>
<i><b> Readln( chiso1, chiso2);</b></i>
<i><b> Ldtt:=chiso2- chiso1; </b></i>
<i><b> If Ldtt<= 60 then Tien:=Ldtt*5 </b></i>
<i><b> else </b></i>
<i><b> if Ldtt <=160 then Tien:=60*5+(Ldtt - 60)*8</b></i>
<i><b> else</b></i>
<i><b> Tien:=60*5 + 100*8 + (Ldtt - 160) * 10;</b></i>
<i><b> Writeln(‘ Họ và tên là ‘, Ho_ten);</b></i>
<i><b> Writeln(‘ Tiền phải trả là ‘ , Tien:10:2);</b></i>
<i><b> Readln;</b></i>
<i><b> End. </b></i>
<i> Chạy<VD85.EXE></i>
<i> Chép file nguồn <VD85.PAS></i>
<i><b> Ví dụ 8.6: Nhập số thực x bất kỳ, tính : </b></i> <i> </i>
<i> Trong Turbo Pascal khơng có hàm tính căn bậc ba của x. Ðể tính </i> <i>ta phải dùng hai </i>
<i>hàm Exp(x) và Ln(x).</i>
<i> </i>
<i> Vậy :</i>
<i> </i>
<i> Chương trình như sau:</i>
<i><b> x, y : Real;</b></i>
<i><b> Begin</b></i>
<i><b> Write(‘ Nhap x :’);</b></i>
<i><b> Readln(x);</b></i>
<i><b> { tinh y }</b></i>
<i><b> If x= 0 then y:=0</b></i>
<i><b> else</b></i>
<i><b> If x> 0 then y:=Exp( 1/3*ln(x) )</b></i>
<i><b> else</b></i>
<i><b> y:= - Exp( 1/3*ln(-x) );</b></i>
<i><b> Writeln(‘ gia tri y= ‘ , y:8:4);</b></i>
<i><b> Readln;</b></i>
<i><b> End. </b></i>
<i> Chép file nguồn <VD86.PAS></i>
<i><b> 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 </b></i>
<i>theo vần A, B, C, ...Ví dụ, nhập ba tên là MAI, TUAN, BINH, thì in ra là BINH, MAI, TUAN.</i>
<i><b> PROGRAM VIDU87;</b></i>
<i><b> { Sắp xếp ba tên}</b></i>
<i><b> Var</b></i>
<i><b> T1, T2, T3 : String[8];</b></i>
<i><b> Begin</b></i>
<i><b> Write( ‘Nhập tên thứ nhất: ‘);</b></i>
<i><b> Readln(T1);</b></i>
<i><b> Write( ‘Nhập tên thứ hai: ‘);</b></i>
<i><b> Readln(T2);</b></i>
<i><b> Write( ‘Nhập tên thứ ba: ‘);</b></i>
<i><b> Readln(T3);</b></i>
<i><b> Writeln(‘ Các tên được sắp thứ tự là:’); </b></i>
<i><b> IF T1<T2 THEN</b></i>
<i><b> If T2<T3 then writeln(T1, #32 , T2, #32 , T3)</b></i>
<i><b> Else { tức T3 <= T2 }</b></i>
<i><b> if T1<T3 then writeln(T1, #32 , T3, #32, T2)</b></i>
<i><b> else { tức T3 <= T1 }</b></i>
<i><b> writeln(T3, #32, T1, #32, T2)</b></i>
<i><b> ELSE { tức là T2<= T1}</b></i>
<i><b> If T1<T3 then writeln(T2, #32, T1, #32, T3)</b></i>
<i><b> Else { tức là T3<= T1}</b></i>
<i><b> writeln(T3, #32, T2, #32, T1);</b></i>
<i><b> Readln;</b></i>
<i><b> End. </b></i>
<i> Chạy<VD87.EXE></i>
<i> Chép file nguồn <VD87.PAS></i>
<i> 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 </i>
<i>mảng ta sẽ giải bài toán này gọn hơn.</i>