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

Giáo trình Lập trình căn bản (Basic Programming) được biên soạn bởi Thạc sĩ Nguyễn Văn Hiếu, thuộc Khoa Công nghệ thông tin – Trường Đại học Sư phạm Kỹ thuật Vĩnh Long, xuất bản năm 2017. Trong chương trình đào tạo trình độ đại học chuyên ngành Công nghệ thông tin, môn học Lập trình căn bản đóng vai trò là học phần cơ sở ngành bắt buộc, cung cấp nền tảng đầu tiên về tư duy máy tính, phương pháp xây dựng giải thuật và kỹ thuật lập trình có cấu trúc.

Mục tiêu học tập (learning outcomes) của giáo trình nhằm trang bị cho người học:

  • Khái niệm cơ bản về lập trình, quy trình xử lý dữ liệu và cấu trúc của một giải thuật trên máy tính.
  • Cú pháp, ngữ nghĩa, hệ thống kiểu dữ liệu và các cấu trúc điều khiển trong ngôn ngữ lập trình C/C++.
  • Kỹ thuật tổ chức dữ liệu thông qua kiểu mảng, chuỗi ký tự, kiểu cấu trúc (struct) và kiểu tập tin.
  • Kỹ thuật module hóa chương trình bằng hàm và cơ chế quản lý bộ nhớ thông qua con trỏ.

Giáo trình được xây dựng theo đề cương chi tiết môn học Lập trình căn bản của Khoa Công nghệ thông tin – Trường Đại học Sư phạm Kỹ thuật Vĩnh Long. Cấu trúc nội dung bao gồm 7 chương được sắp xếp theo trình tự phát triển từ cơ bản đến nâng cao. Về mặt học thuật, tài liệu được biên soạn đối chiếu và tham khảo trực tiếp từ tác phẩm "C++ Program Design – An Introduction to Programming and Object-Oriented Design" của hai tác giả James P. Cohoon và Jack W. Davidson, kết hợp kinh nghiệm giảng dạy thực tế của tập thể giảng viên trong khoa. Điểm đặc thù của giáo trình là sự cô đọng, tiếp cận trực tiếp vào các quy tắc ngữ pháp của C++, kết hợp biểu đồ lưu đồ thuật toán và các ví dụ mã nguồn thực thi cụ thể trên môi trường Dev-C++.


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

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

Toàn bộ giáo trình được phân chia thành 7 chương trọng tâm:

  1. Chương 1: Tổng quan về ngôn ngữ C++: Trình bày định nghĩa về lập trình, giải thuật, các đặc tính của giải thuật; giới thiệu công cụ mô tả giải thuật gồm ngôn ngữ giả và lưu đồ (flowchart); hệ thống ký tự La-tinh, từ khóa (asm, break, case, char, float, int, struct, switch, while...), quy tắc đặt tên và cú pháp chú thích (//, /* */); cấu trúc chương trình C++ với hàm main(), thư viện <iostream>, <stdio.h>, định dạng dữ liệu với <iomanip>, hệ thống kiểu dữ liệu cơ bản, khai báo hằng (#define, const), biến số, toán tử số học, toán tử logic, toán tử so sánh, cơ chế ép kiểu và các hàm thông dụng trong <math.h>, <ctype.h>.
  2. Chương 2: Các cấu trúc điều khiển: Cung cấp cú pháp, lưu đồ giải thuật và cách thức thực hiện của cấu trúc rẽ nhánh if, if...else, cấu trúc chọn lựa switch...case, lệnh nhảy goto; các cấu trúc lặp cơ bản gồm for (bao gồm for lồng nhau), while, do...while; các lệnh điều khiển luồng thực thi trong vòng lặp gồm break và continue.
  3. Chương 3: Dữ liệu kiểu mảng: Định nghĩa về mảng (tập hợp các phần tử cùng kiểu dữ liệu, lưu trữ trên các ô nhớ liên tục gọi là danh sách đặc); phân loại mảng một chiều (vector) và mảng nhiều chiều; quy tắc đánh chỉ số bắt đầu từ 0; cú pháp khai báo, khởi tạo và truy xuất các phần tử mảng.
  4. Chương 4: Dữ liệu kiểu chuỗi: Cung cấp kiến thức về mảng ký tự, quy tắc kết thúc chuỗi bằng ký tự rỗng, các phương thức nhập chuỗi (cin.getline(), gets()), xử lý bộ nhớ đệm (cin.ignore()) và các thao tác trên chuỗi ký tự.
  5. Chương 5: Con trỏ và hàm: Cơ chế địa chỉ ô nhớ, toán tử lấy địa chỉ, toán tử giải tham chiếu; quy tắc xây dựng hàm, truyền tham số theo giá trị và tham chiếu, phạm vi hoạt động của biến trong hàm.
  6. Chương 6: Dữ liệu kiểu cấu trúc: Định nghĩa kiểu dữ liệu người dùng tự định nghĩa (struct), kết hợp nhiều trường dữ liệu có kiểu khác nhau để quản lý thực thể phức hợp.
  7. Chương 7: Dữ liệu kiểu tập tin: Cơ chế xuất nhập dữ liệu ngoại vi, các thao tác đọc và ghi dữ liệu trên tập tin văn bản và tập tin nhị phân.

Logic phát triển nội dung đi từ việc làm quen với mô hình ngôn ngữ và các câu lệnh tuần tự, tiến tới các cấu trúc rẽ nhánh và vòng lặp nhằm xử lý luồng logic, sau đó chuyển sang việc trừu tượng hóa và tổ chức dữ liệu từ đơn giản (biến đơn, mảng một chiều) đến phức tạp (chuỗi, cấu trúc, con trỏ, tập tin).

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

  • Lý thuyết giải thuật: Xác định 4 đặc tính bắt buộc của một thuật toán: tính hữu hạn (kết thúc sau số bước nhất định), tính khả thi (máy tính chấp nhận và thực hiện được), tính vét cạn (xét hết mọi trường hợp), và tính tổng quát (áp dụng cho mọi bài toán cùng dạng). Tiêu chí đánh giá một giải thuật tốt bao gồm: tính đơn giản, dễ hiểu, tiết kiệm vùng nhớ và thời gian thực hiện nhanh.
  • Hệ thống kiểu dữ liệu chuẩn (Bảng 1.1): Phân định rõ ràng dung lượng lưu trữ và miền giá trị trên hệ thống PC:
    • Luận lý: bool (1 byte, giá trị true/false).
    • Ký tự: char / signed char (1 byte, miền giá trị -128 đến 127, theo bảng mã ASCII), unsigned char (1 byte, 0 đến 255).
    • Số nguyên: int / short (2 bytes, -32.768 đến 32.767), unsigned int (2 bytes, 0 đến 65.535), long / long int (4 bytes, $-2^{31}$ đến $2^{31}-1$), unsigned long (4 bytes, 0 đến $2^{32}-1$).
    • Số thực: float (4 bytes, $3.4 \times 10^{-38}$ đến $3.4 \times 10^{38}$), double (8 bytes, $1.7 \times 10^{-308}$ đến $1.7 \times 10^{308}$), long double (10 bytes, $3.1 \times 10^{-4932}$ đến $3.1 \times 10^{4932}$).
  • Nguyên lý thực thi biểu thức: Quy tắc thứ tự ưu tiên của toán tử (ngoặc tròn $\rightarrow$ toán tử 1 ngôi $\rightarrow$ số học $\rightarrow$ so sánh và logic $\rightarrow$ phép gán); cơ chế đánh giá biểu thức logic ngắn mạch (short-circuit evaluation); quy tắc chuyển đổi kiểu tự động từ thấp lên cao (char $\leftrightarrow$ int $\rightarrow$ long int $\rightarrow$ float $\rightarrow$ double) và kỹ thuật ép kiểu tường minh (tên_kiểu)biểu_thức.

Kỹ năng phát triển

  • Kỹ năng kỹ thuật (Technical skills): Cài đặt và vận hành các môi trường phát triển tích hợp (Dev-C++, Borland C++, Turbo C); sử dụng tổ hợp phím biên dịch Ctrl-F9 để phát hiện lỗi cú pháp thông qua cửa sổ Compiler và thực thi chương trình bằng Ctrl-F10.
  • Kỹ năng phân tích (Analytical skills): Khả năng mô hình hóa bài toán thực tế thành các bước logic bằng ngôn ngữ giả và vẽ lưu đồ cú pháp chuẩn quy định (khối elip: Bắt đầu/Kết thúc; hình bình hành: Nhập/Xuất; hình chữ nhật: Thi hành; hình thoi: Điều kiện/Lựa chọn; hình chữ nhật đôi: Chương trình con; hình tròn: Nối).
  • Kỹ năng thực hành giải quyết vấn đề: Lập trình cài đặt các thuật toán toán học cổ điển, bao gồm: giải phương trình bậc hai ($ax^2 + bx + c = 0$), thuật toán Euclide tìm ước chung lớn nhất (UCLN), thuật toán kiểm tra số nguyên tố, phân tích số thành thừa số nguyên tố, tính số hạng dãy Fibonacci, tính số $e$ hoặc giá trị $e^x$ theo chuỗi Taylor với ngưỡng sai số Epsilon.

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

Giáo trình áp dụng phương pháp tiếp cận sư phạm đi từ lý thuyết hình thức đến trực quan hóa bằng lưu đồ, sau đó cụ thể hóa qua mã nguồn mẫu và kết thúc bằng hệ thống bài tập tự giải. Đối với mỗi cấu trúc ngữ pháp mới, giáo trình đều trình bày: cú pháp chuẩn, cơ chế vận hành của máy tính, phân tích các trường hợp biên và chỉ ra các lỗi lập trình phổ biến (như viết lồng cặp chú thích /* */, nhầm lẫn giữa toán tử gán = và toán tử so sánh ==, hoặc quên lệnh ngắt break trong cấu trúc switch).

+-------------------------------------------------------------------------+
|                  QUY TRÌNH SƯ PHẠM TRONG MỖI CHỦ ĐỀ                     |
|                                                                         |
|  [Định nghĩa lý thuyết]                                                 |
|  [Mô hình hóa cú pháp & Lưu đồ Flowchart]                               |
|  [Mã nguồn minh họa (Dev-C++) & Phân tích lỗi biên]                     |
|  [Hệ thống bài tập lập trình phân tầng (Số học -> Xử lý dữ liệu)]       |
+-------------------------------------------------------------------------+

Hệ thống bài tập và case studies trong tài liệu được thiết kế bám sát các tình huống thực tiễn và bài toán logic:

  • Bài toán ứng dụng thực tế: Chương trình in bảng định dạng chi tiêu sinh viên bằng các cờ điều khiển setw(), setprecision(); chương trình tính chỉ số thể trạng Pignet ($\text{Pignet} = \text{chiều cao} - [\text{vòng ngực trung bình} + \text{trọng lượng}]$); chương trình tính tiền lương nhân viên theo hệ số; chương trình kiểm tra năm nhuận ($n \pmod 4 == 0 \land n \pmod{100} \neq 0 \lor n \pmod{400} == 0$).
  • Bài toán giải thuật cổ điển: Bài toán cổ dân gian "vừa gà vừa chó, 36 con, 100 chân chẵn" sử dụng 2 vòng lặp for lồng nhau; bài toán tổ hợp đổi 100$ thành các tờ tiền mệnh giá 10$, 20$, 50$; bài toán vẽ hình học bằng ký tự (tam giác ký tự @, hình chữ nhật dấu *).
  • Phương pháp kiểm tra, đánh giá: Giáo trình hướng dẫn việc kiểm tra mã nguồn bằng cách chạy từng trường hợp thử nghiệm (test cases) tại cửa sổ Console, gỡ lỗi dựa trên thông báo lỗi tại dòng con trỏ của trình biên dịch.
  • Chỉ dẫn tự học: Sinh viên được yêu cầu thực hiện đầy đủ quy trình: xác định dữ liệu đầu vào (Input) và đầu ra (Output) $\rightarrow$ phác thảo giải thuật bằng ngôn ngữ giả trên giấy $\rightarrow$ gõ mã nguồn $\rightarrow$ biên dịch sửa lỗi $\rightarrow$ kiểm thử chương trình.

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

  • Kế thừa khung tham chiếu chuẩn quốc tế: Giáo trình được biên soạn dựa trên cấu trúc của giáo trình chuẩn "C++ Program Design – An Introduction to Programming and Object-Oriented Design" (James P. Cohoon & Jack W. Davidson), đảm bảo tính chính xác về mặt học thuật và thuật ngữ chuyên ngành.
  • Tích hợp hai phong cách lập trình C và C++: Giáo trình hướng dẫn song song cả cú pháp hướng đối tượng nhập/xuất luồng của C++ chuẩn thông qua cin, cout, thư viện <iostream>, không gian tên namespace std, lẫn các phương thức nhập xuất cổ điển từ ngôn ngữ C như printf, scanf thông qua thư viện <stdio.h>.
  • Kỹ thuật định dạng đầu ra chi tiết: Hướng dẫn sử dụng các hàm điều khiển định dạng trong thư viện <iomanip> như setw(n) (thiết lập độ rộng cột màn hình), setprecision(n) (thiết lập số chữ số có nghĩa và làm tròn), setiosflags(ios::showpoint) (cố định định dạng dấu thập phân trên nhiều dòng).
  • Xử lý triệt để các vấn đề vào/ra vùng nhớ đệm: Phân tích hiện tượng trôi lệnh khi nhập dữ liệu ký tự hoặc chuỗi ký tự sau các lệnh nhập số (cin >>), cung cấp giải pháp xử lý kỹ thuật bằng phương thức cin.ignore(1), cin.get(c), cin.getline(s, n) và gets(st).
  • Tính thực tế trong các ví dụ minh họa: Các đoạn mã nguồn đi kèm các bài toán cụ thể như kiểm tra số chính phương bằng hàm sqrt() kết hợp ép kiểu int(x) == x, thuật toán trừ liên tiếp tìm ước số chung Euclide, giúp người học nắm bắt trực tiếp bản chất tính toán của bộ xử lý.

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

Nhóm đối tượng Mục đích và phương thức sử dụng Điều kiện tiên quyết (Prerequisites)
Sinh viên chuyên ngành Công nghệ thông tin Sử dụng làm tài liệu học tập và nghiên cứu chính thức cho học phần Lập trình căn bản (thường bố trí ở học kỳ 1 hoặc học kỳ 2 năm thứ nhất). Kiến thức toán học phổ thông (đại số, phương trình bậc hai, số học cơ bản); kỹ năng thao tác cơ bản trên máy tính.
Sinh viên các ngành kỹ thuật liên quan Sử dụng làm tài liệu tham khảo cho các môn học về cơ sở tin học, kỹ thuật lập trình hoặc tự động hóa. Kỹ năng sử dụng máy tính, tư duy logic cơ bản.
Người tự học lập trình Tiếp cận hệ thống khái niệm chuẩn về lập trình C++, rèn luyện kỹ năng viết mã nguồn từ cấp độ cơ sở. Khả năng tự đọc tài liệu và cài đặt các phần mềm IDE (Dev-C++).
Giảng viên các trường đại học/cao đẳng Dùng làm tài liệu tham khảo để biên soạn đề cương bài giảng, thiết kế ngân hàng bài tập thực hành phòng máy và đề thi đánh giá học phần. Nắm vững chương trình khung đào tạo ngành Công nghệ thông tin.

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

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

Giáo trình được biên soạn phục vụ trực tiếp cho sinh viên chuyên ngành Công nghệ thông tin tại Trường Đại học Sư phạm Kỹ thuật Vĩnh Long. Đồng thời, cấu trúc tài liệu được thiết kế cô đọng, phù hợp cho sinh viên các chuyên ngành kỹ thuật khác và người mới bắt đầu tiếp cận môn lập trình máy tính.

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

Người học không cần có kiến thức lập trình từ trước. Yêu cầu tiên quyết bao gồm kiến thức toán học phổ thông (như giải phương trình, tính chu vi diện tích hình học, các phép tính số học, logic học cơ bản) và kỹ năng sử dụng máy vi tính cơ bản để cài đặt và chạy các phần mềm soạn thảo mã nguồn.

3. Điểm khác biệt của giáo trình này là gì?

Tài liệu kết hợp giữa khung chương trình đào tạo thực tế của Khoa CNTT – ĐHSPKT Vĩnh Long với cấu trúc học thuật của tài liệu chuẩn quốc tế từ James P. Cohoon và Jack W. Davidson. Mọi cấu trúc điều khiển đều có lưu đồ giải thuật (flowchart) đi kèm mã nguồn tương ứng, chú trọng phân tích cơ chế cấp phát bộ nhớ (byte) và miền giá trị của từng kiểu dữ liệu.

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

Người học nên tuân thủ quy trình: đọc lý thuyết $\rightarrow$ vẽ lưu đồ cú pháp $\rightarrow$ tự viết chương trình trên giấy $\rightarrow$ gõ mã nguồn vào môi trường Dev-C++ $\rightarrow$ thực hiện dịch (Ctrl-F9) và chạy thử (Ctrl-F10). Hoàn thành toàn bộ hệ thống 15–20 bài tập lập trình được cung cấp ở cuối mỗi chương.

5. Có tài liệu bổ trợ nào đi kèm giáo trình?

Giáo trình sử dụng kèm các môi trường phát triển tích hợp mã nguồn C/C++ như Dev-C++, Borland C++, Turbo C và các thư viện chuẩn của C/C++ (iostream, iomanip, math.h, ctype.h, stdio.h, conio.h). Người học có thể tham khảo thêm quyển "C++ Program Design – An Introduction to Programming and Object-Oriented Design" để mở rộng kiến thức thiết kế chương trình hướng đối tượng.


Kết luận

Giáo trình Lập trình căn bản của Th.S Nguyễn Văn Hiếu cung cấp hệ thống kiến thức nền tảng hoàn chỉnh về cấu trúc dữ liệu cơ sở và giải thuật lập trình trên ngôn ngữ C++. Tài liệu định hình phương pháp tư duy khoa học thông qua việc phân tích bài toán, thiết lập lưu đồ và hiện thực hóa thuật toán bằng mã nguồn máy tính.

Lộ trình học tập khuyến nghị bắt đầu từ việc nắm vững bảng ký tự, hệ thống kiểu dữ liệu, các toán tử và hàm toán học tại Chương 1; thực hành thuần thục các cấu trúc rẽ nhánh if, switch và các cấu trúc lặp for, while, do...while tại Chương 2; sau đó triển khai tổ chức dữ liệu danh sách đặc với mảng một chiều, mảng nhiều chiều và chuỗi tại Chương 3, Chương 4; cuối cùng hoàn thiện kỹ năng module hóa và quản trị dữ liệu thông qua con trỏ, hàm, cấu trúc struct và tệp tin ở các Chương 5, 6 và 7. Để mở rộng kiến thức, người học nên kết hợp thực hành trên phần mềm Dev-C++ và đối chiếu nội dung từ các giáo trình tham khảo chuyên sâu của James P. Cohoon và Jack W. Davidson.