Tải bản đầy đủ (.ppt) (25 trang)

CHƯƠNG 2 : GIẢI QUYẾT BÀI TOÁN BẰNG MÁY TÍNH pdf

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (150.71 KB, 25 trang )

CHƯƠNG 2 : GIẢI QUYẾT BÀI TOÁN BẰNG MÁY TÍNH
2.1 Thuật toán
2.2 Biểu diễn thuật toán
2.3 Các bước giải quyết bài toán trên máy tính
2.1 Thuật toán
CHƯƠNG TRÌNH = THUẬT TOÁN + CẤU TRÚC DỮ LIỆU
(Programs = algorithms + Data Structures)
1 Khái niệm
THUẬT TOÁN
Hệ thống các qui tắc

các đối tượng

Dãy hữu hạn các thao tác (bước)

Thực hiện hữu hạn lần các thao tác
ta đạt được mục tiêu định trước
VD: giải phương trình ax + b = 0 (a<>0)
Đối tượng: a,b,x
Qui tắc : ax + b = 0 và các qui tắc toán học khác

Các thao tác :
(1) Nhập giá trị cho a (a<>0), b
(2) Tính x = -b/a
(3) Xuất kết quả x
(4) Dừng

Một vấn đề, bài toán cho trước có thể có nhiều thuật toán khác nhau.

Thuật toán cho kết quả với thời gian nhanh nhất được coi là thuật toán tối
ưu về mặt thời gian.



Thuật toán sử dụng ít bộ nhớ nhất được coi là thuật toán tối ưu về bộ nhớ.
Chú ý :
Các thao tác :
(1) Nhập giá trị cho a (a<>0), b
(2) Tính x = -b/a
(3) Xuất kết quả x
(4) Dừng
Các thao tác :
(1) Nhập giá trị cho a (a<>0), b
(2) Tính x1 = -b
(3) Tính x2 = 1/a
(4) Tính x = x1*x2
(5) Xuất kết quả x
(6) Dừng
2 Các ví dụ
1. Giải phương trình
ax
2
+ bx + c = 0 ( a<>0 ).
Đối tượng: a,b,c,x
Qui tắc : ax2 + bx + c = 0 và các qui tắc toán học khác

Các thao tác :
(1) Nhập giá trị cho a (a<>0), b, c
(2) Tính DELTA=B*B-4*A*C
(3) So sánh DELTA với 0
(4) Dựa vào (3)
Nếu DELTA<0
Xuất kết quả ‘PTVN’

Dừng
Nếu DELTA=0
Tính nghiệm (kép) x = -b/(2*a)
Xuất kết quả x
Dừng
Nếu DELTA>0
Tính nghiệm
x1 = (-b+sqrt(DELTA))/(2*a)
x2 = (-b-sqrt(DELTA))/(2*a)
Xuất kết quả x1, x2
Dừng
2. Tính giá trị của đa thức P
n
(X)=A
n
X
n
+ A
n-1
X
n-1
+…+ A
1
X
1
+ A
0
tại X=C
Viết lại : P
n

(C)=(…( A
n
C+A
n-1
)C+A
n-2
)C+…+A
1
)C+A
0


Minh họa với n=3.
P
3
(C) = A
3
C
3
+ A
2
C
2
+A
1
C
1
+ A
0
= (( A

3
C+A
2
)C+A
1
)
C+A
0

Các thao tác :
(1)Q= A
n
; i=n
(2) i:=i-1, so sánh i với 0
(3) Dựa vào (2)
Nếu i>=0
Tính Q:=Q*C+ A
i

→ (2)
Nếu i<0
Xuất kết quả Q
Dừng
N=3
(1)Q= A
3
; i=3
(2) i:=2>=0
(3) Q:=Q*C+ A
2

=A
3
*C+A
2

(2) i:=1>=0
(3) Q:=Q*C+ A
1
=(A
3
*C+A
2
)*C+A
1
=A
3
*C
2
+A
2
*C+A
1
(2) i:=0>=0
(3) Q:=Q*C+ A
0
=(A
3
*C
2
+A

2
*C+A
1
)*C+A
0
=A
3
*C
3
+A
2
*C
2
+A
1
*C+A
0
(2) i:=-1<0
(3) In Q; Dừng
3. Tính tổng n số tự nhiên đầu tiên S=1+2+…+n; n>0 (S=(n+1)*n/2)
Viết lại S=(…(0+1)+2)+…+n)
Các thao tác :
(1) S=0; i=1
(2) S:=S+i
(3) i:=i+1
(4) So sánh i với n
(5) Dựa vào (4)
Nếu i<=n
→ (2)
Nếu i>n

Xuất kết quả S
Dừng
n=5
i S
1 0+1 =1
2 (0+1)+2 =3
3 ((0+1)+2)+3 =6
4 (((0+1)+2)+3)+4 =10
5 ((((0+1)+2)+3)+4)+5=15
6 *
1. Giải phương trình bậc 2 ax2 + bx + c = 0 với a tùy ý.
2. Kiểm tra số nguyên dương cho trước là số nguyên tố.
3. Kiểm tra số nguyên dương cho trước là số chính phương.
4. Tìm ước số chung lớn nhất của 2 số nguyên dương cho
trước.
5. Liệt kê các số khác nhau trong 1 dãy số cho trước.
Thuật toán số nguyên tố
Thuật toán số nguyên tố

DK: j=2 và n chia hết cho 1 và chính nó.
DK: j=2 và n chia hết cho 1 và chính nó.

(1): Nhập n
(1): Nhập n

(2): j=2
(2): j=2

(3): j<=n and n không chia hết cho j ->
(3): j<=n and n không chia hết cho j ->


Nếu không thỏa (3) - > (5)
Nếu không thỏa (3) - > (5)

Nếu thỏa (3) -> (4)
Nếu thỏa (3) -> (4)

(4): j=j+1 -> (3)
(4): j=j+1 -> (3)

(5) Nếu j=n thì in số nguyên tố
(5) Nếu j=n thì in số nguyên tố
(6) Dừng
(6) Dừng
3 Các đặc trưng
Tính dừng (kết thúc) :

thuật toán phải dừng sau hữu hạn lần thực hiện thao tác.

Trong VD1 tính dừng là rõ ràng; Trong VD2 ở (2) i giảm 1 đơn vị cho nên
sau một số lần thực hiện thao tác ta sẽ có i<0;
Các thao tác :
(1)Q= A
n
; i=n
(2) i:=i-1, so sánh i với 0
(3) Dựa vào (2)
Nếu i>=0
Tính Q:=Q*C+ A
i


→ (2)
Nếu i<0
Xuất kết quả Q
Dừng

Trong VD3 ở (3) i tăng 1 đơn vị cho nên sau một số lần thực hiện thao tác
ta sẽ có i>n
Các thao tác :
(1) S=0; i=1
(2) S:=S+i
(3) i:=i+1
(4) So sánh i với n
(5) Dựa vào (4)
Nếu i<=n
→ (2)
Nếu i>n
Xuất kết quả S
Dừng
Tính xác định :
các thao tác ở mỗi bước phải rõ ràng và chỉ hiểu theo một nghĩa duy nhất
Tính phổ dụng :
áp dụng cho các bài toán cùng loại.
Trong VD1 thuật toán không phổ dụng vì thuật toán
không sử dụng được khi nhập a=0 hoặc a là một ký tự;
Trong VD3 thuật toán sẽ sai khi cho n=0
Các thao tác :
(1) S=0; i=1
(2) S:=S+i
(3) i:=i+1

(4) So sánh i với n
(5) Dựa vào (4)
Nếu i<=n
→ (2)
Nếu i>n
Xuất kết quả S
Dừng
Tính khả thi :
bao gồm các thao tác mà máy có thể thực hiện được.
Phép tính căn trong tính nghiệm khi giải phương trình bậc 2 ở
trường hợp DELTA>0 là không thực hiện được trên máy tính
Tính đầy đủ :
phải vét hết các tình huống, các khả năng có thể có.
Thuật toán trong VD1 nêu trên đã bỏ qua trường hợp a=0;
Thuật toán trong VD3 bỏ qua trường hợp n=0
Tính đúng đắn :
phải chứng minh tính đúng đắn của thuật toán.
Chứng minh tính đúng đắn của thuật toán là một việc làm khó,
thông thường ta chỉ kiểm tra thuật toán với giá trị nhỏ (hoặc tính nhẩm được).
VD : kiểm tra thuật toán trong VD3 với n=5 ta có S=15
i S
0
1 0+1=1 i<=n
2 1+2=3 i<=n
3 3+3=6 i<=n
4 6+4=10 i<=n
5 10+5=15 i<=n
6 Dừng i>n
2.2 Biểu diễn thuật toán
1 Các cách biểu diễn thuật toán

Ngôn ngữ tự nhiên hoặc mã giả
VD : sử dụng ngôn ngữ tự nhiên để biểu diễn thuật toán
giải phương trình bậc 2 với a<>0
Bắt đầu.
Nhập a(a<>0), b, c.
Tính Delta=b*b-4*a*c.
Nếu Delta<0 thì
In câu thông báo : ‘Phương trình vô nghiệm’.
Dừng.
Nếu Delta = 0 thì
Tính nghiệm x=-b/(2*a).
In x.
Dừng.
Nếu Delta>0 thì
Tính x1,2=(-b±sqrt(delta))/(2*a).
In x1, x2.
Dừng.
Lưu đồ (Flowchart)
Các qui ước
Khối bắt đầu
START/BEGIN

Khối nhập dữ liệu

Nhập x,y,…
Nhập x,y,…
Khối thao tác, tính toán
Thao tác/
Biểu thức
Khối kiểm tra

ĐK
Biểu thức
S
Đ
=a =b =c
Khối xuất dữ liệu
In a, b,…
Khối dừng (kết thúc)

END
VD : sử dụng lưu đồ để biểu diễn thuật toán giảp phương trình bậc 2 với a<>0
Start
Nhập
a(a<>0),b,c
Delta=b.b-4.a.c
Delta>=
0
Delta>0
In
‘PTVN’
End
S
Đ
Đ
S
X=-b/(2.a)
In X
End
X1,2=(-b±sqrt(Delta)/
(2.a)

In
X1,2
End
Bắt đầu.
Nhập a(a<>0), b, c.
Tính Delta=b*b-4*a*c.
Nếu Delta<0 thì
In câu thông báo : ‘Phương trình vô nghiệm’.
Dừng.
Nếu Delta = 0 thì
Tính nghiệm x=-b/(2*a).
In x.
Dừng.
Nếu Delta>0 thì
Tính x1,2=(-b±sqrt(delta))/(2*a).
In x1, x2.
Dừng.
2.3 Các bước giải quyết bài toán trên máy tính
2. Biểu diễn thuật toán
3. Viết chương trình
4. Sửa lỗi cú pháp (Syntax error)
1. Nghiên cứu bài toán, dữ liệu sử dụng và phác thảo cách giải
để trên cơ sở đó tìm ra thuật toán
VD : bài toán giải phương trình bậc 2: ax2 + bx + c = 0
với a<>0.
Dữ liệu nhập : a<>0, b, c là các số thực.
Các kiến thức về giải phương trình bậc 2 với a<>0.
Tính Delta (số thực).
Xử lý nghiệm phương trình (số thực).
5. Sửa lỗi logic


Chạy thử chương trình với các bộ dữ liệu cơ bản
Bộ dữ liệu nhập Dữ liệu in ra màn hình
a b c
1 2 1 x=-1
1 -3 2 x1=1; x2=2
1 1 4 ‘PTVN’

Chạy thử chương trình với các bộ dữ liệu cá biệt
với chương trình giải phương trình bậc 2 với a<>0 ta nhập a=0

Đặt bẫy lỗi
cô lập các dòng lệnh trong chương trình nghi ngờ có lỗi
bổ sung các lệnh in dữ liệu sau các đoạn chương trình nghi ngờ có lỗi

Sử dụng các công cụ dò lỗi logic (Debug) kèm theo chương trình dịch

×