Giáo trình kỹ thuật lập trình C nâng cao phần 2 - Quản lý màn hình và cửa sổ với các hàm cơ bản

Khám phá giáo trình kỹ thuật lập trình C căn bản nâng cao phần 2, cung cấp kiến thức chuyên sâu và bài tập thực hành hiệu quả cho lập trình viên.

Trường đại học

Trường Đại Học Kỹ Thuật

Chuyên ngành

Kỹ Thuật Lập Trình

Người đăng

Ẩn danh

Thể loại

Giáo Trình
236
2
0

Phí lưu trữ

55 Point

Tóm tắt

I. Hướng dẫn xây dựng giáo trình kỹ thuật lập trình C căn bản nâng cao phần 2

Giáo trình kỹ thuật lập trình C căn bản nâng cao phần 2 là tài liệu phân tích chi tiết các kỹ thuật, hàm và phương pháp lập trình nâng cao trong ngôn ngữ C, phù hợp cho sinh viên và lập trình viên muốn nâng cao kiến thức. Trước khi bắt đầu, người học cần hiểu rõ về cấu trúc nội dung, các bài học chính và cách tổ chức nội dung sao cho phù hợp. Phương pháp xây dựng bao gồm phân chia theo chủ đề, tích hợp ví dụ thực tế và hướng dẫn thực hành rõ ràng nhằm giúp người học dễ dàng tiếp cận và vận dụng kiến thức vào công việc thực tế. Đồng thời, tài liệu cần cập nhật các kiến thức mới như tối ưu mã, xử lý lỗi và kỹ thuật dùng bộ nhớ hiệu quả để phù hợp với xu hướng phát triển công nghệ hiện nay.

1.1. Phân tích nội dung và mục tiêu của giáo trình

Xác định rõ các mục tiêu chính: giúp người học nắm vững các kỹ thuật lập trình nâng cao trong C, từ đó tự xây dựng và tối ưu hóa các chương trình phức tạp. Nội dung sẽ phân chia thành các phần về kỹ thuật, hàm, xử lý bộ nhớ, quản lý lỗi, và lập trình modul chuyên sâu. Các phần này cần có tính logic, liên kết chặt chẽ, đồng thời hướng đến mục tiêu thực tiễn, dễ ứng dụng trong các dự án thực tế.

1.2. Các phương pháp tổ chức nội dung giáo trình

Soạn thảo theo kiểu phân chương, chia nhỏ các kỹ thuật thành các bài học phù hợp. Mỗi phần trình bày lý thuyết kết hợp ví dụ minh họa, sau đó hướng dẫn thực hành chi tiết. Nên xây dựng phần tổng kết kiến thức và bài tập vận dụng cuối mỗi chương nhằm thúc đẩy quá trình tiếp thu và thực hành. Đồng thời, tài liệu cần có phần phụ lục hướng dẫn kỹ thuật tối ưu mã, xử lý lỗi và kỹ thuật dùng bộ nhớ cho các chương trình lớn.

II. Các nội dung chủ đề chính trong giáo trình kỹ thuật lập trình C phần 2

Chương trình nâng cao trong phần này bao gồm các nội dung như kỹ thuật quản lý bộ nhớ, tối ưu mã, phát hiện và xử lý lỗi, kỹ thuật dùng con trỏ và danh sách không kiểu, xử lý dữ liệu trong tệp, cũng như kỹ thuật tối ưu xử lý đồ họa. Các phần này giúp sinh viên hiểu rõ về cách tối đa hóa hiệu quả mã nguồn, giảm thiểu lỗi runtime, đặc biệt trong các dự án phức tạp. Bên cạnh đó, phần này còn tập trung vào xây dựng các hàm khả dụng linh hoạt và có thể dùng chung cho các chương trình lớn, giúp dễ dàng mở rộng, duy trì và tối ưu hiệu suất.

2.1. Kỹ thuật tối ưu và quản lý bộ nhớ trong C

Chia sẻ các phương pháp quản lý bộ nhớ hiệu quả như cấp phát động, dùng con trỏ void, xử lý tràn bộ nhớ, và cách tối ưu bộ nhớ cache. Hướng dẫn chi tiết cách dùng hàm realloc để điều chỉnh kích thước mảng, cùng các ví dụ thực tế giúp người học làm quen với kỹ thuật tối ưu đồng bộ mã và dữ liệu.

2.2. Xử lý lỗi và kỹ thuật gỡ lỗi trong lập trình C nâng cao

Phân tích các kỹ thuật phát hiện lỗi, quản lý lỗi qua hàm error, sửa lỗi cú pháp, và sử dụng debugger của Turbo C. Đồng thời, hướng dẫn thực hành đặt breakpoints, theo dõi biến qua chế độ watch, và thực hiện từng bước để phát hiện nguyên nhân các lỗi logic hoặc runtime, giúp nâng cao khả năng xử lý tình huống thực tiễn.

III. Phương pháp xây dựng các hàm tối ưu theo kỹ thuật nâng cao

Trong phần này, hướng tới việc xây dựng các hàm trong C có khả năng mở rộng, tối ưu mã, và linh hoạt sử dụng con trỏ để xử lý dữ liệu không cùng kiểu. Ngoài ra, còn đề cập tới kỹ thuật truyền đối số theo kiểu tham chiếu, dùng macro để lập trình linh hoạt, và kỹ thuật tổ chức hàm có đối số bất định. Các phương pháp này giúp hạn chế lỗi, tăng tính hiệu quả và khả năng bảo trì của mã nguồn, đặc biệt khi dự án phát triển lớn, phức tạp.

3.1. Phát triển hàm có tham số bất định và dùng con trỏ linh hoạt

Hướng dẫn cách xây dựng hàm sử dụng con trỏ void, dạng tham số có thể linh hoạt nhận nhiều kiểu dữ liệu khác nhau. Kết hợp với kỹ thuật chép dữ liệu, quản lý danh sách không kiểu, giúp chương trình có khả năng mở rộng cao, dễ gắn thêm chức năng mới, tối ưu mã và tránh lỗi trùng lặp dữ liệu.

3.2. Sử dụng macro nhằm nâng cao khả năng tối ưu và bảo trì mã

Đi sâu vào cách tạo macro trong C để tối ưu mã, giảm thiểu lặp lại, và giúp lập trình dễ hiểu hơn. Chú ý đặc biệt đến cách viết macro có đối phù hợp, tránh lỗi do phép thay thế không chính xác, đồng thời mở rộng khả năng dùng macro trong các bài toán phức tạp như tính toán đại số, tối ưu mã hình ảnh, và xử lý toán học.

IV. Ứng dụng thực tiễn của giáo trình lập trình C nâng cao phần 2

Các kỹ thuật nâng cao trong giáo trình giúp xây dựng các hệ thống phần mềm quản lý dữ liệu lớn, tối ưu bộ nhớ, xử lý đồ họa, hoặc phát triển các ứng dụng yêu cầu xử lý dữ liệu phức tạp. Các ví dụ như quản lý tệp dữ liệu, xử lý đa luồng, xử lý đồ họa 2D/3D, hoặc xây dựng phần mềm nhúng đều có thể dựa vào các kiến thức trong phần này để phát triển nhanh chóng, hiệu quả. Ngoài ra, kỹ thuật tối ưu mã còn giúp xây dựng phần mềm chạy trên các thiết bị hạn chế về bộ nhớ và tốc độ.

4.1. Áp dụng kỹ thuật quản lý bộ nhớ và tối ưu mã nguồn

Chia sẻ các case study thực tế về tối ưu mã trong lập trình game, phần mềm đồ họa, hoặc hệ thống nhúng. Nghiên cứu về kỹ thuật dùng con trỏ, xử lý lỗi nhanh, tối ưu truy cập bộ nhớ để nâng cao hiệu suất phần mềm.

4.2. Lập trình các ứng dụng đa nhiệm đa luồng

Minh họa kỹ thuật xử lý đa tác vụ trong C, dùng con trỏ và bộ đệm để chia sẻ dữ liệu một cách an toàn và hiệu quả. Ứng dụng trong viết phần mềm điều khiển thiết bị, trò chơi đa nhân, hoặc hệ thống điều khiển tự động.

V. Kết luận và hướng phát triển của giáo trình kỹ thuật lập trình C phần 2

Giáo trình giúp người học không chỉ nắm vững các kỹ thuật nâng cao, tối ưu mã nguồn và xử lý lỗi, mà còn mở rộng khả năng sáng tạo và phát triển phần mềm lớn, phức tạp. Tương lai, nội dung này sẽ tiếp tục cập nhật các xu hướng mới như lập trình tối ưu cho phần cứng mới, sử dụng bộ nhớ lưới, và phân tích hiệu suất hoạt động của chương trình. Qua đó, giúp sinh viên và lập trình viên không ngừng nâng cao năng lực để đáp ứng yêu cầu ngày càng cao của phát triển phần mềm hiện đại.

5.1. Định hướng nâng cao kỹ năng lập trình và xây dựng bộ khung phần mềm tối ưu

Khuyến khích phát triển các dự án thực tế, chủ động tối ưu mã và mở rộng khả năng quản lý dữ liệu lớn và đa luồng. Đồng thời, tham gia các cộng đồng chia sẻ kỹ thuật tối ưu, nhằm nâng cao kiến thức và cập nhật xu hướng mới.

5.2. Phát triển nội dung và cập nhật công nghệ mới

Tiếp tục nghiên cứu và cập nhật các kỹ thuật mới trong nền công nghiệp phần mềm, như phân tích bộ nhớ, xử lý đa nhiệm, và lập trình tối ưu trên phần cứng hiện đại như GPU, CPU đa nhân. Tài liệu cần cập nhật phù hợp xu hướng AI và IoT trong lập trình của tương lai.

17/07/2025

Trích đoạn nội dung tài liệu

Kỹ thuật lập trình C QUAN LY MAN HINH VA CUA SO © Trong chương này sẽ giới thiệu một số hàm dung dé quan ly man. hình màu và tạo cửa số. Bằng cách tạo nên các cửa sổ với tàu sắc khác nhau sẽ làm cho màn hình trở nên đẹp đẽ sáng sửa hơn, điều này giúp cho việc tổ chức số liệu và tổ chức hội thoại người tráy trở nên thuận tiện hơn. Tất cả các hàm quản lý tàn hình giới thiệu dưới đây đều khai báo trong tệp corio.

CHỌN KIỂU MÀN HÌNH VĂN BẢN 1. Hàm textmode Trước khi sử dụng các hàm quản lý màn hình, ta phải dùng hàm textmode để chọn kiểu màn hình văn bản. Hàm có dạng: void textmode(int mode); Ở đây mode là một biến nguyên dùng để xác định mốt văn bản định sử dụng. Dưới đây là các giá trị mà biến mode có thể nhận và nghĩa của chúng.

Ký hiệu tượng trưng Giá trịsố | Mốt văn bản video LASTMODE | -1 Mốt văn bản trước đó BW40 0 Đen trắng 40 cột C40 1 16 mau, 40 cột - BW80 2 Đen trắng 80 cột C80 3 16 màu, 80 cột MONO 7 Màn hình đơn sắc, 80 cột Chú ý 1: Các ký hiệu tượng trưng chính là các hằng đã được định nghĩa trong tệp conio. có Chú ý 2: Độc lập với các mốt văn bản được chọn, màn hình luôn luôn gồm 25 hàng. Ví dụ 1: Câu lệnh: textmode(C40); {203} Kỹ thuật lập trình C_ | h sẽ chọn mốt hiển thị văn bản 16 màu, 40 cột. Như vậy, màn hình sẽ gồm 25 hàng và 40 cột.

Mã của các màu được cho trong bảng 2. Ví dụ 2: Câu lệnh: textmode(C80); ~ 7 sé chon kiểu hiển thị văn bản 16 màu, 80 cột. Màn hình sẽ gồm 25 hàng va 80 cột. Mỗi dòng trên màn hình chứa được 80 ký tự.

Ta sẽ thấy các ký tự ở mốt C40 có bể ngang lớn hơn 2 lần các ký tự ở mốt C80. Cách xác định vị trí trên màn hình Hệ trục toạ độ trên màn hình nhận điểm ở góc trên bên trái làm điểm gốc, trục hoành là trục nằm ngang chạy từ trái sang phải, trục tung chạy từ trên xuống dưới. Như vậy, đối với màn hình 25 hàng 80 cột thì điểm (1, 1) là điểm ở góc trên bên trái, điểm (80, 1) là điểm ở góc trên bên phải, điểm (1, 25) là điểm ở góc dưới bên trái và điểm (80, 25) là điểm ở góc dưới bên phải. ĐẶT MÀU NỀN VÀ MÀU CHỮ Để đặt màu nền (màu cửa sổ) ta dùng hàm: void textbackground(int color); Để đặt màu chữ ta dùng hàm: void textcolor(int color); Trong cả hai trường hợp color là một biến nguyên chứa mã của màu (xem bảng sau) Ký hiệu tượng trưng - tise mn a hay BLACK (den) 0 Ca hai BLUE (xanh da trời) 1 Cả hai _GRBENGanh lá cây) 2 Cả hai CYAN (xanh lơ) 3 Ca hai RED (đỏ).

12 Chi cho mau chit | LIGHTMAGENTA (tim nhat) 13 | Chỉcho màu chữ YELLOW (vang) 14 Chi cho mau chit WHITE (trang) 15 Chỉ cho màu chữ Chúý 1: Muốn tạo chữ nhấp nháy ta cộng thêm 128 vào tham số màu, ví dụ lệnh textcolor(4+128) sẽ tạo đòng chữ nhấp nháp màu đỏ. Chú ¥ý 2: Các ký hiệu tượng trưng chính là các hằng được định nghĩa trong tệp conio.h và trong tệp graphis. Chúng cũng chính là tên của các màu (viết theo tiếng Anh). Chú ý 3: Các hàm trên không làm thay đổi màu sắc của các cửa số và các đòng chữ đã có từ trước trên màn hình.

Chú ýý 4: Một câu lệnh textbackground xác định một màu, đó sẽ là màu của tất cả các cửa sổ được xây dựng sau câu lệnh này và trước một câu lệnh textbackground khác. Tương tự một câu lệnh textcolor xác định một màu, đó sẽ là màu của các dòng chữ được đưa lên màn hình bằng các câu lệnh cprintf và cscanf viết sau câu lệnh textcolor này và trước một câu lệnh textcolor khác. Ví dụ 1: Các cửa sổ được xây dựng sau câu lệnh -- textbakground (RED) ; và trước một câu lệnh textbackground khác sẽ có màu đỏ. Ví dụ 2: Các dòng ký tự được đưa lên màn hình: bang.

các câu lệnh cprintf và cscanf viết sau câu lệnh textcolor (WHITE) ; và trước một câu lệnh textcolor khác sẽ có màu trắng. {205} Kỹ thuật lập trình C_ | §3. KAY DUNG CUA SO VA SU DUNG CUA SO Ham window void window(int xt, int yt, int xd, int yd); sẽ có hai tác dụng: 1 - Xây dựng một cửa sổ trên màn hình (hình chữ nhật có các cạnh song song với các cạnh của màn hình) trong đó điểm ở góc trên bên trái có toạ độ là (xt,yt) và điểm ở góc dưới bên phải có toạ độ là (xd,yd). 2 - Đưa con trỏ về vị trí góc trên bên trái của cửa sổ vừa xây dựng.

Các biến xt,yt,xd,yd cần thoả mãn điều kiện xd >= xt và yd >= yt Ví dụ 1: Ta hãy xem hai câu lệnh có tác dụng gì ? textbackground (RED) ; window (5,5,35,20); Câu lệnh thứ nhất xác định màu nền mới là màu đỏ. Các cửa sổ xây dựng sau câu lệnh này sẽ có màu đỏ. Câu lệnh thứ hai xác định một cửa sổ có điểm trên bên trái là (5,5) và điểm dưới bên phải là (35,20). Thế thì sau câu lệnh thứ hai ta có nhận ngay được một cửa sổ đỏ hay không? Câu trả lời là không.

Câu lệnh window không có chức năng xoá bỏ những gì đã có trong phạm vi cửa sổ mới mở. Muốn có màu đỏ trên cửa sổ này ta phải xoá đi tất cả những gì đang có trên cửa sổ đó. Hàm void clrscr(void); đảm nhiệm chức năng này. Ví dụ 2: Giả sử ta muốn có một màn hình cỡ 25 x 80 (25 hàng 80 cột) màu CYAN.

Giữa màn hình là một cửa sổ màu RED. Trong cửa sổ có hai dòng chữ. Dòng chữ bên trên là Chuc mung nam moi. màu YELLOW và dòng chữ dưới là Happy new year mau WHITE.

Chương trình dưới đây sẽ đáp ứng được yêu cầu nêu trên. cprintf£(“\n%l0c Chic mtng ndém mới”,'” `); /* Dòng chữ màu trắng */ textcolor (WHITE) ; gotoxy (1,4); cprintf(®\n\n310c Happy new year”,’ ); ) ` Ví dụ 3: Xét chương trình #include <stdio.h> main () { float r,c,pi=3.14; textmode (C40); /* Chon mode van bản 16 màu 40 cot */ /* Lam cho man hinh cé mau GREEN */ textbackground (GREEN); window(1,1,40,25); clrscr(); /* Tạo cửa số màu MAGENTA */ textbackground (MAGENTA) ; window(10,8,30,18); clrscr(); /* Cho hiện dòng chữ * Ban kinh = * màu YELLOW */ textcolor (YELLOW) ; cprint£f(*\n\n Ban kinh = *); '/* Chọn bán kính từ bản phím, lay r = 5 */ /* So 5 mau RED se hien len man hinh */ textcolor(RED); cscanf(*$%f“,&r); /* Tinh chu vi */ c = 2*pi*r; ¡ textcolor(WHITE); /* Cho hiện lên dòng kết qua mau WHITE */ ¬ ne gotoxy(1,4); cprintf(“\n\nChu vi= %£6.2",c); } {207} Kỹ thuật lập trình C_| $4. CÁC HÀM printf, scanf Khi màn hình đang ở chế độ văn bản ta có thể sử dụng các hàm printf, scanf, cprintf và cscanf để vào số liệu từ bàn phím và đưa kết quả ra màn hình. Điều này đã chỉ ra trong các ví dụ 2 và 3 của $3, ở đây ta muốn nói đến vài điều khác nhau giữa các hàm nói trên.

Khi sử dụng các hàm cprintf và cscanf thì các dòng ký tự hiện lên màn hình sẽ có màu xác định bởi câu lệnh textcolor gần nhất. Còn khi sử dụng các hàm printf và scanf thì qui tắc này sẽ không còn đúng nữa. Nói chung các hàm cprintf và cscanf sẽ cho một màn hình đẹp hơn so với các hàm printf và scanf. Khi dùng hàm scanf để nhập số liệu ta có thể tự do sửa chữa khi bấm sai bằng cách sử dụng các phím chức năng.

Nhưng điều này lại bị hạn chế khi dùng hàm cscanf. Để thấy rõ sự khác nhau vừa nêu, cách tốt nhất là hãy thay các hàm cprintf và cscanf bằng các hàm prinf và scanf trong các chương trình của §3, sau đó thực hiện chúng trên máy và so sánh các kết quả nhận được trên màn hình. Sự khác nhau giữa printf và cprintf: Ngoài sự khác nhau về màu hiển thị như đã nói trên, chúng còn khác nhau về phạm vi hiển thị. + Ham printf có tính toàn màn hình không phụ thuộc vào cửa số hiện tại.

Như vậy các dòng thông tin do hàm đưa ra có thể nằm ngoài cửa số nếu như cửa số quá hẹp. + Hàm cprintf chỉ làm việc trên cửa sổ hiện tại. Như vậy các dòng thông tin do hàm đưa ra chỉ có thể nằm trong cửa sổ và nếu cửa số không đủ chỗ chứa thì một số dòng sẽ bị mất. CAC HAM KHAC 1.

Ham cirscr: Xoá cửa sổ hiện hành. + Dạng hàm: void clrscr (void); + Công dụng: xoá cửa sổ hiên tại và đưa con trỏ đến góc trên bên trái của cửa sổ. Sau hàm này cửa sổ sẽ có màu xác định bởi hàm textbackground. Hàm này đã được giới thiệu và sử dụng trong các chương trình ở §3.

Hàm clreol: Xoá đến cuối dòng trong cửa sổ. + Dạng hàm: void clreol (void); + Công dụng: xoá mọi ký tự đứng sau con trỏ cho tới cuối dòng trong cửa sổ mà không làm thay đối vị trí của con trỗ. {208} Kỹ thuật lập trình C 3. Hàm delline: Xoá một dòng trong cửa số.

+ Dạng hàm: void delline (void); + Công dụng: xoá dòng của cửa số đang chứa con trỏ. Hàm gotoxy: Di chuyển con trỏ trong phạm vi cửa sổ. + Dạng hàm: void gotoxy(int x,int y); + Công dụng: dịch chuyển con trỏ đến vị trí (xy) trong cửa sổ hiện tại. Chú vs toa độ (x,y) không phải là toạ độ màn hình mà là toạ độ trong cửa sổ, ví dụ m (1,1) là điểm trên trái của cửa số.

“Chis #ý: Để đưa con trỏ tới một vi trí bất kỳ của màn hình ta có thể sử dụng chức năng thứ hai của hàm window (xem §3). Ví dụ câu lệnh: window (1,24,1,24); sẽ đưa con trỏ tới vị trí (1,24) của màn hình. Hàm wherex: Cho vị trí ngang của con trỏ trong cửa sổ. + Dạng hàm: int wherex (void); + Công dung: cho vi trí ngang (x) của con trỏ trong cửa số hiện hành.

Hàm wherey: Cho vị trí dọc của con trỏ trong cửa số. + Dạng hàm: int wherey (void) ; + Công dụng: cho vị trí doc (y) của con trỏ trong cửa sổ hiện hành. Hàm gettextinfo: Cho thông tin về kiểu hiển thị văn bản. + Dạng hàm: void gettextinfo(struct text_info *r); + Dối: r là con trỏ trỏ tới địa chỉ của một biến cấu trúc kiểu text_info được định nghĩa trong conio.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ