Giáo trình Lập trình cơ bản (Phần 2)

Một số khái niệm

Windows Forms là một tập hợp các thư viện lớpđược quản lý trong .NET

Framework để phát triển các ứng dụng desktop trên máy tính. Trong Windows Forms,

Form là một cửa sổ giao diện cho phép hiển thị thông tin và tương tác với người dùng.Tập bài giảng Lập trình cơ bản

Các ứng dụng Windows Forms thường được xây dựng bằng cách thêm các điều khiển

vào Form và xây dựng sự kiện tương ứng với các hành động của người dùng, chẳng

hạn như kích chuột hay bấm phím nào đó. Một điều khiển (control) là một thành phần

có giao diện riêng (User Interface) và có thể hiển thị dữ liệu hoặc nhận dữ liệu vào.

Để xây dựng một ứng dụng Windows Forms, có thể sử dụng rất nhiều đối

tượng của lớp thuộc các không gian tên khác nhau (namespace), tuy nhiên có một

không tên quan trọng không thể thiếu trong ứng dụng Windows Forms đó là

System.Windows.Forms.

System.Windows.Forms chứa các lớp dùng để tạo ứng dụng Windows với giao

diện người sử dụng mang các đặc điểm ưu việt có trên hệ điều hành Windows.

 

Giáo trình Lập trình cơ bản (Phần 2) trang 1

Trang 1

Giáo trình Lập trình cơ bản (Phần 2) trang 2

Trang 2

Giáo trình Lập trình cơ bản (Phần 2) trang 3

Trang 3

Giáo trình Lập trình cơ bản (Phần 2) trang 4

Trang 4

Giáo trình Lập trình cơ bản (Phần 2) trang 5

Trang 5

Giáo trình Lập trình cơ bản (Phần 2) trang 6

Trang 6

Giáo trình Lập trình cơ bản (Phần 2) trang 7

Trang 7

Giáo trình Lập trình cơ bản (Phần 2) trang 8

Trang 8

Giáo trình Lập trình cơ bản (Phần 2) trang 9

Trang 9

Giáo trình Lập trình cơ bản (Phần 2) trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 83 trang duykhanh 9900
Bạn đang xem 10 trang mẫu của tài liệu "Giáo trình Lập trình cơ bản (Phần 2)", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Giáo trình Lập trình cơ bản (Phần 2)

Giáo trình Lập trình cơ bản (Phần 2)
iết kế Form theo mẫu và gắn các điều khiển 
 Bƣớc 4. Kết quả thiết kế Form 
 Hình 4.57: Kết quả thiết kế Form bài tập mẫu về mảng hai chiều 
 Bƣớc 5. Viết mã lệnh cho các sự kiện 
 - Viết mã lệnh khai báo ma trận và biến 
 int[,] A= new int [100,100]; int n, m, spt=0, i=0,j=0; 
 - Viết mã lệnh cho sự kiện Load Form 
 private void Form1_Load(object sender, EventArgs e) 
 { 
 vohieuhoa(false); 
 txt_n.ResetText(); 
 txt_n.TabIndex = 1; 
 txt_n.Focus(); 
 } 
 - Viết mã lệnh cho hàm vô hiệu hóa các điều khiển khi Load Form 
 private void vohieuhoa(bool gt) 
 { 
 txt_m.Enabled = gt; 
 txt_giatri.Enabled = gt; 
 186 
Tập bài giảng Lập trình cơ bản 
 bt_demchia21.Enabled = gt; 
 bt_lietkeSNT.Enabled = gt; 
 bt_timMax.Enabled = gt; 
 bt_tongle.Enabled = gt; 
 bt_tongtunghang.Enabled = gt; 
 group_Hienthi.Enabled = gt; 
 group_ketqua.Enabled = gt; 
 } 
 - Viết mã lệnh cho hàm kiểm tra xâu rỗng 
 bool kiemtra(string s) 
 { 
 if (string.IsNullOrWhiteSpace(s)) return true; 
 else return false; 
 } 
 - Viết mã lệnh cho hàm kiểm tra dữ liệu nhập vào 
 bool kiemtra_dulieu(string s) 
 { 
 bool kt; 
 if (kiemtra(s)) return false; 
 kt = int.TryParse(s, out n); 
 return kt &&n>0; 
 } 
 - Viết mã lệnh cho sự kiện KeyUp của textbox tƣơng ứng với nhãn nhập số 
hàng 
 private void txt_n_KeyUp(object sender, KeyEventArgs e) 
 { 
 if (e.KeyCode == Keys.Enter) 
 { 
 if (kiemtra_dulieu(txt_n.Text)) 
 { 
 txt_m.Enabled = true; txt_m.TabIndex = 1; 
 txt_m.Focus(); 
 } 
 else { MessageBox.Show("Bạn chưa nhập đúng n"); 
 txt_n.Focus(); vohieuhoa(false); } 
 } 
 } 
 - Viết mã lệnh cho sự kiện KeyUp của textbox tƣơng ứng với nhãn nhập số cột 
 private void txt_m_KeyUp(object sender, KeyEventArgs e) 
 { 
 if (e.KeyCode == Keys.Enter) 
 { 
 if (kiemtra_dulieu(txt_m.Text)) 
 187 
Tập bài giảng Lập trình cơ bản 
 { 
 txt_giatri.Enabled = true; txt_giatri.TabIndex = 
 1; txt_giatri.Focus(); 
 } 
 else { MessageBox.Show("Bạn chưa nhập đúng m"); 
 txt_giatri.TabIndex = 1; txt_m.Focus(); vohieuhoa(false); 
 txt_m.Enabled = true; } 
 } 
 } 
- Viết mã lệnh cho sự kiện KeyUp của textbox tƣơng ứng với nhãn nhập giá trị 
 private void txt_giatri_KeyUp(object sender, KeyEventArgs e) 
 { 
 bool kt; n = int.Parse(txt_n.Text); m = 
 int.Parse(txt_m.Text); 
 if (e.KeyCode == Keys.Enter) 
 { 
 kt = int.TryParse(txt_giatri.Text, out A[i, j]); 
 if (kt) { rtbox_hienthi.Text += A[i, j].ToString() 
 + " "; spt++; txt_giatri.ResetText(); txt_giatri.Focus(); j++; } 
 if (j == m) { rtbox_hienthi.Text += "\n"; i++; j = 
 0; } 
 if (spt == n * m) { MessageBox.Show("Nhập xong 
 dãy", "Thông báo"); vohieuhoa(false); vohieuhoa2(); txt_m.Enabled = 
 false; txt_n.Enabled = false; } 
 } 
 } 
- Viết mã lệnh cho hàm vô hiệu hóa các nút sau khi nhập xong ma trận 
 private void vohieuhoa2() 
 { 
 bt_demchia21.Enabled = true; bt_lietkeSNT.Enabled = true; 
 bt_timMax.Enabled = true; bt_tongle.Enabled = true; 
 bt_tongtunghang.Enabled = true; 
 } 
 - Viết mã lệnh cho sự kiện kích chuột vào nút tìm giá trị lớn nhất 
 private void bt_timMax_Click(object sender, EventArgs e) 
 { 
 rtbox_ketqua.ResetText(); 
 int max = A[0, 0]; 
 for (int i = 0; i < n; i++) 
 for (int j = 0; j < m; j++) 
 if (A[i, j] > max) max = A[i, j]; 
 rtbox_ketqua.Text = "Giá trị lớn nhất của ma trận là:" + 
 max.ToString(); 
 } 
 188 
Tập bài giảng Lập trình cơ bản 
- Viết mã lệnh cho sự kiện kích chuột vào nút tính tổng các số lẻ 
 private void bt_tongle_Click(object sender, EventArgs e) 
 { 
 rtbox_ketqua.ResetText(); 
 int s = 0; 
 for (int i = 0; i < n; i++) 
 for (int j = 0; j < m; j++) 
 if (A[i, j] % 2 != 0) s += A[i, j]; 
 rtbox_ketqua.Text = "Tổng các số lẻ của ma trận là: " + 
 s.ToString(); 
 } 
 - Viết mã lệnh cho sự kiện kích chuột vào nút đếm các số chia hết cho 3 và 7 
 private void bt_demchia21_Click(object sender, EventArgs e) 
 { 
 rtbox_ketqua.ResetText(); 
 int d = 0; 
 for (int i = 0; i < n; i++) 
 for (int j = 0; j < m; j++) 
 if (A[i, j] % 21 == 0) d++; 
 rtbox_ketqua.Text = "Ma trận có " + d.ToString() + " số 
 chia hết cho cả 3 và 7"; 
 } 
 - Viết mã lệnh cho sự kiện kích chuột vào nút tính tổng từng hàng 
 private void bt_tongtunghang_Click(object sender, EventArgs e) 
 { 
 int s; rtbox_ketqua.ResetText(); 
 for (int i = 0; i < n; i++) 
 { 
 s=0; 
 for (int j = 0; j < m; j++) s += A[i, j]; 
 rtbox_ketqua.Text+= "Tổng hàng " + (i+1).ToString() + 
 "là: " + s.ToString(); 
 rtbox_ketqua.Text += "\n"; 
 } 
 } 
- Viết mã lệnh cho sự kiện kích chuột vào nút tính liệt kê các số nguyên tố 
 private void bt_lietkeSNT_Click(object sender, EventArgs e) 
 { 
 rtbox_ketqua.Text=" Các số nguyên tố của ma trận là: "; 
 int d = 0; 
 for (int i = 0; i < n; i++) 
 for (int j = 0; j < m; j++) 
 if (kt_SNT(A[i, j])) { rtbox_ketqua.Text += A[i, 
 j].ToString() + " "; d++; } 
 if (d == 0) rtbox_ketqua.Text = "Ma trận không có số 
 189 
Tập bài giảng Lập trình cơ bản 
 nguyên tố"; 
 } 
 - Viết mã lệnh cho hàm kiểm tra số nguyên tố 
 bool kt_SNT(int n) 
 { 
 bool kt; 
 if (n < 2) kt = false; 
 else 
 { 
 kt = true; 
 for(int i=2;i<=n/2;i++) 
 if (n % i == 0) 
 { 
 kt = false; break; 
 } 
 } 
 return kt; 
 } 
 Bƣớc 6. Kết quả chạy chƣơng trình 
 Hình 4.58: Kết quả chạy chương trình bài tập mẫu về mảng hai chiều 
Bài 4.11 
 Tạo một ứng dụng Windows Form thực hiện các công việc sau: 
 1. Nhập một ma trận số thực gồm n hàng, m cột (với n và m là hai số nguyên 
dƣơng). 
 2. Hiển thị ma trận. 
 3. Tìm số âm nhỏ nhất của ma trận. 
 4. Sắp xếp từng cột của ma trận theo thứ tự tăng dần. 
 5. Nhập số nguyên dƣơng k, xóa cột thứ k của ma trận nếu có. 
 190 
Tập bài giảng Lập trình cơ bản 
 6. Tính trung bình cộng các phần tử có giá trị chẵn trong ma trận 
Bài 4.12 
 Tạo một ứng dụng Windows Form thực hiện các công việc sau: 
 1. Nhập một ma trận số thực vuông cấp n (với n là số nguyên dƣơng). 
 2. Hiển thị ma trận. 
 3. Tính tổng các phần tử nằm trên đƣờng chéo phụ của ma trận. 
 4. Tìm số âm lớn nhất trên đƣờng chéo chính của ma trận 
 5. Đếm các phần tử của ma trận có giá trị chia hết cho 3 và 5. 
Bài 4.13 
 Viết một chƣơng trình thực hiện các công việc sau: 
 1. Thiết kế Form theo mẫu 
 Hình 4.59: Chương trình xử lý chuỗi 
Yêu cầu: 
 - Nhãn chƣơng trình xử lý chuỗi: Font Time New Roman, chữ hoa, in đậm, cỡ 
chữ 16, căn giữa Form. 
 - GroupBox nhập và kết quả: Font Time New Roman, cỡ chữ 14. 
 - Điều khiển để nhập chuỗi A, chuỗi B và hiển thị kết quả là các RichTextBox. 
 - Các điều khiển ―So sánh‖, ―Nối chuỗi‖, ―Chèn‖, ―Thêm chuỗi‖, ―Thay thế‖, 
―Chuỗi hoa‖, ―Chuỗi thƣờng‖, ‖Thoát‖là các Button. 
2. Lập trình cho các sự kiện: 
 - Khi Load Form: 
 + RichTextBox nhập A và B sáng cho phép nhập xâu ký tự. 
 + Các điều khiển khác vô hiệu hóa (nút ―Thoát‖ luôn sáng, richTextBox kết quả 
luôn ẩn). 
 - Khi nhập xâu vào richTextBox nhập A hoặc B thì các button sẽ sáng lên. 
 - Khi kích vào nút ―So sánh‖: 
 191 
Tập bài giảng Lập trình cơ bản 
 + Kiểm tra xem đã nhập xâu hay chƣa? Nếu chƣa thì đƣa ra hộp thoại thông 
báo. 
 + Thực hiện so sánh hai xâu theo thứ tự từ điển trong bảng mã ASCII. 
 + Hiển thị kết quả ra richTextBox kết quả. 
 - Khi kích vào nút ―Chèn‖: 
 + Kiểm tra xem đã nhập xâu A và xâu B hay chƣa? Nếu chƣa nhập đủ thì đƣa ra 
hộp thoại thông báo. 
 + Hiện lên cửa sổ cho phép nhập vào số nguyên dƣơng n. 
 + Thực hiện nối xâu B vào vị trí thứ n của xâu A. 
 + Hiển thị xâu kết quả ra richTextBox kết quả. 
 - Khi kích vào nút ―Nối chuỗi‖: 
 + Kiểm tra xem đã nhập xâu A và xâu B hay chƣa? Nếu chƣa nhập đủ thì đƣa ra 
hộp thoại thông báo. 
 + Thực hiện nối xâu B vào cuối xâu A. 
 + Hiển thị xâu kết quả ra richTextBox kết quả. 
 - Khi kích vào nút ―Thay thế‖: 
 + Kiểm tra xem đã nhập xâu A và xâu B hay chƣa? Nếu chƣa nhập đủ thì đƣa ra 
hộp thoại thông báo. 
 + Thực hiện thay thế xâu A bằng xâu B. 
 + Hiển thị xâu kết quả ra richTextBox xâu A. 
 - Khi kích vào nút ―Xâu hoa‖: 
 + Kiểm tra xem đã nhập xâu A và xâu B hay chƣa? Nếu chƣa nhập đủ thì đƣa ra 
hộp thoại thông báo. 
 + Thực hiện chuyển xâu A và xâu B về xâu chứa toàn ký tự hoa. 
 + Hiển thị xâu kết quả ra richTextBox xâu A và richTextBox xâu B. 
 - Khi kích vào nút ―Thoát‖: thực hiện kết thúc chƣơng trình. 
 Hướng dẫn thực hiện 
 1. Thiết kế Form như yêu cầu đề bài 
 2. Phân tích yêu cầu 
 Theo yêu cầu của bài toán thì phải có một Form chứa: 
 - Các đối tƣợng có nội dung ―CHƢƠNG TRÌNH XỬ LÝ CHUỖI‖, ―Nhập 
chuỗi A‖, ―Nhập chuỗi B‖ là các Label. 
 - Đối tƣợng ô nhập xâu A, xâu B và kết quả là các RichTextBox. 
 - Đối tƣợng nhập và kết quả là các GroupBox. 
 - Các nút ―So sánh‖, ―Nối chuỗi‖, ― Chèn‖, ―Thay thế‖, ― Chuỗi hoa‖, ―Thoát‖ 
là các Button. 
 192 
Tập bài giảng Lập trình cơ bản 
 3. Hướng dẫn thực hiện 
 Nhƣ vậy, để thực hiện công việc thiết kế Form nhƣ yêu cầu bài toán, ngƣời lập 
trình thực hiện các bƣớc sau: 
 Bƣớc 1. Mở C# 
 Bƣớc 2. Tạo Form mới 
 Trên thanh menu, chọn File/New/Project.Trên màn hình xuất hiện cửa sổ New 
Project, chọn ứng dụng Windows Form Appication, sau đó nhập tên của Project vào ô 
Name, kích vào Browse để chọn thƣ mục lƣu trữ Project, sau đó chọn OK. 
 Bƣớc 3. Thiết kế Form theo mẫu và gắn các điều khiển 
 Bƣớc 4. Kết quả thiết kế Form 
 Hình 4.60: Kết quả thiết kế Form chương trình xử lý xâu 
 Bƣớc 5. Viết mã lệnh cho các nút chức năng 
 - Viết mã lệnh cho sự kiện Form Load 
 private void Form1_Load(object sender, EventArgs e) 
 { 
 vohieuhoa(false); 
 rtbox_A.ResetText(); 
 rtbox_B.ResetText(); 
 rtbox_A.Focus(); 
 } 
 - Viết mã lệnh cho hàm vô hiệu hóa các button 
 void vohieuhoa(bool gt) 
 { 
 bt_chen.Enabled = gt; 
 bt_chuoihoa.Enabled = gt; 
 bt_noichuoi.Enabled = gt; 
 bt_sosanh.Enabled = gt; 
 bt_thaythe.Enabled = gt; 
 } 
 - Viết mã lệnh cho sự kiện TextChanged của richTextBox nhập xâu A 
 193 
Tập bài giảng Lập trình cơ bản 
 private void rtbox_A_TextChanged(object sender, EventArgs e) 
 { 
 vohieuhoa(true); 
 } 
 - Viết mã lệnh cho sự kiện TextChanged của richTextBox nhập xâu B 
 private void rtbox_B_TextChanged(object sender, EventArgs e) 
 { 
 vohieuhoa(true); 
 } 
 - Viết mã lệnh cho sự kiện kích chuột vào nút so sánh 
 private void bt_sosanh_Click(object sender, EventArgs e) 
 { 
 rtbox_ketqua.ResetText(); 
 if (kiemtra(rtbox_A.Text) || kiemtra(rtbox_B.Text)) 
 MessageBox.Show("Chưa nhập xâu", "Thông báo"); 
 else if (string.Compare(rtbox_A.Text, rtbox_B.Text) == 0) 
 rtbox_ketqua.Text = "Hai chuỗi giống nhau"; 
 else if (string.Compare(rtbox_A.Text, rtbox_B.Text) <0) 
 rtbox_ketqua.Text = "Chuỗi A nhỏ hơn chuỗi B"; 
 else rtbox_ketqua.Text = "Chuỗi A lớn hơn chuỗi B"; 
 } 
 - Viết mã lệnh cho hàm kiểm tra chuỗi rỗng 
 bool kiemtra(string st) 
 { 
 if (string.IsNullOrWhiteSpace(st)) return true; 
 else return false; 
 } 
 - Viết mã lệnh cho sự kiện kích chuột vào nút nối chuỗi 
 private void bt_noichuoi_Click(object sender, EventArgs e) 
 { 
 rtbox_ketqua.ResetText(); 
 if (kiemtra(rtbox_A.Text) || kiemtra(rtbox_B.Text)) 
 MessageBox.Show("Chưa nhập xâu", "Thông báo"); 
 else 
 { 
 string st, st1, st2; 
 st1 = rtbox_A.Text; 
 st2 = rtbox_B.Text; 
 st = string.Concat(st1, st2); 
 rtbox_ketqua.Text = st; 
 } 
 } 
 - Viết mã lệnh cho sự kiện kích chuột vào nút chèn 
 private void bt_chen_Click(object sender, EventArgs e) 
 194 
Tập bài giảng Lập trình cơ bản 
 { 
 bool kt; int n; 
 rtbox_ketqua.ResetText(); 
 if (kiemtra(rtbox_A.Text) || kiemtra(rtbox_B.Text)) 
 MessageBox.Show("Chưa nhập xâu", "Thông báo"); 
 else 
 { 
 string st, st1, st2; 
 st1 = rtbox_A.Text; 
 st2 = rtbox_B.Text; 
 do 
 { 
 kt = 
 int.TryParse(Microsoft.VisualBasic.Interaction.InputBox("Nhập vị trí 
 cần bổ sung n = "), out n); 
 } while (!kt || n st1.Length); 
 st = st1.Insert(n, st2); 
 rtbox_ketqua.Text = st; 
 } 
 } 
 - Viết mã lệnh cho sự kiện kích chuột vào nút thay thế 
 private void bt_thaythe_Click(object sender, EventArgs e) 
 { 
 if (kiemtra(rtbox_A.Text))MessageBox.Show("Chưa nhập xâu", 
 "Thông báo"); 
 else 
 { 
 string xau_can_thay = Microsoft.VisualBasic.Interaction.InputBox("Nhập xâu cần 
 thay thế", "Nhập xâu", "", 100, 100); 
 string xau_thay_the = 
 Microsoft.VisualBasic.Interaction.InputBox("Nhập xâu thay thế", "Nhập xâu", "", 
 100, 100); 
 st1 = st1.Replace(xau_can_thay, xau_thay_the); 
 rtbox_A.Text = st1; 
 } 
 } 
 - Viết mã lệnh cho sự kiện kích chuột vào nút chuỗi hoa 
 private void bt_chuoihoa_Click(object sender, EventArgs e) 
 { 
 rtbox_ketqua.ResetText(); 
 if (kiemtra(rtbox_A.Text) || kiemtra(rtbox_B.Text)) 
 MessageBox.Show("Chưa nhập xâu", "Thông báo"); 
 else 
 { 
 195 
Tập bài giảng Lập trình cơ bản 
 string st1, st2; 
 st1 = rtbox_A.Text; 
 st2 = rtbox_B.Text; 
 st1 = st1.ToUpper(); 
 st2 = st2.ToUpper(); 
 rtbox_A.Text = st1; 
 rtbox_B.Text = st2; 
 } 
 } 
 - Viết mã lệnh cho sự kiện kích chuột vào nút thoát 
 private void bt_Thoat_Click(object sender, EventArgs e) 
 { 
 this.Close(); 
 } 
 Bƣớc 6. Kết quả chạy chƣơng trình 
 Hình 4.61: Kết quả chạy chương trình xử lý xâu 
Bài 4.14 
Lập chƣơng trình thực hiện các yêu cầu sau: 
1. Thiết kế Form nhƣ hình sau 
 Hình 4.62: Chuẩn hóa và đếm từ trong xâu 
 196 
Tập bài giảng Lập trình cơ bản 
Yêu cầu: 
 - Nhãn chuẩn hóa và đếm từ trong xâu: Font Time New Roman, chữ hoa, in 
đậm, cỡ chữ 16, căn giữa Form. 
 - GroupBox nhập xâu và kết quả: Font Time New Roman, cỡ chữ 14 
 - Điều khiển để nhập xâu và hiển thị kết quả là các RichTextBox và đƣợc đặt 
trong các GroupBox tƣơng ứng. 
 - Nhãn đếm từ: Font Time New Roman, cỡ chữ 14. 
 - Các điều khiển ―Chuẩn hóa‖, ―Đếm từ‖, ―Thoát là các Button. 
2. Lập trình cho các nút sự kiện: 
 - Khi Load Form: 
 + richTextBox nhập xâu sáng lên cho phép nhập xâu. 
 + Các điều khiển khác vô hiệu hóa (nút ―Thoát‖ luôn sáng). 
 - Nút ―Chuẩn hóa‖ sáng lên khi nhập ở richTextBox nhập xâu. 
 - Khi kích vào nút ―Chuẩn hóa‖ thì: 
 + RichTextBox nhập xâu vô hiệu hóa. 
 + Thực hiện chuẩn hóa xâu và đƣa kết quả ra richTextBox kết quả 
 + Nút ―Đếm từ‖ sáng lên đồng thời lúc này nút ―Chuẩn hóa‖ vô hiệu hóa. 
 - Khi kích vào nút ―Đếm từ‖ thì: 
 + Thực hiện đếm từ của xâu đã chuẩn hóa. 
 + Hiển thị kết quả ra nhãn đếm từ. 
 TAI LIỆU THAM KHẢO 
[1] Phạm Hữu Khang, Đoàn Thiện Ngân. C# 2005 - Lập trình cơ bản. Nhà xuất bản 
 Lao động xã hội. 2006. 
[2] Phạm Hữu Khang, Đoàn Thiện Ngân. C# 2005 - Lập trình Windows Forms. Nhà 
 xuất bản Lao động xã hội. 2006. 
[3] Microsoft .net (C#), Trung tâm đào tạo CNTT chất lƣợng cao, cổng cntt Việt Nam. 
 www.itgatevn.com.vn 
[4] Programming C#, Jesse Liberty, O‘Reilly. 
[5] Hƣớng dẫn thực hành lâp trình cơ bản, Đại học Công nghệ Đồng Nai 
[6] Windows Forms Programming with C#, Erik Brown, Manning. 
 197 
Tập bài giảng Lập trình cơ bản 
[7]  
 198 

File đính kèm:

  • pdfgiao_trinh_lap_trinh_co_ban_phan_2.pdf