Khái niệm về lập trình Thuật ngữ lập trình programming nhằm nói đến quá trình xây dựng - sản xuất một chương trình phần mềm cho máy tính, ứng dụng để giải quyết bài toán thực tế.. Sản ph
Trang 1BÀI 1 : GIỚI THIỆU TỔNG QUAN VỀ LẬP TRÌNH
Mục đích:
Bài này cung cấp các khái niệm cơ bản như khái niệm về lập trình, khái niệm về ngôn ngữ lập trình, phân loại ngôn ngữ lập trình, khái niệm về thuật toán, cách trình bày thuật toán Đặc biệt, cung cấp cho người học làm quen với việc thực hiện từng bước để giải một bài toán rất chặt chẽ, logic dưới dạng chạy từng bước của thuật toán
đề ra Điều này tạo cho người mới học lập trình phong cách tư duy logic từng bước rất chặt chẽ trong việc giải quyết các bài toán trên máy tính Trong bài cũng yêu cầu người học, bằng những hiểu biết của mình, tự đưa ra các thuật toán để giải quyết một
số bài toán đơn giản thông thường
1.1 Lập trình và ngôn ngữ lập trình
1.1.1 Khái niệm về lập trình
Thuật ngữ lập trình (programming) nhằm nói đến quá trình xây dựng - sản xuất một chương trình phần mềm cho máy tính, ứng dụng để giải quyết bài toán thực tế Quá trình này gồm nhiều giai đoạn như khảo sát, phân tích và thiết kế, mã hóa chương trình, kiểm thử chương trình, bảo trì nâng cấp, Giai đoạn khảo sát nhằm làm rõ các yêu cầu của bài toán và giới hạn bài toán cần giải quyết, tiếp theo phân tích các yêu cầu này chi tiết về các quy trình nghiệp vụ xử lý bài toán để từ đó thiết kế các thành phần cho chương trình phần mềm Giai đoạn mã hóa chương trình (hay coding) là một giai đoạn quan trọng, ở đó các thiết kế về phần mềm sẽ được chuyển hóa thành nội dung của một chương trình Người thực hiện ở giai đoạn này được gọi là lập trình viên (programmer)
Các giai đoạn chính trong quá trình xây dựng một chương trình phần mềm có thể bao gồm: khảo sát; phân tích & thiết kế; mã hóa chương trình; kiểm tra (hình vẽ) Sản phẩm cuối cùng là chương trình phần mềm (software), chương trình này sẽ được thực hiện trên máy tính và qua đó hỗ trợ, giúp con người giải quyết bài toán đặt ra ban đầu
Trang 2Chúng ta không đi sâu tìm hiểu chi tiết về các giai đoạn ở đây mà sẽ đề cập đến giai đoạn mã hóa chương trình hay còn gọi là viết mã lệnh Giai đoạn này được thực hiện dựa trên những phân tích và thiết kế về chương trình đó Các thiết kế của chương trình gồm nhiều thành phần nhưng quan trọng là quy trình tính toán xử lý cho bài toán bằng máy tính, hay còn gọi là thuật toán Phần này quy định cấu trúc trình tự mà người lập trình sẽ viết mã lệnh cho chương trình Khái niệm và các vấn đề về thuật toán được trình ở phần sau
Thực tiễn đặt ra nhiều bài toán cho việc xây dựng các chương trình phần mềm ứng dụng Có một số bài toán có thể đang được giải quyết bằng sức lao động của con người, tuy nhiên có những bài toán chúng ta không thể giải quyết vì khối lượng tính toán khổng lồ hay diễn ra trong những môi trường đặc biệt… Điều này cần đến việc tự động hóa thông qua sử dụng hệ thống máy tính và chương trình phần mềm ứng dụng Mặt khác, với đặc trưng như tính trung thực, không bị phụ thuộc vào ngoại cảnh khi tính toán xử lý… nên việc ứng dụng máy tính giải quyết các bài toán giúp con người nhằm đem lại hiệu quả cao
1.1.2 Ngôn ngữ lập trình
Các mã lệnh được viết trong lập trình về bản chất chỉ sử dụng 2 ký hiệu 0 và 1, bởi vì máy tính điện tử hiện nay chỉ xử lý tín hiệu dạng nhị phân (tương ứng với trạng thái ON/OFF) Các lệnh này được gọi là dạng mã máy Tuy nhiên chúng ta không phải lập trình bằng các lệnh mã máy, mà sẽ sử dụng các lệnh dưới dạng tương tự ngôn ngữ
tự nhiên (chủ yếu bằng tiếng Anh), đó chính là nhờ sự cung cấp của ngôn ngữ lập trình
Ngôn ngữ lập trình là tập các ký pháp, quy tắc, quy ước để viết mã lệnh cho chương trình Hiện nay có rất nhiều loại ngôn ngữ lập trình được chia thành từng nhóm sau:
- Ngôn ngữ máy: sử dụng các ký hiệu nhị phân cùng với quy tắc của máy nên rất khó áp dụng và hầu như không được dùng để viết chương trình
- Nhóm ngôn ngữ bậc thấp: sử dụng các ký hiệu là chữ cái, chữ số, dấu… hay còn gọi là các ký tự cùng với quy tắc gần với quy tắc của máy nên cũng khá khó khi áp dụng Chẳng hạn như ngôn ngữ Assembler Các ngôn ngữ thuộc nhóm này thường áp
Bài toán
cần giải
quyết
Chương trình phần mềm
Khảo sát Phân tích &
thiết kế
Mã hóa chương trình
Kiểm tra
Trang 3dụng để viết chương trình phần mềm dạng hệ thống, can thiệp sâu bên trong các thiết
bị vật lý để điều khiển
- Nhóm ngôn ngữ bậc cao: sử dụng các ký hiệu là các ký tự để viết lệnh với quy tắc gần gần với quy tắc của ngôn ngữ tự nhiên nên dễ áp dụng Chẳng hạn như Pascal, C/C++, Java,
Ngôn ngữ lập trình về bản chất cung cấp cho người lập trình 2 vấn đề chính: thứ nhất, cung cấp các ký hiệu và quy tắc viết mã lệnh để sao cho đơn giản và dễ triển khai; thứ hai, cung cấp cơ chế để các chương trình sau khi viết bằng ngôn ngữ này sẽ được chuyển về dạng mã máy để thực hiện trên máy tính Quá trình chuyển đổi này được gọi là biên dịch (compile) chương trình
Chương trình được viết ra sử dụng một ngôn ngữ lập trình nào đó được gọi là chương trình nguồn (source programs), sau khi biên dịch thành chương trình gồm các lệnh mã máy được gọi chương trình thực thi (executive programs)
1.2 Thuật toán
1.2.1 Khái niệm thuật toán (algorithms)
Thuật toán là một hệ thống chặt chẽ và rõ ràng các qui tắc nhằm xác định một dãy các thao tác trên những đối tượng, sao cho sau một số hữu hạn bước thực hiện các thao tác này, ta thu được kết qủa mong muốn
Chúng ta phải phân biệt được hai khái niệm cách làm và thuật toán Hai khái niệm này đều chỉ ra phương pháp giải quyết một bài toán, nhưng ở khái niệm cách làm được thể hiện dưới dạng ý tưởng là chủ yêu, không đòi hỏi về các tiêu chí chặt chẽ, rõ ràng… như yêu cầu của thuật toán Một cách hiểu đơn giản là khái niệm cách làm mới chỉ dừng lại ở việc con người trao đổi với nhau về phương pháp giải quyết bài toán, còn ở khái niệm thuật toán là thể hiện của cách làm đó mà máy tính có thể giải quyết thông qua việc mã hóa thành chương trình
1.2.2 Các đặc trưng của thuật toán
- Tính kết thúc : thuật toán phải được kết thúc sau một số hữu hạn thao tác
- Tính rõ ràng, chặt chẽ : các thao tác được trình bày trong thuật toán phải rõ ràng, phải thực hiện được bằng máy tính Các bước này có thứ tự nhất định, nếu thay đổi trật tự này thì thuật toán sẽ bị sai
Lập
trình
Chương trình nguồn
Biên dịch Chương trình mã máy
Chạy thử
Trang 4- Tính phổ dụng : thuật toán có thể mở rộng, áp dụng được cho lớp các bài toán tương tự nhau, không chỉ giải quyết duy nhất một bài toán đã đặt ra
- Tính hiệu quả : thể hiện trong cả không gian và thời gian Về không gian thuật toán phải thực hiện được trong điều kiện khả năng của máy tính hiện tại, về thời gian đòi hỏi thuật toán phải cho kết quả sớm nhất có thể được
1.2.3 Cách thể hiện thuật tuán
Có hai cách để biểu diễn thuật toán:
- Cách thứ nhất là nêu trình tự các bước từ bước 1 đến bước cuối cùng, ở mỗi bước sử dụng ngôn ngữ giả lập trình cùng với ngôn ngữ tự nhiên để trình bày Các mô
tả này phải chính xác và rõ ràng, đơn nghĩa và dễ hiểu
- Cách thứ hai sử dụng sơ đồ khối: trong đó sử dụng các hình vẽ với ý nghĩa như sau
thể hiện sự bắt đầu và kết thúc thuật toán
thể hiện sự tính toán
thể hiện cho thao tác nhập dữ liệu vào, đưa kết quả dữ liệu ra
thể hiện chiều đi của thuật toán
thể hiện sự lựa chọn đúng hoặc sai, có một chiều đi vào
và 2 chiều đi ra tương ứng với 2 trường hợp
Một thuật toán được trình bày dưới dạng sơ đồ sẽ rõ ràng và tường minh hơn, người lập trình sẽ dễ dàng triển khai chương trình từ thuật toán Tuy nhiên nếu thuật toán lớn quá thì việc trình bày bằng mô tả các bước sẽ đơn giản hơn, khi đó các bước phải được trình bày rõ chi tiết từng thao tác để người lập trình có thể nắm bắt được và triển khai chương trình dễ dàng
Thông thường, các thuật toán lớn, phức tạp chúng trình bày theo cách 1 và thể hiện bằng các phần nội dung sau:
1 Tên thuật toán
Trang 52 Các tham số, dữ liệu đưa vào (input)
3 Các kết quả tính toán đầu ra (output)
4 Các hành động (bước) tính toán, xử lý (actions/steps): phần này trình bày mô
tả chỉ tiết hành động từng bước
1.2.4 Một số ví dụ về thuật toán
Ví dụ 1.1: Thuật toán “đổi chỗ”, có hai thùng A và B, thùng A đựng thóc và thùng B đựng ngô, hãy đổi chỗ thóc và ngô cho nhau
Để thực hiện thuật toán này chúng ta phải sử dụng thêm một thùng trung gian thứ
3, ký hiệu là C và thuật toán được trình bày theo cách 1 như sau:
- Tên thuật toán: Đổi chỗ
- Input: hai thùng A (đựng thóc) và B (đựng ngô)
- Output: hai thùng A (đựng ngô) và B (đựng thóc)
- Actions:
Bước 1) Chuyển thóc ở thùng A vào thùng C
Bước 2) Chuyển ngô ở thùng B vào thùng A
Bước 3) Chuyển thóc ở thùng C vào thùng B
Hình minh họa như sau:
Ví dụ 1.2: Thuật toán “nấu cơm”
Một công việc hầu hết ai cũng biết làm, tuy nhiên nếu có ai đó chưa một lần thực hiện trong thực tế thì không thể và chúng ta phải đưa ra một thuật toán cho người đó
C
(trung gian) (B2 - chuyển ngô)
Trang 6thực hiện, thuật toán được trình bày như sau (để đơn giản ta bỏ qua các phần name, input, output):
Bước 1) Thu thập nguyên liệu như gạo, nước và xác định các công cụ sử dụng
để nấu cơm như nồi (giả sử nồi điện), nguồn điện
Bước 2) Nếu nguyên liệu không có hoặc thiếu công cụ thì thông báo không thể nấu cơm và chuyển đến bước 6
Bước 3) Lấy gạo cho vào nồi
Bước 4) Vò gạo và đổ nước
Bước 5) Cắm điện và bật công tắc trên nồi
Bước 6) Kết thúc
Trang 7 Ví dụ 1.3: Thuật toán giải phương trình bậc 2 có dạng sau
0
2 bxc
ax
Thuật toán trình bày dưới dạng sơ đồ như sau:
Ví dụ 1.4: Thuật toán tìm số nhỏ nhất trong một dãy số Cho một dãy số như sau: X1, X2, X3, X4, X5, , Xn Hãy tìm số nhỏ nhất trong dãy số trên
Ta ký hiệu Xi là số thứ i trong dãy trên với i=1,2,3, ,n và sử dụng Min để lưu số nhỏ nhất, thuật toán được trình bày như sau:
Bước 1) Xác định n và các giá trị X1, X2, , Xn
Bước 2) Nếu n < 1 thì thông báo không có các số và kết thúc
Bước 3) Đặt Min = X1, giả sử số nhỏ nhất là số đầu tiên
Bắt đầu
Nhập các hệ số a, b, c ?
trình bậc 2 Tính b2 4ac
< 0 ?
a
b x
a
b x
2
2 2
1
= 0 ?
Phương trình vô nghiệm
a
b x
2
PT có nghiệm kép là : x
PT có 2 nghiệm : x 1 và x 2
Kết thúc
Đúng Sai
Đúng Sai
Đúng Sai
Trang 8Bước 4) Đặt i = 2, bắt đầu kiểm tra từ số thứ 2
Bước 5) Nếu i > n thì chuyển sang bước 8
Bước 6) Nếu Xi < Min thì đặt lại Min = Xi
Bước 7) Tăng i lên 1 (i = i + 1) và quay lại bước 5
Bước 8) Thông báo kết quả là : Min và kết thúc
Chuyển thuật toán trên thành sơ đồ như sau:
Bắt đầu
Nhập số n và các X1,X2, ,Xn ?
trong dãy
Min = X1 và i = 2
i > n ?
Xi < Min ?
Giá trị nhỏ nhất là : Min
Kết thúc
Đúng Sai
Sai
Sai Đúng
Min = Xi
i = i + 1 Đúng
Trang 9 Ví dụ 1.5: Trình bày thuật toán tìm ước số chung lớn nhất của 2 số nguyên dương
Về ý tưởng, chúng ta áp dụng thuật toán Ơclít dạng đơn giản, đó là lấy số lớn trừ
số bé cho đến khi hai số bằng nhau thì được kết quả cần tìm Có thể tăng tốc độ bằng cách lấy số lớn chia dư cho số bé thay vì dùng phép trừ
Chẳng hạn, có hai số 24 và 9, thực hiện các bước sau:
Bước 1) Trừ 24 cho 9 còn 15 2 số mới (15,9)
Bước 2) Trừ 15 cho 9 còn 6 2 số mới (6,9)
Bước 3) Trừ 9 cho 6 còn 3 2 số mới (6,3)
Bước 4) Trừ 6 cho 3 còn 3 2 số mới (3,3) và chúng bằng nhau, đây là kết quả cần tìm
Thuật toán được trình bày dưới dạng sơ đồ như sau
Bắt đầu
Xác định 2 số nguyên dương a,b
a > b ? Đúng Sai
a = a-b
a < b ? Sai
Đúng
b = b-a
Thông báo kết quả là a hoặc b
Kết thúc
Trang 10 Ví dụ 1.6: Trình bày thuật toán phân tích một số nguyên thành tích các thừa số nguyên tố
Ý tưởng của phương pháp đó là: bắt đầu xét từ số 2 (số nguyên tố đầu tiên), ta kiểm tra xem số phần tích có chia hết cho số đang xét không Nếu có, ta thực hiện chia
số đó và lặp lại kiểm tra cho đến khi không chia hết hoặc số cần phân tích bằng 1, nếu không ta tăng số xét lên 1 và lặp lại kiểm tra như vậy
Chẳng hạn, phân tích số 140, ta xét bắt đầu từ số 2 theo các bước sau:
Bước 1) 140 chia hết 2, ta phân tích 140 = 702
Bước 2) 70 chia hết 2, ta phân tích 70 = 352
Bước 3) 35 không chia hết 2, ta tăng số chia lên 1 thành 3
Bước 4) 35 không chia hết 3, ta tăng số chia lên 1 thành 4
Bước 5) 35 không chia hết 4, ta tăng số chia lên 1 thành 5
Bước 6) 35 chia hết 5, ta phân tích 35 = 75
Bước 7) 7 không chia hết 5, ta tăng số chia lên 1 thành 6
Bước 8) 7 không chia hết 6, ta tăng số chia lên 1 thành 7
Bước 9) 7 chia hết 7, ta phân tích 7 = 17
Bước 10) giá trị còn lại là 1 nên ta dừng
Kết quả ta được như sau: 140 = 7522
Thuật toán được trình bày dưới dạng sơ đồ như sau
Trang 11Chúc Anh/ Chị học tập tốt !
Bắt đầu
Xác định số nguyên a cần phân tích
a chia hết b?
Sai
Đúng
b = 2
b=b+1
a = a/b
In thừa số b phân tích được
|a| > 1 Đúng
Sai
Bắt đầu