Tập bài giảng Thực hành kỹ thuật lập trình

Viết chương trình thực hiện các công việc sau: 1. Thiết kế Form theo mẫu Yêu cầu: - Nhãn định giá biểu thức hậu tố: Font Time New Roman, chữ hoa, in đậm, cỡ chữ 14, căn giữa Form. - Nhãn nhập biểu thức trung tố, biểu thức hậu tố: Font Time New Roman, cỡ chữ 14 - Điều khiển để nhập biểu thức trung tố đầy đủ ngoặc và biểu thức hậu tố là các RichTextBox. - Các điều khiển “Chuyển hậu tố”, ”Thoát” là các Button. 2. Lập trình cho các sự kiện: - Khi Load Form: + RichTextBox nhập biểu thức trung tố đầy đủ ngoặc sáng lên cho phép hoạt động. + Điều khiển “Chuyển hậu tố” vô hiệu hóa , nút “Thoát” luôn sáng, richTextBox kết quả luôn ẩn. - Khi người dùng nhập biểu thức vào richTextBox nhập biểu thức trung tố thì button chuyển hậu tố sáng lên. - Khi người dùng kích vào nút “Chuyển hậu tố ”: + Kiểm tra xem người dùng đã nhập biểu thức trung tố hay chưa? Nếu chưa thì đưa ra hộp thoại thông báo và yêu cầu nhập lại + RichTextBox nhập biểu thức trung tố vô hiệu hóa + Thực hiện chuyển biểu thức trung tố đầy đủ ngoặc về dạng hậu tố và hiển thị biểu thức hậu tố ra richTextBox hậu tố. - Khi người dùng kích vào nút “Thoát”: thực hiện kết thúc chương trình.

pdf123 trang | Chia sẻ: Tiểu Khải Minh | Ngày: 21/02/2024 | Lượt xem: 68 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Tập bài giảng Thực hành kỹ thuật lập trình, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
uả. - Khi ngƣời dùng kích vào nút “ Tổng các số lẻ”: thực hiện tính tổng các phần tử có giá trị lẻ của ma trận và hiển thị kết quả ra richtextbox ở trong Groupbox kết quả. - Khi ngƣời dùng kích vào nút “ Đếm các số chia hết cho 3 và 7”: thực hiện đếm các phần tử có giá trị chia hết cho 3 và của ma trận và hiển thị kết quả ra richtextbox ở trong Groupbox kết quả. - Khi ngƣời dùng kích vào nút “ Tính tổng từng hàng”: thực hiện tính tổng các phần tử trên từng hàng của ma trận và hiển thị kết quả ra richtextbox ở trong Groupbox kết quả. - Khi ngƣời dùng kích vào nút “ Liệt kê các số nguyên tố”: Hiển thị ra richtextbox ở trong Groupbox các số nguyên tố có trong ma trận. - Khi ngƣời dùng kích vào nút “ Thoát”: thực hiện dừng chƣơng trình. Tập bài giảng Thực hành kỹ thuật lập trình 79 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 “BÀI TẬP VỀ MẢNG HAI CHIỀU”, ”Nhập số hàng”, “Nhập số cột”, ”Nhập giá trị” là các Label. - Đối tƣợng ô để nhập số hàng, nhập số cột và nhập giá trị là các Textbox. - Đối tƣợng ma trận vừa nhập, kết quả là các GroupBox. - Điều khiển để hiển thị ma trận vừa nhập và kết quả là các Richtextbox. - Các nút “Tìm giá trị lớn nhất”, “Tính tổng các số lẻ”, “Đếm các số chia hết cho 3 và 7”, “ Tính tổng từng hàng”, “ Liệt kê các số nguyên tố”, “Thoát” là các Button. 3. Hƣớng dẫn thực hiện Bƣớc 1. Thiết kế Form theo mẫu và gắn các điều khiển Bƣớc 2. Kết quả thiết kế Form Hình 1. 66. Kết quả thiết kế Form bài tập mẫu về mảng hai chiều Bƣớc 3. 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) { Tập bài giảng Thực hành kỹ thuật lập trình 80 txt_m.Enabled = gt; txt_giatri.Enabled = gt; 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)) Tập bài giảng Thực hành kỹ thuật lập trình 81 { 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(); } Tập bài giảng Thực hành kỹ thuật lập trình 82 - 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ố nguyên tố"; } - Viết mã lệnh cho hàm kiểm tra số nguyên tố Tập bài giảng Thực hành kỹ thuật lập trình 83 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 1. 67. Kết quả chạy chƣơng trình bài tập mẫu về mảng hai chiều 1.3.3 Bài tập thực hành Bài 1 Viết một chƣơng trình thực hiện các yêu cầu sau: 1. Thiết kế Form theo mẫu Hình 1. 68. Các thao tác trên mảng hai chiều Yêu cầu: Tập bài giảng Thực hành kỹ thuật lập trình 84 - Nhãn một số thao tác trên mảng hai chiều: Font Time New Roman, chữ hoa, in đậm, cỡ chữ 14, căn giữa Form. - Nhãn nhập số hàng, nhập số cột, ma trận vừa nhập, ma trận kết quả, kết quả: Font Time New Roman, cỡ chữ 11. - Điều khiển lựa chọn là một ComboBox nhận các giá trị: “Tổng hàng k”, “Giá trị nhỏ nhất trên từng hàng”, “ Xóa cột thứ k”, “Trung bình cộng các phần tử của ma trận”, “Tìm kiếm”. - Đối tƣợng ô để nhập số hàng, nhập số cột là các Textbox. - Điều khiển để hiển thị ma trận vừa nhập và ma trận kết quả là RichTextBox. - Điều khiển “Nhập ma trận” là Button. 2. Lập trình thực hiện các công việc sau: - Khi Load Form: Textbox tƣơng ứng với nhãn nhập số hàng, nhập số cột để trống, con trỏ đặt tại textbox tƣơng ứng với nhãn nhập số hàng. Nhãn kết quả, ma trận kết quả và richtextbox tƣơng ứng với nó vô ẩn, Combobox tƣơng ứng với nhãn lựa chọn và Richtextbox tƣơng ứng với nhãn ma trận vừa nhập vô hiệu hóa. - Khi ngƣời dùng kích vào nút “Nhập ma trận”: + Thực hiện kiểm tra xem ngƣời dùng đã nhập đủ dữ liệu vào các textbox tƣơng ứng với nhãn nhập số hàng và nhập số cột. Nếu chƣa nhập đủ dữ liệu thì hiện lên hộp thoại thông báo và yêu cầu nhập. Ngƣợc lại thì kiểm tra xem dữ liệu nhập vào có hợp lệ hay không?( giá trị nhập vào là số nguyên dƣơng). Nếu không hợp lệ thì hiện lên hộp thoại thông báo yêu cầu nhập lại. + Ngƣợc lại thì hiện lên cửa sổ có môi trƣờng nhập để ngƣời dùng nhập vào đó giá trị từng phần tử của ma trận (kiểm tra giá trị nhập vào phải là số nguyên). + Khi ngƣời dùng nhập xong ma trận thì Combobox tƣơng ứng với nhãn lựa chọn sáng lên cho phép hoạt động. - Combobox lựa chọn cho phép chọn một trong số các công việc sau: + Nếu giá trị lựa chọn trên Combobox là “Tổng hàng k” thì: Hiện lên cửa sổ có môi trƣờng nhập để ngƣời dùng nhập vào đó số nguyên dƣơng k (k là số nguyên dƣơng). Thực hiện tính tổng các phần tử trên hàng k. Nhãn kết quả hiện lên và hiển thị ra nhãn đó tổng các phần tử trên hàng k của ma trận. + Nếu giá trị lựa chọn trên Combobox là “Giá trị nhỏ nhất trên từng hàng” thì: Nhãn kết quả hiện lên. Thực hiện tìm giá trị nhỏ nhất trên từng hàng của ma trận. Hiển thị giá trị nhỏ nhất của từng hàng ra nhãn kết quả. + Nếu giá trị lựa chọn trên Combobox là “ Xóa cột thứ k” thì: Tập bài giảng Thực hành kỹ thuật lập trình 85 Hiện lên cửa sổ có môi trƣờng nhập để ngƣời dùng nhập vào đó số nguyên dƣơng k (k là số nguyên dƣơng). Nhãn ma trận kết quả và RichTexBox tƣơng ứng với nhãn ma trận kết quả hiện lên. Thực hiện xóa cột thứ k của ma trận. Hiển thị ma trận sau khi xóa cột thứ k lên RichTextBox tƣơng ứng với nhãn kết quả. + Nếu giá trị lựa chọn trên Combobox là “Trung bình cộng các phần tử của ma trận” thì: Nhãn kết quả hiện lên. Thực hiện tính trung bình cộng các phần tử của ma trận A. Hiển thị giá trị trung bình cộng các phần tử của ma trận ra nhãn kết quả. + Nếu giá trị lựa chọn trên Comboxbox là “Tìm kiếm” thì: Hiện lên cửa sổ có môi trƣờng nhập để ngƣời dùng nhập vào đó số nguyên X. Nhãn kết quả hiện lên. Thực hiện tìm kiếm xem X có trong ma trận không? Đƣa ra kết quả tìm kiếm ở nhãn kết quả. Hướng dẫn: 1. Thiết kế Form nhƣ yêu cầu đề bài 2. Phân tích yêu cầu 3. Hƣớng dẫn thực hiện Bƣớc 1. Thiết kế Form theo mẫu và gắn các điều khiển Bƣớc 2. Viết mã lệnh cho các nút chức năng - Viết mã lệnh khai báo ma trận, số nguyên n và m int n, m; int[,] A; - Viết mã lệnh cho sự kiện Load Form private void Form1_Load(object sender, EventArgs e) { combo_luachon.Enabled = false; rtbox_hienthi.Enabled = false; rtbox_ketqua.Visible = false; lb_ketqua.Visible = false; lb_matranKQ.Enabled = false; txt_n.TabIndex = 1; txt_n.ResetText(); txt_m.ResetText(); txt_n.Focus(); } Tập bài giảng Thực hành kỹ thuật lập trình 86 - 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, out int n) { bool kt; kt = int.TryParse(S, out n); return kt && n > 0; } - Viết mã lệnh cho sự kiện kích chuột vào nút nhập private void bt_nhap_Click(object sender, EventArgs e) { bool kt; rtbox_hienthi.Text=""; if (kiemtra_dulieu(txt_n.Text, out n) && kiemtra_dulieu(txt_m.Text, out m)&&kiemtra(txt_n.Text)&&kiemtra(txt_m.Text)) { A = new int[n, m]; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { do { kt = int.TryParse(Microsoft.VisualBasic.Interaction.InputBox("Nhap A[" + (i + 1).ToString() + "," + (j + 1).ToString() + "]=", "Nhập phần tử của ma trận"), out A[i, j]); } while (!kt); rtbox_hienthi.Text += A[i, j].ToString()+" "; } rtbox_hienthi.Text += "\n"; } combo_luachon.Enabled = true; } else MessageBox.Show("Nhập sai n hoặc m", "Thông báo"); } - Viết mã lệnh cho hàm tính tổng các phần tử trên hàng thứ k int tonghangk(int[,] A, int n, int m, int k) { int S = 0; for (int j = 0; j < m; j++) S = S + A[k-1, j]; return S; } Tập bài giảng Thực hành kỹ thuật lập trình 87 - Viết mã lệnh cho hàm tìm giá trị nhỏ nhất trên từng hàng void Min_hang(int[,] A, int n, int m) { int min; for(int i=0;i<n;i++) { min= A[i,0]; for (int j = 0; j < m; j++) if (A[i, j] < min) min = A[i, j]; lb_ketqua.Text+= "Min hàng " + (i + 1).ToString() + "là: " + min.ToString()+"\n"; } } - Viết mã lệnh cho hàm xóa cột thứ k của ma trận void xoa_cot_k(int[,] A, int n, ref int m, int k) { lb_matranKQ.Visible = true; lb_matranKQ.Text = "Ma trận xóa cột thứ " + (k).ToString(); rtbox_ketqua.Visible = true; rtbox_ketqua.Text = ""; for (int i = 0; i < n; i++) for (int j = k-1; j <m-1; j++) A[i, j] = A[i, j + 1]; m--; } - Viết mã lệnh cho hàm tính trung bình cộng các phần tử của ma trận float tbc(int[,] A, int n, int m) { int S = 0; for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) S+= A[i, j]; return (float)S / (n * m); } - Viết mã lệnh cho hàm tìm kiếm bool timkiem(int[,] A, int n, int m, int X) { bool kt = false; int d = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) if (A[i, j] == X) { d = 1; kt = true; break; } if (d == 1) break; } Tập bài giảng Thực hành kỹ thuật lập trình 88 return kt; } - Viết mã lệnh cho sự kiện chọn phần tử trên combobox private void combo_luachon_SelectedIndexChanged(object sender, EventArgs e) { bool kt; int k,X; lb_ketqua.Visible = true; lb_ketqua.Text = ""; lb_matranKQ.Visible = false; rtbox_ketqua.Visible = false; if (string.Compare(combo_luachon.SelectedItem.ToString(), "Tổng hàng k") == 0) { do { kt = int.TryParse(Microsoft.VisualBasic.Interaction.InputBox("Nhập k=","Nhập hàng cần tính tổng"), out k); } while (k n||!kt); lb_ketqua.Text = "Tổng hàng " + (k).ToString() + " là " + tonghangk(A, n, m, k).ToString(); } else if (string.Compare(combo_luachon.SelectedItem.ToString(), "Giá trị nhỏ nhất trên từng hàng") == 0) { lb_ketqua.Visible = true; Min_hang(A, n, m); } else if (string.Compare(combo_luachon.SelectedItem.ToString(), "Xóa cột thứ k") == 0) { do { kt = int.TryParse(Microsoft.VisualBasic.Interaction.InputBox("Nhập k=", "Nhập cột cần xóa"), out k); } while (k m||!kt); xoa_cot_k(A, n, ref m, k); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) rtbox_ketqua.Text += A[i, j].ToString() + " "; rtbox_ketqua.Text += "\n"; } } else if (string.Compare(combo_luachon.SelectedItem.ToString(), "Trung bình cộng các phần tử của ma trận") == 0) { lb_ketqua.Visible = true; lb_ketqua.Text = "Trung bình cộng các phần tử của ma trận là " + tbc(A, n, m).ToString("F3"); } Tập bài giảng Thực hành kỹ thuật lập trình 89 else { lb_ketqua.Visible = true; do { kt = int.TryParse(Microsoft.VisualBasic.Interaction.InputBox("Nhập giá trị cần tìm kiếm X", "Nhập giá trị tìm kiếm"), out X); } while (!kt); if (timkiem(A, n, m, X)) lb_ketqua.Text = X.ToString() + " có trong ma trận"; else lb_ketqua.Text = X.ToString() + " không có trong ma trận"; } } Bƣớc 3. Kết quả chạy chƣơng trình Hình 1. 69. Kết quả chạy chƣơng trình Bài 2 Viết chƣơng trình thực hiện các công việc sau: 1. Thiết kế Form nhƣ hình Hình 1. 70. Tổng hai ma trận Yêu cầu: Tập bài giảng Thực hành kỹ thuật lập trình 90 - Nhãn tính tổng hai ma trận: Font Time New Roman, chữ hoa, in đậm, cỡ chữ 16, căn giữa Form. - Nhãn nhập số hàng, nhập số cột, ma trận A, ma trận B, ma trận tổng: Font Time New Roman, cỡ chữ 14. - Đối tƣợng ô tƣơng ứng với nhãn nhập số hàng, nhập số cột là các Textbox. - Điều khiển để hiển thị ma trận A, ma trận B và ma trận tổng là các RichTextBox. - Đối tƣợng nhập và kết quả là các RichTextbox. - Các điều khiển “Nhập ma trận A”, “Nhập ma trận B”, “Tổng hai ma trận” , “Thoát” là các Button. 2. Lập trình thực hiện các công việc sau: - Khi Load Form: + Textbox tƣơng ứng với nhãn nhập số hàng sáng, để trổng và con trỏ đặt tại ô đó. + Textbox tƣơng ứng với nhãn nhập số cột, nút “Nhập ma trận A”, “Nhập ma trận B”, “Tổng hai ma trận”, các Richtextbox tƣơng ứng với các nhãn “Ma trận A”, “Ma trận B”, “Ma trận tổng” vô hiệu hóa. - Khi ngƣời dùng nhập giá trị vào textbox tƣơng ứng với nhãn nhập số hàng thì textbox tƣơng ứng với nhãn nhập số cột sáng lên cho phép hoạt động, đồng thời textbox đó vô hiệu hóa. - Khi ngƣời dùng nhập giá trị vào textbox tƣơng ứng với nhãn nhập số cột thì nút “Nhập ma trận A” sáng lên cho phép hoạt động, đồng thời textbox đó vô hiệu hóa. - Khi ngƣời dùng kích vào nút “Nhập ma trận A”: + Kiểm tra xem dữ liệu nhập vào có hợp lệ không? (giá trị nhập vào tƣơng ứng với số hàng, số cột là các số nguyên dƣơng). Nếu chƣa hợp lệ thì hiện lên hộp thoại thông báo, các textbox tƣơng ứng với nhãn nhập số hàng, số cột sáng lên. Ngƣợc lại hiện lên cửa sổ có môi trƣờng nhập để ngƣời dùng nhập giá trị cho các phần tử của ma trận A. + Nút “Nhập ma trận B” sáng lên cho phép hoạt động. - Khi ngƣời dùng kích vào nút “Nhập ma trận B”: + Nút “Nhập ma trận A” vô hiệu hóa. + Hiện lên cửa sổ có môi trƣờng nhập để ngƣời dùng nhập giá trị cho các phần tử của ma trận B. + Nút “Tổng hai ma trận” sáng lên cho phép hoạt động. - Khi ngƣời dùng kích vào nút “Tổng hai ma trận”: + Nút “Nhập ma trận B” vô hiệu hóa. Tập bài giảng Thực hành kỹ thuật lập trình 91 + Thực hiện tính tổng hai ma trận, hiển thị ma trận tổng ra richtexbox tƣơng ứng với nhãn ma trận tổng . - Khi ngƣời dùng kích vào nút “Thoát” thì thực hiện kết thúc chƣơng trình. Hướng dẫn thực hành: 1. Thiết kế Form nhƣ yêu cầu đề bài 2. Phân tích yêu cầu 3. Hƣớng dẫn thực hiện Bƣớc 1. Thiết kế Form theo mẫu và gắn các điều khiển Bƣớc 2. Viết mã lệnh cho các sự kiện - Viết mã lệnh khai báo 3 ma trận và cấp của ma trận int n, m; int[,] A; int [,]B; int [,] C; - Viết mã lệnh cho sự kiện Load Form private void Form1_Load(object sender, EventArgs e) { rtbox_A.Enabled = false; rtbox_B.Enabled = false; rtbox_tong.Enabled = false; txt_m.Enabled = false; bt_nhapA.Enabled = false; bt_nhapB.Enabled = false; bt_Tong.Enabled = false; } - 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) { 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 số cột private void txt_m_KeyUp(object sender, KeyEventArgs e) { bt_nhapA.Enabled = true; txt_n.Enabled = false; } - Viết mã lệnh cho hàm kiểm tra chuỗi 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, out int n) { Tập bài giảng Thực hành kỹ thuật lập trình 92 bool kt; kt = int.TryParse(S, out n); return kt && n > 0; } - Viết mã lệnh cho sự kiện kích chuột vào nút nhập ma trận A private void bt_matranA_Click(object sender, EventArgs e) { bool kt; rtbox_A.Text = ""; txt_m.Enabled = false; if (kiemtra_dulieu(txt_n.Text, out n) && kiemtra_dulieu(txt_m.Text, out m)&&!kiemtra(txt_m.Text)&&!kiemtra(txt_n.Text)) { A = new int[n, m]; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { kt = int.TryParse(Microsoft.VisualBasic.Interaction.InputBox("Nhap A[" + (i + 1).ToString() + "," + (j + 1).ToString() + "]=", "Nhập phần tử của ma trận"), out A[i, j]); rtbox_A.Text += A[i, j].ToString() + " "; } rtbox_A.Text += "\n"; } bt_nhapB.Enabled = true; } else { MessageBox.Show("Nhập sai n hoặc m", "Thông báo"); txt_n.Enabled = true; txt_m.Enabled = true; } } - Viết mã lệnh cho sự kiện kích chuột vào nút nhập ma trận B private void bt_matranB_Click(object sender, EventArgs e) { bool kt; rtbox_B.Text = ""; bt_nhapA.Enabled = false; if (kiemtra_dulieu(txt_n.Text, out n) && kiemtra_dulieu(txt_m.Text, out m)&&!kiemtra(txt_m.Text)&&!kiemtra(txt_n.Text)) { B = new int[n, m]; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { kt = int.TryParse(Microsoft.VisualBasic.Interaction.InputBox("Nhap B[" + (i + 1).ToString() + "," + (j + 1).ToString() + "]=", "Nhập phần tử của ma trận"), out B[i, j]); Tập bài giảng Thực hành kỹ thuật lập trình 93 rtbox_B.Text += B[i, j].ToString() + " "; } rtbox_B.Text += "\n"; } bt_Tong.Enabled = true; } else MessageBox.Show("Nhập sai n hoặc m", "Thông báo"); } - Viết mã lệnh cho sự kiện kích chuột vào nút tính tổng hai ma trận private void bt_Tong_Click(object sender, EventArgs e) { C = new int[n, m]; bt_nhapB.Enabled = false; for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) C[i, j] = A[i, j] + B[i, j]; // Hien thi rtbox_tong.Text = ""; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) rtbox_tong.Text += C[i, j].ToString() + " "; rtbox_tong.Text += "\n"; } } Kết quả chạy chƣơng trình Hình 1. 71. Kết quả chạy chƣơng trình Bài 3 Viết một chƣơng trình thực hiện các công việc sau: 1. Thiết kế Form nhƣ hình sau: Tập bài giảng Thực hành kỹ thuật lập trình 94 Hình 1. 72. Form nhập ma trận vuông Yêu cầu: - Nhãn ma trận vuông: Font Time New Roman, chữ hoa, in đậm, cỡ chữ 16, căn giữa Form. - Nhãn nhập cấp của ma trận: Font Time New Roman, cỡ chữ 14. - Đối tƣợng ô tƣơng ứng với nhãn nhập cấp của ma trận là Textbox. - Điều khiển để hiển thị ma trận vừa nhập và kết quả là các RichTextBox - Đối tƣợng “Ma trận vừa nhập”, “Kết quả” là các GroupBox. - Các điều khiển “Nhập ma trận”, “Thoát”,”Tính tổng các phần tử trên đƣờng chéo chính”, “Tìm số dƣơng nhỏ nhất”, “Tính trung bình cộng các số chẵn trên cột k”, “Sắp xếp từng hàng của ma trận tăng dần” là các Button. 2. Lập trình cho các nút sự kiện: - Khi Load Form: + TextBox tƣơng ứng với nhãn nhập cấp của ma trận sáng lên cho phép ngƣời dùng giá trị (kiểm tra sự hợp lệ của dữ liệu nhập vào). + Các điều khiển khác vô hiệu hóa (nút “Thoát” luôn sáng). - Nút Nhập ma trận sáng lên khi ngƣời dùng nhập giá trị ở Textbox nhập n. - Khi ngƣời dùng kích vào nút “Nhập ma trận” thì: + TextBox nhập n vô hiệu hóa. + Hiện lên cửa sổ có môi trƣờng nhập để ngƣời dùng nhập ma trận vuông số nguyên cấp n, hiển thị ma trận ra richTextBox tƣơng ứng với nhãn ma trận vừa nhập. + Sau khi nhập xong ma trận A thì nút “Nhập ma trận” bị vô hiệu hóa và các nút còn lại sáng lên. - Khi ngƣời dùng kích vào nút “Tính tổng các phần tử trên đƣờng chéo chính” thì: + Thực hiện tính tổng các phần tử trên đƣờng chéo chính của ma trận. Tập bài giảng Thực hành kỹ thuật lập trình 95 + Hiển thị giá trị tổng các phần tử trên đƣờng chéo chính của ma trận ra richtextbox tƣơng ứng với nhãn kết quả. - Khi ngƣời dùng kích vào nút “Tìm số dƣơng nhỏ nhất” thì: + Thực hiện tìm số dƣơng nhỏ nhất của ma trận. + Hiển thị số dƣơng nhỏ nhất ra richtextbox tƣơng ứng với nhãn kết quả. - Khi ngƣời dùng kích vào nút “Tính trung bình cộng số chẵn trên cột k” thì: + Hiện lên cửa sổ có môi trƣờng nhập để ngƣời dùng nhập vào số nguyên dƣơng k (kiểm tra dữ liệu nhập vào). + Thực hiện tính trung bình cộng các phần tử có giá trị chẵn trên cột thứ k của ma trận. + Hiển thị giá trung bình cộng đó ra richtextbox tƣơng ứng với nhãn kết quả. - Khi ngƣời dùng kích vào nút “Sắp xếp từng hàng của ma trận tăng dần” thì: + Thực hiện sắp xếp từng hàng của ma trận theo thứ tự tăng dần. + Hiển thị ma trận vừa sắp xếp ra richTextBox tƣơng ứng với nhãn kết quả - Khi ngƣời dùng kích vào nút “Thoát” thì thực hiện kết thúc chƣơng trình. Hướng dẫn thực hành: 1. Thiết kế Form nhƣ yêu cầu đề bài 2. Phân tích yêu cầu 3. Hƣớng dẫn thực hiện Bƣớc 1. Thiết kế Form theo mẫu và gắn các điều khiển tƣơng ứng Kết quả thiết kế Form Hình 1. 73. Form Ma trận vuông Bƣớc 2. Viết mã lệnh thực hiện các công việc - Viết mã lệnh khai báo ma trận int n; int[,] A; Tập bài giảng Thực hành kỹ thuật lập trình 96 - 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.Focus(); } - Viết mã lệnh cho hàm vô hiệu hóa các nút void vohieuhoa(bool gt) { bt_Nhap.Enabled = gt; bt_TongCC.Enabled = gt; bt_Sapxep.Enabled = gt; bt_DuongMin.Enabled = gt; bt_TBC_cotk.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() { bool kt; if (kiemtra(txt_n.Text)) return false; kt = int.TryParse(txt_n.Text, out n); return kt && n > 0; } - Viết mã lệnh cho sự kiện kích chuột vào nút nhập ma trận private void bt_Nhap_Click(object sender, EventArgs e) { bool kt; rtbox_Hienthi.Text = ""; if (kiemtra_dulieu()) { A = new int[n, n]; vohieuhoa(true); txt_n.Enabled = false; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { kt = int.TryParse(Microsoft.VisualBasic.Interaction.InputBox("Nhap A[" + (i + Tập bài giảng Thực hành kỹ thuật lập trình 97 1).ToString() + "," + (j + 1).ToString() + "]=", "Nhập phần tử của ma trận"), out A[i, j]); rtbox_Hienthi.Text += A[i, j].ToString() + " "; } rtbox_Hienthi.Text += "\n"; } bt_Nhap.Enabled = false; } else { MessageBox.Show("Nhập sai n", "Thông báo"); txt_n.Focus(); } } - Viết mã lệnh cho sự kiện kích chuột vào nút tính tổng các phần tử trên đƣờng chéo chính private void bt_TongCC_Click(object sender, EventArgs e) { int S = 0; rtbox_ketqua.ResetText(); for (int i = 0; i < n; i++) S+= A[i, i]; rtbox_ketqua.Text = "Tổng các phần tử trên đƣờng chéo chính là"+ S.ToString(); } - Viết mã lệnh cho sự kiện kích chuột vào nút tìm số dƣơng nhỏ nhất private void bt_DuongMin_Click(object sender, EventArgs e) { bool kt = false; rtbox_ketqua.ResetText(); int i = 0, j, min=0; while (i<n) { j=0; while (j < n && A[i, j] <= 0) j++; if (j < n) { min = A[i, j]; kt = true; break; } else i++; } if (kt) { for (i = 0; i < n; i++) for (j = 0; j < n; j++) if (A[i, j] > 0 && A[i, j] < min) min = A[i, j]; Tập bài giảng Thực hành kỹ thuật lập trình 98 rtbox_ketqua.Text = "Số dƣơng nhỏ nhất là: "+ min.ToString(); } else rtbox_ketqua.Text = "Không có số dƣơng nhỏ nhất"; } - Viết mã lệnh cho sự kiện kích chuột vào nút sắp xếp từng hàng của ma trận tăng dần private void bt_SX_Click(object sender, EventArgs e) { int tg; rtbox_ketqua.ResetText(); for(int i =0;i<n;i++) for(int j=0;j<n-1;j++) for (int k = j+1; k < n; k++) if (A[i, j] > A[i, k]) { tg=A[i,j]; A[i, j] = A[i, k]; A[i, k] = tg; } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) rtbox_ketqua.Text += A[i, j].ToString() + " "; rtbox_ketqua.Text += "\n"; } } - Viết mã lệnh cho sự kiện kích chuột vào tính trung bình cộng số chẵn trên cột k private void bt_TBC_cotk_Click(object sender, EventArgs e) { bool kt; int k, S = 0, d = 0; rtbox_ketqua.ResetText(); do { kt = int.TryParse(Microsoft.VisualBasic.Interaction.InputBox("Nhập cột k=", "Tính TBC chẵn trên cột thứ k"), out k); } while (!kt || k n); for (int i = 0; i < n; i++) if (A[i, k-1] % 2 == 0) { Tập bài giảng Thực hành kỹ thuật lập trình 99 S+= A[i,k-1]; d++; } if (d == 0) rtbox_ketqua.Text = "Không tính TBC"; else rtbox_ketqua.Text = "TBC số chẵn trên cột " + (k).ToString() + "là:" + ((S*1.0f/d)).ToString("F2"); } - Viết mã lệnh cho sự kiện kích chuột vào thoát private void bt_Thoat_Click(object sender, EventArgs e) { this.Close(); } - Viết mã lệnh cho sự kiện KeyUp của textbox nhập cấp ma trận private void txt_n_KeyUp(object sender, KeyEventArgs e) { bt_Nhap.Enabled = true; } Kết quả chạy chƣơng trình Hình 1. 74. Kết quả chạy chƣơng trình 1.3.4. Bài tập về nhà Bài 1 Viết chƣơng trìnhthự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ó. 6. Tính trung bình cộng các phần tử có giá trị chẵn trong ma trận Tập bài giảng Thực hành kỹ thuật lập trình 100 Bài 2 Viết chƣơng trìnhthự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 3 Viết chƣơng trìnhthực hiện các yêu cầu sau: Bảng kết quả bóng đá là một mảng hai chiều A gồm n hàng, m cột. Trong đó mỗi phần tử đƣợc xác định theo qui tắc sau: A[i, j] = 0 nếu i=j Ngƣợc lại (i ≠ j) thì: A[i,j] = 0 nếu đội i thua đội j A[i,j] =1 nếu đội i hòa đội j A[i,j]= 3 nếu đội i thắng đội j 1. Nhập ma trận A. 2. Hiển thị ma trận A. 3. Đếm số đội có số trận thắng nhiều hơn số trận thua. 4. Đếm số đội không có trận thua nào. 5. Kiểm tra xem đội nào có số trận thắng nhiều hơn một nửa số trận đấu. Tập bài giảng Thực hành kỹ thuật lập trình 101 1.4. Làm việc với xâu ký tự 1.4.1. Tóm tắt các kiến thức cần nhớ 1. Khai báo string Tên_xâu [= “gán một chuỗi”]; 2. Truy cập vào các thành phần của xâu Tên_xâu[chỉ_số]; Một số ký tự đặc biệt nhƣ: “\n”, “\\”,”\t”,...lần lƣợt đại diện cho ký tự xuống dòng, dấu “\” và dấu tab. 3. Phương thức Tostring() Dùng để chuyển đổi một đối tƣợng bất kỳ sang kiểu chuỗi. 4. Các thao tác trên chuỗi Lớp chuỗi cung cấp nhiều phƣơng thức cho việc so sánh, tìm kiếm đƣợc liệt kê trong bảng sau: Thành viên Mô tả Empty Biến thành viên tĩnh đại diện cho một chuỗi rỗng Compare() Phƣơng thức tĩnh so sánh hai chuỗi CompareOrdinal() Phƣơng thức tĩnh, so sánh 2 chuỗi không quan tâm đến ngôn ngữ Concat() Phƣơng thức tĩnh, tạo một chuỗi mới từ nhiều chuỗi Copy() Phƣơng thức tĩnh, tạo một bản sao Equals() Phƣơng thức tĩnh, so sánh hai chuỗi có giống nhau Format() Phƣơng thức tĩnh, định dạng chuỗi bằng các định dạng đặc tả Intern() Phƣơng thức tĩnh, nhận về một tham chiếu đến chuỗi IsInterned() Phƣơng thức tĩnh, nhận về một tham chiếu đến chuỗi đã tồn tại Join() Phƣơng thức tĩnh, ghép nối nhiều chuỗi, mềm dẻo hơn Concat() Chars Indexer của chuỗi Length Chiều dài chuỗi (số ký tự) Clone() Trả về một chuỗi Tập bài giảng Thực hành kỹ thuật lập trình 102 CompareTo() So sánh với chuỗi khác CopyTo() Sao chép một lƣợng ký tự trong chuỗi sang mảng ký tự EndsWith() Xác định chuỗi có kết thúc bằng chuỗi tham số không Equals() Xác định hai chuỗi có cùng giá trị Insert() Chèn một chuỗi khác vào chuỗi LastIndexOf() vị trí xuất hiện cuối cùng của một chuỗi con trong chuỗi PadLeft() Canh phải các ký tự trong chuỗi, chèn thêm các khoảng trắng bên trái khi cần PadRight() Canh trái các ký tự trong chuỗi, chèn thêm các khoảng trắng bên phải khi cần Remove() Xóa một số ký tự Split() Cắt một chuỗi thành nhiều chuỗi con StartsWith() Xác định chuỗi có bắt đầu bằng một chuỗi con tham số SubString() Lấy một chuỗi con ToCharArray() Sao chép các ký tự của chuỗi thành mảng các ký tự ToLower() Tạo bản sao chuỗi chữ thƣờng ToUpper() Tạo bản sao chuỗi chữ hoa Trim() Cắt bỏ các khoảng trắng hai đầu chuỗi TrimEnd() Cắt bỏ khoảng trắng cuối chuỗi TrimStart() Cắt bỏ khoảng trắng đầu chuỗi 1.4.2. Bài tập mẫu Bài 1 Viết chƣơng trình thực hiện các công việc sau: 1. Thiết kế Form theo mẫu Tập bài giảng Thực hành kỹ thuật lập trình 103 Hình 1. 75. Form kiểm tra xâu đối xứng Yêu cầu: - Nhãn kiểm tra xâu đối xứng: Font Time New Roman, chữ hoa, in đậm, cỡ chữ 16, căn giữa Form. - Nhãn nhập xâu, thông báo kết quả: Font Time New Roman, cỡ chữ 14. - Điều khiển để nhập xâu là một RichTextBox. - Các điều khiển “Kiểm tra”, “Thoát” là các Button. 2. Lập trình cho các nút chức năng: - Khi ngƣời dùng kích vào nút “Kiểm tra”: + Kiểm tra xem ngƣời dùng đã nhập xâu hay chƣa? Nếu chƣa thì yêu cầu nhập ngƣời dùng nhập. + Hiển thị lên nhãn thông báo xem xâu nhập vào có đối xứng hay không? - Khi ngƣời dùng kích vào nút “Thoát” thì thực hiện thoát khỏi 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 “KIỂM TRA XÂU ĐỐI XỨNG”, ”Nhập xâu”, “thông báo” là các Label. - Đối tƣợng ô nhập xâu là RichTextBox. - Các nút “Kiểm tra”, “Thoát” là các Button. 3. Các bƣớc thực hiện - Thiết kế Form theo mẫu và gắn các điều khiển Tập bài giảng Thực hành kỹ thuật lập trình 104 - Viết mã lệnh cho sự kiện kích chuột vào nút kiểm tra private void bt_kiemtra_Click(object sender, EventArgs e) { lb_Thongbao.Text=""; if (kiemtra(rtbox_Nhapxau.Text)) { MessageBox.Show("Bạn chƣa nhập xâu"); rtbox_input.Focus(); } else { string st = rtbox_Nhapxau.Text; int i = 0, n; bool kt = true; n = st.Length - 1; while (i <= n / 2 && kt) if (st[i] != st[n - i]) kt = false; else i++; if (kt) lb_thongbao.Text = "Xâu đối xứng"; else lb_thongbao.Text = "Xâu không đối xứng"; } } - Viết mã lệnh cho hàm kiểm tra dữ liệu nhập vào 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 thoát private void bt_Thoat_Click(object sender, EventArgs e) { this.Close(); } Kết quả chạy chƣơng trình xâu đối xứng Hình 1. 76. Kết quả chạy chƣơng trình kiểm tra xâu đối xứng Bài 2 Viết chƣơng trình thực hiện các yêu cầu sau: Tập bài giảng Thực hành kỹ thuật lập trình 105 1. Thiết kế Form nhƣ hình sau Hình 1. 77. Chuẩn hóa và đếm từ trong xâu 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 ngƣời dùng 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 ngƣời dùng nhập ở richTextBox nhập xâu. - Khi ngƣời dùng 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 ngƣời dùng 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ừ. Hướng dẫn thực hiện: 1. Thiết kế Form nhƣ yêu cầu đề bài Tập bài giảng Thực hành kỹ thuật lập trình 106 2. Phân tích yêu cầu 3. Hƣớng dẫn thực hiện - Thiết kế Form theo mẫu và gắn các điều khiển tƣơng ứng - Viết mã lệnh cho các sự kiện - Viết mã lệnh cho sự kiện Load Form private void Form1_Load(object sender, EventArgs e) { bt_chuanhoa.Enabled = false; bt_dem.Enabled = false; rtbox_Ketqua.Enabled = false; } - Viết mã lệnh cho sự kiện TextChanged của richTextBox nhập xâu private void rtbox_Nhap_TextChanged(object sender, EventArgs e) { bt_chuanhoa.Enabled = true; } - Viết mã lệnh cho sự kiện kích chuột vào nút chuẩn hóa private void bt_chuanhoa_Click(object sender, EventArgs e) { (kiemtra(rtbox_Nhap.Text)) { MessageBox.Show("Bạn chƣa nhập xâu", "Thông báo"); rtbox_Nhap.Focus(); } else { bt_dem.Enabled = true; rtbox_Nhap.Enabled = false; st = rtbox_Nhap.Text; kt = true; st = st.Trim(); int i = 1, j; while (i < st.Length) { if (st[i] == ' ') { j = i + 1; while (j < st.Length && st[j] == ' ') st = st.Remove(j, 1); i = j + 1; } else i++; } rtbox_Ketqua.Text=st; } bt_chuanhoa.Enabled = false; } - Viết mã lệnh cho hàm kiểm tra dữ liệu nhập vào bool kiemtra(string st) { if (string.IsNullOrWhiteSpace(st)) return true; else return false; } Tập bài giảng Thực hành kỹ thuật lập trình 107 - Viết mã lệnh cho sự kiện kích chuột vào nút đếm từ trong xâu private void bt_dem_Click(object sender, EventArgs e) { int d = 0; for (int i = 0; i < st.Length; i++) if (st[i] == ' ') d++; if (st!= "") d++; lb_demtu.Text= "Xâu có " + d.ToString()+ " từ"; } - 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(); } Kết quả chạy chƣơng trình Hình 1. 78. Kết quả chạy chƣơng trình chuẩn hóa và đếm từ trong xâu 1.4.3. Bài tập thực hành Bài 1 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 1. 79. Chƣơng trình xử lý chuỗi Tập bài giảng Thực hành kỹ thuật lập trình 108 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 ngƣời dùng nhập xâu vào richTextBox nhập A hoặc B thì các button sẽ sáng lên. - Khi ngƣời dùng kích vào nút “So sánh”: + Kiểm tra xem ngƣời dùng đã 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 ngƣời dùng kích vào nút “Chèn”: + Kiểm tra xem ngƣời dùng đã 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 ngƣời dùng kích vào nút “Nối chuỗi”: + Kiểm tra xem ngƣời dùng đã 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 ngƣời dùng kích vào nút “Thay thế”: + Kiểm tra xem ngƣời dùng đã 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 ngƣời dùng kích vào nút “Xâu hoa”: Tập bài giảng Thực hành kỹ thuật lập trình 109 + Kiểm tra xem ngƣời dùng đã 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 ngƣời dùng 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. 3. Hƣớng dẫn thực hiện - 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 1. 80. Kết quả thiết kế Form chƣơng trình xử lý xâu 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) Tập bài giảng Thực hành kỹ thuật lập trình 110 { 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 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; Tập bài giảng Thực hành kỹ thuật lập trình 111 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) { 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) || kiemtra(rtbox_B.Text)) MessageBox.Show("Chƣa nhập xâu", "Thông báo"); else { string st1, st2; st1 = rtbox_A.Text; st2 = rtbox_B.Text; st1 = st1.Replace(st1, st2); 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(); Tập bài giảng Thực hành kỹ thuật lập trình 112 if (kiemtra(rtbox_A.Text) || kiemtra(rtbox_B.Text)) MessageBox.Show("Chƣa nhập xâu", "Thông báo"); else { 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(); } Kết quả chạy chƣơng trình Hình 1. 81. Kết quả chạy chƣơng trình xử lý xâu Bài 2 Viết chƣơng trình thực hiện các công việc sau: 1. Thiết kế Form nhƣ hình sau Hình 1. 82. Chƣơng trình định giá biểu thức hậu tố Tập bài giảng Thực hành kỹ thuật lập trình 113 Yêu cầu: - Nhãn định giá biểu thức hậu tố: Font Time New Roman, chữ hoa, in đậm, cỡ chữ 16, căn giữa Form. - Nhãn nhập biểu thức hậu tố, kết quả: Font Time New Roman, cỡ chữ 14 - Điều khiển để nhập biểu thức hậu tố và để hiển thị kết quả của biểu thức là các RichTextBox. - Các điều khiển “Định giá”, ”Thoát” là các Button. 2. Lập trình cho các sự kiện: - Khi Load Form: + richTextBox nhập biểu thức hậu tố sáng lên cho phép hoạt động. + Điều khiển “Định giá” vô hiệu hóa , nút “Thoát” luôn sáng, richTextBox kết quả luôn ẩn. - Khi ngƣời dùng nhập biểu thức vào richTextBox nhập biểu thức hậu tố thì button định giá sáng lên. - Khi ngƣời dùng kích vào nút “Định giá ”: + Kiểm tra xem ngƣời dùng đã nhập biểu thức hậu tố hay chƣa? Nếu chƣa thì đƣa ra hộp thoại thông báo và yêu cầu nhập lại (lƣu ý các phần tử cách nhau ít nhất một dấu cách). + richTextBox nhập biểu thức hậu tố vô hiệu hóa + Thực hiện định giá biểu thức và hiển thị kết quả ra richTextBox kết quả. - Khi ngƣời dùng 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 “Định giá biểu thức”, “Nhập biểu thức hậu tố”, “Kết quả” là các Label. - Đối tƣợng ô nhập biểu thức hậu tố và hiển thị kết quả định giá là các RichTextBox. - Các nút “Định giá, “Thoát” là các Button. 3. Hƣớng dẫn thực hiện Thiết kế Form theo mẫu và gắn các điều khiển Tập bài giảng Thực hành kỹ thuật lập trình 114 Hình 1. 83.Kết quả thiết kế Form định giá biểu thức hậu tố Viết mã lệnh cho các sự kiện - Viết mã lệnh cho sự kiện Form Load private void Form1_Load(object sender, EventArgs e) { bt_dinhgia.Enabled = false; rtbox_kq.Enabled = false; } - Viết mã lệnh cho sự kiện TextChanged của richTextBox nhập biểu thức hậu tố private void rtbox_hauto_TextChanged(object sender, EventArgs e) { bt_dinhgia.Enabled = true; } - Viết mã lệnh cho hàm kiểm tra chuỗi rỗng bool kiemtra(string s) { if (string.IsNullOrWhiteSpace(s)) return true; else return false; } - Viết mã lệnh cho sự kiện kích chuột vào nút định giá private void bt_dinhgia_Click(object sender, EventArgs e) { if (kiemtra(rtbox_hauto.Text)) { MessageBox.Show("Bạn chƣa nhập biểu thức", "Thông báo"); rtbox_hauto.Focus(); } else { float[] S = new float[max]; int top = 0; string st = rtbox_hauto.Text; int i = 0; float so1, so2, kq, gt; while (i < st.Length) { if (st[i] == ' ') i++; else if (st[i] == '+') { Tập bài giảng Thực hành kỹ thuật lập trình 115 so1 = Pop(S, ref top); so2 = Pop(S, ref top); kq = so2 + so1; Push(S, ref top, kq); i++; } else if (st[i] == '-') { so1 = Pop(S, ref top); so2 = Pop(S, ref top); kq = so2 - so1; Push(S, ref top, kq); i++; } else if (st[i] == '*') { so1 = Pop(S, ref top); so2 = Pop(S, ref top); kq = so2 * so1; Push(S, ref top, kq); i++; } else if (st[i] == '/') { so1 = Pop(S, ref top); so2 = Pop(S, ref top); kq = so2 / so1; Push(S, ref top, kq); i++; } else { int j = i; gt = 0; while (j < st.Length && st[j] != ' ') { gt = gt * 10 + (st[j] - 48); j++; } Push(S, ref top, gt); i = j + 1; } } rtbox_kq.Text = "Giá trị biểu thức hậu tố là: " + Pop(S, ref top).ToString("F2"); } } - Viết mã lệnh cho hàm đẩy phần tử vào ngăn xếp void Push(float[] S, ref int top, float x) Tập bài giảng Thực hành kỹ thuật lập trình 116 { if (top >= max) MessageBox.Show("Stack day"); else { top++; S[top] = x; } } - Viết mã lệnh cho hàm loại bỏ phần tử ra khỏi ngăn xếp float Pop(float[] S, ref int top) { top--; return S[top + 1]; } Kết quả chạy chƣơng trình Hình 1. 84. Kết quả chạy chƣơng trình định giá biểu thức hậu tố 1.4.4. Bài tập về nhà Viế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 1. 85. Form chuyển biểu thức trung tố đầy đủ ngoặc sang hậu tố Yêu cầu: Tập bài giảng Thực hành kỹ thuật lập trình 117 - Nhãn định giá biểu thức hậu tố: Font Time New Roman, chữ hoa, in đậm, cỡ chữ 14, căn giữa Form. - Nhãn nhập biểu thức trung tố, biểu thức hậu tố: Font Time New Roman, cỡ chữ 14 - Điều khiển để nhập biểu thức trung tố đầy đủ ngoặc và biểu thức hậu tố là các RichTextBox. - Các điều khiển “Chuyển hậu tố”, ”Thoát” là các Button. 2. Lập trình cho các sự kiện: - Khi Load Form: + RichTextBox nhập biểu thức trung tố đầy đủ ngoặc sáng lên cho phép hoạt động. + Điều khiển “Chuyển hậu tố” vô hiệu hóa , nút “Thoát” luôn sáng, richTextBox kết quả luôn ẩn. - Khi ngƣời dùng nhập biểu thức vào richTextBox nhập biểu thức trung tố thì button chuyển hậu tố sáng lên. - Khi ngƣời dùng kích vào nút “Chuyển hậu tố ”: + Kiểm tra xem ngƣời dùng đã nhập biểu thức trung tố hay chƣa? Nếu chƣa thì đƣa ra hộp thoại thông báo và yêu cầu nhập lại + RichTextBox nhập biểu thức trung tố vô hiệu hóa + Thực hiện chuyển biểu thức trung tố đầy đủ ngoặc về dạng hậu tố và hiển thị biểu thức hậu tố ra richTextBox hậu tố. - Khi ngƣời dùng kích vào nút “Thoát”: thực hiện kết thúc chƣơng trình.

Các file đính kèm theo tài liệu này:

  • pdftap_bai_giang_thuc_hanh_ky_thuat_lap_trinh.pdf
  • pdftap_bg_thuc_hanh_ky_thuat_lap_trinhp2_8708 (1)_2381798.pdf
Tài liệu liên quan