TRƯỜNG THPT THỦ THIÊM

1. Lặp

Với a là số nguyên và a > 2, xét các bài toán sau đây:

Bài toán 1. Tính và đưa kết quả ra màn hình tổng

S=1a+1a+1+1a+2+...+1a+100S=1a+1a+1+1a+2+...+1a+100

Bài toán 2. Tính và đưa kết quả ra màn hình tổng

S=1a+1a+1+1a+2+...+1a+N+...S=1a+1a+1+1a+2+...+1a+N+...

cho đến khi 1a+N<0,0001.1a+N<0,0001.

Nhận xét:

Tóm lại:

Có hai thuật toán Tong_1a và Tong_1b để giải bài toán 1 như sau:

Thuật toán Tong_1a:

Thuật toán Tong_1b:

Một số lưu ý:

a. Cấu trúc lặp với số lần biết trước

Để mô tả cấu trúc lặp với số lần biết trước, Pascal dùng câu lệnh for-do với hai dạng tiến và lùi như sau:

for < biến đếm > := < giá trị đầu > to < giá trị cuối > do < câu lệnh >;

for < biến đếm > := < giá trị cuối > downto < giá trị đầu > do < câu lệnh >;

Trong đó:

Chú ý 1: Giá trị của biến đếm được điều chỉnh tự động, vì vậy câu lệnh viết sau do không được thay đổi giá trị biến đếm.

b. Một số ví dụ minh họa

Ví dụ 1. Sau đây là hai chương trình cài đặt các thuật toán Tong_1a và Tong_1b.

Chương trình cài đặt thuật toán Tong_1a:

program Tong_1a;

uses crt;

var S: real;

a, N: integer;

begin

clrscr;

write('Hay nhap gia tri a vao!');

readln(a);

S:=1.0/a; {Buoc 1}

for N:= 1 to 100 do Buoc 2, Buoc 3}

S:= S+1.0/(a+N); {Buoc 4}

writeln('Tong S la: ', S:8:4); {Buoc 5}

readln

end.

Chương trình cài đặt thuật toán Tong_1b:

program Tong_1b;

uses crt;

var S: real;

a, N: integer;

begin

clrscr;

write ('Hay nhap gia tri a vao!');

readln(a);

S:=1.0/a; {Buoc 1}

for N:= 100 downto 1 do {Buoc 2 va Buoc 3}

S:= S+1.0/(a+N); {Buoc 4}

writeln('Tong S la: ', S:8:4); {Buoc 5}

readln

end.

Ví dụ 2. Chương trình sau thực hiện việc nhập từ bàn phím hai số nguyên dương M và N ( M < N ), tính và đưa ra màn hình tổng các số chia hết cho 3 hoặc 5 trong phạm vi từ M đến N.

Chương trình cài đặt:

program Vi_du_2;

uses crt;

var M, N, I: integer;

T: longint;

begin

clrscr;

writeln('Nhap so M nho hon N');

write('M = '); readln(M);

write('N = '); readln(N);

T:= 0;

for I:= M to N do

if(I mod 3 = 0) or (I mod 5 = 0) then

T:=T+I;

writeln('KET QUA: ', T);

readln

end.

Thuật toán Tong_2:

Như vậy, việc lặp với số lần chưa biết trước sẽ chỉ kết thúc khi một điều kiện cho trước được thoả mãn.

a. Cấu trúc lặp với số lần chưa biết trước

Để mô tả cấu trúc lặp như vậy, Pascal dùng câu lệnh while-do có dạng:

while < điều kiện > do < câu lệnh >;

Trong đó:

Việc thực hiện lệnh while-do được thể hiện trên sơ đồ ở hình 1 dưới đây:

Hình 1. Sơ đồ lặp với số lần lặp chưa biết trước

b. Một số ví dụ minh họa

Ví dụ 3. Sau đây là chương trình cài đặt thuật toán Tong_2.

Hình 2. Sơ đồ khối của thuật toán Tong_2

program Tong_2;

uses crt;

var S: real;

a, N: integer;

begin

write ('Hay nhap gia tri a vao!');

readln(a);

S:= 1.0/a; N:= 0; {Buoc 1}

while not (1/(a+N)<0.0001) do {Buoc 2}

begin

N:= N+1; {Buoc 3}

S:= S+1.0/(a+N); {Buoc 4}

end;

writeln('Tong S la: ', S: 8: 4); {Buoc 5}

readln

end.

Ví dụ 4. Tìm ước chung lớn nhất (UCLN) của hai số nguyên dương M và N.

Thuật toán tìm ước chung lớn nhất:

Hình 3. Sơ đồ khối của thuật toán tìm ước chung lớn nhất

Chương trình sau thể hiện thuật toán tìm ước chung lớn nhất:

program UCLN;

uses crt;

var M,N:integer;

begin

clrscr;

write('M, N = ');

readln(M,N);

while M <> N do

if M > N then M:= M-N else N:= N-M;

writeln('UCLN = ', M);

readln

end.

Chú ý 2: Các câu lệnh trong vòng lặp thường được lặp lại nhiều lần, vì vậy để tăng hiệu quả của chương trình thì những thao tác không cần lặp lại nên đưa ra ngoài vòng lặp.

Link nội dung: https://www.sachhayonline.com/cau-truc-lap-voi-so-lan-biet-truoc-la-a74421.html