Bài 8. Lặp với số lần chưa biết trước

Chia sẻ bởi Trần Văn Trưởng | Ngày 24/10/2018 | 53

Chia sẻ tài liệu: Bài 8. Lặp với số lần chưa biết trước thuộc Tin học 8

Nội dung tài liệu:

Nhóm sinh viên thực hiện
Trần Thị Lệ An
Lê Nguyễn Thúy Hằng
Nguyễn Như Hồng
Chu Thị Quỳnh Nga
Đoàn Thị Diễm Thi
Nguyễn Thanh Tuân
Huế, 12/2005
Bài Giảng Điện Tử
Tổ chức lặp
Huế, 12/2005
Lặp
Lặp với số lần
chưa biết trước
Các ví dụ áp dụng
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC
VÀ CÂU LỆNH WHILE - DO
Tổ chức lặp
Kiểm tra bài cũ:
* Câu hỏi:
-Nêu cú pháp của câu lệnh rẽ nhánh dạng khuyết và dạng đầy đủ ?
-Câu lệnh rẽ nhánh được vận dụng trong trường hợp nào ?
* Trả lời:
+ Cấu trúc của câu lệnh rẽ nhánh:
- Dạng khuyết: IF <điều kiện> THEN ;
- Dạng đủ:
IF <Điều kiện> THEN ELSE ;
+ Câu lệnh rẽ nhánh được thực hiện khi:
-Khi một công việc chỉ được thực hiện trong một điều kiện cụ thể nào đó thì cần sử dụng tổ chức rẽ nhánh.
Home
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC VÀ CÂU LỆNH WHILE - DO
1. Lặp:
*Bài toán 1: Tính và đưa ra kết quả màn hình tổng:


Cho đến khi
Em hãy cho biết dữ liệu vào và dữ liệu ra của bài toán ?
Với điều kiện nào thì việc tính tổng sẽ dừng lại ?
Huế, 12/2005
Home
Lặp
Lặp với số lần
chưa biết trước
Các ví dụ áp dụng
Huế, 12/2005
*Ý tưởng:
- Input: a
- Output: S
- Xuất phát: S:=1/a
- Sau đó: S:=S+ 1/(a+n)

Việc tính tổng S này được thực hiện lặp lại một số lần chưa biết trước.
Kết thúc lặp khi thoả mãn điều kiện: 1/(a+n)<0.0001
Home
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC VÀ CÂU LỆNH WHILE - DO
Lặp
Lặp với số lần
chưa biết trước
Các ví dụ áp dụng
Huế, 12/2005
Mô hình minh hoạ:
a
S
n
1/a+1/(a+1)
1
… …
S:=S+1/a+1
S:=S+1/(a+2)
S:=S+1/(a+2)+…+…
0
1/a
S:=1/a
n
1/a+1/(a+1)+1/(a+2)
2
1/a+1/(a+1)+…+1/(a+n)+…
Home
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC VÀ CÂU LỆNH WHILE - DO
Lặp
Lặp với số lần
chưa biết trước
Các ví dụ áp dụng
Huế, 12/2005
Đối với bài toán này nếu sử dụng CL: If…then để giải thì sẽ được tổ chức như thế nào ?
Ngoài ra chúng ta còn có các câu lệnh để thực hiện thuật toán lặp như vậy. Vậy ta phải sử dụng câu lệnh lặp While-Do.
2. Lặp với số lần chưa biết trước và câu lệnh While-Do
*Cú pháp: WHILE <Điều kiện> DO ;
*Trong đó:
Từ khoá: While, Do
Điều kiện: là biểu thức quan hệ hoặc logic.
Câu lệnh: Là một câu lệnh của TP.
Home
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC VÀ CÂU LỆNH WHILE - DO
Lặp
Lặp với số lần
chưa biết trước
Các ví dụ áp dụng
Huế, 12/2005
*Cách thực hiện:
+Nếu <Điều kiện> có giá trị đúng (T) thì thực hiện ngay sau Do rồi quay lại kiểm tra <Điều kiện> và quá trình tiếp tục.
+Nếu <Điều kiện> có giá trị sai (F) thì kết thúc câu lệnh này, tiếp tục chương trình.
*Lưu ý: Điều kiện sau Do nếu cần thực hiện một lệnh ghép thì các câu lệnh sau Do đó thì phải đặt chúng giữa Begin…end;
Home
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC VÀ CÂU LỆNH WHILE - DO
Lặp
Lặp với số lần
chưa biết trước
Các ví dụ áp dụng
Huế, 12/2005
*Sơ đồ giải thuật:
Điều kiện
Câu lệnh
T
F
Home
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC VÀ CÂU LỆNH WHILE - DO
Không thực hiện
câu lệnh sau Do
Lặp
Lặp với số lần
chưa biết trước
Các ví dụ áp dụng
Huế, 12/2005
*Giải thích sơ đồ:

Câu lệnh WHILE – DO là câu lệnh chưa biết trước số lần lặp, nó chứa một biểu thức điều kiện để điều khiển thực hiện một câu lệnh đơn hoặc ghép.
viết sau từ khoá DO được thực hiện khi biểu thức <điều kiện> nhận giá trị TRUE. - Biểu thức <điều kiện> được tính giá trị trước khi được thực hiện. - Nếu biểu thức <điều kiện> đã nhận giá trị FALSE ngay từ đầu thì 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 thực hiện mãi, ta gọi là vòng lặp vô hạn.
Home
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC VÀ CÂU LỆNH WHILE - DO
Lặp
Lặp với số lần
chưa biết trước
Các ví dụ áp dụng
Huế, 12/2005
Qua sơ đồ giải thuật này em hãy cho biết sự khác nhau giữa sơ đồ giải thuật giữa câu lệnh rẽ nhánh If - Then và câu lệnh While-Do ?
+CL rẽ nhánh chỉ thực hiện kiểm tra Điều kiện một lần.
+CL While-Do thực hiện kiểm tra Điều kiện, nếu Điều kiện sai thì không thực hiện câu lệnh sau Do, nếu điều kiện đúng thì thực hiện câu lệnh sau Do và quay lại kiểm tra Điều kiện.
Sự khác nhau đó là:
Home
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC VÀ CÂU LỆNH WHILE - DO
Lặp
Lặp với số lần
chưa biết trước
Các ví dụ áp dụng
Huế, 12/2005
+Lệnh sau Do có thể không thực hiện lần nào cả.

+Câu lệnh While có thể bị lặp vô hạn. Khi thực hiện chương trình bị lặp vô hạn thì nhấn tổ hợp phím Ctrl+ Break để thoát và sửa chương trình.

+Lệnh sau Do cần có câu lệnh làm thay đổi giá trị của biến trong <điều kiện > để <điều kiện> có giá trị sai sau một số lần lặp hữu hạn.

+Tránh lặp vô hạn ta có thể dùng CL rẽ nhánh: If <điều kiện> then break; để thoát lặp vô hạn.
*Chú ý:
Home
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC VÀ CÂU LỆNH WHILE - DO
Lặp
Lặp với số lần
chưa biết trước
Các ví dụ áp dụng
Huế, 12/2005
Ví dụ 1:
Bài toán 1:Ta sẽ dùng những biến:
S: để lưu tổng cần tính.
a: để lưu giá trị được nhập vào (a cố định)
A là số nguyên lớn hơn 2.
n: chứa số tự nhiên cần cộng vào.
3. Các ví dụ áp dụng:
Home
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC VÀ CÂU LỆNH WHILE - DO
Lặp
Lặp với số lần
chưa biết trước
Các ví dụ áp dụng
Huế, 12/2005
3. Các ví dụ áp dụng:
Nhập a;
S:=1/a;
N:=0;
1/(a+n)>=0.0001
n:=n+1;
S:=S+1/(a+n)
Kết quả S
F
T
*Sơ đồ giải thuật:
Home
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC VÀ CÂU LỆNH WHILE - DO
Lặp
Lặp với số lần
chưa biết trước
Các ví dụ áp dụng
*Mô phỏng:
Huế, 12/2005
Chương trình
Program TTong;
Uses crt;
Var S: Real;
a, n:integer;
Begin
Write(‘hay nhap gia tri a vao:’);
Readln(a);
S:=1/a;
n:=0;
While 1/(a+n)>=0.0001 do
{While not (1/(a+n)<0.0001) do}
Begin
n := n + 1;
S: = S + 1/(a+n);
End;
Writeln(‘ tong S la:’,S);
Readln;
End.
Home
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC VÀ CÂU LỆNH WHILE - DO
Lặp
Lặp với số lần
chưa biết trước
Các ví dụ áp dụng
Huế, 12/2005
Home
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC VÀ CÂU LỆNH WHILE - DO
Lặp
Lặp với số lần
chưa biết trước
Các ví dụ áp dụng
+ Nếu a nhập vào đã lớn, với n=0 thì câu lệnh sau Do có được thực hiện hay không? Vì sao?

+ Nếu giữa Begin …end; trong lệnh While ta bỏ dòng lệnh n:=n+1 thì việc thực hiện câu lệnh While sẽ như thế nào ?

+ Để CL sau While dừng lại sau một số lần lặp hữu hạn thì ta cần làm gì ?
Huế, 12/2005
Ví dụ 2: Tìm UCLN của hai số nguyên dương m và n.
Sau đây là một giải thuật:
B1: Nếu m=n thì UCLN(m,n):=m; kết thúc.
B2: Nếu m>n thì m:=m-n rồi quay lại B1, ngược lại n:=n-m rồi quay lại B1
Chương trình:
Program UCLN;
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.
Home
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC VÀ CÂU LỆNH WHILE - DO
Lặp
Lặp với số lần
chưa biết trước
Các ví dụ áp dụng
Mô phỏng:
Kết thúc bài giảng
Home
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...

Người chia sẻ: Trần Văn Trưởng
Dung lượng: | Lượt tài: 1
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)