31
Lập Trình Máy Tính Lập Trình Máy Tính Giới thiệu về lập trình máy tính Giới thiệu về lập trình máy tính Phân tích, thiết kế và phát triển Phân tích, thiết kế và phát triển hệ thống hệ thống Phân loại Phân loại

Chuong 1 tong quan ve lap trinh va nnlt

Embed Size (px)

Citation preview

Page 1: Chuong 1   tong quan ve lap trinh va nnlt

Lập Trình Máy TínhLập Trình Máy Tính• Giới thiệu về lập trình máy tính Giới thiệu về lập trình máy tính • Phân tích, thiết kế và phát triển hệ Phân tích, thiết kế và phát triển hệ thốngthống• Phân loạiPhân loại

Page 2: Chuong 1   tong quan ve lap trinh va nnlt

Chương 1 - Tổng quan về lập trìnChương 1 - Tổng quan về lập trình và NNLTh và NNLT

22

6 Giai đoạn phân tích và 6 Giai đoạn phân tích và thiết kế hệ thốngthiết kế hệ thống

• Thành phần dự án phần mềm: Thành phần dự án phần mềm: – Người sử dụng.Người sử dụng.– Bộ phận quản lý dự án.Bộ phận quản lý dự án.– Bộ phận kỹ thuật.Bộ phận kỹ thuật.

• Quá trình phân tích và thiết kế hệ Quá trình phân tích và thiết kế hệ thống được chia thành 6 giai đoạn thống được chia thành 6 giai đoạn như sau:như sau:

Page 3: Chuong 1   tong quan ve lap trinh va nnlt

Chương 1 - Tổng quan về lập trìnChương 1 - Tổng quan về lập trình và NNLTh và NNLT

33

1.1. Tìm hiTìm hiêuêu vấn đề vấn đề: phân tích hiện trạng, : phân tích hiện trạng, đưa giải pháp, khuyến nghị.đưa giải pháp, khuyến nghị.

2.2. Phân tíchPhân tích: thu thập dữ liệu, phân tích và : thu thập dữ liệu, phân tích và báo cáo.báo cáo.

3.3. Thiết kếThiết kế: thiết kế sơ bộ, thiết kế chi tiết, : thiết kế sơ bộ, thiết kế chi tiết, báo cáo.báo cáo.

4.4. Phát triểnPhát triển: lên kế hoạch theo dõi tiến : lên kế hoạch theo dõi tiến độ, thiết lập cấu hình phần cứng, phần độ, thiết lập cấu hình phần cứng, phần mềm, lập trình và kiểm tra hệ thống.mềm, lập trình và kiểm tra hệ thống.

5.5. Cài đặtCài đặt: chuyển sang hệ thống mới. Đào : chuyển sang hệ thống mới. Đào tạo nhân lực.tạo nhân lực.

6.6. Bảo trìBảo trì: kiểm tra hệ thống, thu nhận : kiểm tra hệ thống, thu nhận phản hồi từ phía người dùng, định kỳ phản hồi từ phía người dùng, định kỳ đánh giá hoạt động hệ thống.đánh giá hoạt động hệ thống.

Page 4: Chuong 1   tong quan ve lap trinh va nnlt

Chương 1 - Tổng quan về lập trìnChương 1 - Tổng quan về lập trình và NNLTh và NNLT

44

Lập trìnhLập trình

• Một chương trình (program) là tập Một chương trình (program) là tập các câu lệnh (instruction) viết bằng các câu lệnh (instruction) viết bằng một ngôn ngữ lập trình dùng để ra một ngôn ngữ lập trình dùng để ra lệnh cho máy tính thực hiện các thao lệnh cho máy tính thực hiện các thao tác xử lý dữ liệu thành thông tin.tác xử lý dữ liệu thành thông tin.

• Lập trình là tiến trình tạo thành một Lập trình là tiến trình tạo thành một chương trình.chương trình.

Page 5: Chuong 1   tong quan ve lap trinh va nnlt

Chương 1 - Tổng quan về lập trìnChương 1 - Tổng quan về lập trình và NNLTh và NNLT

55

Các bước lập trìnhCác bước lập trình

• Xác định và làm rõ vấn đề Xác định và làm rõ vấn đề ((clarificationclarification)): xác định đầu vào, kết : xác định đầu vào, kết xuất, các yêu cầu xử lý cần thiết.xuất, các yêu cầu xử lý cần thiết.

• Lên phương án giải quyết (Lên phương án giải quyết (designdesign)): sử : sử dụng các công cụ mô hình hoá để lên sơ dụng các công cụ mô hình hoá để lên sơ đồ vấn đề cần giải quyết.đồ vấn đề cần giải quyết.

• Viết chương trình (Viết chương trình (codingcoding):): sử dụng sử dụng một ngôn ngữ lập trình để viết chương một ngôn ngữ lập trình để viết chương trình.trình.

Page 6: Chuong 1   tong quan ve lap trinh va nnlt

Chương 1 - Tổng quan về lập trìnChương 1 - Tổng quan về lập trình và NNLTh và NNLT

66

Các bước lập trìnhCác bước lập trình

• Kiểm tra chương trình (Kiểm tra chương trình (testtest):): kiểm tra kiểm tra và sửa chữa các lỗi logic (bug) trong và sửa chữa các lỗi logic (bug) trong chương trình (debug).chương trình (debug).

• Viết tài liệu và bảo trì chương trình Viết tài liệu và bảo trì chương trình ((document, maintenancedocument, maintenance):): viết hướng viết hướng dẫn sử dụng, giải thích chương trình, dẫn sử dụng, giải thích chương trình, hướng dẫn cách chạy chương trình.hướng dẫn cách chạy chương trình.

Page 7: Chuong 1   tong quan ve lap trinh va nnlt

Chương 1 - Tổng quan về lập trìnChương 1 - Tổng quan về lập trình và NNLTh và NNLT

77

Ngôn ngữ lập trìnhNgôn ngữ lập trình

• Một ngôn ngữ nhân tạo bao gồm các Một ngôn ngữ nhân tạo bao gồm các từ vựng cố định và một tập các quy từ vựng cố định và một tập các quy tắc (gọi là syntax-cú pháp) dùng để tắc (gọi là syntax-cú pháp) dùng để lập ra các chỉ lệnh cho máy tính. lập ra các chỉ lệnh cho máy tính.

• Hầu hết các chương trình đều được Hầu hết các chương trình đều được viết bằng cách sử dụng một trình viết bằng cách sử dụng một trình biên tập văn bản hoặc trình xử lý để biên tập văn bản hoặc trình xử lý để soạn ra mã nguồn (source code)soạn ra mã nguồn (source code)

Page 8: Chuong 1   tong quan ve lap trinh va nnlt

Chương 1 - Tổng quan về lập trìnChương 1 - Tổng quan về lập trình và NNLTh và NNLT

88

Ngôn ngữ lập trìnhNgôn ngữ lập trình

• Mã nguồn sẽ được biên dịch (compile) Mã nguồn sẽ được biên dịch (compile) hoặc thông dịch (interprete) sang ngôn hoặc thông dịch (interprete) sang ngôn ngữ máy (machine code) cho máy tính có ngữ máy (machine code) cho máy tính có thể hiểu và thực hiện. thể hiểu và thực hiện.

• Có nhiều loại ngôn ngữ lập trình, và hầu Có nhiều loại ngôn ngữ lập trình, và hầu hết các nhà khoa học về máy tính đều hết các nhà khoa học về máy tính đều đồng ý rằng không có một ngôn ngữ duy đồng ý rằng không có một ngôn ngữ duy nhất nào có đủ khả năng đáp ứng cho các nhất nào có đủ khả năng đáp ứng cho các yêu cầu của tất cả các lập trình viên. yêu cầu của tất cả các lập trình viên.

Page 9: Chuong 1   tong quan ve lap trinh va nnlt

Chương 1 - Tổng quan về lập trìnChương 1 - Tổng quan về lập trình và NNLTh và NNLT

99

NNLT - Phân loại – NNLT Bậc NNLT - Phân loại – NNLT Bậc caocao

• Các ngôn ngữ lập trình bậc caoCác ngôn ngữ lập trình bậc cao(BASIC, C, Pascal, Ada, Cobol, …) cho phép (BASIC, C, Pascal, Ada, Cobol, …) cho phép lập trình viên có thể diễn đạt chương trình lập trình viên có thể diễn đạt chương trình bằng các từ khóa và cú pháp bắt chước bằng các từ khóa và cú pháp bắt chước ngôn ngữ tự nhiên của con người ngôn ngữ tự nhiên của con người

• Các ngôn ngữ này được gọi là "bậc cao" vì Các ngôn ngữ này được gọi là "bậc cao" vì chúng giải phóng cho các lập trình viên chúng giải phóng cho các lập trình viên khỏi phải quan tâm đến vấn đề từng lệnh khỏi phải quan tâm đến vấn đề từng lệnh sẽ được máy tính thực hiện như thế nào. sẽ được máy tính thực hiện như thế nào.

Page 10: Chuong 1   tong quan ve lap trinh va nnlt

Chương 1 - Tổng quan về lập trìnChương 1 - Tổng quan về lập trình và NNLTh và NNLT

1010

NNLT – Phân loại – NNLT Bậc NNLT – Phân loại – NNLT Bậc caocao• Mỗi câu lệnh trong ngôn ngữ lập trình bậc cao Mỗi câu lệnh trong ngôn ngữ lập trình bậc cao

tương ứng với một số chỉ lệnh của ngôn ngữ máy.tương ứng với một số chỉ lệnh của ngôn ngữ máy.• Có thể viết các chương trình nhanh hơn nhiều so Có thể viết các chương trình nhanh hơn nhiều so

với khi dùng ngôn ngữ bậc thấp, như hợp ngữ với khi dùng ngôn ngữ bậc thấp, như hợp ngữ (assembly language). (assembly language).

• Tuy nhiên, việc dịch sang ngôn ngữ máy có hiệu Tuy nhiên, việc dịch sang ngôn ngữ máy có hiệu suất thấp, không hoàn toàn tối ưu cho nên các suất thấp, không hoàn toàn tối ưu cho nên các chương trình viết theo các ngôn ngữ bậc cao chạy chương trình viết theo các ngôn ngữ bậc cao chạy chậm hơn các chương trình viết theo ngôn ngữ chậm hơn các chương trình viết theo ngôn ngữ bậc thấp.bậc thấp.

Page 11: Chuong 1   tong quan ve lap trinh va nnlt

Chương 1 - Tổng quan về lập trìnChương 1 - Tổng quan về lập trình và NNLTh và NNLT

1111

Phân loại – NNLT Bậc thấpPhân loại – NNLT Bậc thấp

• Các ngôn ngữ lập trình bậc thấp (hợp Các ngôn ngữ lập trình bậc thấp (hợp ngữ) cho phép lập trình viên mã hóa ngữ) cho phép lập trình viên mã hóa các chỉ lệnh với hiệu suất cao nhất có các chỉ lệnh với hiệu suất cao nhất có thể có. thể có.

• Người lập trình phải thông thạo một Người lập trình phải thông thạo một cách chi tiết về các khả năng chính xác cách chi tiết về các khả năng chính xác của hệ máy tính và bộ vi xử lý của nó. của hệ máy tính và bộ vi xử lý của nó.

• Lập trình bằng hợp ngữ cũng mất Lập trình bằng hợp ngữ cũng mất nhiều thời gian hơn.nhiều thời gian hơn.

Page 12: Chuong 1   tong quan ve lap trinh va nnlt

Chương 1 - Tổng quan về lập trìnChương 1 - Tổng quan về lập trình và NNLTh và NNLT

1212

MACHINE CODE

ASSEMBLER LANGUAGES

HIGH-LEVEL

LANGUAGESFortran, COBOL, C, C++,LISP, Pascal, Java, ...

4GLsORACLE, SEQUEL, INGRES, ...

5GLsartificial intelligence

Page 13: Chuong 1   tong quan ve lap trinh va nnlt

Chương 1 - Tổng quan về lập trìnChương 1 - Tổng quan về lập trình và NNLTh và NNLT

1313

Chuyển NN bậc cao thành Chuyển NN bậc cao thành NN bậc thấp - CompilerNN bậc thấp - Compiler• Chương trình nguồn viết bằng NNLT bậc Chương trình nguồn viết bằng NNLT bậc

cao phải được “dịch” thành NN máy để cao phải được “dịch” thành NN máy để máy tính có thể hiểu và thực thi lệnh.máy tính có thể hiểu và thực thi lệnh.

• ““Dịch” bằng trình biên dịch (compiler): bộ Dịch” bằng trình biên dịch (compiler): bộ “dịch” chuyển toàn bộ chương trình viết “dịch” chuyển toàn bộ chương trình viết bằng NN bậc cao thành NN máy trước khi bằng NN bậc cao thành NN máy trước khi máy tính có thể thực hiện chương trình.máy tính có thể thực hiện chương trình.– VD: COBOL, FORTRAN, C, Pascal là các ngôn VD: COBOL, FORTRAN, C, Pascal là các ngôn

ngữ sử dụng cơ chế “biên dịch”ngữ sử dụng cơ chế “biên dịch”

Page 14: Chuong 1   tong quan ve lap trinh va nnlt

Chương 1 - Tổng quan về lập trìnChương 1 - Tổng quan về lập trình và NNLTh và NNLT

1414

InterpreterInterpreter

• ““Dịch” bằng trình thông dịch Dịch” bằng trình thông dịch (interpreter): bộ “dịch” chuyển từng (interpreter): bộ “dịch” chuyển từng dòng lệnh trong chương trình viết dòng lệnh trong chương trình viết bằng NN bậc cao thành NN máy và bằng NN bậc cao thành NN máy và thực hiện từng lệnh ngay khi dịch thực hiện từng lệnh ngay khi dịch xong lệnh đó.xong lệnh đó.– VD: BASIC là ngôn ngữ sử dụng cơ chế VD: BASIC là ngôn ngữ sử dụng cơ chế

“thông dịch”“thông dịch”

Page 15: Chuong 1   tong quan ve lap trinh va nnlt

Chương 1 - Tổng quan về lập trìnChương 1 - Tổng quan về lập trình và NNLTh và NNLT

1515

Lập trình hướng đối tượngLập trình hướng đối tượng

• Object-oriented programming (OOP) Object-oriented programming (OOP) là phương pháp lập trình cho phép là phương pháp lập trình cho phép kết hợp dữ liệu với các câu lệnh xử lý kết hợp dữ liệu với các câu lệnh xử lý dữ liệu đó trong một “đối tượng”.dữ liệu đó trong một “đối tượng”.

• Các “đối tượng” có thể được sử dụng Các “đối tượng” có thể được sử dụng lại để viết các chương trình khác lại để viết các chương trình khác nhau.nhau.

Page 16: Chuong 1   tong quan ve lap trinh va nnlt

Chương 1 - Tổng quan về lập trìnChương 1 - Tổng quan về lập trình và NNLTh và NNLT

1616

Lập trình trực quanLập trình trực quan

• Visual programming là phương pháp Visual programming là phương pháp viết các chương trình bằng cách kết viết các chương trình bằng cách kết hợp các đối tượng sẵn có thông qua hợp các đối tượng sẵn có thông qua các thao tác trực quan.các thao tác trực quan.

• Cho phép viết chương trình dễ dàng, Cho phép viết chương trình dễ dàng, nhanh chóng hơn.nhanh chóng hơn.

VDVD: Visual Basic, Visual J, Visual C++,: Visual Basic, Visual J, Visual C++,

Page 17: Chuong 1   tong quan ve lap trinh va nnlt

Chương 1 - Tổng quan về lập trìnChương 1 - Tổng quan về lập trình và NNLTh và NNLT

1717

Lập trình trên InternetLập trình trên Internet

• Sử dụng các ngôn ngữ lập trình:Sử dụng các ngôn ngữ lập trình:• HTML – HyperText Markup Language: ngôn HTML – HyperText Markup Language: ngôn

ngữ đánh dấu siêu văn bản.ngữ đánh dấu siêu văn bản.• XML – eXtensible Markup Language:XML – eXtensible Markup Language:• VRML – Virtual Reality Markup Language:VRML – Virtual Reality Markup Language:• JavaJava• ActiveXActiveX• Kỹ thuật khác: COM, DCOM, RMI, RPC...Kỹ thuật khác: COM, DCOM, RMI, RPC...

Page 18: Chuong 1   tong quan ve lap trinh va nnlt

Chương 1 - Tổng quan về lập trìnChương 1 - Tổng quan về lập trình và NNLTh và NNLT

1818

Ví dụVí dụ

• Để ghi dòng chữ “Chao cac ban” ra màn hình.Để ghi dòng chữ “Chao cac ban” ra màn hình.– PASCALPASCAL

program GhiChu;program GhiChu;uses CRT;uses CRT;beginbegin

write(“Chao cac ban”);write(“Chao cac ban”);end.end.

– CC#include <stdio.h>#include <stdio.h>void main (void)void main (void){{

printf(“Chao cac ban”);printf(“Chao cac ban”);}}

Page 19: Chuong 1   tong quan ve lap trinh va nnlt

Chương 1 - Tổng quan về lập trìnChương 1 - Tổng quan về lập trình và NNLTh và NNLT

1919

Tham khảo từ WebTham khảo từ Web

• Có thể tham khảo cách viết chương Có thể tham khảo cách viết chương trình in ra chữ “Hello world” của hơn trình in ra chữ “Hello world” của hơn 200 ngôn ngữ lập trình khác nhau tại 200 ngôn ngữ lập trình khác nhau tại địa chỉđịa chỉ

http://www2.latech.edu/~acm/http://www2.latech.edu/~acm/HelloWorld.shtmlHelloWorld.shtml

Page 20: Chuong 1   tong quan ve lap trinh va nnlt

Chương 1 - Tổng quan về lập trìnChương 1 - Tổng quan về lập trình và NNLTh và NNLT

2020

Máy tính và con ngườiMáy tính và con ngườiMáy tínhMáy tính Con ngườiCon người

Tốc độ tính toánTốc độ tính toán Cực nhanhCực nhanh Chậm hoặc rất chậmChậm hoặc rất chậm

Độ bềnĐộ bền Hàng tháng, hàng năm, Hàng tháng, hàng năm, hiệu suất không hề hiệu suất không hề thay đổithay đổi

Chỉ trong vài ngày, hiệu Chỉ trong vài ngày, hiệu suất giảm dần nếu làm suất giảm dần nếu làm việc liên tụcviệc liên tục

Khả năng chịu ảnh hưởng Khả năng chịu ảnh hưởng của các yếu tố khách của các yếu tố khách quanquan

Ít bị ảnh hưởngÍt bị ảnh hưởng ảnh hưởng nhiều, đặc biệt ảnh hưởng nhiều, đặc biệt là các yếu tố môi trườnglà các yếu tố môi trường

Khả năng suy luận, giải Khả năng suy luận, giải quyết vấn đềquyết vấn đề

Không cóKhông có TốtTốt

Khả năng phản ứng với Khả năng phản ứng với những tình huống bất những tình huống bất ngờngờ

Không cóKhông có TốtTốt

Page 21: Chuong 1   tong quan ve lap trinh va nnlt

Chương 1 - Tổng quan về lập trìnChương 1 - Tổng quan về lập trình và NNLTh và NNLT

2121

Bài toán và việc giải quyết bài Bài toán và việc giải quyết bài toán bằng máy tínhtoán bằng máy tính• AABB• Bài toán:Bài toán: Hãy tính giá trị của biểu thức a Hãy tính giá trị của biểu thức ann (n nguyên (n nguyên

dương) khi biết giá trị của a và n.dương) khi biết giá trị của a và n.• Lời giải trên máy tínhLời giải trên máy tính• B1. a =?, n=?B1. a =?, n=?• B2. if n =0 thì B2. if n =0 thì a, kq=1, End. a, kq=1, End.• B3. else (n>0)B3. else (n>0)

– B3.1. Nhớ giá trị của a.B3.1. Nhớ giá trị của a.– B3.2. Nhớ số phép nhân đã được thực hiện (0).B3.2. Nhớ số phép nhân đã được thực hiện (0).– B3.3. Nếu số phép nhân chưa bằng n-1, sang bước B3.4, ngược B3.3. Nếu số phép nhân chưa bằng n-1, sang bước B3.4, ngược

lại sang bước B3.7.lại sang bước B3.7.– B3.4. Nhân kết quả đã nhớ với a và nhớ kết quả mới.B3.4. Nhân kết quả đã nhớ với a và nhớ kết quả mới.– B3.5. Tăng số phép nhân đã thực được hiện lên 1.B3.5. Tăng số phép nhân đã thực được hiện lên 1.– B3.6. Trở về B3.3.B3.6. Trở về B3.3.– B3.7. Kết quả đã tính được chính là con số đã nhớ.B3.7. Kết quả đã tính được chính là con số đã nhớ.

• B4. Kết thúc B4. Kết thúc

Page 22: Chuong 1   tong quan ve lap trinh va nnlt

Chương 1 - Tổng quan về lập trìnChương 1 - Tổng quan về lập trình và NNLTh và NNLT

2222

Các phương pháp giải quyết Các phương pháp giải quyết bài toán trên máy tínhbài toán trên máy tính

• Trực tiếpTrực tiếp

• Gián tiếp: chưa tìm ra lời giải chính xác Gián tiếp: chưa tìm ra lời giải chính xác của bài toán.của bài toán.– Thử saiThử sai

•Vét cạnVét cạn

•Ngẫu nhiênNgẫu nhiên

•Mê cungMê cung

– HeuristicHeuristic– Trí tuệ nhân tạoTrí tuệ nhân tạo

Page 23: Chuong 1   tong quan ve lap trinh va nnlt

Chương 1 - Tổng quan về lập trìnChương 1 - Tổng quan về lập trình và NNLTh và NNLT

2323

Phương pháp trực tiếpPhương pháp trực tiếp

• Kỹ thuật lập trình trên máy tínhKỹ thuật lập trình trên máy tính

• 3 loại:3 loại:– Lời giải chính xác bằng công thức toán họcLời giải chính xác bằng công thức toán học

•e.g., tính tổng n số nguyên dương đầu tiên…e.g., tính tổng n số nguyên dương đầu tiên…

– Lời giải gần đúng (công thức tính gần đúng)Lời giải gần đúng (công thức tính gần đúng)•e.g., sin, cos…e.g., sin, cos…

– Lời giải không tường minh (đệ quy)Lời giải không tường minh (đệ quy)•e.g., Ce.g., Cnn

mm

Page 24: Chuong 1   tong quan ve lap trinh va nnlt

Chương 1 - Tổng quan về lập trìnChương 1 - Tổng quan về lập trình và NNLTh và NNLT

2424

Phương pháp gián tiếp – Thử Phương pháp gián tiếp – Thử saisai

• ““Trong khi chưa nghĩ ra một cách thật Trong khi chưa nghĩ ra một cách thật hay thì cứ việc rút từng cọng rơm cho hay thì cứ việc rút từng cọng rơm cho đến khi rút được cái kimđến khi rút được cái kim”.”.

• 3 nguyên lý:3 nguyên lý:– Vét cạnVét cạn– Ngẫu nhiênNgẫu nhiên– Mê cungMê cung

• ““May rủi”.May rủi”.• Số lượng phép thử lớnSố lượng phép thử lớn

Page 25: Chuong 1   tong quan ve lap trinh va nnlt

Chương 1 - Tổng quan về lập trìnChương 1 - Tổng quan về lập trình và NNLTh và NNLT

2525

Phương pháp gián tiếp – Phương pháp gián tiếp – HeuristicHeuristic

• Nguyên lý:Nguyên lý:– vét cạn thông minhvét cạn thông minh– Tối ưu cục bộ (Greedy)Tối ưu cục bộ (Greedy)– Hướng đíchHướng đích– Thứ tựThứ tự

• Ví dụ:Ví dụ: bài toán tìm đường bài toán tìm đường

Page 26: Chuong 1   tong quan ve lap trinh va nnlt

Chương 1 - Tổng quan về lập trìnChương 1 - Tổng quan về lập trình và NNLTh và NNLT

2626

Phương pháp gián tiếp – trí tuệ Phương pháp gián tiếp – trí tuệ nhân tạonhân tạo

• Thử sai, Heuristic:Thử sai, Heuristic: trí thông minh của con người trí thông minh của con người• Trí tuệ nhân tạo:Trí tuệ nhân tạo: trí thông minh của máy tính trí thông minh của máy tính

(bắt chước con người)(bắt chước con người)• Ví dụ:Ví dụ: bài toán đổ nước bài toán đổ nước

– B5: 5 lít, B8: 8 lít.B5: 5 lít, B8: 8 lít.– Chỉ ra cách đong để có được 2 lít nướcChỉ ra cách đong để có được 2 lít nước– Giải: đưa ra các luật để máy tính tự tìm lời giải:Giải: đưa ra các luật để máy tính tự tìm lời giải:

• Luật 1: B8 rỗng -> đổ đầy B8Luật 1: B8 rỗng -> đổ đầy B8• Luật 2: B5 đầy -> đổ hết nước trong B5Luật 2: B5 đầy -> đổ hết nước trong B5• Luật 3: Nếu B5 chưa đầy -> đổ nước trong bình B8 sang B5 Luật 3: Nếu B5 chưa đầy -> đổ nước trong bình B8 sang B5

cho đến khi B5 đầy. cho đến khi B5 đầy.

Page 27: Chuong 1   tong quan ve lap trinh va nnlt

Chương 1 - Tổng quan về lập trìnChương 1 - Tổng quan về lập trình và NNLTh và NNLT

2727

Thuật toán vs. thuật giảiThuật toán vs. thuật giải

• Thuật toán:Thuật toán: “Một dãy “Một dãy hữu hạnhữu hạn các bước các bước không mập mờkhông mập mờ và có thể và có thể thực thi đượcthực thi được, quá , quá trình hành động theo các bước này phải trình hành động theo các bước này phải dừngdừng và cho được và cho được kết quả như mong muốnkết quả như mong muốn”.”.

• Các tính chất của thuật toán:Các tính chất của thuật toán:– Xác định (không mập mờ, thực thi được)Xác định (không mập mờ, thực thi được)– Hữu hạn (hữu hạn, dừng)Hữu hạn (hữu hạn, dừng)

• E.g., Tính tổng các số nguyên dương lẻ.E.g., Tính tổng các số nguyên dương lẻ.– Đúng (kết quả mong muốn)Đúng (kết quả mong muốn)– Đầu vào/ đầu raĐầu vào/ đầu ra– Tính hiệu quảTính hiệu quả– Tính tổng quátTính tổng quát

Page 28: Chuong 1   tong quan ve lap trinh va nnlt

Chương 1 - Tổng quan về lập trìnChương 1 - Tổng quan về lập trình và NNLTh và NNLT

2828

Các phương pháp biểu diễn Các phương pháp biểu diễn thuật toánthuật toán

• Ngôn ngữ tự nhiênNgôn ngữ tự nhiên– Sử dụng quy tắc phân cấp (1.1, 1.1.1…)Sử dụng quy tắc phân cấp (1.1, 1.1.1…)– Dài dòng, không thể hiện rỏ cấu trúc của thuật Dài dòng, không thể hiện rỏ cấu trúc của thuật

toántoán

• Sơ đồ khối (flowchart)Sơ đồ khối (flowchart)– Dùng hình vẻ, ký hiệu…Dùng hình vẻ, ký hiệu…

• Mã giả (pseudo-code)Mã giả (pseudo-code)– Vay mượn các cú pháp của một ngôn ngữ lập trình Vay mượn các cú pháp của một ngôn ngữ lập trình

nào đó (Pascal, C…)nào đó (Pascal, C…)– Một phần của ngôn ngữ tự nhiênMột phần của ngôn ngữ tự nhiên

Page 29: Chuong 1   tong quan ve lap trinh va nnlt

Chương 1 - Tổng quan về lập trìnChương 1 - Tổng quan về lập trình và NNLTh và NNLT

2929

Thuật toán đệ quyThuật toán đệ quy

• Bỏ các tính chất Bỏ các tính chất hữu hạn, xác định, đúng hữu hạn, xác định, đúng đắnđắn của thuật toán-> thuật toán đệ quy. của thuật toán-> thuật toán đệ quy.

• Tư tưởng:Tư tưởng:– Đưa bài toán hiện tại về một bài toán đồng Đưa bài toán hiện tại về một bài toán đồng

dạng (cùng loại, cùng tính chất) nhưng ở cấp độ dạng (cùng loại, cùng tính chất) nhưng ở cấp độ thấp hơn -> lần ngược để giải bài toán ở cấp độ thấp hơn -> lần ngược để giải bài toán ở cấp độ cao hơn.cao hơn.

– Ví dụ: Tính n!Ví dụ: Tính n!• 0!=1 (phần dừng)0!=1 (phần dừng)

• n!=n*(n-1)! (phần đệ quy)n!=n*(n-1)! (phần đệ quy)

Page 30: Chuong 1   tong quan ve lap trinh va nnlt

Chương 1 - Tổng quan về lập trìnChương 1 - Tổng quan về lập trình và NNLTh và NNLT

3030

Thuật giảiThuật giải

• Nhận xét:Nhận xét:– Có nhiều bài toán chưa có lời giải kiểu thuật Có nhiều bài toán chưa có lời giải kiểu thuật

toán hoặc không biết có tồn tại hay không!toán hoặc không biết có tồn tại hay không!– Có nhiều bài toán đã có thuật toán để giải Có nhiều bài toán đã có thuật toán để giải

nhưng không chấp nhận đựơc vì:nhưng không chấp nhận đựơc vì:• Thời gian giải quá lớnThời gian giải quá lớn• Các điều kiện cho thuật toán khó đáp ứngCác điều kiện cho thuật toán khó đáp ứng

– Có những bài toán giải theo những cách vi Có những bài toán giải theo những cách vi phạm thuật toán nhưng vẫn chấp nhận được.phạm thuật toán nhưng vẫn chấp nhận được.

• Thuật giải:Thuật giải: bỏ tính xác định và tính đúng bỏ tính xác định và tính đúng đắn của thuật toánđắn của thuật toán

Page 31: Chuong 1   tong quan ve lap trinh va nnlt

Chương 1 - Tổng quan về lập trìnChương 1 - Tổng quan về lập trình và NNLTh và NNLT

3131

Thuật giải HeuristicThuật giải Heuristic

• Tính chất:Tính chất:– ThườngThường tìm được lời giải tốt (chưa chắc: là tốt nhất) tìm được lời giải tốt (chưa chắc: là tốt nhất)– Chi phí thấp: dễ dàng và nhanh chóngChi phí thấp: dễ dàng và nhanh chóng– Tự nhiên, gần gũi với cách suy nghĩ của con người.Tự nhiên, gần gũi với cách suy nghĩ của con người.

• Nguyên lý:Nguyên lý:– Vét cạn thông minhVét cạn thông minh

• Giới hạn không gian tìm kiếmGiới hạn không gian tìm kiếm• Tìm kiếm đặc biệt dựa vào đặc thù của bài tóanTìm kiếm đặc biệt dựa vào đặc thù của bài tóan

– Tham lam (Greedy)Tham lam (Greedy)• Lấy tiêu chuẩn tối ưu (trên phạm vi toàn cục) của bài toán để Lấy tiêu chuẩn tối ưu (trên phạm vi toàn cục) của bài toán để

làm tiêu chuẩn chọn lựa hành động cho phạm vi cục bộ của làm tiêu chuẩn chọn lựa hành động cho phạm vi cục bộ của từng giai đoạn trong quá trình tìm kiếm lời giảitừng giai đoạn trong quá trình tìm kiếm lời giải

– Thứ tựThứ tự• Thực hiện hành động dựa trên một cấu trúc thứ tự hợp lý của Thực hiện hành động dựa trên một cấu trúc thứ tự hợp lý của

không gian khảo sảt nhắm nhanh chóng đạt được một lời giải tốtkhông gian khảo sảt nhắm nhanh chóng đạt được một lời giải tốt