TỔNG QUAN VỀ GIÁO TRÌNH TIN HỌC LẬP TRÌNH C++ (PHIÊN BẢN BIÊN SOẠN THPT CHU VĂN AN - THANH HÓA)

Tổng quan về giáo trình

Tài liệu được biên soạn vào tháng 9 năm 2021 tại Trường THPT Chu Văn An, trực thuộc Sở Giáo dục và Đào tạo Thanh Hóa, phục vụ giảng dạy môn Tin học (phần lập trình cơ sở). Trong hệ thống đào tạo, giáo trình giữ vai trò cầu nối chuyển tiếp từ kiến thức thuật toán lý thuyết sang kỹ năng lập trình thực nghiệm trên máy tính điện tử.

Mục tiêu học tập của giáo trình hướng đến việc trang bị cho người học:

  • Bản chất của ngôn ngữ lập trình bậc cao so với ngôn ngữ máy.
  • Cơ chế chuyển đổi của chương trình dịch (phân biệt thông dịch và biên dịch).
  • Các thành phần cốt lõi của một ngôn ngữ lập trình: bảng chữ cái, cú pháp và ngữ nghĩa.
  • Cú pháp và cách sử dụng các kiểu dữ liệu chuẩn, biểu thức số học, biểu thức quan hệ, biểu thức lôgic và câu lệnh gán.
  • Kỹ thuật lập trình cấu trúc thông qua các cấu trúc điều khiển: rẽ nhánh (if, if...else) và lặp (for, while, do-while).
  • Kỹ năng thao tác, biên dịch và gỡ lỗi mã nguồn trên môi trường thực hành CodeBlocks.

Cấu trúc giáo trình đi từ các khái niệm trừu tượng tổng quát đến việc hiện thực hóa mã nguồn cụ thể trên ngôn ngữ C++, đồng thời duy trì sự đối chiếu cú pháp song song với ngôn ngữ Pascal.

Điểm đặc thù của tài liệu là việc kết hợp nội dung bài học chính khóa với hệ thống 4 bài đọc thêm chuyên đề, cung cấp tư liệu lịch sử khoa học máy tính (như đóng góp của Ada Lovelace, Charles Babbage, Bjarne Stroustrup, Dennis Ritchie) và mở rộng các lệnh điều khiển luồng nâng cao (break, continue, goto, exit, case-of, repeat-until).


Nội dung kiến thức cốt lõi

Các chương/chủ đề chính

Toàn bộ văn bản giáo trình tập trung vào ba khối chương trung tâm và hệ thống bài đọc mở rộng:

  • Chương I: Một số khái niệm về lập trình và ngôn ngữ lập trình
    Trình bày định nghĩa lập trình là việc sử dụng cấu trúc dữ liệu và câu lệnh của một ngôn ngữ cụ thể để diễn đạt thuật toán. Phân loại chương trình dịch thành hai cơ chế: thông dịch (interpreter) và biên dịch (compiler). Xác định 3 thành phần của ngôn ngữ lập trình gồm bảng chữ cái (chữ cái tiếng Anh, chữ số Ả Rập, ký tự đặc biệt), cú pháp (bộ quy tắc xác định tính hợp lệ của mã nguồn) và ngữ nghĩa (xác định ý nghĩa thao tác tùy ngữ cảnh). Phân loại hệ thống tên thành 3 nhóm: tên dành riêng (từ khóa: main, include, if, while, void), tên chuẩn (cin, cout, getchar, abs, sqrt) và tên do người lập trình đặt (A1, DELTA, CT_Vidu). Định nghĩa hằng (hằng số học, hằng lôgic, hằng xâu ký tự) và biến.
  • Chương II: Chương trình đơn giản
    Phân tích cấu trúc chung của chương trình gồm phần khai báo (#include, using namespace, khai báo hằng const, khai báo biến) và phần thân xác định trong hàm int main(). Định nghĩa chi tiết các kiểu dữ liệu chuẩn trong C++:
    • Kiểu nguyên: short (2 byte), int (4 byte), long (4 byte), long long (8 byte) với miền giá trị có dấu (signed) và không dấu (unsigned).
    • Kiểu thực: float (4 byte), double (8 byte), long double (8 byte).
    • Kiểu ký tự: char (1 byte, 256 ký tự mã ASCII từ 0 đến 255), wchar_t (2/4 byte).
    • Kiểu lôgic: bool (1 byte, nhận giá trị true hoặc false).
      Trình bày các phép toán số học (+, -, *, /, %), phép toán quan hệ (<, <=, >, >=, ==, !=), phép toán lôgic (!, &&, ||), cùng các hàm số học chuẩn (pow(x,y), sqrt(x), abs(x), ln(x), exp(x), sin(x), cos(x)). Trình bày toán tử gán, toán tử gán hợp nhất (+=, -=, *=, /=, %=, &=, |=, ^=, >>=, <<=), toán tử tăng giảm tiền tố/hậu tố (++a, a++, --a, a--). Thiết lập các thủ tục chuẩn vào/ra: đối tượng cin >>, cout <<, hàm đọc xâu chứa khoảng trắng getline(cin, s) và các ký tự điều khiển escape sequence (\n, \r, \t, \v, \b, \f, \a, \', \", \?, \\).
  • Chương III: Cấu trúc rẽ nhánh và lặp
    Phân tích mệnh đề điều kiện dạng thiếu (Nếu... thì...) và dạng đủ (Nếu... thì..., nếu không thì...). Cài đặt câu lệnh if (<Điều kiện>) { <Lệnh>; } và if (<Điều kiện>) { <Lệnh 1>; } else { <Lệnh 2>; }. Trình bày cấu trúc lặp với số lần biết trước thông qua câu lệnh for (<khởi tạo>; <giới hạn>; <tăng giảm>) ở cả hai dạng tiến (Tong_1a) và lùi (Tong_1b). Trình bày cấu trúc lặp chưa biết trước số lần thông qua câu lệnh while (<Điều kiện>) và do { ... } while (<Điều kiện>);.

Kiến thức nền tảng được xây dựng

  1. Lý thuyết chương trình dịch và quản lý bộ nhớ:
    • Cơ chế thông dịch: Lặp lại quy trình kiểm tra cú pháp câu lệnh tiếp theo $\rightarrow$ Chuyển đổi sang mã máy $\rightarrow$ Thực thi trực tiếp. Không tạo ra tệp đích độc lập, phù hợp môi trường tương tác/đối thoại.
    • Cơ chế biên dịch: Duyệt, phát hiện lỗi cú pháp toàn bộ chương trình nguồn $\rightarrow$ Chuyển đổi thành chương trình đích trên ngôn ngữ máy có thể lưu trữ để tái thực thi độc lập.
    • Quản lý biến và tầm vực: Bản chất của biến là vùng nhớ được định danh. Quy tắc đặt tên theo chuẩn công nghiệp: biến thành viên lớp mang tiền tố m_, biến toàn cục mang tiền tố g_, biến tĩnh/hằng số mang tiền tố c_.
  2. Hệ thống hóa định lý Böhm - Jacopini (Bon Ja-co-pi-ni):
    • Khẳng định nguyên lý nền tảng của lập trình cấu trúc: Mọi quá trình tính toán và thuật toán đều có thể biểu diễn đầy đủ dựa trên sự kết hợp của ba cấu trúc cơ bản: cấu trúc tuần tự, cấu trúc rẽ nhánh và cấu trúc lặp.
  3. Mô hình lập trình hướng đối tượng và tiêu chuẩn ngôn ngữ:
    • Bổ sung cơ sở lý thuyết OOP trong các bài đọc thêm: 4 đặc tính gồm trừu tượng hóa, bao đóng (từ khóa phạm vi public, private, protected, quan hệ friend), kế thừa và đa hình (đa hình tĩnh thông qua nạp chồng hàm/toán tử; đa hình động thông qua hàm ảo virtual).
    • Các mốc tiêu chuẩn hóa quốc tế của C++: ISO/IEC 14882:1998, ISO/IEC 14882:2003 và C++11 (ISO/IEC 14882:2011).

Kỹ năng phát triển

  • Kỹ năng kỹ thuật (Technical skills):
    • Soạn thảo, tổ chức dự án dạng Console Application, biên dịch (phím tắt F9), chạy chương trình (Ctrl + F10) và thoát (Ctrl + Q) trên phần mềm CodeBlocks.
    • Khai báo không gian tên (using namespace std; hoặc toán tử định phạm vi std::).
    • Xử lý định dạng chuỗi và giải quyết hiện tượng trôi lệnh nhập liệu khi có ký tự khoảng trắng thông qua hàm getline().
  • Kỹ năng phân tích thuật toán (Analytical skills):
    • Mô hình hóa bài toán từ mô tả toán học sang sơ đồ khối điều khiển.
    • Phân tích điều kiện logic phức tạp, ví dụ: kiểm tra điểm $M(x, y)$ thuộc hình tròn tâm $I(a, b)$ bán kính $R$ bằng biểu thức sqrt((x-a)*(x-a) + (y-b)*(y-b)) <= R, hoặc điều kiện chia hết đồng thời ((M % 3 == 0) && (N % 3 == 0)) || ((M % 3 != 0) && (N % 3 != 0)).
  • Năng lực thực hành lập trình (Practical competencies):
    • Cài đặt các thuật toán cơ bản: giải phương trình bậc hai $ax^2 + bx + c = 0$ (tính biệt thức $D = b^2 - 4ac$), thuật toán tìm ước chung lớn nhất (UCLN) bằng phương pháp trừ liên tiếp của Euclid, thuật toán kiểm tra bộ ba số Pi-ta-go ($a^2 = b^2 + c^2$ hoặc hoán vị tương đương).
    • Đánh giá và kiểm thử chương trình với các bộ dữ liệu biên (ví dụ: phương trình vô nghiệm $a=1, b=1, c=1$; bộ số Pi-ta-go $a=3, b=4, c=5$ và $a=700, b=1000, c=800$).

Phương pháp giảng dạy và học tập

Giáo trình áp dụng phương pháp sư phạm diễn dịch kết hợp trực quan hóa và đối chiếu thực nghiệm:

  1. Mô hình hóa khái niệm qua ví dụ đời sống:
    • Minh họa cơ chế thông dịch và biên dịch bằng tình huống giao tiếp: người phiên dịch dịch từng câu thoại luân phiên (thông dịch) so với dịch toàn bộ văn bản giới thiệu viết sẵn ra giấy để lưu trữ (biên dịch).
    • Minh họa cấu trúc rẽ nhánh mệnh đề thiếu và mệnh đề đủ thông qua tình huống hẹn gặp khi trời mưa hoặc không mưa giữa hai nhân vật Châu và Ngọc.
  2. Phương pháp trực quan qua sơ đồ khối:
    • Tất cả các cấu trúc điều khiển rẽ nhánh (Hình 4, Hình 5, Hình 6), cấu trúc lặp tính tổng chuỗi phân số (Hình 8), cấu trúc tìm ước chung lớn nhất (Hình 9), và cấu trúc lặp repeat-until đều được chuẩn hóa bằng sơ đồ khối chuẩn với các nhánh rẽ Đúng/Sai rõ ràng.
  3. Hệ thống bài tập và thực hành theo quy trình mẫu:
    • Bài tập và thực hành 1: Hướng dẫn quy trình 8 bước từ tạo project, gõ mã nguồn giải phương trình bậc hai (sử dụng thư viện math.h), nhấn F9 gỡ lỗi, kiểm thử với các bộ số $(1; -3; 2)$, $(1; 0; -2)$, sửa đổi chương trình triệt tiêu biến trung gian $D$, và kiểm thử trường hợp vô nghiệm $(1; 1; 1)$.
    • Bài tập và thực hành 2: Cài đặt bài toán kiểm tra bộ số Pi-ta-go với các kiểu dữ liệu số nguyên lớn long long, thực hành tối ưu phép gán lũy thừa a2 *= a;.
    • Hệ thống bài toán thuật toán đa dạng: Bài toán cổ "Vừa gà vừa chó" (hệ phương trình tuyến tính nghiệm nguyên), bài toán tính lãi suất gửi tiết kiệm không kỳ hạn theo tháng, thuật toán lặp Newton tính căn bậc hai tiệm cận $|X_{n+1} - X_n| < 0.00001$.
  4. Phương pháp đánh giá và tự học:
    • Đánh giá qua các câu hỏi kiểm tra lý thuyết (so sánh while và for, phân biệt tên chuẩn và tên dành riêng, phát hiện lỗi cú pháp biểu diễn hằng như 150.06E-15, 'C, 'TRUE').
    • Tự học thông qua phần khung "Tóm tắt" ở cuối mỗi bài học và hệ thống bài đọc thêm tra cứu lịch sử, tiêu chuẩn C++ và các lệnh nhảy luồng.

Điểm nổi bật và cập nhật

  • Chuyển đổi hệ hình ngôn ngữ giảng dạy: Giáo trình phản ánh bước chuyển từ giảng dạy Pascal truyền thống sang ngôn ngữ C++, song song duy trì bảng đối chiếu cú pháp giữa hai ngôn ngữ (như so sánh write/writeln với cout, read/readln với cin, const Pascal với const C++, khối lệnh begin...end với cặp ngoặc nhọn {...}).
  • Cập nhật tiêu chuẩn C++ và hệ sinh thái thư viện: Tài liệu dẫn nhập các tiêu chuẩn ISO của ngôn ngữ C++ từ ISO/IEC 14882:1998, phiên bản sửa đổi 2003 đến tiêu chuẩn C++11 (ISO/IEC 14882:2011). Giới thiệu tổng quan về Thư viện Tiêu bản Chuẩn (STL - Standard Template Library), các cấu trúc thùng chứa (vector, danh sách liên kết), biến lặp (iterator), cùng các thư viện mở rộng như Boost và dự án STLPort.
  • Tích hợp lịch sử khoa học máy tính và công nghệ:
    • Ghi nhận công trình của Ada Augusta Byron Lovelace và Charles Babbage trên máy giải tích Analytical Engine, đặt nền móng cho khái niệm chương trình con, vòng lặp và chuyển điều khiển có điều kiện.
    • Phân tích lịch sử phát triển của các ngôn ngữ lập trình chủ chốt: FORTRAN (1950), COBOL (1959), ALGOL (1958), LISP của John McCarthy tại MIT (1958), BASIC của John Kemeny và Thomas Kurtz (1963), PASCAL của Niklaus Wirth (1970), C của Dennis Ritchie tại Bell Labs (1972), C++ của Bjarne Stroustrup (1983) và Java của James Gosling tại Sun Microsystems (1991).
  • Minh họa ứng dụng thực tế trong công nghiệp phần mềm:
    • Chỉ rõ nguồn gốc ra đời của ngôn ngữ C gắn liền với việc xây dựng hệ điều hành UNIX trên máy PDP-7 và PDP-11.
    • Trích dẫn các phần mềm công nghiệp được xây dựng bằng các ngôn ngữ trong tài liệu: Hệ điều hành Windows, hệ thống tìm kiếm Google viết bằng C++; phần lớn hệ điều hành Macintosh viết bằng Pascal; hệ sắp chữ học thuật TeX được Donald Knuth phát triển dựa trên các yếu tố của Pascal.

Đối tượng sử dụng giáo trình

  • Cấp độ và đối tượng người học:
    • Học sinh khối lớp 11 hệ Trung học phổ thông theo chương trình Tin học phân môn lập trình.
    • Sinh viên năm thứ nhất thuộc các ngành Công nghệ thông tin, Kỹ thuật phần mềm, Hệ thống thông tin, Sư phạm Tin học tại các trường đại học, cao đẳng trong học phần Nhập môn lập trình / Cơ sở lập trình.
  • Kiến thức tiên quyết (Prerequisites):
    • Kiến thức toán học phổ thông: Đại số giải phương trình bậc hai, phép chia nguyên và lấy phần dư (div, mod hoặc %), các hàm lượng giác và mũ, hệ thức lượng hình học, logic mệnh đề.
    • Kỹ năng sử dụng máy tính cơ bản: Thao tác tệp tin, bàn phím, sử dụng bộ ký tự ASCII và cài đặt phần mềm.
  • Ứng dụng đối với giảng viên:
    • Cung cấp khung phân phối bài học chi tiết gồm lý thuyết, ví dụ mã nguồn mẫu, hệ thống bài tập thực hành từng bước và bài tập kiểm tra đánh giá cuối chương.
    • Cung cấp ngữ liệu để xây dựng giáo án thực hành lập trình trên môi trường CodeBlocks / Dev-C++.
  • Ứng dụng cho tự học và tra cứu:
    • Cung cấp bảng tra cứu nhanh kích thước byte và phạm vi kiểu dữ liệu, danh sách ký tự escape sequence, bảng độ ưu tiên toán tử và các cú pháp rẽ nhánh, lặp chuẩn mực.

Câu hỏi thường gặp

1. Giáo trình này phù hợp với ai?

Tài liệu được thiết kế cho người bắt đầu học lập trình, bao gồm học sinh THPT (lớp 11), sinh viên năm thứ nhất các khối ngành kỹ thuật/công nghệ thông tin, và những người cần tài liệu hệ thống hóa các nguyên lý lập trình cấu trúc cơ bản trên nền tảng C++.

2. Cần kiến thức nền nào để học giáo trình này?

Người học chỉ cần nắm vững kiến thức toán học phổ thông (đại số cơ bản, logic mệnh đề, các phép biến đổi toán học thông thường) và kỹ năng sử dụng máy tính cơ bản. Giáo trình không yêu cầu người học phải có hiểu biết trước về bất kỳ ngôn ngữ lập trình nào.

3. Điểm khác biệt của tài liệu so với các giáo trình lập trình thông thường là gì?

Tài liệu tích hợp song song cú pháp C++ hiện đại trên IDE CodeBlocks với cú pháp Pascal truyền thống, giúp người đọc nắm bắt bản chất thuật toán độc lập với ngôn ngữ. Ngoài ra, giáo trình đính kèm hệ thống tư liệu lịch sử tin học chuẩn xác và các bài đọc chuyên đề về tiêu chuẩn ISO C++, thư viện STL và nguyên lý lập trình hướng đối tượng.

4. Làm sao để tự học và thực hành hiệu quả theo giáo trình?

Người học nên tuân thủ quy trình:

  1. Đọc và phân tích sơ đồ khối thuật toán trước khi viết mã nguồn.
  2. Cài đặt môi trường CodeBlocks, tự gõ lại toàn bộ các chương trình mẫu trong bài học (không sao chép).
  3. Sử dụng phím F9 để biên dịch, quan sát thông báo lỗi cú pháp để tự sửa lỗi.
  4. Thực hiện đầy đủ các bước kiểm thử với các bộ dữ liệu mẫu được đưa ra trong các bài thực hành (như Bài tập và thực hành 1, 2).

5. Có những tài liệu bổ trợ nào được tích hợp trong giáo trình?

Giáo trình tích hợp sẵn 4 bài đọc thêm chuyên đề:

  • Bài đọc 1: Lịch sử về Ada Lovelace và chiếc máy giải tích Analytical Engine.
  • Bài đọc 2: Lịch sử C++, tiêu chuẩn ISO/IEC 14882 và cấu trúc thư viện STL của Bjarne Stroustrup.
  • Bài đọc 3: Cú pháp câu lệnh rẽ nhánh nhiều phương án case-of và vòng lặp repeat-until.
  • Bài đọc 4: Hướng dẫn chi tiết cú pháp và cơ chế hoạt động của các câu lệnh nhảy luồng break, continue, goto, exit.

Kết luận

Giáo trình Tin học lập trình C++ (Trường THPT Chu Văn An - Thanh Hóa) cung cấp một cấu trúc học tập hoàn chỉnh về lập trình cấu trúc, từ cơ chế chương trình dịch, kiểu dữ liệu, biểu thức đến các cấu trúc điều khiển rẽ nhánh và lặp.

Lộ trình học tập đề xuất:

$$\text{Chương I: Lý thuyết cơ sở & Chương trình dịch} \longrightarrow \text{Chương II: Dữ liệu, Biểu thức, I/O & CodeBlocks} \longrightarrow \text{Chương III: Cấu trúc Rẽ nhánh & Lặp}$$

Tài nguyên bổ trợ đi kèm bao gồm các bài đọc chuyên sâu về tiêu chuẩn C++11, thư viện tiêu bản chuẩn (STL), và hệ thống bài tập thực nghiệm thuật toán trên môi trường CodeBlocks, tạo nền tảng vững chắc cho các học phần lập trình nâng cao và cấu trúc dữ liệu tiếp theo.