* Trả lời: + Cấu trúc của câu lệnh rẽ nhánh: - Dạng khuyết: IF THEN ; - Dạng đủ: IF 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
Trang 1Nhã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
Trang 2Các ví dụ áp dụng
Trang 3* 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 <câu lệnh>;
- Dạng đủ:
IF <Điều kiện> THEN <câu lệnh1> ELSE <câu lệnh 2>;
+ 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
Trang 41 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 ?
1
2
1 1
1 1
+ +
+
+ +
+ +
+
=
n a a
a a S
0001
0
1 <
+ n a
Lặp
Lặp với số lần
chưa biết trước
Các ví dụ áp dụng
Trang 5*Ý 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
Lặp
Lặp với số lần
chưa biết trước
Các ví dụ áp dụng
Trang 6Mô hình minh hoạ:
1/a+1/(a+1)
1
S:=S+1/a+1 S:=S+1/(a+2)
S:=S+1/(a+2)+…+…
n
1/a+1/(a+1)+1/(a+2)
2
1/a+1/(a+1)+…+1/(a+n)+…
Lặp
Lặp với số lần
chưa biết trước
Các ví dụ áp dụng
Trang 7Đố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 <Câu lệnh>;
*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
Lặp
Lặp với số lần
chưa biết trước
Các ví dụ áp dụng
Trang 8*Cách thực hiện:
+Nếu <Điều kiện> có giá trị đúng (T) thì thực hiện <Câu lệnh> 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;
Lặp
Lặp với số lần
chưa biết trước
Các ví dụ áp dụng
Trang 9*Sơ đồ giải thuật:
Điều kiện
Câu lệnh
T
F
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
Trang 10*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
<Câu lệnh> 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â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> 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.
Lặp
Lặp với số lần
chưa biết trước
Các ví dụ áp dụng
Trang 11Qua 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à:
Lặp
Lặp với số lần
chưa biết trước
Các ví dụ áp dụng
Trang 12+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ú ý:
Lặp
Lặp với số lần
chưa biết trước
Các ví dụ áp dụng
Trang 13Ví 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:
Lặp
Lặp với số lần
chưa biết trước
Các ví dụ áp dụng
Trang 14Nhập a;
S:=1/a;
N:=0;
1/
(a+n)>=0.0001
n:=n+1;
S:=S+1/(a+n)
F
T
*Sơ đồ giải thuật:
Lặp
Lặp với số lần
chưa biết trước
Các ví dụ áp dụng
Trang 15Chươ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;
Writeln(‘ tong S la:’,S);
Lặp
Lặp với số lần
chưa biết trước
Các ví dụ áp dụng
Trang 16Lặ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ì ?
Trang 17Ví 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;
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);
End.
Lặp
Lặp với số lần
chưa biết trước
Các ví dụ áp dụng