Các bước thực hiệnBước 1: Xác định bài toán; Bước 2: Lựa chọn hoặc thiết kế thuật toán; Bước 3: Viết chương trình; Bước 4: Hiệu chỉnh Bước 5: Viết tài liệu... 2/ Lựa chọn hoặc thiết kế
Trang 1Bài toán
Tìm ước số chung lớn nhất (ƯCLN) của hai số nguyên dương M và N
Với các giá trị:
M = 5; N = 5 N = 5.
M = 8; N = 6 N = 6.
M = 13; N = 17 N = 17.
M = 2006; N = 2018.
M = 2006; N = 2018
UCLN(M,N) = 5 UCLN(M,N) = 2 UCLN(M,N) = 1 UCLN(M,N) = 2
Trang 21 Hãy chỉ ra những ưu điểm của việc giải bài toán bằng máy tính so với cách giải toán thông
Trang 3Các bước thực hiện
Bước 1: Xác định bài toán;
Bước 2: Lựa chọn hoặc thiết kế thuật toán;
Bước 3: Viết chương trình;
Bước 4: Hiệu chỉnh
Bước 5: Viết tài liệu
Trang 4Ví dụ: Xét bài toán
Tìm ước chung lớn nhất (ƯCLN) của hai số nguyên dương M và N
Hãy xác định Input và Output của bài toán trên?
Trang 5Cho dãy số A: 2 3 6 9 30 100
Tìm số k = 6.
Ví dụ 2:
1 Đây là dạng bài toán nào? Có
những thuật toán nào để giải? Em chọn thuật toán nào? Vì sao?
2 Khi lựa chọn hoặc thiết kế thuật
toán cần đảm bảo các tiêu chuẩn nào?
Trang 6có nhiều cách giải
(thuật toán)
BÀI TOÁN
Cách 1 Cách 2 Cách 3
KẾT QUẢ
Trang 72/ Lựa chọn hoặc thiết kế thuật toán
- Một thuật toán chỉ giải được một bài toán, nhưng một bài toán có thể có nhiều thuật toán để giải Vì vậy ta phải chọn thuật toán tối ưu trong các thuật toán đã có.
- Một thuật toán tối ưu phải có các tiêu chuẩn sau :
Thời gian thực hiện nhanh.
Ít tốn dung lượng bộ nhớ.
Ít phức tạp (trình bày dễ hiểu, dễ nhìn).
a/ Lựa chọn thuật toán :
Trang 8Ví dụ 1:Tìm ước chung lớn nhất của hai số nguyên dương
M, N
• Nếu M=N thì giá trị chung là
UCLN
• Nếu M>N thì
UCLN(M,N)=UCLN(M-N,N)
• Nếu M<N thì
UCLN(M,N)=UCLN(M,N-M)
• Chia M cho N lấy dư là R
• Nếu R=0 thì UCLN(M,N)=N
• Nếu R khác 0 thì gán N cho M, gán R cho N
• Tiếp tục chia M cho N
Ý tưởng: ta có 2 ý tưởng sau
Trang 9B1: Nhập M, N
B2: Chia M cho N lấy
dư là R
B3: Nếu R=0 thì UCLN(M,N)=N rồi kết thúc
B4: M N , N R, chuyển sang B2
B1:Nhập M,N
B2: Nếu M=N thì giá trị
chung là UCLN rồi kết thúc
B3:Nếu M>N thì
M M-N, chuyển sang B2
B4: N N-M, chuyển sang
B2
Thuật toán :
* Diễn tả thuật toán bằng cách liệt kê :
Trang 10Nhập M,N
N N-M
M=N Đưa ra M và
KT
M>N
S
Đ
S
M M-N Đ
Nhập M,N
Chia M cho N lấy dư R
R=0
M N
N R
Đưa ra N và KT
Nên lựa chọn cách giải (thuật toán) nào để viết chương trình?
Đ
S
2 1
* Diễn tả thuật toán bằng sơ đồ khối:
Trang 11Nhập M,N
N N-M
M=N Đưa ra M và
KT
M>N
S
Đ
S
M M-N Đ
KQ UCLN(3,100)=1 Với M=3, N=100
Trang 12Nhập M,N
Chia M cho N
lấy dư R
R=0
M N
N R
Đưa ra N và KT
Đ
S
KQ UCLN(3,100)=1 Với M=3, N=100
Trang 13Số
lần
thực
hiện
Thuật toán 1 và giá trị tương
ứng của (M,N)
Thuật toán 2 và giá trị tương ứng của (M,N)
1
37 Kết luận: ƯCLN
= 1
Trang 143/ Viết chương trình
Là lựa chọn cách tổ chức dữ liệu và lựa chọn ngôn ngữ lập trình (NNLT) phù hợp với thuật toán.
Có nhiều loại NNLT, vì vậy khi viết
chương trình trong ngôn ngữ nào thì phải tuân theo những quy định đó
Trang 15Program TimUCLN;
Var M, N, R:integer;
Begin
Write(‘Nhap vao M,N’);
Read(M,N);
While N<> 0 do Begin
R:=M mod N;
M:=N; N:=R;
end;
Write(‘ uoc chung lon nhat la:’, M); End.
Program TimUCLN;
Var M, N, R:integer;
Begin
Write(‘Nhap vao M,N’);
Read(M,N);
While M<>N do
IF M>N THEN
M:=M-N
ELSE
N:=N-M;
Write(‘ uoc chung lon nhat
la:’, M);
End.
Trang 164/ Hiệu chỉnh
?Khi ta giải một bài toán có phải lúc nào kết quả cũng
đúng không? Tại sao cần phải có bước hiệu chỉnh? Thế nào là hiệu chỉnh?
Khái niệm: Chương trình được kiểm tra bằng cách cho
chạy thử trên những bộ Input mà người ta đã biết trước Output Các bộ Input-Output này gọi là các Test Nếu
có sai sót người lập trình sửa chương trình rồi thử lại Quá trình này được gọi là hiệu chỉnh.
Trang 17Ghép nối mỗi mục ở cột bên trái với mục ở cột bên phải
để thể hiện nội dung tương ứng của từng bước giải bài
toán trên máy tính.
1 Xác định bài
toán a) Lựa chọn cách tổ chức dữ liệu và ngôn ngữ lập trình để diễn đạt thuật toán
2 Lựa chọn hoặc
thiết kế thuật toán b) Thực hiện chương trình với 1 số bộ Input để kiểm tra kết quả
3 Viết chương
trình c) Xác định Input và Output.
4 Hiệu chỉnh d) Mô tả bài toán, thuật toán, thiết kế chương trình, kết quả thử nghiệm và
hướng dẫn sử dụng
5 Viết tài liệu e) Lựa chọn thuật toán có thời gian thực hiện nhanh nhất, tốn ít dung lượng bộ nhớ
và ít phức tạp nhất
Trang 181 Xác định bài
toán a) Lựa chọn cách tổ chức dữ liệu và ngôn ngữ lập trình để diễn đạt thuật toán
2 Lựa chọn hoặc
thiết kế thuật toán b) Thực hiện chương trình với 1 số bộ Input để kiểm tra kết quả
3 Viết chương
trình c) Xác định Input và Output.
4 Hiệu chỉnh d) Mô tả bài toán, thuật toán, thiết kế chương trình, kết quả thử nghiệm và
hướng dẫn sử dụng
5 Viết tài liệu e) Lựa chọn thuật toán có thời gian thực hiện nhanh nhất, tốn ít dung lượng bộ nhớ
và ít phức tạp nhất
Trang 19Bài tập 3:
Bài toán: viết thuật toán giải pt bậc nhất ax+b=0 và sử dụng vài bộ Input để kiểm chứng tính đúng đắn của chương trình.
- Input : các hệ số a,b
- Output : các kết luận về nghiệm của pt.
sau:
-Nếu a=0 :
+Nếu b=0 :kết luận pt có vô số nghiệm;
+Nếu b≠ 0 : kết luận pt vô nghiệm;
-Nếu a ≠ 0 : kết luận pt có một nghiệm x = -b/a.
Trang 20Đ
•Thuật toán :
- Sơ đồ khối
Nhập a và b
a=0?
b=0? Pt vn rồi
kết thúc
Pt vsn rồi
kết thúc
Đ
S
nghiệm x=-b/a rồi kết thúc
Giải pt: 8x+96=0
Pt có nghiệm :x=-12