1 số khái niệm cơ bản liên quan đến lập trình C++ cho người mới bắt đầu học lập trình và lập trình đối với ngôn ngữ C
Trang 1CHƯƠNG 1: MỘT SỐ KHÁI NIỆM LIÊN QUAN ĐẾN LẬP TRÌNH
1.1 Mục tiêu.
Mục tiêu của chương này giúp người đọc:
Hiểu được các khái niệm cơ bản liên quan đến lập trình
Nắm được các bước lập trình
Xác định được dữ liệu đầu vào, thành phần xử lý, dữ liệu đầu ra
Phân tích được các bài toán đơn giản
Thể hiện được thuật toán bằng ngôn ngữ tự nhiên, lưu đồ, mã giả
1.2 Các khái niệm cơ bản.
1.2.1 Thuật toán.
Thuật toán là một dãy các thao tác xác định trên một đối tượng từ trạng thái ban đầu cho trước, sao cho sau khi thực hiện một số hữu hạn các bước thì đạt được kết quả sau cùng như đã dự kiến
Nói cách khác, thuật toán là tập hợp (dãy) hữu hạn các chỉ thị (hành động) được định nghĩa rõ ràng nhằm giải quyết một bài toán cụ thể nào đó.
Theo R.A.Kowalski thì bản chất của thuật toán là:
Thuật toán = Logic + Điều khiển
Logic: đây là phần khá quan trọng, nó trả lời câu hỏi “Thuật toán làm gì và giải quyết vấn đề gì?”, những yếu tố trong bài toán có quan hệ với nhau như thế nào? Ngoài ra
nó còn bao gồm cả những kiến thức chuyên môn cần phải biết để có thể tiến hành giải bài toán Chẳng hạn như để giải bài toán tính diện tích hình cầu, mà không còn nhớ công thức tính diện tích hình cầu thì không thể viết chương trình cho máy để giải bài toán này được
Điều khiển: thành phần này trả lời câu hỏi thuật toán phải làm như thế nào? Chính là cách thức tiến hành áp dụng thành phần logic để giải quyết vấn đề
Ví dụ 1_1: Thuật toán giải phương trình bậc nhất P(x): ax + b = 0, (a, b là các số thực)
Đầu vào: a, b thuộc R
Trang 2Đầu ra: nghiệm của phương trình ax + b = 0
Nếu a = 0
o b = 0 thì P(x) có nghiệm bất kì
o b ≠ 0 thì P(c) vô nghiệm
Nếu a ≠ 0
o P(x) có duy nhất một nghiệm x = (-
b)/a Các tính chất của thuật toán
Tính chính xác: để đảm bảo kết quả tính toán hay các thao tác mà máy tính thực hiện được là chính xác
Tính rõ ràng: thuật toán phải được thể hiện bằng các câu lệnh minh bạch; các câu lệnh được sắp xếp theo thứ tự nhất định
Tính khách quan: một thuật toán dù được viết bởi nhiều người trên nhiều máy tính vẫn phải cho kết quả như nhau
Tính phổ dụng: thuật toán không chỉ áp dụng cho một bài toán nhất định mà có thể áp dụng cho một lớp các bài toán có đầu vào tương tự nhau
Tính kết thúc: Thuật toán phải gồm một số hữu hạn các bước tính toán
1.2.2 Chương trình.
Chương trình là một tập hợp các chỉ thị, hướng dẫn để thực hiện một tác vụ cụ thể được thực hiện bởi máy tính Theo Niklaus Wirth thì:
Chương trình = Thuật toán + Cấu trúc dữ liệu
Các thuật toán và chương trình đều có cấu trúc dựa trên 3 cấu trúc điều khiển cơ bản sau:
Tuần tự (sequential): các bước thực hiện tuần tự một cách chính xác từ trên xuống, mỗi bước chỉ thực hiện đúng một lần
Chọn lọc (selection): chọn 1 trong 2 hay nhiều thao tác để thực hiện
Lặp lại (repetition): một hay nhiều bước được thực hiện lặp lại một số lần
Trang 31.2.3 Ngôn ngữ lập trình.
Ngôn ngữ lập trình là hệ thống các ký hiệu tuân theo các qui ước về ngữ pháp và ngữ nghĩa, dùng để xây dựng thành các chương trình cho máy tính
Một chương trình được viết bằng một ngôn ngữ lập trình cụ thể (ví dụ Pascal, C…) gọi là chương trình nguồn, chương trình dịch làm nhiệm vụ dịch chương trình nguồn thành chương trình thực thi được trên máy tính
1.3 Các bước xây dựng chương trình.
1.3.1 Các bước cơ bản.
Các bước cơ bản để xây dựng một chương trình như sau:
Bước 1: Phân tích vấn đề và xác định các đặc điểm (xác định dữ liệu đầu vào, xác định thành phần cần xử lý, xác định dữ liệu đầu ra)
Bước 2: Đưa ra giải pháp (đưa ra thuật giải)
Bước 3: Cài đặt (viết chương trình)
Bước 4: Chạy thử chương trình (dịch chương trình)
Bước 5: Kiểm chứng và hoàn thiện chương trình (thử nghiệm bằng nhiều số liệu và đánh giá)
1.3.2 Quy trình Nhập – Xử lý – Xuất (I-P-O cycle).
Quy trình xử lý cơ bản của máy tính gồm nhập – xử lý – xuất (input – process- output)
Trang 4Input
Output
Quy trình này nhận dữ liệu đầu vào từ người dùng hoặc các nguồn khác nhau, thực hiện tính toán trên dữ liệu và sau đó trả về kết quả của việc tính toán Quy trình này được sử dụng rộng rãi trong việc phân tích hệ thống và phát triển phần mềm
Ví dụ 1_2: Xác định Input, Process, Output của việc pha một ly cà phê.
Input : ly, đường, cà phê, nước sôi, muỗng
Process : hòa cà phê vào nước sôi, cho đường vào hỗn hợp, khuấy đều hỗn hợp
Process
Trang 5Output : ly cà phê đã sẵn sàng
Ví dụ 1_3: Xác định Input, Process, Output của chương trình tính tiền lương cho công
nhân, biết rằng lương = lương căn bản * ngày công.
Input : lương căn bản, ngày công
Process : nhân lương căn bản với ngày
công Output : lương
Ví dụ 1_4: Xác định Input, Process, Output của chương trình giải phương trình bậc
nhất ax + b = 0
Input : hệ số a,
b Process : chia –b cho
a Output : nghiệm x
Ví dụ 1_5: Xác định Input, Process, Output của chương trình tìm số lớn nhất của 2 số
a và b
Input : a, b
Process : nếu a > b thì Output = a, ngược lại Output = b
1.4 Biểu diễn thuật toán.
Để có thể truyền đạt thuật toán cho người khác hiểu, hay chuyển thuật toán thành chương trình máy tính, cần phải có phương pháp biểu diễn thuật toán Có ba phương pháp biểu diễn thuật toán:
- Dùng ngôn ngữ tự nhiên
- Dùng lưu đồ - sơ đồ khối (flowchart)
- Dùng mã giả (pseudocode)
1.4.1 Sử dụng ngôn ngữ tự nhiên.
Để biểu diễn thuật toán bằng ngôn ngữ tự nhiên, người ta sử dụng ngôn ngữ thường ngày để liệt kê các bước của thuật toán Phương pháp này không yêu cầu người viết
Trang 6cũng như người đọc phải nắm các quy tắc, vì gần như không có một quy tắc cố định
Trang 7Dữ liệu đầu vào: a, b thuộc R
Dữ liệu đầu ra: nghiệm của phương trình ax + b = 0
1 Nhập 2 số thực a và b
2 Nếu a = 0 thì
2.1 Nếu b = 0 thì
2.1.1 Phương trình vô số nghiệm
2.1.2 Kết thúc thuật toán
2.2 Ngược lại
2.2.1 Phương trình vô nghiệm
2.2.2 Kết thúc thuật toán
3 Ngược lại
3.1 Phương trình có nghiệm x = - b / a
3.2 Kết thúc thuật toán
nào trong việc thể hiện thuật toán bằng ngôn ngữ tự nhiên Tuy nhiên, để dễ đọc, người ta thường viết các bước con lùi vào bên phải và đánh số bước theo quy tắc phân cấp như 1, 1.1, 1.1.1,…
Ví dụ 1_6: Sử dụng ngôn ngữ tự nhiên biểu diễn thuật toán giải phương trình ax + b =
0
1.4.2 Sử dụng lưu đồ - sơ đồ khối.
Để dễ hơn, các nhà lập trình đưa ra dạng lưu đồ để minh họa từng bước quá trình xử
lý một vấn đề (bài toán)
Hình dạng (Symbol) Hành động (Activity)
Dữ liệu vào/ ra (Input/ Ouput)
Xử lý (Process)
Quyết định (Decicion), sử dụng điều kiện
Trang 8Luồng xử lý (Flow lines)
Chương trình con, hàm … (Procedure, Function,…)
Bắt đầu, kết thúc (Begin, End)
Điểm ghép nối (Connector)
Trang 9Bắt đầu
Đọc a, b
Xuất
Kết thúc
Tính
x = -b /a
Ví dụ 1_7: Sử dụng lưu đồ biểu diễn thuật toán giải phương trình ax + b = 0.
Ví dụ 1_8: Sử dụng lưu đồ biểu diễn thuật toán pha cà phê.
Trang 10Bắt đầu
LCB, ngày công
Nhân LCB với ngày công
Ví dụ 1_9: Sử dụng lưu đồ biểu diễn thuật toán tính tiền lương cho công nhân, biết
rằng lương = lương căn bản * ngày công.
Bỏ đường vào Khuấy đều hỗn hợp
Hòa cà phê vào nước sôi
Bắt đầu
Cà phê, nước sôi
Cà phê đã pha
Kết thúc
LCB, ngày công
Kết thúc
Trang 11Bắt đầu
Điểm
S Điểm >=0 và
Điểm <=10 Đ
Kết thúc
Dữ liệu đầu vào: a, b thuộc R
Dữ liệu đầu ra: nghiệm của phương trình ax + b = 0
If a = 0 Then
Begin
Ví dụ 1_10: Sử dụng lưu đồ biểu diễn thuật toán kiểm tra tính hợp lệ của điểm (theo
thang điểm 10)
1.4.3 Sử dụng mã giả.
Tuy sơ đồ khối thể hiện rõ quá trình xử lý và sự phân cấp của các trường hợp của thuật toán, tuy nhiên phương pháp này hơi cồng kềnh và mất khá nhiều thời gian để thể hiện Bên cạnh đó, lưu đồ chỉ thể hiện được hai thao tác đó là rẽ nhánh và xử lý
mà trong thực tế còn cần thêm thao tác lặp
Sử dụng mã giả là việc đi vay mượn cú pháp của một ngôn ngữ lập trình nào đó để thể hiện thuật toán Mọi ngôn ngữ lập trình đều có các thao tác cơ bản là xử lý, rẽ nhánh
và lặp, nên việc sử dụng mã giả sẽ tận dụng được các khái niệm của ngôn ngữ lập trình và giúp người đọc dễ dàng cài đặt thuật toán
Ví dụ 1_11: Vay mượn ngôn ngữ Pascal biểu diễn thuật toán giải phương trình ax + b
= 0
Trang 12Xuất “Phương trình vô số nghiệm”
Else
Xuất “Phương trình vô nghiệm”
End
Else
Xuất “Phương trình có nghiệm x = -b/a”
1.5 Bài tập.
1 Xác định Input, Process, Output và vẽ lưu đồ cho chương trình đổi từ
tiền VND sang USD
2 Xác định Input, Process, Output và vẽ lưu đồ cho chương trình tính điểm
trung bình của học sinh gồm các môn Toán, Lý, Hóa
3 Xác định Input, Process, Output và vẽ lưu đồ cho chương trình giải
phương trình bậc 2: ax2 + bx + c = 0
4 Xác định Input, Process, Output và vẽ lưu đồ cho chương trình đổi từ độ
sang radian và ngược lại theo công thức / =a/180, với : radian, a: độ
5 Xác định Input, Process, Output và vẽ lưu đồ cho chương trình nhập bán
kính hình tròn, tính chu vi và diện tích của hình tròn đó
6 Xác định Input, Process, Output và vẽ lưu đồ cho chương trình nhập vào năm sinh của một người, tính tuổi của người đó
Xác định Input, Process, Output và vẽ lưu đồ cho chương trình nhập vào số xe (gồm 5
chữ số), cho biết số xe đó được m