Tin học 11 bài 10: Cấu trúc lặp
Nhằm giúp các em có thêm nhiều tài liệu tham khảo hữu ích, eLib đã biên soạn và tổng hợp nội dung bài học dưới đây nhằm giúp các em hiểu được nhu cầu của cấu trúc lặp trong biểu diễn thuật toán và biết cách sử dụng cấu trúc lặp với số lần biết trước bằng câu lệnh for … do …Mời các em cùng tham khảo.
Mục lục nội dung
1. Tóm tắt lý thuyết
1.1. Lặp
- Cấu trúc lặp là một điều khiển thực hiện công việc lặp đi lặp lại khi chưa đủ số lần lặp hoặc khi một điều kiện nào đó còn đúng.
- Quá trình lặp không thể dừng được gọi là quá trình lặp vô hạn. Điều này xảy ra khi điều kiện để dừng lặp không còn bị biến đổi giá trị sau mỗi lần lặp. Khi đó để thoát lặp vô hạn, cần có các câu lệnh cho phép thoát ngay khỏi lặp.
- Có hai loại cấu trúc lặp: lặp với số lần biết trước và lặp với số lần chưa biết trước.
1.2. Lặp có số lần biết trước và câu lệnh for-do
Dạng lặp với số lần biết trước dùng để thực hiện câu lệnh một số lần xác định. Dạng này dùng một biến điều khiến vòng lặp. Trong Pascal mỗi lần thực hiện câu lệnh thì biến điều khiến (giả sử là i) được tự động tăng (nhận giá trị tiếp theo là succ(i)) hoặc giảm (nhận giá trị nhỏ hơn ngay trước pred(i)). Đến khi biến điều khiển đạt giá trị xác định thì vòng lặp kết thúc.
Câu lệnh for- do với hai dạng tiến và lùi:
- Dạng lặp tiến:
for
- Dạng lặp lùi:
for
Trong đó:
- Biến đếm: Là biến đơn, thường có kiểu nguyên.
- Giá trị đầu, Giá trị cuối: là các biểu thức cùng kiểu với biến đếm và giá trị đầu phải nhỏ hơn hoặc bằng giá trị cuối. Nếu giá trị đầu lớn hơn giá trị cuối thì vòng lặp không thực hiện.
Cơ chế hoạt động của câu lệnh for-do:
- Ở dạng lặp tiến, câu lệnh viết sau từ khóa do được thực hiện tuần tự, mỗi lần thực hiện thì biến đếm nhận giá trị tăng liên tiếp từ giá trị đầu đến giá trị cuối.
- Ở dạng lặp lùi, câu lệnh viết sau từ khóa do được thực hiện tuần tự, mỗi lần thực hiện thì biến đếm nhận giá trị giảm liên tiếp từ giá trị đầu đến giá trị cuối.
Lưu ý: Trong vòng lặp không được chứa lệnh làm thay đổi giá trị của biến điều khiển vì sẽ gây ra tình trạng khó theo dõi và quản lí vòng for-do.
1.3. Lặp với số lần chưa biết trước và câu lệnh while-do
- Lặp với số lần chưa biết trước có hai dạng:
+ Dạng 1 : Trong khi <điều kiện> còn đúng thì còn thực hiện
+ Dạng 2: Còn thực hiện
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 nhận giá trị true thì thực hiện công việc (một lần). Mỗi lần thực hiện công việc có thể sẽ làm thay đổi giá trị của điều kiện nên đến một lúc nào đó điều kiện lặp không còn đúng nữa và cấu trúc lặp sẽ được kết thúc. Ngược lại, nếu khi thực hiện công việc không làm thay đổi giá trị của điều kiện thì cấu trúc lặp kéo dài mãi (gọi là 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 thỏa mãn điều kiện rẽ nhánh.
- Trong Pascal, lặp với số lần chưa biết trước là dạng while-do
Câu lệnh while-do chứa một biểu thức điều kiện để điều khiển thực hiện lặp một câu lệnh đơn hoặc kép.
Cú pháp:
while <điều kiện> do
Trong đó:
+ Điều kiện là biểu thức quan hệ hoặc lôgic;
+ Câu lệnh là một câu lệnh cùa Pascal.
- Hoạt động của câu lệnh while-do:
Câu lệnh viết sau từ khóa 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, nhưng nếu biểu thức điểu kiện đã nhận giá trị false ngay từ đầu thì câu lệnh không được thực hiện lần nào. Nếu biểu thức điều kiện luôn nhận giá trị true thì câu lệnh được thực hiện mãi, ta gọi là vòng lặp vô hạn.
* Định lí Bohn Jacopini: Mọi quá trình tính toán đều có thể mô tả và thực hiện dựa trên ba cấu trúc cơ bản là cấu trúc tuần tự, cấu trúc rẽ nhánh và cấu trúc lặp.
2. Bài tập minh họa
2.1. Dạng 1: Bài toán lặp với số lần biết trước và câu lệnh for-do
Viết chương tình thực hiện việc nhập từ bàn phím hai số nguyên dương M và N (M
Hướng dẫn giải
Phân tích: Thực hiện việc lặp tiến hoặc lùi trong khoảng M và N. Giả sử ta có biến đếm I sẽ nhận giá trị lần lượt từ M đến N (trong đếm tiến) và từ N giảm dần về M (trong đếm lùi). Với mỗi giá trị của I ta sẽ kiểm tra nếu I chia hết cho 3 hoặc I chia hết cho 5 thì ta sẽ cộng nó vào tổng (Tổng ban đầu được gán là 0). Cuối cùng ta in ra tổng rồi kết thúc bài toán.
Code:
program tongchiahet3va5;
uses crt;
var S:integer;
M,N,i: integer;
begin
clrscr;
writeln('hay nhap gia tri cua M va N ');
readln(M,N);
S:=0;
for i:=M to N do
if(i mod 3=0) or (i mod 5=0)
then
S:=S+i;
writeln('Tong cua cac so chia het cho 3 hoac 5 trong doan M N la ',S);
readln;
end.
2.2. Dạng 2: Bài toán lặp với số lần chưa xác định, câu lệnh while-do
Tìm ước chung lớn nhất của hai số nguyên dương M và N.
Hướng dẫn giải
Có nhiều giải thuật tìm ước chung lớn nhất của 2 số. Sau đây là một 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 ước chung lớn nhất rối chuyển đến bước 5.
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ả ước chung lớn nhất rồi kết thúc.
Chương trình:
program ucln;
uses crt;
var M,N:integer;
begin
clrscr;
writeln('Nhap gia tri M va N :');
readln(M,N);
while M<>N do
if M>N
then
M:=M-N
else N:=N-M;
writeln('uoc chung lon nhat la ',M);
readln;
end.
3. Luyện tập
3.1. Bài tập tự luận
Câu 1: Cú pháp lệnh lặp For – do dạng lùi là?
Câu 2: Cú pháp lệnh lặp For – do dạng tiến là?
Câu 3: Trong vòng lặp For – do dạng tiến. Giá trị của biến đếm là?
3.2. Bài tập trắc nghiệm
Câu 1: Vòng lặp While – do kết thúc khi nào
A. Khi một điều kiện cho trước được thỏa mãn
B. Khi đủ số vòng lặp
C. Khi tìm được Output
D. Tất cả các phương án
Câu 2: Mọi quá trình tính toán đều có thể mô tả và thực hiện dựa trên cấu trúc cơ bản là:
A. Cấu trúc tuần tự
B. Cấu trúc rẽ nhánh
C. Cấu trúc lặp
D. Cả ba cấu trúc
Câu 3: Tính tống S = 1 + 2 + 3 + … + n + … cho đến khi S>108. Điều kiện nào sau đây cho vòng lặp while – do là đúng:
A. While S>=108 do
B. While S < 108 do
C. While S < 1.0E8 do
D. While S >= E8 do
Câu 4: Câu lệnh sau giải bài toán nào:
While M <> N do
If M > N then M:=M-N else N:=N-M;
A. Tìm UCLN của M và N
B. Tìm BCNN của M và N
C. Tìm hiệu nhỏ nhất của M và N
D. Tìm hiệu lớn nhất của M và N
Câu 5: Đoạn chương trình sau giải bài toán nào?
For I:=1 to M do
If (I mod 3 = 0) and (I mod 5 = 0) then
T := T + I;
A. Tổng các số chia hết cho 3 hoặc 5 trong phạm vi từ 1 đến M
B. Tổng các số chia hết cho 3 và 5 trong phạm vi từ 1 đến M
C. Tổng các số chia hết cho 3 trong phạm vi từ 1 đến M
D. Tổng các số chia hết cho 5 trong phạm vi từ 1 đến M
3.3. Trắc nghiệm Online
Các em hãy luyện tập bài trắc nghiệm Cấu trúc lặp Tin học 11 sau để nắm rõ thêm kiến thức bài học.
4. Kết luận
Sau khi học xong bài 10 Tin học 11, các em cần nắm được một số nội dung cơ bản sau:
- Mô tả được thuận toán của một số bài toán đơn giản có sử dụng lệnh lặp.
- Viết đúng các lệnh lặp kiểm tra điều kiện trước, lệnh lặp với số lần định trước.
- Viết được thuật toán của một số bài toán đơn giản.
- Hiểu nhu cầu của cấu trúc lặp trong biểu diễn thuật toán
- Hiểu cấu trúc lặp kiểm tra điều kiện trước, cấu trúc lặp với số lần định trước.
- Biết cách vận dụng đúng đắn cấu trúc lặp vào tình huống cụ thể