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 (735.23 KB, 141 trang )
BỘ MÔN TIN HỌC
TRƯỜNG ĐẠI HỌC HOA LƯ
biến phải thuộc kiểu dữ liệu đơn giản đếm được, thường là kiểu nguyên, ký tự hay
lôgic, không thể là kiểu thực hay chuỗi.
m1, m2 là các biểu thức có cùng kiểu dữ liệu với biến.
LệnhP có thể là một lệnh đơn giản, lệnh có cấu trúc, hoặc là một lệnh ghép gồm nhiều
lệnh đặt trong khối begin và end.
m1≤ m2
False
True
b:=m1
LệnhP
b = m2
True
False
b:=b+1
Lệnh kế tiếp
Cấu trúc lệnh FOR dạng 1.
sơ đồ khối của lệnh For với b là viết tắt của biến.
•
Cách thức hoạt động của FOR:
Bước 1: Định giá cận: nếu m1 ≤ m2 thì tiếp tục, nếu không thoả, dừng.
Bước 2: Gán giá trị biến:= m1;
Bước 3: Thực hiện LệnhP
Bước 4: Nếu biến ≠ m2 thì tăng giá trị của biến: Inc(biến); rồi rồi quay lại bước 3.
Ngược lại thì chuyển sang lệnh kế tiếp ở phía dưới.
Tóm lại: LệnhP sẽ được làm đi làm lại, bắt đầu khi biến=m1, và kết thúc khi biến =m2, cả
thảy là m2-m1+1 lần. Vì thế, người ta gọi FOR là vòng lặp có số lần lặp đã biết trước.
b. Câu lệnh FOR dạng 2
•
Cú pháp:
FOR biến:= m1 DOWNTO m2 DO LệnhP;
•
Cách thức hoạt động của FOR dạng 2:
Bước 1: Định giá cận: nếu m1 ≥ m2 thì tiếp tục, nếu không thoả, dừng.
Bước 2: Gán giá trị biến:= m1;
Bước 3: Thực hiện LệnhP
Ngôn ngữ lập trình Pascal
52
BỘ MÔN TIN HỌC
TRƯỜNG ĐẠI HỌC HOA LƯ
Bước 4: Nếu biến ≠ m2 thì giảm giá trị của biến: Dec(biến); rồi rồi quay lại bước 3.
Ngược lại thì chuyển sang lệnh kế tiếp ở phía dưới.
m1≥ m2
False
True
b:=m1
LệnhP
b = m2
True
False
b:=b-1
Lệnh kế tiếp
Cấu trúc lệnh FOR dạng 2.
Các ví dụ cơ bản:
Ví dụ 4: Bài toán tính tổng:
Hãy tính tổng: S= 12 + 22+ 32+...+ 102
Thuật toán:
Bước 0: gán S:=0; { gán giá trị ban đầu cho S}
Bước 1: gán S:=S+1*1; { được S=12 }
Bước 2: gán S:=S+2*2; { được S=12+22}
Bước 3: gán S:=S+3*3; { S=12+22+32}
Bước 10: gán S:=S+10*10; { được S=12+22+32+...+102}
Quá trình từ bước 1 đến bước 10 được gọi là phép cộng dồn vào biến S. Tại bước
thứ i, lấy giá trị của biến S cộng với i 2, kết quả lại được gán cho biến S, do đó giá trị của
biến S được tăng thêm một lượng bằng i2. Khi i thay đổi từ 1 đến 10 thì các số 12, 22, 32, ...,
102 đều được cộng vào S, kết quả là sau bước thứ 10 giá trị của S đúng bằng tổng 1 2 + 22 +
32 + ... + 102.
Tóm lại, lệnh: S:=S + i*i; được làm cả thảy 10 lần, ứng với i=1, 2, ..., 10. Quá trình
này được diễn đạt bằng vòng lặp FOR, như sau:
For i:=1 To 10 DO S:=S+ i*i ;
Ngôn ngữ lập trình Pascal
53
BỘ MÔN TIN HỌC
TRƯỜNG ĐẠI HỌC HOA LƯ
Một cách tổng quát, để tính tổng:S= 12 + 22+ 32+...+ N2 , trong đó N là một số nguyên
dương bất kỳ, ta dùng hai lệnh:
S:=0;
For i:=1 To N DO S:=S+ i*i ;
Dưới đây là chương trình cụ thể:
PROGRAM VIDU4_4; { Tính tổng các bình phương các số tự nhiên <=N}
Var
N, i: Integer;
S: LongInt;
Begin
Write(‘ Nhập N:’); Readln(N);
S:=0;
For i:=1 to N do S:=S+i*i ;
Writeln(‘S= ‘, S);
Readln
End.
Mở rộng bài toán tính tổng: Tính tổng đan dấu:
S = 12 - 22 + 32 - 42 +...+(-1)N-1 N2
Ví dụ 5: Bài toán tính lũy thừa:
Nhập số tự nhiên N và một số thực x bất kỳ, tính S= x N . Đầu tiên ta gán S:=1, sau đó tại
mỗi bước lặp, ta nhân dồn x vào S bằng lệnh S:=S*x. Sau N bước như vậy, S sẽ được nhân
với x đúng N lần. Vậy hai lệnh cần dùng là:
S:=1;
For i:=1 TO N DO S:=S*x;
4. Câu lệnh lặp WHILE..DO
a. Cú pháp, lưu đồ, cách thức hoạt động
•
Cú pháp:
WHILE Ðiềukiện DO LệnhP;
Ngôn ngữ lập trình Pascal
54
BỘ MÔN TIN HỌC
•
TRƯỜNG ĐẠI HỌC HOA LƯ
Ý nghĩa: Chừng nào Ðiềukiện còn đúng thì cứ làm LệnhP, cho đến khi Ðiềukiện
sai thì không làm LệnhP nữa mà chuyển sang
lệnh kế tiếp ở phía dưới.
Sai
•
Đkiện
Cách thức hoạt động của WHILE:
Bước 1: Nếu Ðiềukiện sai thì chuyển ngay sang
lệnh kế tiếp sau LệnhP, ngược lại, nếu Ðiềukiện
đúng thì làm LệnhP, rồi quay lại bước 1
Đúng
P
LệnhP được gọi là thân của vòng lặp WHILE.
Lệnh kế tiếp
Nếu Ðiềukiện không bao giờ sai thì
Sơ đồ thực hiện của lệnh lặp While
LệnhP sẽ phải thực hiện mãi, lúc đó ta có vòng
lặp vô hạn. Trong trường hợp này, để dừng
chương trình, hãy gõ đồng thời hai phím Ctrl và Pause (viết tắt là ^Pause).
Ðể tránh các vòng lặp vô hạn, trong thân của vòng WHILE cần có ít nhất một lệnh
có tác dụng làm biến đổi các đại lượng tham gia trong Ðiềukiện để đến một lúc nào đó thì
Ðiềukiện sẽ sai và do đó vòng lặp sẽ kết thúc.
b. Ví dụ
Ví dụ 6: Nhập số tự nhiên N, tính S=N!:
PROGRAM VID3_4; { Tinh S=N! bằng lệnh WHILE..}
Var
N, i: Integer; S: LongInt;
Begin
Write(‘ Nhập N > 0: ‘ ); Readln(N);
S:=1;
i:=1;
{7}
While i<= N do
begin
S:=S*i;
i:=i+1 {11}
end;
Writeln(‘ Giai thua = ‘, S);
Readln
End.
Ngôn ngữ lập trình Pascal
55
BỘ MÔN TIN HỌC
TRƯỜNG ĐẠI HỌC HOA LƯ
Khởi đầu biến i được gán giá trị 1 (dòng {7}). Trong vòng lặp WHILE, sau mỗi
lệnh S:=S*i; biến i được tăng lên 1 đơn vị bằng lệnh i:=i+1; (dòng {11}). Khi i=N+1 thì
điều kiện i<=N bị sai và lúc đó vòng lặp kết thúc, kết quả là lệnh S:=S*i; được thực hiện
đúng N lần ứng với i=1, 2, 3, ..., N.
Trong chương trình trên, nếu không có dòng lệnh {11}: i:=i+1;
thì i luôn luôn bằng 1 nên điều kiện i<=N luôn luôn đúng (vì N 1), và do đó vòng lặp sẽ
vô hạn .
Sự khác nhau của lệnh WHILE so với FOR là ở chỗ: trong lệnh FOR, biến i được
tự động gán giá trị ban đầu và sau mỗi bước lặp được tự động tăng lên, còn trong WHILE
thì không, ta phải viết các lệnh đó.
Tất cả các bài toán giải quyết được bằng lệnh FOR thì đều giải quyết được bằng
lệnh WHILE. Ðặc điểm chung của các bài toán dạng này là số lần lặp của các vòng lặp đã
được biết trước.
Lệnh WHILE đặc biệt thích hợp với các vòng lặp có số lần lặp chưa biết trước,
trong khi lệnh FOR không giải quyết được. Ðây chính là điểm mạnh của lệnh WHILE.
5. Câu lệnh lặp REPEAT ..UNTIL
a. Cú pháp, lưu đồ, cách thức hoạt động
•
Cú pháp
REPEAT
LệnhP;
UNTIL Ðiềukiện ;
•
•
Ý nghĩa: Chừng nào Ðiềukiện còn sai thì cứ làm LệnhP, cho đến khi Ðiềukiện đúng
thì không làm LệnhP nữa mà chuyển sang lệnh kế tiếp ở phía dưới.
Cách thức hoạt động của REPEAT:
Bước 1: Làm LệnhP.
Bước 2: Kiểm tra Ðiềukiện, nếu Ðiềukiện đúng
thì chuyển sang lệnh tiếp theo ở phía dưới, ngược
lại, nếu Ðiềukiện sai thì quay lại bước 1.
LệnhP cũng được gọi là thân của vòng lặp
REPEAT, nếu nó gồm nhiều lệnh thì các lệnh đó
không cần phải đặt trong khối begin và end.
P
Sai
ĐKiệ
n
Đúng
Lệnh kế tiếp
Hình 3.4. Lưu đồ thực hiện của vòng lặp
Repeat .. Until
Ngôn ngữ lập trình Pascal
56
BỘ MÔN TIN HỌC
TRƯỜNG ĐẠI HỌC HOA LƯ
Nếu Ðiềukiện không bao giờ đúng thì LệnhP sẽ phải thực hiện mãi, lúc đó ta có vòng
lặp vô hạn. Trong trường hợp này, muốn ngắt chương trình, hãy gõ đồng thời hai phím Ctrl
và Break.
Ðể tránh các vòng lặp vô hạn, trong thân của lệnh REPEAT cần có ít nhất một lệnh có
tác dụng làm biến đổi các đại lượng tham gia trong Ðiềukiện để đến một lúc nào đó thì
Ðiềukiện sẽ đúng và do đó vòng lặp sẽ kết thúc.
Các vòng lặp có số lần lặp biết trước đều có thể giải được bằng lệnh REPEAT. Ðặc biệt,
cũng như lệnh WHILE, lệnh REPEAT rất thích hợp với các vòng lặp có số lần lặp không
biết trước
b. Ví dụ về lệnh Repeat
Ví dụ 7: Ðảm bảo tính hợp lý của dữ liệu nhập từ bàn phím.
Khi giải phương trình bậc hai Ax2+Bx+C=0, ta thường giả thiết A ≠ 0; khi tính S=N!, ta
thường yêu cầu N ≠ 0. Sự hạn chế phạm vi đối với các dữ liệu nhập sẽ đảm bảo tính hợp lý
của chúng và làm giảm bớt các phức tạp khi biện luận.
Ðể buộc người sử dụng phải nhập A 0, nếu nhập A=0 thì bắt nhập lại cho tới khi
nhập A 0 mới thôi, ta dùng cấu trúc:
Repeat
Write(‘Nhập A khác không: ‘);
Readln(A);
Until A<> 0;
Ðể đảm bảo chắc chắn nhập N thỏa điều kiện 0
Repeat
Write(‘ Nhập N (0
Readln(N);
If (N<=0) or (N>=20) then write(#7);
Until (0
Lệnh write(chr(7) ) hay write(#7) có công dụng phát ra tiếng kêu bip để cảnh báo người
dùng đã nhập dữ liệu sai yêu cầu.
c. So sánh các lệnh For, While và Repeat:
•
•
Lệnh For dùng cho các vòng lặp có số lần lặp đã biết trước.
Lệnh While hay Repeat tổng quát hơn lệnh For, dùng được cho tất cả các loại vòng
lặp, nhưng thường dùng cho các vòng lặp có số lần lặp chưa biết trước.
Ngôn ngữ lập trình Pascal
57