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 |
Chia sẻ: maiphuongdc | Lượt xem: 10631 | 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.