Hôm nay chúng ta học dạng cấu trúc lặp với số lần chưa biết trước. Cấu trúc này 
dùng khi không biết trước số lần lặp nhưng ta biết trước một điều kiện để dừng công 
việc lặp đó. 
• Vậy cấu trúc lặp này sử dụng cú pháp nhưthế nào ? Có gì tương quan giữa cú pháp này 
với cú pháp của cấu trúc lặp với số lần biết trước, có thể chuyển hóa giữa hai cấu trúc 
lặp hay không ?
                
              
                                            
                                
            
 
            
                 27 trang
27 trang | 
Chia sẻ: maiphuongdc | Lượt xem: 10811 | Lượt tải: 4 
              
            Bạn đang xem trước 20 trang tài liệu Bài giảng Cấu trúc lặp, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Cấu trúc lặp ( tiết 3) 
Sinh viên thực hiện: Phương Thị 
Chang 
Lớp: K56A-CNTT 
I. MỤC ĐÍCH, YÊU CẦU: 
• Hiểu được cấu trúc lặp với số lần chưa 
biết trước hay cấu trúc lặp kiểm tra 
điều kiện trước; 
 Biết cách vận dụng đúng đắn cấu trúc 
lặp này vào tình huống cụ thể; 
• Mô tả được thuật toán của một số 
bài toán đơn giản có sử dụng lệnh lặp 
với số lần lặp chưa biết trước; 
I. MỤC ĐÍCH, YÊU CẦU: 
• Viết đúng các lệnh lặp với số lần lặp 
chưa biết trước; 
• Viết được thuật toán của bài toán 
đơn giản sử dụng cấu trúc lặp trên. 
II . MỞ ĐẦU 
• . Hôm nay chúng ta học dạng cấu trúc lặp 
với số lần chưa biết trước. Cấu trúc này 
dùng khi không biết trước số lần lặp nhưng 
ta biết trước một điều kiện để dừng công 
việc lặp đó. 
• Vậy cấu trúc lặp này sử dụng cú pháp như 
thế nào ? Có gì tương quan giữa cú pháp này 
với cú pháp của cấu trúc lặp với số lần biết 
trước, có thể chuyển hóa giữa hai cấu trúc 
lặp hay không ? 
III. Nội dung bài học 
1. Giới thiệu về cấu trúc lặp với số lần 
chưa biết trước: 
 Lặp với số lần chưa biết trước dùng 
trong trường hợp mà ta không biết 
trước số lần lặp nhưng ta biết trước 
một điều kiện để dừng công việc lặp đó. 
1. Giới thiệu về cấu trúc lặp với 
số lần chưa biết trước: 
 Có hai dạng: 
• Dạng 1: 
 Trong khi còn đúng thì còn 
thực hiện ; 
• Dạng 2: 
 Thực hiện trong khi <điều 
kiện> đúng. 
Nhận xét về hai dạng cấu trúc lặp 
Trong dạng 1: 
 Đầu tiên kiểm tra và tính giá trị của điều 
kiện, nếu điều kiện đúng thì thực hiện công 
việc (một lần). Giá trị của điều kiện sẽ được 
thay đổi sau mỗi lần thực hiện công việc đến 
một lúc nào đó điều kiện lặp không còn đúng 
nữa thì cấu trúc lặp sẽ được kết thúc. 
Nhận xét về hai dạng cấu trúc lặp 
Trong dạng 2: 
• Tiến hành ngược lại, công việc được thực 
hiện trước, sau đó mới kiểm tra điều kiện, 
nếu điều kiện đúng thì thực hiện công việc, 
ngược lại kết thúc lặp. Trong công việc cần 
có lệnh thoát khỏi vòng lặp. 
• Ở đây chúng ta chỉ nghiên cứu dạng lặp 1 
2. Cú pháp cấu trúc lặp với số lần 
chưa biết trước 
 Trong Pascal, cú pháp của dạng 1 như sau: 
 While do 
 trong đó 
• Điều kiện là biểu thức logic 
• Câu lệnh là một câu lệnh đơn hay ghép. 
Ta có sơ đồ biểu diễn như sau: 
Nguyên tắc hoạt động 
 Câu lệnh sau từ khoá do được thực hiện 
khi biểu thức điều kiện còn nhận giá trị true. 
Biểu thức điều kiện được tính giá trị trước 
khi câu lệnh được thực hiện, nếu biểu thức 
điều kiện đã nhận giá trị false ngay từ đầu 
thì câu lệnh chưa được thực hiện lần nào. 
Nguyên tắc hoạt động 
• Trong trường hợp cấu trúc lặp không làm 
thay đổi giá trị của điều kiện (biểu thức điều 
kiện luôn nhận giá trị true) thì cấu trúc lặp 
sẽ kéo dài mãi mãi (vòng lặp vô hạn). Để 
thoát khỏi vòng lặp vô hạn, trong công việc 
cần có câu lệnh rẽ nhánh thoát khỏi vòng lặp 
vô hạn khi thoả mãn điều kiện rẽ nhánh. 
3.Chương trình với cấu trúc lặp 
while-do: 
• Đây là chương trình này xây dựng dựa 
trên thuật toán tong_1b với số lần lặp chưa 
biết trước nhưng biết trước được điều kiện 
dừng vòng lặp: 
 1/(a + N) < 0.0001 
 thì thực hiện lặp, còn ngược lại thì kết thúc 
lặp. 
Chương trình: 
program tong_1b; 
uses crt; 
var s:real; 
 a, N: integer; 
begin 
 write(‘ hay nhap gia tri a vao’); 
 readln(a); 
 s:= 1.0/a; N:= 0; {bước 1} 
Chương trình: 
 while not (1/(a + N)<0.0001) do {bước 2} 
 Begin 
 N:= N + 1; {bước 3} 
 S:=S + 1.0/(a+N); {bước 4} 
 End; 
 Write (‘tong s la: ‘, S:8:4); {bước 5} 
 Readln 
End. 
Phân tích và giải thích các lệnh 
trong chương trình: 
• Bước 1 của thuật toán: s:= 1.0/a; N:= 0; 
• Bước 2 của thuật toán. 
 while not 
 (1/(a + N)<0.0001) do 
Phân tích và giải thích các lệnh 
trong chương trình: 
• Với a được đưa vào từ bàn phím và N 
nhận giá trị ban đầu là 0, nếu kiểm tra điều 
kiện trên thoả mãn thì nó đi vào thực hiện 
các lệnh trong vòng lặp while-do: tăng N lên 
1 (bước 3) và cộng vào tổng s một số hạng 
1.0/(a+N) ( bước 4). 
Phân tích và giải thích các 
lệnh trong chương trình: 
 Sau khi tính toán hoàn tất thì nó sẽ 
quay lên kiểm tra điều kiện. Nếu thoả 
mãn tiếp tục thực hiện. Còn ngược lại 
nó sẽ thoát khỏi vòng lặp. 
• Bước 5: Write (‘ tong s la:’, s:8:4); 
 Đưa ra màn hình tổng s và kết thúc 
chương trình. 
4. Cấu trúc while-do và 
for-do 
• Cấu trúc lặp while-do 
 While do 
• Cấu trúc lặp for-do 
 Dạng lặp tiến: 
 For := to < giá 
trị cuối > do ; 
4. Cấu trúc while-do và 
for-do 
• Dạng lặp lùi: 
 For := downto 
 do ; 
 Nhận thấy cả while-do và for-do đều là 
cú pháp xây dựng để thực hiện các thao tác 
lặp mang lại hiệu quả cao cho việc lập trình. 
4. Cấu trúc while-do và 
for-do 
 Điểm khác nhau cơ bản giữa chúng : 
 while-do: số lần lặp chưa xác định trước 
nhưng biết trước điều kiện có thể dừng vòng 
lặp. 
 for-do: số lần lặp đã xác định, nó sử dụng 
biến đếm để duy trì vòng lặp, cứ mỗi lần biến 
đếm tăng là một lần các lệnh trong vòng lặp 
được thực hiện, vòng lặp sẽ dừng lại khi nào 
biến đếm nhận giá trị cuối. 
4. Cấu trúc while-do và 
for-do 
 Cấu trúc while-do là cấu trúc lặp không 
định trước số lần lặp nên không thể chuyển 
về cấu trúc lặp với số lần lặp đã biết trước. 
Nhưng ngược lại thì ta có thể chuyển từ cấu 
trúc lặp với số lần lặp biết trước for-do về 
cấu trúc lặp while-do. 
4. Cấu trúc while-do và 
for-do 
Vi dụ: for i := m to n do 
 S := S + i; 
chuyển về while-do: 
 i := m; 
 while (i >= m and i <= n) 
 Begin 
 S := S+ i; 
 i := i + 1; 
 End; 
5. Ví dụ 2: 
Ví dụ: 
 UCLN của hai số nguyên dương m và n 
Thuật toán: 
 Bước 1: Nhập m, n; 
 Bước 2: nếu m = n thì lấy giá trị chung này 
làm UCLN rồi chuyển đến bước 5; 
Thuật toán: 
Bước 3: 
nếu m > n thì 
 m m-n ngược lại 
 n n - m; 
Bước 4: quay lại bước 2; 
Bước 5: Đưa ra kết quả trên màn hình. 
Chương trình thể hiện thuật toán 
tìm UCLN 
 Program UCLN; 
 Uses crt; 
 Var m, n: integer; 
 Begin 
 Clrscr; 
 Write (‘nhập vào m, n’); 
 Readln (m, n); 
Chương trình thể hiện thuật toán 
tìm UCLN 
 While m n do 
 If m > n then m:= m - n; 
 Else n := n - m; 
 Writeln ( ‘ UCLN của hai so la:’, m); 
 Readln 
End.