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.
123 trang |
Chia sẻ: Tiểu Khải Minh | Ngày: 21/02/2024 | Lượt xem: 100 | Lượt tải: 0
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:
- tap_bai_giang_thuc_hanh_ky_thuat_lap_trinh.pdf
- tap_bg_thuc_hanh_ky_thuat_lap_trinhp2_8708 (1)_2381798.pdf