Giáo trình thực hành Lập trình hướng đối tượng - Bài thực hành số 4.2: Viết chương trình tạo từ

Trang 1  
MÔN : LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG  
Bài thực hành số 4.2 : Viết chương trình tạo từ  
I. Mục tiêu :  
ƒ
Giúp SV ôn lại qui trình viết 1 ứng dụng VC# ₫ơn giản, tập trung vào việc sử dụng các  
kiểu dữ liệu cơ bản ₫ịnh sẵn như struct và array.  
II. Nội dung :  
Xây dựng chương trình nhỏ chạy ở chế ₫ộ textmode (console), thực hiện các yêu cầu sau :  
ƒ
1. chờ user nhập vào chuỗi có n ký tự khác nhau.  
2. tìm tất cả phương án ₫ể tạo từ dài n ký tự, mỗi ký tự là ký tự do user nhập, mỗi ký tự  
₫ược dùng 1 lần trong từ.  
3. in các từ tạo ₫ược ₫ể người dùng xem dễ dàng.  
III. Chuẩn ₫ầu ra :  
Sinh viên nắm vững và viết thành thạo các ứng dụng nhỏ chạy ở chế ₫ộ textmode và biết  
cách dùng các kiễu dữ liệu cơ bản ₫ịnh sẵn, nhất là kiểu struct và array, khi cần.  
ƒ
IV. Phân tích :  
1. Ta dùng thuật giải backtracking ₫ể tìm các phương án tạo từ như sau :  
+ Lặp tìm chỉ số gốc của ký tự ₫ược dùng cho từng vị trí (cột) trong từ, từ trái sang phải :  
-
Nếu sắp ₫ược cho cột c thì tăng c 1 ₫ơn vị ₫ể tiếp tục cột kế tiếp, nếu cột c ₫ã vượt qua  
MAX thì ₫ã tìm ₫ược 1 từ mới.  
-
Nếu không sắp ₫ược cho cột c thì giảm c 1 ₫ơn vị ₫ể thử tiếp các khả năng còn lại của  
cột cũ này. Nếu c <0 thì hết cách.  
2. Để lưu vết xử lý trên từng cột, ta dùng biến array chiso[MAX], mỗi phần tử chiso[c] chứa chỉ số  
ký tự gốc ₫ã xử lý lần cuối trước ₫ây (-1 : chưa, MAX : hết).  
Từ thuật giải ₫ược viết bằng ngôn ngữ tự nhiên ở trên, ta dịch nó thành chương trình ₫ược viết  
bằng VC# như trong mã nguồn dưới ₫ây.  
V. Qui trình :  
1. Chạy VS .Net, chọn menu File.New.Project ₫ể hiển thị cửa sổ New Project.  
2. Mở rộng mục Visual C# trong TreeView "Project Types", chọn mục Windows, chọn icon  
"Console Application" trong listbox "Templates" bên phải, thiết lập thư mục chứa Project trong  
listbox "Location", nhập tên Project vào textbox "Name:" (td. TaoTu), click button OK ₫ể tạo  
Project theo các thông số ₫ã khai báo.  
3. Ngay sau khi Project vừa ₫ược tạo ra, cửa sổ soạn code cho chương trình ₫ược hiển thị. Hiệu  
chỉnh code của file Program.cs ₫ể có nội dung như sau :  
using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
namespace TaoTu  
{
class Program  
{
//₫ịnh nghĩa các thuộc tính dữ liệu  
const int MAXLEN = 20; //số ký tự max cần dùng ₫ể tạo từ  
static String srcstr; //chuỗi các ký tự khác nhau ₫ể tạo từ  
Trang 2  
static int sotu; //số từ ₫ã tìm ₫ược  
static int[] chiso = new int[MAXLEN + 1]; //danh sách chỉ số ký tự ₫ã thử trong từng cột  
static int sokytu; //số ký tự gốc ₫ược dùng ₫ể tạo từ  
static int c; //vị trị cột ₫ang sắp  
//Điểm nhập của chương trình  
static void Main(string[] args)  
{
//nhập chuỗi ký tự dùng ₫ể tạo từ  
do  
{
Console.Write("Hãy nhập chuỗi các ký tự cần dùng : ");  
srcstr = Console.ReadLine();  
//xác ₫ịnh số ký tự ₫ược dùng  
sokytu = srcstr.Length;  
} while (sokytu >= MAXLEN);  
// khởi ₫ộng trạng thái xuất phát  
for (c = 0; c < sokytu; c++) chiso[c] = -1;  
//bắt ₫ầu ₫ặt ký tự chỉ số 0 vào cột ₫ầu (cột 0) của từ cần xây dựng  
chiso[0] = 0;  
//bắt ₫ầu tìm ký tự cho cột thứ 2 (chỉ số là 1) của từ cần xây dựng  
c = 1;  
while (Tim1cach())  
{
// tìm ₫ược 1 từ mới  
InKetqua();  
//lùi lại cột trước ₫ể tiếp tục tìm cách sắp khác  
c--;  
}
// hết cách --> dừng chương trình  
Console.WriteLine("Số từ xây dựng ₫ược là " + sotu);  
//chờ người dùng ấn Enter ₫ể ₫óng cửa sổ Console lại.  
Console.Write("Ấn Enter ₫ể dừng chương trình : ");  
Console.Read();  
return;  
}
//cố gắng tìm 1 phương án sắp các ký tự thành 1 tự mới theo yêu cầu  
static bool Tim1cach() {  
int h;  
while (c < sokytu)  
{
// tìm chỉ số ký tự cho ký tự cột c  
h = timkytu(c);  
if (h >= 0)  
{ //tìm ₫ược ==>lưu chỉ số vào danh sách kết quả rồi tăng chỉ số cột ₫ể tiếp tục  
chiso[c++] = h;  
continue;  
}
//trường hợp không tìm ₫ược ký tự ở cột c  
if (c > 0)  
Trang 3  
{
}
//cột c chưa phải là cột ₫ầu tiên =>xét lại cột c từ ký tự ₫ầu rồi lùi cột c  
chiso[c--] = -1;  
continue;  
//hết cách  
return false;  
}
return true;  
}//hết hàm Tim1cach  
//hàm tìm chỉ số hàng cho con hậu ở cột c  
static int timkytu(int c)  
{
int h, hmin = chiso[c] + 1;  
for (h = hmin; h < sokytu; h++) // thử ký tự chỉ số h  
if (duocphep(h, c)) return h;  
return -1;  
}
// Kiểm tra xem có thể xếp ký tự thứ h vào vị trí thứ c trong từ cần xây dựng  
static bool duocphep(int h, int c)  
{
int k;  
for (k = 0; k < c; k++)  
if (chiso[k] == h) return false;  
return true;  
}
//Kiểm tra từ, nếu có nghĩa thì trả về TRUE, nếu không trả về FALSE  
static bool conghia(String str)  
{
// Bạn viết lại hàm này theo yêu cầu riêng  
//ở ₫ây ta coi mọi từ ₫ều có nghĩa  
return true;  
}
//hàm in từ mới tìm theo yêu cầu  
static void InKetqua()  
{
String desstr;  
int k;  
//Xây dựng từ mới tìm ₫ược  
desstr = "";  
for (k = 0; k < sokytu; k++)  
desstr += srcstr[chiso[k]];  
if (conghia(desstr)) //kiểm tra từ có nghĩa trước khi in  
{
Console.WriteLine("Từ thứ " + (++sotu) + " : " + desstr);  
}
}
Trang 4  
}//hết class Program  
}//hết namespace  
4. Chọn menu Debug.Start Debugging ₫ể dịch và chạy ứng dụng, nhập 1 chuỗi ký tự gốc rồi xem  
và kiểm tra kết quả hiển thị của chương trình.  
5. Lặp lại bước 4 cho nhiều chuỗi ký tự có ₫ộ dài khác nhau.  
pdf 4 trang myanh 20420 Free
Bạn đang xem tài liệu "Giáo trình thực hành Lập trình hướng đối tượng - Bài thực hành số 4.2: Viết chương trình tạo từ", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfgiao_trinh_thuc_hanh_lap_trinh_huong_doi_tuong_bai_thuc_hanh.pdf