Apr 26, 2017

[Tìm hiểu Pascal] Thuật toán - P1

Đây là bài thứ 3 trong series về "Tìm hiểu chung về ngôn ngữ lập trình Pascal"
Bài này chúng ta sẽ không đi chuyên sâu về mặt cú pháp mà nhằm giải thích cho các bạn về cái cốt lõi của một chương trình, một bài toán. Không quan trọng bạn có dùng ngôn ngữ Pascal hay không, có thể C, Java, Python,... nhưng thuật toán vẫn là phần quan trọng nhất.

I. Thuật toán là gì?

Trong đời sống, các bạn sẽ gặp rất nhiều công việc yêu cầu phải được giải quyết một cách tuần tự nhằm một mục đích nào đó. Ví dụ:
  • Ốp la trứng: ban đầu có 1 quả trứng + dầu ăn + chảo + dĩa
    1. Làm nóng chảo, cho dầu ăn vào
    2. Cho trứng vào chiên
    3. Trứng chín, tắt bếp
    4. Trình bày ra dĩa
    • => Kết quả: ngồi nhìn cái trứng mới chiên (vì thuật toán đâu có kêu ăn đâu)
  • Giải phương trình 2x+1=3: ban đầu: phương trình là gì dợ, x là gì dợ, đưa em về hành tinh của mình đi :<
    1. Chuyển vế: 2x=3-1=2
    2. Chia cả 2 vế cho 2: x=2/2=1
    3. Kết luận PT có tập nghiệm S={1};
    • => Kết quả: ý ý phương trình có nghiệm x=1 kìa vi diệu quá há há há
  • Tả con chó nhà em: ban đầu: chả ai biết đến con chó nhà em trừ mấy ông bắt chó
    1. Sáng em dậy, gâu gâu chó sủa
    2. Trưa em về, chó sủa gâu gâu
    3. Chiều em đi, gâu gâu chó sủa
    4. Tối em ngủ, chó sủa gâu gâu
    • => Kết quả: đưa con chó lên trang vở, lưu danh sử sách
  • Làm hacker: ban đầu: một tài khoản facebook + một tâm hồn trẻ nghé
    1. Lên facebook đổi avatar a no my ớt
    2. Lên google search "cách rjp njck facebook"
    3. Mở cmd lên, gõ ipconfig
    4. Cap màn hình lại, khoe facebook hù thiên hạ
    • => Kết quả: đẳng thức (trẻ nghé) + (biết dùng facebook) = ("hacker") được chứng minh
Qua một chuỗi ví dụ vô cùng sinh động, cụ thể (=]]]]]) thì ta có thể tóm gọn lại rằng: 
Thuật toán (algorithm) là tập hợp hữu hạn các thao tác, chỉ thị được thực hiện liên tục và tuần tự, nhằm mục đích dẫn sự việc từ trạng thái ban đầu tới trạng thái kết quả cuối cùng đã được dự đoán.

II. Các cách biểu diễn thuật toán

1. Dùng ngôn ngữ tự nhiên: 

Cách mô tả các thuật toán như trong ví dụ trên gọi là dùng ngôn ngữ tự nhiên

2. Dùng sơ đồ khối (Flowchart)

Là cách dùng những hình vẽ, kí hiệu được quy định sẵn để vẽ thành một sơ đồ một cách trực quan, dễ hiều. Vd như hình sau (về cách dùng sơ đồ khối, mời bạn đọc search google với từ khoá "flowchart" để biết thêm chi tiết :D )

3. Dùng mã giả (Pseudocode)

Là cách dùng một số quy ước cơ bản của một (hoặc một số) ngôn ngữ lập trình nào đó, được bỏ đi những chi tiết không cần thiết và có sự hỗ trợ của ngôn ngữ tự nhiên hoặc kí hiệu toán học đơn giản. Dùng mã giả giúp người đọc không cần phải tìm hiểu về một ngôn ngử lập trình nào đó mà vẫn có thể hiểu được giải thuật một cách chính xác nhất. Cách này sẽ được nói sâu hơn khi tìm hiểu ở các bài sau.

III. Các tính chất của thuật toán

1. Tính chính xác

Tất nhiên, đây là tính chất quan trọng nhất của thuật toán. Tính chất này để đảm bảo kết quả tính toán, trạng thái cuối cùng sau quá trình tính toán là đúng. (cái này chắc khỏi ví dụ nha :D )

2. Tính rõ ràng

Thuật toán phải được cấu thành từ các câu lệnh minh bạch được sắp xếp theo trình tự hợp lí
VD: Thuật toán làm h@cker (kéo lên trên xem lại): thay vì cap màn hình khi ipconfig thì lại đi cap lúc này thì...

3. Tính khách quan

Thuật toán dù được thực hiện bởi ai, bằng hình thức nào thì cũng phải cho kết quả như nhau.

4. Tính phổ dụng

Tính chất này để đảm bảo kết quả tính toán, trạng thái cuối cùng sau quá trình tính toán là đúng với mọi dữ liệu đầu vào tương tự nhau.

5. Tính kết thúc

Thuật toán phải kết thúc sau một số hữu hạn bước. Tính chất này nhằm tránh một (hoặc một số) câu lệnh bị lặp lại một cách vô hạn gây lãng phí tai nguyên.

Bài này chắc cũng hơi dài rồi nhỉ, thôi hẹn gặp các bạn ở phần 2 của bài ^^ 
SnowyNguyễn


EmoticonEmoticon