Tải bản đầy đủ
CÁC CÂU LỆNH CÓ CẤU TRÚC

CÁC CÂU LỆNH CÓ CẤU TRÚC

Tải bản đầy đủ

Trường Đại học Điện lực - Tập đoàn Điện lực Việt Nam

.

.

Nếu <Điều kiện> có giá trị FALSE thì ra
khỏi lệnh IF mà không làm gì.

Nếu <Điều kiện> có giá trị FALSE thì thực
hiện ;

6.2.1.4 Lưu đồ minh họa câu lệnh
Dạng khuyết

Dạng đủ
IF
Đ

S

Đ

Điều kiện

Công việc

Công việc 1

Điều kiện
S

Công việc 2

6.2.1.5 Ví dụ:
Ví dụ 6.1: Viết chương trình giải phương trình bậc nhất ax+b=0 với các hệ số a, b nhập từ bàn
phím.
Program
giai_phuong_trinh_bac_nhat;
Uses Crt;
Var a, b, x: Real;
BEGIN
ClrScr;
Write('Nhap he so a= '); ReadLn(a);
Write('Nhap he so b= '); ReadLn(b);
If a<>0 then
Begin
x:=-b/a;
WriteLn('Phuong trinh co nghiem x= ',x:8:3);
End
Else {a = 0}
If b=0 then
WriteLn('Phuong trinh co vo so nghiem')
Else {a = 0, b <> 0}
WriteLn('Phuong trinh vo nghiem ');
ReadLn;
END.
Giáo trình Tin học đại cương

118

Trường Đại học Điện lực - Tập đoàn Điện lực Việt Nam

.

.

6.2.1.6 Chú ý
- Câu lệnh ngay trước từ khoá ELSE của lệnh IF không có dấu ;
- Trong trường hợp dùng các lệnh IF lồng nhau, nên viết IF ... THEN ... ELSE thành khối để
tiện kiểm tra khi có lỗi logic.
Chẳng hạn ta có thể viết một lệnh IF lồng nhau theo cấu trúc sau:
IF <Điều kiện 1> THEN

ELSE
IF <Điều kiện 2> THEN

ELSE ;
- Cần nắm được qui ước sau đây để hiểu ELSE đi với IF nào “ELSE gắn với IF gần nhất với nó
ngoài cặp BEGIN .. END sát nó.
- Nên trình bày chương trình khoa học, các lệnh tương ứng ngang hàng nhau, lệnh nào nằm trong
điều kiện thì nên lui vào một chút so với câu điều kiện của nó, bạn sẽ dễ đọc chương trình và
chỉnh sửa lỗi.

6.2.2 Câu lệnh lựa chọn CASE
6.2.2.1 Ý nghĩa
Câu lệnh IF chỉ thực hiện rẽ 2 nhánh tương ứng với giá trị của biểu thức <Điều kiện>. Khi cần
lựa chọn để thực hiện một trong nhiều khả năng khác nhau ta phải dùng rất nhiều lệnh IF. Câu
lệnh CASE sẽ giới thiệu sau đây là lệnh rẽ nhánh theo giá trị cho phép lựa chọn để thực hiện 1
trong nhiều công việc.
6.2.2.2 Cú pháp
Dạng khuyết
Case of
Tập hằng 1: ;

Dạng đủ
Case of
Tập hằng 1: ;

Tập hằng 2: ;
....
Tập hằng i: ;
....
Tập hằng n: ;
End;

Tập hằng 2: ;
....
Tập hằng i: ;
....
Tập hằng n: ;
Else
;
End;

Trong đó:
- <Điều kiện> là biểu thức số học, cho kết quả là một kiểu vô hướng đếm được (nguyên, ký
tự, logic, liệt kê).
- (i=1,..,n) có thể là các hằng và các đoạn hằng, ví dụ:
Giáo trình Tin học đại cương

119

Trường Đại học Điện lực - Tập đoàn Điện lực Việt Nam

.

.

3: ;
5, 10..15: ;
2, 4, 6: ;
<5 : ;
’a’..’z’: ;
- có thể là lệnh đơn giản hoặc khối lệnh. Nếu 1 khối lệnh phải được đặt
trong Begin..End;
Giá trị của phải cùng kiểu với kiểu của và cũng phải là kiểu vô
hướng liệt kê.
6.2.2.3 Sự hoạt động
Sự thực hiện của lệnh CASE ..OF phụ thuộc vào giá trị của
Dạng khuyết

Dạng đủ

Nếu giá trị của thuộc
Nếu giá trị của thuộc
hằng i> thì được thực

hằng i> thì được thực hiện

hiện và ra khỏi lệnh CASE; Nếu giá trị

và ra khỏi lệnh CASE; Nếu giá trị của

của không thuộc tập hằng

không thuộc tập hằng nào thì

nào thì thoát ra khỏi lệnh CASE mà

thực hiện rồi thoát ra

không làm gì.

khỏi lệnh CASE .

Có thể biểu diễn câu lệnh theo sơ đồ hoạt động sau:

Biểuthứcchọn

TH1
Công
việc 1

TH2
......

Công
việc 2

THi
......

Công
việc i

TH n-1
Công
việc n-1

THn
Công
việc n

ELSE
Công
việc 0

Hình 6.2a: Sơ đồ hoạt động của câu lệnh CASE dạng đủ.

Giáo trình Tin học đại cương

120

Trường Đại học Điện lực - Tập đoàn Điện lực Việt Nam

.

.

Biểuthứcchọn

TH1
Công
việc 1

TH2
Công
việc 2

THi
......

Công
việc i

......

TH n-1
Công
việc n-1

THn
Công
việc n

Hình 6.2b: Sơ đồ hoạt động của câu lệnh CASE dạng khuyết.
6.2.2.4 Lệnh IF .. THEN .. ELSE có thể chuyển thành CASE .. OF như sau
IF <Điều kiện> THEN

ELSE
;

Case <Điều kiện> of
TRUE : ;
FALSE: ;
End;

Ví dụ 6.2: Viết chương trình nhập vào tháng (và năm nếu cần), máy sẽ đưa ra số ngày của
tháng đó.
Program VIDU_6_2;
Uses Crt;
Var
songay, thang: Byte;
nam: Integer;
BEGIN
ClrScr;
Write('Cho biet thang (dang so): '); ReadLn(thang);
Write('Cho biet nam '); ReadLn(nam);
Case thang of
4,6,9,11: songay:=30;
2:If nam mod 4 = 0 then
if (nam mod 100 = 0)and(nam mod 400 <> 0)then
songay:=28
else songay:=29;
Else songay:=28;
Giáo trình Tin học đại cương

121

Trường Đại học Điện lực - Tập đoàn Điện lực Việt Nam

.

.

Else { else cua CASE}
songay:=31;
End; {của Case}
{In ket qua }
WriteLn('Thang ', thang, '/',nam,' co: ',songay,' ngay')
ReadLn;
END.
x  y
Ví dụ 6.3: Nhập vào hai số x, y. Tính giá trị biểu thức sau: F= 
| x  y |
Với bài này ta có thể giải bằng cách sử dụng câu lệnh IF hoặc CASE
Cách 1: sử dụng câu lệnh IF
Program vidu_6_3_IF;
Var x,y,F:real;
Begin
Write(‘ Nhap x = ’);readln(x);
Write(‘ Nhap y = ‘);readln(y);
If
x>y
then
F:= x+y
Else {nguoc lai cua x>y tuc la x<=y}
F:=abs(x+y);
Writeln(‘ Gia tri cua bieu thuc F = ‘,F:8:2);
Readln;
End.

Nếu x>y
Nếu x<=y

Cách 2: sử dụng câu lệnh CASE
Program vidu_6_3_CASE;
Var x,y,F:real;
Begin
Write(‘ Nhap x = ’);readln(x);
Write(‘ Nhap y = ‘);readln(y);
Case x>y of
True: F:= x+y;
False: F:=abs(x+y);
End;
Writeln(‘ Gia tri cua bieu thuc F = ‘,F:8:2);
Readln;
End.
Ví dụ 6.4: Lập chương trình tính chiều dài đoạn thẳng AB khi đã biết toạ độ hai đầu mút (Xa,
Ya) và (Xb, Yb).
Program VIDU_6_4;
Giáo trình Tin học đại cương

122

Trường Đại học Điện lực - Tập đoàn Điện lực Việt Nam

.

.

Uses Crt;
Var
Xa, Ya, Xb, Yb, d: Real;
BEGIN
ClrScr;
Write('Nhap toa do x cua diem A Xa= '); ReadLn(Xa);
Write('Nhap toa do y cua diem A Ya= '); ReadLn(Ya);
Write('Nhap toa do x cua diem B Xb= '); ReadLn(Xb);
Write('Nhap toa do y cua diem B Yb= '); ReadLn(Yb);
{ Tinh do dai doan thang AB }
d := SQRT(SQR(Xa-Xb)+SQR(Ya-Yb));
{ In ket qua }
WriteLn('Do dai doan thang AB = ', d:10:4);
ReadLn;
END.
Ví dụ 6.5: Lập chương trình biện luận nghiệm của phương trình bậc hai ax2+bx+c=0 với các hệ
số a, b nhập vào từ bàn phím.
Program
VIDU_6_5;
Uses
Crt;
Var
a, b, c, x1, x2, delta: Real;
BEGIN
ClrScr;
Write('Nhap he so thu nhat a= '); ReadLn(a);
Write('Nhap he so thu hai b= '); ReadLn(b);
Write('Nhap he so thu ba
c= '); ReadLn(c);
If a=0 then
WriteLn('Phuong trinh bac hai suy bien, khong xet!')
Else
Begin
delta := SQR(b)-4*a*c; { Tinh delta }
{ Xet delta }
If delta < 0 then
WriteLn('Phuong trinh vo nghiem')
Else
If Delta = 0 then
Begin
WriteLn('Phuong trinh co nghiem kep');
x1:=-b/(2*a);
WriteLn('PT co nghiem kep x1=x2= ',x1:8:3);
end
Else
Begin
123
Giáo trình Tin học đại cương

Trường Đại học Điện lực - Tập đoàn Điện lực Việt Nam

.

.

WriteLn('PT co hai nghiem rieng biet');
x1:=(-b+SQRT(Delta))/(2*a);
x2:=(-b-SQRT(Delta))/(2*a);
WriteLn('Nghiem thu nhat cua PT la x1= ',x1:8:3);
WriteLn('Nghiem thu hai cua PT la x2= ',x2:8:3);
End;
End;
ReadLn;
END.

6.3. Câu lệnh lặp xác định FOR
6.3.1. Ý nghĩa:
Câu lệnh lặp là câu lệnh mà cho phép thực hiện lặp đi lặp lại nhiều lần một số công việc.
Câu lệnh FOR là câu lệnh cho phép lặp với số lần lặp biết trước.

6.3.2 Câu lệnh FOR tiến (Dạng 1)
6.3.2.1 Cú pháp
For Biến_điều_khiển:= to do ;
Trong đó:

Biến_điều_khiển, , phải là dữ liệu kiểu vô hướng đếm được như
kiểu số nguyên, kiểu ký tự, kiểu logic...

có thể là một lệnh hoặc một khối lệnh.
6.3.1.2 Sự hoạt động
Bước 1: Biến_điều_khiển được khởi tạo là
Bước 2: Kiểm tra điều kiện Biến_điều_khiển có nhỏ hơn hay bằng (<=) Giá_trị_cuối
không,

hay

Nếu đúng thực hiện bước 3, nếu sai thực hiện bước 4.
Bước 3:
Bước 3.1: Thực hiện
Bước 3.2: Gán giá trị ngay sau cho Biến_điều_khiển bằng succ(của biến điều khiển ở
bước trước)
Bước 3.3: Quay lại bước 2.
Bước 4: Ra khỏi vòng lặp For
Chú ý: Giá trị đầu thường là <= giá trị cuối, tuy nhiên nếu giá trị đầu > giá trị cuối thì vòng lặp
sẽ dừng ngay khi kiểm tra điều kiện đầu tiên.

Giáo trình Tin học đại cương

124

Trường Đại học Điện lực - Tập đoàn Điện lực Việt Nam

.

.

6.3.2.3 Lưu đồ thể hiện sự hoạt động
Biến_điều_khiển:=

Hình 6.4. Lưu đồ hoạt động của
vòng lặp xác định FOR tiến

Biếnđiềukhiển<=
+
Công việc

Biếnđiềukhiển:=SUCC(biếnđiềukhiển)

6.3.2.4. Ví dụ
Ví dụ_6.6: Tính tổng S=1+1/2+1/3+...+1/n . Biết rằng n là một số nguyên dương được đọc vào
từ bàn phím.
Program
VIDU_6_6; { Chuong trinh su dung FOR tien }
Uses Crt;
Var
i, n: Integer;
s: Real;
BEGIN
ClrScr;
Write('Nhap n= '); ReadLn(n);
s:=0;
For i:=1 to n do
s:=s+1/i;
WriteLn('Tong S= ',s:8:3);
ReadLn;
END.

6.3.3 Câu lệnh FOR lùi (Dạng 2)
6.3.3.1 Cú pháp
For Biến_điều_khiển:= to do ;
Trong đó:
 Biến_điều_khiển, , phải là dữ liệu kiểu vô hướng đếm được như
kiểu số nguyên, kiểu ký tự, kiểu logic...
Giáo trình Tin học đại cương

125

Trường Đại học Điện lực - Tập đoàn Điện lực Việt Nam

.

.





có thể là một lệnh hoặc một khối lệnh. Nếu là một khối lệnh thì phải được đặt
trong Begin ... End;
Thường thì giá_trị_đầu >= giá_trị_cuối.

6.3.3.2 Sự hoạt động
Bước 1: Biến_điều_khiển được khởi tạo bằng
Bước 2: Kiểm tra điều kiện Biến_điều_khiển lớn hơn hay bằng (>=)
Nếu đúng thực hiện bước 3, nếu sai thực hiện bước 4.
Bước 3:
Bước 3.1: Thực hiện
Bước 3.2: Gán giá trị cho Biến_điều_khiển bởi pred (biến điều khiển ở bước trước)
Bước 3.3: Quay lại bước 2.
Bước 4: Ra khỏi vòng lặp For
6.3.3.3 Lưu đồ thể hiện sự hoạt động
Biến_điều_khiển := Giá trị đầu

Hình 6.5. Lưu đồ hoạt động
của vòng lặp xác định FOR lùi

Biến_điều_khiển >= Giá trị cuối
+
Công việc

Biến_điều_khiển := PRED( Biến_điều_khiển)

Ví dụ 6.7: Xét ví dụ 6.6 nhưng sử dụng câu lệnh FOR lùi
Program
VIDU_6_7;
Uses
Crt;
Var
i, n: Integer;
s: Real;
BEGIN
ClrScr;
Write('Nhap n= '); ReadLn(n);
s:=0;
For i:=n downto 1 do s:=s+1/i;
Giáo trình Tin học đại cương

126

Trường Đại học Điện lực - Tập đoàn Điện lực Việt Nam

.

.

WriteLn('Tong S= ',s:8:3);
ReadLn;
END.
Ví dụ 6.8: Minh hoạ cho việc sử dụng biến điều khiển có kiểu CHAR: Viết chương trình in ra
màn hình 2 dòng: dòng thứ nhất in các chữ thường a z, dòng thứ hai in các chữ IN HOA từ Z
A.
Program vidu_6_8;
Uses
Crt;
Var
ch: Char;
BEGIN
ClrScr;
WriteLn('In cac ky
For ch:='a' to 'z'
WriteLn;
WriteLn;
WriteLn('In cac ky
For ch:='Z' downto
WriteLn;
ReadLn;
END.

tu viet thuong tu a ==> z');
do Write(ch:3);

tu viet IN HOA tu Z ==> A');
'A' do Write(ch:3);

6.4. Câu lệnh lặp không xác định WHILE và REPEAT
6.4.1 Ý nghĩa
Rất nhiều trường hợp bài toán cần phải lặp đi lặp lại một hoặc một số công việc song lại
không thể xác định được là phải lặp bao nhiêu lần, do vậy không thể dùng lệnh FOR được.
Pascal cung cấp 2 lệnh là REPEAT và WHILE để lặp cho những trường hợp không biết trước số
lần lặp.

6.4.2 Câu lệnh lặp không xác định kiểm tra điều kiện sau REPEAT
Câu lệnh REPEAT là câu lệnh lặp thực hiện công việc trước, kiểm tra điều kiện sau. Câu
lệnh này thường được sử dụng trong những bài toán mà ta chỉ biết một điều kiện kiểm tra, cần
lặp đi lặp lại công việc cho đến khi điều kiện này được thỏa mãn. Những trường hợp như tính
toán thỏa mãn sai số cho trước, chạy thử một chương trình nhiều lần để kiểm tra mà chỉ cần ấn
Ctrl+F9 một lần, chương trình chỉ dừng khi ta chọn K hoặc k cho câu hỏi “Co tiep tuc nua
khong? (C/K)” hay nhấn phím ESC cho câu hỏi “Co tiep tuc nua khong? (nhan ESC de dung),…
Thực hiện câu lệnh REPEAT - UNTIL như sau:
6.4.2.1 Cú pháp
Repeat
;
Until <Điều kiện>;
Giáo trình Tin học đại cương

127

Trường Đại học Điện lực - Tập đoàn Điện lực Việt Nam

.

.

Trong đó:
 <Điều kiện> là một biểu thức logic, trả về giá trị TRUE hoặc FALSE
Có thể là một lệnh hoặc một khối lệnh
6.4.2.2 Sự hoạt động
i) Thực hiện công việc Công_việc
ii) Tính giá trị của biểu thức logic điều_kiện,
iii) Nếu sai, quay về bước i),
iv) Nếu đúng, dừng và kết thúc vòng lặp.
6.4.2.3 Lưu đồ thể hiện sự hoạt động
Công việc
Hình 6.6. Lưu đồ hoạt động của
câu lệnh Repeat

Điều kiện đúng
+

6.4.2.4 Chú ý
đặt giữa 2 từ khoá Repeat và Until có thể là một lệnh hoặc một khối lệnh song
không cần phải đặt trong Begin...End;
 Trong khi thực hiện phải có một lệnh làm thay đổi giá trị của một biến thuộc
biểu thức logic <Điều kiện> để làm cho biểu thức logic tiến đến TRUE nhằm kết thúc vòng
lặp.
được thực hiện trước, <Điều kiện> được kiểm tra sau nên ít nhất
cũng được thực hiện một lần, ngay cả khi <Điều kiện> đã có giá trị TRUE.
 Câu lệnh lặp Repeat ... Until cũng dùng được trong trường hợp đã biết trước số lần lặp.
6.4.2.5 Ví dụ
Ví dụ 6.9: Tính tổng S=1+1/2+1/3+...+1/n . Biết rằng n là một số nguyên dương được đọc vào từ
bàn phím.
Program VIDU_6_9;
Uses
Crt;
Var
i, n: Integer;
s: Real;
BEGIN
ClrScr;
Write('Nhap n= '); ReadLn(n);
s:=0; i:=1;
Repeat
s:=s+1/i;
Giáo trình Tin học đại cương

128