1. Trang chủ >
  2. Công Nghệ Thông Tin >
  3. Tin học văn phòng >

Câu lệnh lặp biết trước só lần lặp (FOR .. TO .. DO)

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



Xem Thêm
Tải bản đầy đủ (.doc) (141 trang)

×