THÔNG TIN THƯ MỤC VÀ NỘI DUNG GIÁO TRÌNH: BÀI GIẢNG KỸ THUẬT LẬP TRÌNH
- Tên tài liệu: Bài giảng Kỹ thuật lập trình
- Tác giả biên soạn: ThS. Trần Xuân Thanh
- Đơn vị công tác: Khoa Công nghệ Thông tin – Trường Đại học Thành Đô
- Ngôn ngữ giảng dạy / minh họa: C++ (kế thừa nền tảng C)
- Tiêu chuẩn ngôn ngữ tham chiếu: ISO/IEC 14882:1998, ISO/IEC 14882:2003 và định hướng C++0x
Tổng quan về giáo trình
Bài giảng Kỹ thuật lập trình do ThS. Trần Xuân Thanh (Khoa Công nghệ Thông tin, Trường Đại học Thành Đô) biên soạn là tài liệu học tập dành cho khối ngành Công nghệ Thông tin ở cấp độ đại học. Môn học Kỹ thuật lập trình giữ vị trí môn cơ sở ngành then chốt trong chương trình đào tạo, đóng vai trò cầu nối chuyển tiếp từ kiến thức nhập môn máy tính sang kỹ năng thiết kế thuật toán và hiện thực hóa giải thuật trên các ngôn ngữ lập trình bậc cao.
Mục tiêu học tập của giáo trình được thiết lập nhằm cung cấp cho người học:
- Hệ thống khái niệm cơ bản về tương quan giữa phần cứng và phần mềm, các mô hình vòng đời sản xuất phần mềm và phương pháp luận lập trình.
- Bản chất của thuật toán, các tính chất kỹ thuật và công cụ toán học để đánh giá độ phức tạp thuật toán qua các ký hiệu tiệm cận ($O$, $\Omega$, $\Theta$).
- Cú pháp, hệ thống kiểu dữ liệu, các toán tử, cấu trúc điều khiển (rẽ nhánh, lặp) và kỹ thuật quản trị bộ nhớ cơ bản thông qua mảng và xâu ký tự trong ngôn ngữ C++.
Giáo trình lựa chọn cách tiếp cận diễn dịch và có cấu trúc (top-down approach). Nội dung mở đầu từ bức tranh tổng thể của hệ thống tính toán, thu hẹp dần vào logic giải quyết vấn đề, sau đó đi sâu vào từng thành phần cú pháp chi tiết của ngôn ngữ C++. Điểm đặc sắc của giáo trình nằm ở tính chuẩn hóa học thuật: kết hợp chặt chẽ giữa lý thuyết kỹ nghệ phần mềm (Software Engineering) với các tiêu chuẩn quốc tế của ngôn ngữ C++ (ISO/IEC), đồng thời giải thích rõ ràng cơ chế vận hành ở mức nhị phân, bộ nhớ và bảng mã của máy tính.
Nội dung kiến thức cốt lõi
BÀI GIẢNG KỸ THUẬT LẬP TRÌNH
Chương 1 Chương 2 Chương 3 Chương 4 Chương 5
Nhập môn Máy tính Kiểu dữ liệu, Thành phần Cấu trúc Cấu trúc lặp &
& Lập trình Toán tử & căn bản khác rẽ nhánh Dữ liệu mảng,
Phát biểu của C++ xâu ký tự
Các chương/chủ đề chính
Nội dung bài giảng được tổ chức thành các chương mang tính kế thừa logic:
- Chương 1: Nhập môn về máy tính và lập trình:
- Khái quát phần cứng (CPU, Bus, BIOS, bộ nhớ, thiết bị Vào/Ra) và phân loại phần mềm (phần mềm hệ thống, phần mềm ứng dụng, phần mềm dịch mã gồm trình biên dịch và trình thông dịch).
- Quy trình tạo phần mềm và các mô hình phát triển: Mô hình thác nước (Waterfall), Mô hình tiến hóa (thăm dò, tạo mẫu), Mô hình xoắn ốc Boehm (1988), và Các quy trình linh hoạt (Extreme Programming - XP).
- Phân loại ngôn ngữ lập trình theo hệ hình tư duy: Lập trình logic (LTL), Lập trình hàm (Functional), Lập trình có cấu trúc (Structural), Lập trình song song (Concurrent), Lập trình hướng đối tượng (OOP - bắt nguồn từ ngôn ngữ Simula năm 1965 của Ole-Johan Dahl và Kristen Nygaard), Lập trình hướng thành phần và Lập trình hướng Agent.
- Bản chất giải thuật, 5 tính chất cốt lõi (chính xác, rõ ràng, khách quan, phổ dụng, kết thúc) và phương pháp đánh giá độ phức tạp tính toán thông qua tiệm cận $O$-lớn, $\Omega$, $\Theta$ cho các lớp độ phức tạp hằng số $O(1)$, tuyến tính $O(n)$, đa thức $O(n^2)$, và hàm mũ $O(2^n)$.
- Chương 2: Kiểu dữ liệu, toán tử và phát biểu:
- Lịch sử phát triển C++ do Bjarne Stroustrup (Bell Labs) xây dựng từ nền tảng "C with classes", tiêu chuẩn ISO/IEC 14882:1998, ISO/IEC 14882:2003 và thư viện tiêu bản chuẩn (STL).
- Cú pháp chú thích một dòng (
//) bắt nguồn từ ngôn ngữ BCPL và chú thích khối (/* ... */). - Khái niệm biến, định danh, vùng nhớ, vòng đời của biến và cú pháp khai báo biến.
- Các kiểu dữ liệu cơ bản: Kiểu ký tự
char(1 byte, biểu diễn mã ASCII 256 ký tự chia làm 3 nhóm: điều khiển, văn bản, đồ họa; phân biệtsigned charvàunsigned char), kiểu nguyên (int2 bytes,long4 bytes), kiểu thực (float4 bytes,double8 bytes,long double10 bytes) và kiểuvoid. - Hệ thống toán tử C++: Toán tử số học (
+,-,*,/,%,++,--), toán tử quan hệ (>,<,==,!=...), toán tử logic (&&,||,!), toán tử bitwise (&,|,^,~,>>,<<), toán tử con trỏ (&lấy địa chỉ,*lấy giá trị), toán tử phẩy (,) và bảng thứ bậc ưu tiên. - Cấu trúc một chương trình C++ hoàn chỉnh (chỉ thị tiền xử lý, định nghĩa kiểu
typedef, prototype hàm, hàmmain()).
- Chương 3: Các thành phần căn bản khác của C++:
- Toán tử gán và nhóm toán tử gán phức hợp (
+=,-=,*=,/=,%=...). - Xuất nhập chuẩn qua dòng dữ liệu: Đối tượng
cin(toán tử trích xuất>>) vàcout(toán tử chèn<<) trong<iostream.h>, kỹ thuật xử lý xóa bộ đệm bàn phím bằngfflush(stdin)hoặccin.clear(). - Khai báo hằng số bằng
#define, các định dạng hằng nguyên hệ 8 (tiền tố0), hệ 16 (tiền tố0x), hằng ký tự escape và hằng xâu ký tự. - Ứng dụng các thư viện chuẩn:
<math.h>(abs,sqrt,pow,exp,log,sin,cos...),<string.h>(strcpy,strncpy,strcat,strlen,strcmp,stricmp,strchr,strstr,memset),<stdlib.h>(atoi,atof,atol,exit).
- Toán tử gán và nhóm toán tử gán phức hợp (
- Chương 4: Các cấu trúc rẽ nhánh:
- Khái niệm khối lệnh
{ }. - Cấu trúc điều kiện
if,if-else,if-elselồng nhau. - Cấu trúc đa nhánh
switch-case-defaultvà cơ chế ngắt luồng bằng lệnhbreak. - Toán tử điều kiện ba ngôi
? :. - Định nghĩa và thiết lập kiểu dữ liệu liệt kê
enum.
- Khái niệm khối lệnh
- Chương 5: Các cấu trúc lặp:
- Các dạng vòng lặp cơ bản:
while(tiền kiểm tra),for(lặp xác định với 3 thành phần: khởi tạo, điều kiện, bước tăng),do-while(hậu kiểm tra, luôn thực thi ít nhất một lần). - Vòng lặp lồng nhau và các lệnh điều khiển luồng phụ trợ:
break,continue,goto, hàmexit(). - Cấu trúc dữ liệu mảng một chiều, mảng nhiều chiều (mảng của mảng, công thức ánh xạ chỉ số $n \times \text{WIDTH} + m$).
- Xâu ký tự dạng mảng
charkết thúc bằng ký tự null\0, sự khác biệt giữa khởi tạo và phép gán chuỗi.
- Các dạng vòng lặp cơ bản:
Kiến thức nền tảng được xây dựng
- Lý thuyết Kỹ nghệ Phần mềm và Quy trình Hệ thống: 4 thao tác nền tảng (Đặc tả, Phát triển, Đánh giá, Tiến hóa) cùng sự đánh đổi giữa mô hình tuần tự kiểm soát cao (Waterfall) với các quy trình thích ứng linh hoạt (XP, Spiral).
- Lý thuyết Giải thuật và Đánh giá Hiệu năng: Các nguyên lý xác định tính đúng đắn của thuật toán và quy tắc tiệm cận toán học ($O$, $\Omega$, $\Theta$) để phân tích tài nguyên tính toán độc lập với kiến trúc phần cứng.
- Lý thuyết Hệ thống Kiểu và Cấu trúc Bộ nhớ: Bản chất lưu trữ dữ liệu dưới dạng nhị phân, định dạng số dấu phẩy động, phân bố byte theo miền giá trị, và cơ chế con trỏ liên quan trực tiếp đến ô nhớ vật lý.
Kỹ năng phát triển
- Kỹ năng kỹ thuật (Technical skills): Cài đặt chương trình chuẩn cú pháp C++; sử dụng thành thạo các thư viện tiêu chuẩn của C/C++; quản lý dòng vào/ra và kiểm soát bộ nhớ đệm; thao tác mảng và mảng ký tự kết thúc null.
- Kỹ năng phân tích (Analytical skills): Phân tích bài toán thực tế thành lưu đồ thuật toán và mã giả; lựa chọn cấu trúc điều khiển rẽ nhánh hoặc lặp phù hợp; ước lượng độ phức tạp thời gian thực thi của thuật toán.
- Kỹ năng thực hành nghề nghiệp (Practical competencies): Khả năng phân rã bài toán lớn thành các module/hàm độc lập; kỹ năng kiểm thử và sửa lỗi (debugging) cú pháp cũng như lỗi tràn biên chỉ số mảng; duy trì tài liệu mã nguồn thông qua hệ thống chú thích chuẩn.
Phương pháp giảng dạy và học tập
Giáo trình được thiết kế theo phương pháp sư phạm kết hợp giữa diễn giải lý thuyết nền tảng và thực hành mã nguồn trực tiếp (code-driven learning). Mỗi cấu trúc cú pháp đều được đưa ra dưới dạng công thức định nghĩa, phân tích quy tắc biên dịch, sau đó minh chứng bằng đoạn chương trình C++ mẫu đi kèm kết quả xuất màn hình cụ thể.
Hệ thống bài tập và ví dụ tình huống trong bài giảng tập trung vào các bài toán kỹ thuật kinh điển:
- Giải phương trình bậc nhất $ax + b = c$ và phương trình bậc hai $ax^2 + bx + c = 0$.
- Thuật toán Euclid tìm ước số chung lớn nhất.
- Chương trình đếm ngược thời gian (countdown) kiểm soát luồng lặp.
- Bài toán tính toán số học tích lũy và giai thừa lồng nhau ($S = 2! + 4! + \dots + n!$).
- Xử lý chuỗi văn bản, ghép họ tên, chuẩn hóa chữ hoa/chữ thường, và trích xuất chuỗi con.
Phương pháp đánh giá kết quả học tập tập trung vào hai tiêu chí: tính đúng đắn của thuật toán (đáp ứng đúng các trường hợp biên, không lặp vô tận, không truy xuất ngoài biên mảng) và tính tối ưu trong việc sử dụng tài nguyên bộ nhớ cũng như thời gian chạy.
Để tự học hiệu quả, người học được hướng dẫn:
- Đọc hiểu cú pháp và chủ động gõ lại mã nguồn trên các trình biên dịch C++ thay vì sao chép.
- Tự thiết lập bảng chân trị khi làm việc với các biểu thức điều kiện phức tạp.
- Luôn sử dụng chú thích (
//hoặc/* */) để làm rõ ý nghĩa của các khối lệnh và tham số hàm. - Kiểm soát chặt chẽ giá trị khởi tạo của biến và mảng cục bộ để tránh lỗi dữ liệu rác trên bộ nhớ.
Điểm nổi bật và cập nhật
- Chuẩn hóa học thuật theo tiêu chuẩn ISO: Giáo trình định vị rõ ngôn ngữ C++ theo chuẩn ISO/IEC 14882:1998 và bản sửa đổi ISO/IEC 14882:2003, đồng thời giới thiệu định hướng chuẩn hóa C++0x, giúp người học hiểu rõ lịch sử và sự phát triển của ngôn ngữ từ Bell Labs đến tiêu chuẩn quốc tế.
- Tích hợp bức tranh toàn cảnh về Thư viện mẫu chuẩn (STL): Giới thiệu vai trò cốt lõi của STL với các thùng chứa (containers như
vector), biến lặp (iterators) và các thuật toán tổng quát; đồng thời chỉ rõ sự tồn tại của các triển khai độc lập như SGI STL, STLPort và thư viện Boost. - Gắn kết phương pháp luận Kỹ nghệ Phần mềm hiện đại: Không chỉ dạy cú pháp lập trình đơn thuần, giáo trình đưa vào nội dung về các mô hình phát triển phần mềm tiên tiến như Lập trình cực hạn (XP - Extreme Programming) với kỹ thuật lập trình cặp (pair programming) và kiểm thử tự động (automated testing), đặt cạnh các mô hình cổ điển như Thác nước và Xoắn ốc Boehm.
- Giải quyết các lỗi kỹ thuật thực tế: Giáo trình trực tiếp chỉ ra các vấn đề bẫy lỗi thường gặp trong lập trình hệ thống cấp thấp như: hiện tượng sót ký tự Enter (
\n) trong bộ đệm dòng vàocinvà phương pháp khắc phục quafflush(stdin)/cin.clear(); nguy cơ tiềm ẩn khi truy xuất vượt giới hạn chỉ số mảng; và cơ chế đánh dấu kết thúc chuỗi bằng ký tự null\0.
Đối tượng sử dụng giáo trình
- Sinh viên chuyên ngành: Tài liệu phục vụ trực tiếp cho sinh viên năm thứ nhất và năm thứ hai 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, Khoa học Máy tính và Mạng máy tính.
- Yêu cầu kiến thức tiên quyết (Prerequisites): Người học cần nắm vững kiến thức toán học phổ thông (đại số cơ bản, tư duy logic giải phương trình). Giáo trình không đòi hỏi kiến thức lập trình từ trước do nội dung đã được xây dựng từ khái niệm phần cứng, phần mềm và mã nhị phân ban đầu.
- Giảng viên và cán bộ giảng dạy: Tài liệu là khung tham chiếu để xây dựng đề cương chi tiết học phần Kỹ thuật lập trình hoặc Nhập môn lập trình C++; cung cấp hệ thống ví dụ chuẩn và hướng dẫn phân tích độ phức tạp thuật toán.
- Người tự học và nghiên cứu: Phù hợp làm tài liệu tra cứu có hệ thống về cú pháp C++, các bảng chân trị logic, bảng đặc tả kích thước kiểu dữ liệu, thứ tự ưu tiên của toán tử và danh mục hàm thư viện chuẩn (
<string.h>,<math.h>,<stdlib.h>).
Câu hỏi thường gặp
1. Giáo trình này phù hợp nhất với đối tượng nào?
Giáo trình được biên soạn chuyên biệt cho sinh viên đại học khối ngành Công nghệ Thông tin bắt đầu bước vào giai đoạn học kiến thức cơ sở ngành, cũng như người học cần một tài liệu tiếp cận lập trình có nền tảng học thuật chặt chẽ.
2. Người học cần chuẩn bị kiến thức nền tảng nào trước khi tiếp cận tài liệu?
Chỉ cần kiến thức toán học căn bản và khả năng sử dụng máy tính phổ thông. Các khái niệm về cấu trúc phần cứng (CPU, BIOS, Bus), phần mềm và tư duy logic thuật toán đều được giải thích cặn kẽ ngay trong Chương 1 của tài liệu.
3. Điểm khác biệt của giáo trình này so với các tài liệu dạy lập trình C++ thông thường là gì?
Tài liệu kết hợp giữa kỹ thuật lập trình C++ chuẩn mực với lý thuyết Kỹ nghệ phần mềm (các mô hình Waterfall, Spiral, XP) và khoa học máy tính (phân tích tiệm cận $O$, $\Omega$, $\Theta$, bài toán NP, cơ chế tổ chức bộ nhớ nhị phân), thay vì chỉ thuần túy liệt kê cú pháp ngôn ngữ.
4. Làm thế nào để tự học giáo trình này đạt hiệu quả cao nhất?
Người học nên tuân thủ trình tự các chương: nắm chắc khái niệm giải thuật ở Chương 1, thực hành phân tích kiểu dữ liệu và toán tử ở Chương 2-3, sau đó cài đặt mã nguồn cho các bài toán điều khiển rẽ nhánh và vòng lặp ở Chương 4-5. Mỗi đoạn mã mẫu cần được tự tay biên dịch, kiểm thử các giá trị đầu vào khác nhau và bổ sung chú thích rõ ràng.
5. Tài liệu có đề cập đến các công cụ và thư viện bổ trợ nào?
Tài liệu cung cấp hướng dẫn chi tiết về các thư viện chuẩn C/C++ gồm <iostream.h>, <stdio.h>, <string.h>, <math.h>, <stdlib.h>, <ctype.h>, <time.h>, <wchar.h>, đồng thời giới thiệu các thư viện và dự án mở rộng như Standard Template Library (STL), STLPort và Boost.
Kết luận
Bài giảng Kỹ thuật lập trình của ThS. Trần Xuân Thanh (Đại học Thành Đô) là tài liệu học thuật có cấu trúc sư phạm chặt chẽ, thiết lập nền tảng vững chắc về tư duy khoa học máy tính, kỹ thuật lập trình C++ và phương pháp luận kỹ nghệ phần mềm. Lộ trình học tập khuyến nghị bắt đầu từ việc nắm vững kiến trúc hệ thống và phân tích thuật toán, tiến tới làm chủ cú pháp lệnh, cơ chế kiểm soát bộ đệm, mảng dữ liệu và xử lý chuỗi ký tự. Đây là bước chuẩn bị quan trọng để người học tiếp tục nâng cao trình độ trong các học phần chuyên sâu về Cấu trúc dữ liệu và giải thuật, Lập trình hướng đối tượng và Phát triển phần mềm chuyên nghiệp.