Vòng lặp có số lần chưa biết trước WHILE_DO: III.. Vòng lặp với số lần biết trước FOR_DO:... Đối với bài toán 1: phải tính lặp bao nhiêu lần ta chưa biết trước, chỉ biết việc lặp sẽ ch
Trang 1Bài 2: TỔ CHỨC LẶP
II Vòng lặp có số lần chưa biết trước
WHILE_DO:
III Vòng lặp với số lần biết trước FOR_DO:
Trang 2I Lặp:
Với a là số nguyên và a>2 , xét các bài toán sau:
Bài toán 1:
Cho đến khi
Bài toán 2:
1
2
1 1
1
1
+ +
+
+ +
+ +
+
=
N a
a a
a S
0001
0
1
<
a
100
1
2
1 1
1
1
+
+
+ +
+ +
+
=
a a
a a
S
Trang 3I Lặp (tt):
Cách tính tổng của hai bài toán trên đều tương tự nhau Đầu tiên S được gán giá trị là
Tiếp theo, mỗi lần thêm vào S một giá trị là với N=1, 2, 3,… Việc cộng thêm đó được lặp lại một số lần liên tiếp.
Đối với bài toán 1: phải tính lặp bao nhiêu lần ta chưa biết trước, chỉ biết việc lặp sẽ chấm dứt khi thỏa điều kiện 1 < 0.0001
a
a
1
N
a +
1
Trang 4I Lặp (tt):
Đối với bài toán 2, số lần lặp biết trước, việc tính lặp sẽ chấm dứt khi số lần đã thực hiện đủ 100
Trong một số thuật toán có những thao tác được lặp đi, lặp lại một số lần liên tiếp Ta phân biệt hai loại lặp: lặp có số lần chưa biết trước và lặp có số lần biết trước
Trang 5II Vịng lặp cĩ số lần chưa biết trước
while_do:
• Thuật toán Tong_1
o Bước 1: S:=1/a; N:=0; {khởi tạo S và N}
o Bước 2: Nếu 1/(a+N) <0.0001 thì chuyển đến bước 5;
o Bước 3: N:=N+1;
o Bước 4: S:=S+1/(a+N) rồi quay lại bước 2;
o Bước 5: Đưa kết quả S ra màn hình rồi kết
thúc
Trang 6II Vịng lặp cĩ số lần chưa biết trước
while_do (tt):
Việc lặp với số lần lặp chưa biết trước sẽ chấm dứt khi một điều kiện cụ thể cho biết trước được thỏa mãn.
Để tổ chức việc lặp như vậy, TP dùng câu lệnh có WHILE_DO dạng:
+ Điều kiện : biểu thức quan hệ (<, >, =,<=, >=,
<>, …) hoặc logic (and, or, not).
+ Câu lệnh : một câu lệnh của TP
WHILE < Điều kiện > DO < Câu lệnh >
Trang 7II Vịng lặp cĩ số lần chưa biết trước
while_do (tt):
Sơ đồ vịng lặp với số lần chưa biết trước
Câu lệnh
Điều kiện
•Đúng
•Sai
Trang 8II Vịng lặp cĩ số lần chưa biết trước
while_do (tt):
Nhập a
S 1/a;N ← ← 0
1/(a+N)<0.0001 Đưa ra S rồi kết thúc
S S+1/(a+N) ←
N N+1 ←
•Đúng
Sai
Sơ đồ khối tính tổng S
Trang 9II Vòng lặp có số lần chưa biết trước
while_do:
Ví dụ 1: Chương trình tính tổng ở bài toán 1
Program tong_1;
Var S: real;
a, N: integer;
Begin
Write(‘Nhap vao gia tri a’); readln(a);
S:=1/a;
N=0;
While not (1/(a+N) <0.0001) do
Begin
N:=N+1;
S:=S+1/(a+N);
End;
Writeln(‘Tong can tinh la:’,S);
Readln;
End.
Trang 10II Vịng lặp cĩ số lần chưa biết trước
while_do (tt):
Ví dụ 2: Tìm UCLN của 2 số M và N
• Các bước của thuật toán:
Bước 1: Nhập M, N;
Bước 2: Nếu M=N thì lấy giá trị chung ƯCLN rồi chuyển đến bước 5;
Bước 3: Nếu M>N thì M M-N rồi quay lại bước 2; ←
Bước 4: N N-M rồi quay lại bước 2; ←
Bước 5: Đưa ra kết quả ƯCLN rồi kết thúc.
Trang 11II Vòng lặp có số lần chưa biết trước
while_do (tt):
Nhập M và N
M ←M-N
Đưa ra M rồi kết thúc
Sô đñ khoái tìm UCLN c a 2 s M & N ồ ủ ố
Trang 12II Vòng lặp có số lần chưa biết trước
while_do (tt):
Chương trình: Tìm UCLN của 2 số M và N
Program UCLN;
Var M, N: integer;
Be gin
Write(‘ Nhap vao gia tri M’); readln(M);
Write(‘Nhap vao gia tri N’); readln(N);
If (M=0) or (N=0) then
exit
While M<>N do
If M>N then
M:=M-N
Else
N:=N-M;
Writeln(‘UCLN cua 2 so M va N la:’,M);
Readln;
Trang 13III Vòng lặp với số lần biết trước
FOR_DO
Thuật toán Tong_2a
• Bước 1: S:=1/a, N:=0;
• Bước 2: N:=N+1;
• Bước 3: Nếu N>100 thì chuyển đến bước 5;
• Bước 4: S:=S+1/(a+N) rồi quay lại bước 2;
• Bước 5: Đưa kết quả ra màn hình rồi kết thúc
Trang 14III Vòng lặp với số lần biết trước
FOR_DO
Thuật toán Tong_2b
Bước 1: S:=1/a, N:=101;
Bước 2: N:=N-1;
Bước 3: Nếu N<1 thì chuyển đến bước 5;
Bước 4: S:=S+1/(a+N) rồi quay lại bước 2;
Bước 5: Đưa kết quả ra màn hình rồi kết thúc
Trang 15III Vòng lặp với số lần biết trước
FOR_DO
Để tổ chức lặp với số lần biết trước, TP dùng câu lệnh FOR_DO Câu lệnh FOR_DO có hai dạng:
Dạng lặp tiến:
Dạng lặp lùi:
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>
Trang 16III Vòng lặp với số lần biết trước
FOR_DO
Trong đó:
Biến đếm là kiểu số nguyên, số thực hay kiểu miền con
Giá trị đầu , Giá trị cuối là các biểu thức cùng kiểu với các biến đếm
Trang 17III Vòng lặp với số lần biết trước
FOR_DO
Ví dụ 1a:
Program Tong_2a;
Var S: real;
a, N: integer;
Begin
Write(‘Nhap vao gia tri a:’); readln(a);
S:=1/a;
For N:=1 to 100 do
S:=S+1/(a+N);
Writeln(‘Tong can tinh la:’,S);
Readln;
End.
Trang 18III Vòng lặp với số lần biết trước
FOR_DO
Ví dụ 1b:
Program Tong_2b;
Var S: real;
a, N: integer;
Begin
Write(‘Nhap vao gia tri a:’); readln(a);
S:=1/a;
For N:=100 downto 1 do
S:=S+1/(a+N);
Writeln(‘Tong can tinh la:’,S);
Readln;
Trang 19III Vòng lặp với số lần biết trước
FOR_DO
Ví dụ 2: viết chương trình tính nhập vào 2 số nguyên dương M&N (M<N), tính tổng các số chia hết cho 3& 5 trong pạm vi từ M đến N
Thuật toán Tong;
Bước 1: Nhập vào M, N;
Bước 2: T:=0;
Bước 3: Nếu (I mod 3<>0) or (I mod 5<>0) thì chuyển đến bước 5;
Bước 4: T:=T+I;
Bước 5: Đưa kết quả ra màn hình rồi kết thúc.
Trang 20III Vòng lặp với số lần biết trước
FOR_DO Chương trình:
Program Tong;
Var M,N, I:integer;
Begin
Write(‘Nhap vao gia tri M=‘); readln(M);
Write(‘(‘Nhap vao gia tri 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(‘Tong can tinh la:’, T);
Readln;