Tin học đại cương - Chương 7: Bài toán và thuật toán

Trong xu hƣớng phát triển của xã hội, công nghệ thông tin

ngày càng đóng một vai trò rất quan trong giúp mọi ngƣời

có thể hoàn thành công việc của mình trở nên nhanh

chóng, hiệu quả và dễ dàng hơn thông qua các chƣơng

trình ứng dụng trên máy tính. Thuật toán và thuật giải là

nền tảng để những lập trình viên có thể xây dựng những

chƣơng trình ứng dụng phù hợp.

 Đó cũng chính là mục tiêu của chƣơng này nhằm cung

cấp các khái niệm ban đâu về bài toán và thuật toán .

Đông thời đƣa ra qui trình cơ bản để giải quyết 1 bài toán

trên máy tính nhƣ thế nào?

pdf59 trang | Chia sẻ: Mr Hưng | Lượt xem: 804 | Lượt tải: 0download
Bạn đang xem trước 20 trang nội dung tài liệu Tin học đại cương - Chương 7: Bài toán và thuật toán, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Tin học đại cương Introduction to Information Technology Nhóm biên soạn HP. Tin Học Đại Cương Khoa Công Nghệ Thông Tin Trường ĐHSP TP. Hồ Chí Minh Bộ môn Kĩ Thuật Dạy Học Chương 7: Bài toán và thuật toán 2Bản quyền: Khoa CNTT 2011 Giới thiệu  Trong xu hƣớng phát triển của xã hội, công nghệ thông tin ngày càng đóng một vai trò rất quan trong giúp mọi ngƣời có thể hoàn thành công việc của mình trở nên nhanh chóng, hiệu quả và dễ dàng hơn thông qua các chƣơng trình ứng dụng trên máy tính. Thuật toán và thuật giải là nền tảng để những lập trình viên có thể xây dựng những chƣơng trình ứng dụng phù hợp.  Đó cũng chính là mục tiêu của chƣơng này nhằm cung cấp các khái niệm ban đâu về bài toán và thuật toán . Đông thời đƣa ra qui trình cơ bản để giải quyết 1 bài toán trên máy tính nhƣ thế nào? 3Bản quyền: Khoa CNTT 2011 Nội dung chính Chƣơng 7: Bài toán và thuật toán  Khái niệm vấn đề và bài toán.  Thuật toán và các phương pháp biểu diễn thuật toán.  Các bước để giải một bài toán trên máy tính.  Chuyển đổi bài toán thành chương trình máy tính. 4Bản quyền: Khoa CNTT 2011 Khái niệm vấn đề  Vấn đề thƣờng đƣợc dùng với nghĩa rộng hơn bài toán, bài toán là vấn đề mà để giải quyết nó phải liên quan ít nhiều đến tính toán  Pitago chia mọi vấn đề mà con ngƣời cần giải quyết thành hai loại: Theorema: vấn đề cần khẳng định tính đúng – sai Problema: vấn đề cần tìm giải pháp để để đạt đƣợc mục tiêu từ những điều kiện ban đầu nào đó 5Bản quyền: Khoa CNTT 2011 Khái niệm vấn đề (tt)  Theo nhiều kết quả nghiên cứu: việc giải quyết vấn đề - bài toán mà Pitago nêu ra đều có thể diễn ra theo một sơ đồ chung: A B  Trong đó: A có thể là giả thiết, điều kiện ban đầu B có thể là kết luận, mục tiêu cần đạt  là suy luận, giải pháp cần xác định 6Bản quyền: Khoa CNTT 2011 Ví dụ về vấn đề - bài toán 1. Bài toán kiểm tra tính nguyên tố  Điều kiện ban đầu: Số nguyên dƣơng N  Mục tiêu cần đạt: N có là số nguyên tố hay không? 2. Bài toán quản lý hồ sơ sinh viên  Điều kiện ban đầu: Hồ sơ gốc của các sinh viên trong trƣờng  Mục tiêu cần đạt: Bảng thống kê, phân loại sinh viên theo kết quả học tập 7Bản quyền: Khoa CNTT 2011 Bài toán trong tin học?  Trong thực tế, không phải vấn đề nào cũng có thể là những bài toán có tính toán (bài toán của toán học).  Ví dụ:  Làm sao giao dịch ngân hàng tự động không cần nhân viên  Làm sao để con ngƣời nói chuyện đƣợc với nhau mà không cần phải gặp mặt nhau.  Làm sao để xếp loại học sinh của trƣờng học có 3000 học sinh một cách nhanh chóng  Tất cả là bài toán trong tin học Là vấn đề mà ta muốn máy tính thực hiện để từ dữ liệu vào (Input) ta nhân được dữ liệu – thông tin ra cần thiết (output) 8Bản quyền: Khoa CNTT 2011 Ví dụ bài toán trong tin học 1. Bài toán tìm ƣớc chung lớn nhất của hai số nguyên dƣơng M,N  Input: Hai số nguyên M,N  Output: ƢCLN 2. Bài toán xếp thời khóa biểu cho trƣờng học  Input: Tên giáo viên, môn dạy  Output: TKB của trƣờng 3. Bài toán tìm điểm thi đại học của thí sinh  Input: Số báo danh  Output: Điểm thi 9Bản quyền: Khoa CNTT 2011 Giải bài toán trên máy tính nhƣ thế nào? OutputInput Bài toán Bằng cách nào ? Giải bài toán Hướng dẫn các thao tác cho máy thực hiện Thuật toán 10Bản quyền: Khoa CNTT 2011 Thuật toán là gì? Từ thuật toán (Algorithm) xuất phát từ tên một nhà toán học người Trung Á là Muhammad ibn Musa al-Khwarizmi, thường gọi là al’Khwarizmi. Ông là tác giả một cuốn sách về số học, trong đó ông đã dùng phương pháp mô tả rất rõ ràng, mạch lạc cách giải những bài toán. Sau này, phương pháp mô tả cách giải toán của ông đã được xem là một chuẩn mực và được nhiều nhà toán học khác tuân theo. Từ algorithm ra đời dựa theo cách phiên âm tên của ông. Muḥammad ibn Mūsā al- Khwārizmī (Arabic: نب دمحم يمزراوخلا ىسوم ) was a Persian mathematician, astronomer, astrologer and geographer. He was born around 780, in either Khwarizm or Baghdad, and died around 850. (Trích từ Wikipedia) 11Bản quyền: Khoa CNTT 2011 Khái niệm thuật toán  Thuật toán là khái niệm cơ sở của toán học và tin học  Thuật toán là một dãy các chỉ thị rõ ràng và có thể thi hành được để hƣớng dẫn thực hiện hành động nhằm đạt đƣợc mục tiêu đặt ra  Thuật toán là sự thể hiện của một phương pháp để giải quyết vấn đề 12Bản quyền: Khoa CNTT 2011 Lƣu ý  Cùng một bài toán có thể có nhiều thuật toán khác nhau để giải  Thuật toán đơn giản, dễ hiểu, có độ chính xác cao, đƣợc bảo đảm về mặt toán học, dễ triển khai trên máy, thời gian thao tác ngắn, đƣợc gọi là thuật toán tối ưu  Nghiên cứu thuật toán là một trong những vấn đề quan trọng của tin học  Lý thuyết về thuật toán giải quyết một số vấn đề sau: Những bài toán nào giải đƣợc bằng thuật toán, những bài toán nào không giải đƣợc bằng thuật toán Tìm thuật toán tốt nhất, tối ƣu Triển khai thuật toán trên máy tính 13Bản quyền: Khoa CNTT 2011 Đặc trƣng của thuật toán  Nhập (input). Các thuật toán thƣờng có giá trị đầu vào  Xuất (output). Từ giá trị vào thuật toán cho ra kết quả.  Tính xác định(definiteness). Các bƣớc trong thuật toán phải chính xác rõ ràng.  Tính hữu hạn(finiteness). Thuật toán phải cho ra lời giải (hay kết quả) sau một số bƣớc hữu hạn.  Tính hiệu quả(Effectiveness). Tính hiệu quả đƣợc đánh giá dựa trên một số tiêu chuẩn nhƣ khối lƣợng tính toán, không gian và thời gian sử dụng (khi thực hiện thuật toán trên máy tính).  Tính tổng quát(Generalliness) Thuật toán phải áp dụng đƣợc cho tất cả các bài toán cùng dạng, chứ không chỉ áp dụng đƣợc cho một số trƣờng hợp riêng lẻ nào đó. 14Bản quyền: Khoa CNTT 2011 Ví dụ về thuật toán giải phƣơng trình bậc nhất  Bƣớc 1 : Nhập a, b.  Bƣớc 2 : Nếu a = 0 thì B2.1: Nếu b=0 thì thông báo pt vô số nghiệm rồi qua bƣớc 5 B2.2: Nếu b khác 0 thì thông báo pt vô nghiệm rồi qua bƣớc 5  Bƣớc 3 : Gán cho x giá trị -b/a, rồi qua bƣớc 4.  Bƣớc 4: Xuất ra giá trị x rồi qua bƣớc 5  Bƣớc 5 : Kết thúc. 15Bản quyền: Khoa CNTT 2011 Cấu trúc cơ bản của thuật toán  Tuần tự: thực hiện hết lệnh này đến lệnh khác  Rẽ nhánh: tùy theo dữ liệu đầu vào mà ta quyết định thực hiện câu lệnh gì tiếp theo  Lặp: thực hiện lại nhiều lần một số câu lệnh nào đó cho đến khi điều kiện không còn thỏa mãn nữa 16Bản quyền: Khoa CNTT 2011 Các phƣơng pháp biễu diễn thuật toán  Ngôn ngữ tự nhiên  Lƣu đồ - sơ đồ khối  Mã giả 17Bản quyền: Khoa CNTT 2011 Biểu diễn thuật toán bằng phƣơng pháp ngôn ngữ tự nhiên  Liệt kê các thao tác, các chỉ thị bằng ngôn ngữ tự nhiên Ví dụ: Có 43 que diêm. Hai ngƣời chơi luân phiên bốc diêm. Mỗi lƣợt, mỗi ngƣời bốc từ 1 đến 3 que diêm. Ngƣời nào bốc cuối cùng sẽ thắng cuộc  Giải thuật để ngƣời đi trƣớc luôn thắng cuộc đƣợc diễn tả bằng cách liệt kê từng bƣớc nhƣ sau: Bước 1: Bốc 3 que rồi đợi đối phƣơng đi Bước 2: Đối phƣơng bốc (giả sử x que, 0<x<4) Bước 3: Đến lƣợt ngƣời đi trƣớc bốc a = (4-x) que. Nếu còn diêm thì quay lại Bước 2 Ngƣợc lại qua bước 4 Bước 4:Tuyên bố thắng cuộc. Kết thúc 18Bản quyền: Khoa CNTT 2011 Biễu diễn thuật toán bằng phƣơng pháp lƣu đồ (lowchart)  Là một phƣơng tiện hình học giúp ta diễn tả giải thuật một cách trực quan  Đƣợc tạo bởi các kiểu khối cơ bản, nối với nhau bằng các đƣờng có hƣớng  Thuật ngữ tiếng Anh là Flow Chart 19Bản quyền: Khoa CNTT 2011 Các ký hiệu cơ bản trong phƣơng pháp lƣu đồ 20 bắt đầu kết thúc chƣơng trình con hƣớng xử lý điều kiện nhập hoặc xuất thao tác Bản quyền: Khoa CNTT 2011 Ví dụ dùng phƣơng pháp lƣu đồ để so sánh 2 số a và b 21 Bắt đầu Kết thúc Số a, Số b Số a bằng Số b Số a có bằng Số b không? Số a không bằng Số b Có Không Bản quyền: Khoa CNTT 2011 Biểu diễn thuật toán bằng phƣơng pháp mã giả (pseudo code)  Ngoài việc sử dụng ngôn ngữ tự nhiên và lƣu đồ để biểu diễn thuật toán, ngƣời ta còn sử dụng ngôn ngữ tựa pascal, c, đƣợc gọi là mã giả  Trong mã giả ta sử dụng cả cấu trúc của ngôn ngữ lập trình và ngôn ngữ tự nhiên 22Bản quyền: Khoa CNTT 2011 Ví dụ về dùng phƣơng pháp mã giả để giải phƣơng trình bậc 2 if delta > 0 then begin X1(-b-sqrt(delta))/(2*a) X2(-b+sqrt(delta))/(2*a) xuất kết quả : phƣơng trình có hai nghiệm là x1 và x2 end else if delta = 0 then xuất kết quả : phƣơng trình có nghiệm kép là -b/(2*a) else {trƣờng hợp delta < 0 } xuất kết quả : phƣơng trình vô nghiệm 23Bản quyền: Khoa CNTT 2011 Các bƣớc giải 1 bài toán trên máy tính  Bƣớc 1: Xác định vấn đề - bài toán  Bƣớc 2: Lựa chọn phƣơng pháp giải  Bƣớc 3: Xây dựng thuật toán hoặc thuật giải  Bƣớc 4: Cài đặt chƣơng trình  Bƣớc 5: Hiệu chỉnh chƣơng trình  Bƣớc 6: Thực hiện chƣơng trình 24 Lưu ý: Các bước 4, 5, 6 sẽ được học chi tiết trong môn lập trình căn bản Bản quyền: Khoa CNTT 2011 Các bƣớc để thiết kế thuật toán  Bƣớc 1: Xác định vấn đề bài toán (input, output)  Bƣớc 2: Hình thành ý tƣởng chính để để xây dựng thuật toán (bài toán giải bằng cách nào? Thuật toán sẽ dừng khi nào?)  Bƣớc 3: Xây dựng thuật toán (ngôn ngữ tự nhiên, lƣu đồ, mã giả)  Bƣớc 4: Mô phỏng để kiểm tra tính đúng đắn của thuật toán (chạy thử bằng tay) 25Bản quyền: Khoa CNTT 2011 ví dụ 1: Kiểm tra một số nguyên a là số chẵn hay lẻ  Xác định bài toán  Input: số nguyên a Output: thông báo a chẵn hay lẻ  Hình thành ý tƣởng Một số là số chẵn khi nó chia hết cho 2, vậy thì ta chỉ cần kiểm tra xem nó có chia hết cho 2 hay không. 26Bản quyền: Khoa CNTT 2011 Ví dụ 1: (tt)  Xây dụng thuật toán  Cách 1: Dùng ngôn ngữ tự nhiên Bƣớc 1: Nhập a Bƣớc 2: Nếu a chia hết cho 2 thì xuất a chẵn Ngƣợc lại thì xuất a lẻ. Qua bƣớc 3 Bƣớc 3: Kết thúc 27  Cách 2: Dùng sơ đồ khối Nhập a a 2 a chẵn a chẵn Bắt đầu Kết thúc  Mô phỏng thuật toán  Nhập a: 18  18 chia hết cho 2  Xuất ra 18 là số chẵn Bản quyền: Khoa CNTT 2011 Ví dụ 2: Tìm số lớn nhất trong dãy số  Xác định vấn đề - bài toán:  Input: Số nguyên dƣơng N và dãy N số nguyên a1, a2, , aN (ai với i : 1N). Output: Số lớn nhất (Max) của dãy số.  Lựa chọn phương pháp giải:  Đặt giá trị Max  a1.  Cho i chạy từ 2 đến N, so sánh giá trị ai với giá trị Max, nếu ai > Max thì Max nhận giá trị mới là ai.  Max là giá trị lớn nhất cần tìm 28Bản quyền: Khoa CNTT 2011 Mô phỏng ý tƣởng Bản quyền: Khoa CNTT 2011 Quả này lớn nhất Quả này mới lớn nhất Tìm ra quả lớn nhất rồi! MAX Ồ! Quả này lớn hơn Mô phỏng ý tưởng 29 Xây dựng thuật toán Cách 1: Dùng ngôn ngữ tự nhiên Bước 1: Nhập N và dãy a1,a2, aN; Bước 2: Max  a1; i  2; Bước 3: Nếu i > N thì đưa ra giá trị Max rồi kết thúc; Bước 4: Nếu ai > Max thì Max  ai; Bước 5: i  i+1 rồi quay lại B3. Cách 2: Dùng lưu đồ B1 B2 B3 B4 B5 30 Kết thúc i > N ai > Max Max  a1; i  2 Max  ai Đ S S Đ i  i + 1 Max N, a1, a2,,an Bắt đầu Ma Bản quyền: Khoa CNTT 2011 Mô phỏng thuật toán Nhập n=7 Nhập dãy A có 7 phần tử 7654321i 69122781A[i] Max= 1 Max= 8 Max=8 Max=8 Max=12 Max=12 Max=1 2 Max <8 Max <12 31Bản quyền: Khoa CNTT 2011 Ví dụ 3: Bài toán kiểm tra tính nguyên tố  Xác định bài toán  Input: Số nguyên dƣơng N  Output: N là số nguyên tố hoặc N không là số nguyên tố Số nguyên tố : Định nghĩa : “Một số nguyên dương N là số nguyên tố nếu nó chỉ có đúng hai ước là 1 và N” Các tính chất : - Nếu N = 1  N không là số nguyên tố - Nếu 1 < N < 4  N là số nguyên tố 32Bản quyền: Khoa CNTT 2011 Bài toán kiểm tra tính nguyên tố (tt)  Ý tƣởng  N<4 : Xem như bài toán đã được giải quyết  N>=4 : Tìm ước i đầu tiên > 1 của N - Nếu i < N  N không là số nguyên tố (vì N có ít nhất 3 ước 1, i, N) - Nếu i = N  N là số nguyên tố N 1 : N không là số nguyên tố  Kết thúc 1<N<4 : N là số nguyên tố  Kết thúc N>=4 : N không là số nguyên tố : Tìm thấy iÎ[2..(N-1)]  Kết thúc N là số nguyên tố : Không tìm thấy iÎ[2..(N-1)], i=N  Kết thúc 33Bản quyền: Khoa CNTT 2011 Kiểm tra tính nguyên tố (tt)  Xây dựng thuật toán a) Cách liệt kê : Bước 1 : Nhập số nguyên dƣơng N; Bước 2 : Nếu N=1 thì thông báo “N không là số nguyên tố”, kết thúc; Bước 3 : Nếu N<4 thì thông báo “N là số nguyên tố”, kết thúc; Bước 4 : i  2 ; Bước 5 : Nếu i là ƣớc của N thì đến bƣớc 7 Bước 6 : i  i +1 rồi quay lại bƣớc 5; (Tăng i lên 1 đơn vị) Bước 7 : Nếu i = N thì thông báo “N là số 34Bản quyền: Khoa CNTT 2011 Kiểm tra nguyên tố (tt) b) Sơ đồ khối : Bước 1 : Nhập số nguyên dương N; Bước 2 : Nếu N=1 thì thông báo “N không là số nguyên tố”, kết thúc; Bước 3 : Nếu N<4 thì thông báo “N là số nguyên tố”, kết thúc; Bước 4 : i  2 ; Bước 5 : Nếu i là ước của N thì đến bước 7 Bước 6 : i  i +1 rồi quay lại bước 5; (Tăng i lên 1 đơn vị) Bước 7 : Nếu i = N thì thông báo “N là số nguyên tố”, ngược lại thì thông báo “N không là số nguyên tố”, kết thúc 35Bản quyền: Khoa CNTT 2011 Bắt đầu N=1 Kết thúc N<4 i  2 i là ƣớc của N i  i+1 i = N Thông báo N không là SNT Thông báo N là SNT Nhập N Đ S Đ S Đ S Đ S Nhập N N là SNTN là không SNT Kiểm tra tính nguyên tố (tt)  Cải tiến thuật toán  Nếu N=2500 thì bƣớc 5,6 lặp lại 2499 lầnCần phải tìm cách giảm số lần xuống Dựa vào một tính chất của số nguyên tố: Nếu N >= 4 và không có ước trong phạm vi từ 2 đến phần nguyên căn bậc 2 của N  N là số nguyên tố Ý tưởng : Tìm i tăng dần trong phạm vi từ 2 đến phần nguyên √N thỏa điều kiện là ước của N : - Nếu không tìm được  N là số nguyên tố - Ngược lại  N không là số nguyên tố Các bạn hãy viết lại thuật toán theo ý tưởng mới 36Bản quyền: Khoa CNTT 2011 Ví dụ 3: Bái toán tìm kiếm  Input : Dãy A gồm N số nguyên khác nhau a1, a2,,an và một số nguyên k (khóa) VD : Dãy A gồm các số nguyên 5 7 1 4 2 9 8 11 25 51 Và k = 2 (k = 6)  Output : Vị trí i mà ai = k hoặc thông báo không tìm thấy k trong dãy Vị trí của 2 trong dãy là 5 (không tìm thấy 6) 37Bản quyền: Khoa CNTT 2011 Hình thành ý tƣởng  Tìm kiếm tuần tự đƣợc thực hiện một cách tự nhiên :  Lần lƣợt đi từ số hạng thứ nhất,  So sánh giá trị số hạng đang xét với khóa  Cho đến khi gặp một số hạng bằng khóa hoặc dãy đã đƣợc xét hết mà không tìm thấy giá trị của khóa trên dãy. 38Bản quyền: Khoa CNTT 2011 Xây dựng thuật toán 39 Bước 1: Nhập N, các số hạng a1, a2,, aN và giá trị khoá k; Bước 2: i  1; Bước 3: Nếu ai = k thì thông báo chỉ số i, rồi kết thúc; Bước 4: i  i + 1; Bước 5: Nếu i > N thì thông báo dãy A không có số hạng nào có giá trị bằng k, rồi kết thúc; Bước 6: Quay lại bước 3; Nhập N, a1, a2,,an và k Đƣa ra i ; Kết thúc ai = k ? i > N ? i  1 i  i + 1 B.1 B.2 B.3 B.4 B.5 B.6 Đ S S Đ Thông báo dãy A không có số hạng có giá trị bằng k; Kết thúc Đƣa ra i rồi kết thúc Thông báo trong dãy số A không có số hạng nào bằng k N p N, a1, a2, , an và k Bản quyền: Khoa CNTT 2011 Mô phỏng thuật toán 40 5i 5125118924175A - Với k = 2 Tại vị trí i = 5 có a5 = 2 = k 54321 109876 4321 i 5125118924175A - Với k = 6 Không tìm thấy k = 6 trên dãy 11 Bản quyền: Khoa CNTT 2011 Bài tập 1 Thiết kế thuật toán theo phƣơng pháp dùng ngôn ngữ tự nhiên cho các bài toán sau: a. Kiểm tra 2 số a, b giống nhau hay khác nhau. b. Kiểm tra 1 số a, b số nào lớn hơn c. Giải phƣơng trình bậc 2: ax2 + bx + c = 0 41Bản quyền: Khoa CNTT 2011 Bài tập 2 Thiết kế thuật toán theo phƣơng pháp dùng phƣơng pháp lƣu đồ cho các bài toán sau: a. Nhập vào 4 số xuất ra phần tử lớn nhất và nhỏ nhất b. Chạy tay thuật toán kiểm tra xem 1 số n có phải là số nguyên tố ( với n = 19, 24, 27, 29)? c. Kiểm tra xem 1 số n có phải là số hoàn thiện 42Bản quyền: Khoa CNTT 2011 Bài tập 3 Thiết kế thuật toán theo phƣơng pháp dùng phƣơng pháp mã giả cho các bài toán sau: a. Có n hộp có khối lƣợng khác nhau và một cái cân dĩa. Tìm cách cân để tìm đƣợc hộp có trọng lƣợng nặng nhất. b. Tìm ƣớc số chung lớn nhất của a và b. c. Nhập vào 3 số nguyên dƣơng, kiểm tra xem 3 số đã cho có tạo thành tam giác không? Nếu có là tam giác gì? (Đều, cân, vuông, vuông cân, thƣờng). 43Bản quyền: Khoa CNTT 2011 Thuật giải  Khái niệm thuật toán đã trình bày chính là cánh cửa khép kín cho việc giải các bài toán vì: Nhiều bài toán không thỏa các đặc trƣng cơ bản của thuật toán. Có nhiều bài toán chƣa tìm ra thuật toán hoặc chƣa chứng minh đƣợc là có thuật toán hay không. Có những bài toán có thuật toán nhƣng khó thực hiện hoặc không thực hiện đƣợc 44Bản quyền: Khoa CNTT 2011 Thuật giải (tt)  Từ những nhận định trên ngƣời ta thấy rằng: cần phải có những đổi mới cho khái niệm thuật toán  “Thuật giải”  Thuật giải cũng là thuật toán nhƣng đƣợc mở rộng của tính chất: Tính xác định Tính đúng đắn 45Bản quyền: Khoa CNTT 2011 Ví dụ về thuật giải  Bài toán nấu cơm • Gạo, củi} • Nấu cơm : –Vo gạo –Chuẩn bị lửa –Nấu, canh giờ –Kết thúc • Nồi cơm chín} TÍNH ĐÚNG Không là thuật toán mà là thuật giải 46Bản quyền: Khoa CNTT 2011 Ví dụ về thuật giải  Bài toán đổ nước Có hai bình đựng nước là B5 có dung tích 5lít , B8 có dung tích 8lít. Hãy chỉ ra cách đong để có được hai lít nước. Các thao tác có thể thực hiện được là :  Hứng đầy nƣớc vào bình B5 hoặc B8.  Đổ hết nƣớc trong một bình.  Đổ nƣớc tƣ̀ bình này sang bình khác cho đến lúc bình kia đầy.  Thuật giải :  Đổ đầy nước vào bình B5 (B5=5) .  Đổ hết nước từ bình B5 sang bình B8 (B5=0, B8=5).  Đổ đầy nước bình B5 (B5=5, B8=5).  Đổ nước từ bình B5 cho đến khi B8 đầy (B5=2, B8=8). TÍNH XÁC ĐỊNH VÀ TÍNH ĐÚNG 47Bản quyền: Khoa CNTT 2011 48 VẤN ĐỀ NAN GIẢI? PP giải (giải thuật) VẤN ĐỀ TƢƠNG TỰ KẾT QUẢ Ôi nhiều việc quá Con người làm việc Khái niệm về ngôn ngữ lập trình Bản quyền: Khoa CNTT 2011 49 VẤN ĐỀ NAN GIẢI? PP giải(giải thuật) VẤN ĐỀ TƢƠNG TỰ KẾT QUẢ Có máy tính Sƣớng thật, đi làm việc khác thôi! Sự hỗ trợ của máy tính Khái niệm về ngôn ngữ lập trình Bản quyền: Khoa CNTT 2011 50 Giải bài toán này thế nào đây? Cách giải được diễn đạt bằng ngôn ngữ tự nhiên Source code Kiến thức về NNLT Kiến thức Chuyên môn Chƣơng trình biên dịch (Bộ máy của NNLT) File Ngôn ngữ máy (exe, dll, com, ...) Sự hỗ trợ của máy tính Khái niệm về ngôn ngữ lập trình Bản quyền: Khoa CNTT 2011 Phân loại ngôn ngữ lập trình  Ngôn ngữ máy  Hợp ngữ  Ngôn ngữ bậc cao 51Bản quyền: Khoa CNTT 2011 Ngôn ngữ máy  Là ngôn ngữ duy nhất mà máy tính có thể trực tiếp hiểu và thực hiện.Mỗi loại máy có ngôn ngữ máy của riêng nó được tập hợp dưới dạng các câu lệnh.  Ưu điểm: cho phép khai thác triệt để và tối ưu khả năng của máy tính  Nhược điểm: khó viết, chương trình nhận được cồng kềnh và khó hiệu chỉnh 52Bản quyền: Khoa CNTT 2011 Hợp ngữ (Assembly)  Có cấu trúc rất giống ngôn ngữ máy. Mã lệnh được thay bằng tên viết tắt tương ứng. Hợp ngữ chỉ chạy được sau khi đã được dịch ra ngôn ngữ máy thông qua chương trình hợp dịch (Assembler)  Ưu điểm: khắc phục được nhược điểm của ngôn ngữ máy  Nhược điểm: không phù hợp với số đông người lập trình 53Bản quyền: Khoa CNTT 2011 Ngôn ngữ bậc cao  Mô phỏng ngôn ngữ tự nhiên, sử dụng các ký hiệu toán học thống nhất chung  Không phụ thuộc vào loại máy tính cụ thể  Chỉ chạy được sau khi đã được dịch ra ngôn ngữ máy thông qua chương trình thông dịch (Interpreter) hoặc biên dịch (Compiler)  Ưu điểm: dễ viết, chương trình dễ hiểu, dễ hiệu chỉnh và dễ nâng cấp hơn 54Bản quyền: Khoa CNTT 2011 Chƣơng trình dịch  Là chương trình đặc biệt dùng để chuyển chương trình trên ngôn ngữ ban đầu (chương trình nguồn) sang chương trình tương đương trên ngôn ngữ máy.  Chương trình dịch chia làm 2 loại:  Kỹ thuật thông dịch (Interpreter)  Kỹ thuật biên dịch (Compiler) 55Bản quyền: Khoa CNTT 2011 Kỹ thuật thông dịch  Là kiểu dịch từng dòng lệnh để hiểu công việc cần làm và thực hiện ngay chứ không nhất thiết phải tạo ra các đoạn mã tương đương trong ngôn ngữ máy  Nếu một câu lệnh phải thực hiện nhiều lần thì cũng phải dịch nhiều lần  Ứng dụng: môi trường đối thoại giữa người và hệ thống 56Bản quyền: Khoa CNTT 2011 Kỹ thuật biên dịch  Là kiểu dịch toàn bộ chương trình ban đầu thành một chương trình tương ứng trong ngôn ngữ máy (chương trình đích), sau đó nạp chương trình đích vào máy tính để thực hiện  Ứng dụng: phù hợp với các chương trình ổn định và phải thực hiện nhiều lần 57Bản quyền: Khoa CNTT 2011 Một số ngôn ngữ lập trình thông dụng  Basic đƣợc thiết kế bởi John G. Kemeny và Thomas E. Kurtz tại ĐH Dartmouth vào 1963  Pascal đƣợc Niklaus Wirth phát thiết kế năm 1970  C do Dennis Richie thiết kế năm 1972 tại phòng thí nghiệp Bell Telephone của hãng AT&T sử dụng trong hệ điều hành Unix  Java đƣợc phát triễn bởi James Gosling thuộc Sun Microsystem vào 6/1991 58Bản quyền: Khoa CNTT 2011 59 THE END Bản quyền: Khoa CNTT 2011

Các file đính kèm theo tài liệu này:

  • pdftin_hoc_dai_cuongchuong7_6032.pdf