Viết chương trình tìm đa thức sinh

Thứ năm , 11/05/2017, 15:40 GMT+7
     

Các bài trước chúng ta đã đi qua một số hướng dẫn code các bài tập về xư lý ảnh trong đồ họa máy tính

         + Code chương trình vẽ đồ thị hàm số bằng C#

         + Chương trình nhận dạng khuôn mặt trong video

         +  Kết nối C# với Maple

Viết chương trình tìm đa thức sinh.

           Nếu tìm được hãy xác định: (1) ma trận sinh, (2) ma trận sinh hệ thống, (3) các ma trận kiểm tra của bộ mã. Viết chương trình mã hóa một thông báo thành từ mã bằng ma trận sinh và ma trận sinh hệ thống. Cho biết khoảng cách Hamming của bộ mã, khả năng phát hiện sai và sửa sai.

I.Giao Diện và Chức Năng chính của các Hàm:

1.Giao diện:

 

2.Chức Năng:

·         Hàm privatestring TimSoChia()

o    Khởi tạo ra đa thức Xn+1

·         privatevoid PhepChiaModun(string SoBiChia)

o    Thực Hiện phép chia đa thức xn+1 cho các Đa Thức Sinh có thể,để tìm ra Đa thức Sinh đúng nhất cho bộ mã Tuyến tính đã cho ban đầu C(n,k)

·         privatevoid XuatMaTranSinh()

o    In ra Ma trận Sinh đã tìm đc từ đa thức sinh và show vào textbox9

·         privatevoid XuatMaTranKiemTra()

o    In ra Ma trận Kiểm tra đã tìm đc từ đa thức sinh và show vào textbox11

·         privatevoid button1_Click

o    Thực Hiện nhận giá trị N và K

o    Gọi hàm DSDaThucSinh

o    Thực Hiện chia Modun cho danh sách Đa Thức SInh đã tìm đc

·         privatevoid button4_Click

o    Thực hiện chức năng gọi hàm XuatMaTranKiemTra() và XuatMaTranSinh()

·         privatevoid button2_Click

o    Thực Hiện chức năng mã hóa 1 thông tin theo Ma Trận SInh

II.Cài đặt:

1.  Hàm privatestring TimSoChia()

Khởi tạo ra bộ chuỗi 100…01 ứng với xn+1 dựa vào vòng lặp for và trả về cho hàm chuỗi đã tạo đc

2.  privatevoid PhepChiaModun(string SoBiChia)

Thực hiện các vấn đề sau:

a.  gán chuỗi SoChia là đa thức ban đầu xn+1(dạng 100…01)

b.  gán chuỗi SoBiChia là đa thức đang xét

c.  cho vào vòng lặp While thực hiện các chức năng sau:

a.  Kiểm tra xem độ dài SoChia còn lớn hơn SoBiChia không nếu còn xuống i:

                                           i.   Trả về kiểu số từ 2 chuỗi SoChia và SoBiChia cho 2 biến SCi và SBCi

                                          ii.   Thực Hiện Phép cộng modun SCi cho SBCi với kết quả trả về cho biến chuoitam(độ dài biến chuoitam= độ dài SoBiChia(Phép chia)

                                        iii.   Xử lí biến chuoitam(lấy phần dư của phép chia trên gán lại cho biến SoChia,lấy phần thương gán cho Biến Thuong)

b.  Nếu độ dài biến SoChia bây giờ mà nhỏ hơn độ dài biến SoBiChia(phần dư phép chia) Kiểm tra xem phần dư này rơi vào 2 trường hợp:

                                           i.   TH1:nếu toàn là dãy số 0 thì thong báo đã tìm ra đa thức sinh và thêm đa thức sinh này(SoBiChia) vào List DaThucSinh và thêm phần Thương(đa thức đối ngẫu của đa thức sinh) vào List MTKiemTra,thoát vòng While

                                          ii.   TH2: nếu có tồn tại phần tử #0 thì thong báo ko tìm đc Đa Thức Sinh,Thoát Vòng While

 

3.  Hàm  private int congmodun(int a, int b)

Thực Hiện cộng modun 2 số như sau:

a.  Nếu tổng a+b=2 trả về cho hàm giá trị 0

b.  Ngược lại trả về giá trị tổng a+b như bình thường(các trường hợp 0+1,1+0,0+0)

 

4.  Hàm privatevoid DSDaThucSinh()

Khởi tạo ra bộ các Đa Thức Sinh có thể có ban đầu để làm nguồn dữ liệu cho hàm PhepChiaModun:

Hàm dựa vào công thức: G(x)=1+g1.x+g2.x2+….+xn-k

5.  privatevoid XuatCacDaThucSinh()

Thực hiện in ra textbox4 các đa thức đã tìm đc

6.  privatevoid XuatMaTranSinh()

Thực hiện in ra textbox9 ma trận sinh từ đa thức sinh

Lưu ý:nếu có từ 2 đa thưc sinh có thể dùng đc từ bộ mã ban đầu đã cho thì chương trình sẽ tự động chon ngẫu nhiên một trong số chúng để in ra chứ không in ra hết

7.    private void XuatMaTranKiemTra()

In ra ma trận Kiểm tra tương ứng với ma trận sinh đã in ra.(không in ra hết)

8.  privatevoid button2_Click

Thực hiện các chức năng sau:

a.  nhận giá trị từ textbox12 và kiểm tra xem giá trị hợp lệ không

b.  thực hiện chuyển đổi về kiểu in chuỗi đã nhận

c.  thực hiện cộng modun các dòng tương ứng (mã hóa thong tin thành từ mã) dựa vào công thức:

W=a0.g0+a1.g1+…..+a(k-1).g(k-1)

Một số hàm cơ bản trong chương trình

private void PhepChiaModun(string SoBiChia)
        {
            int SCi, SBCi, KQ;
            string chuoitam = "", Thuong = "1";
            string SoChia = TimSoChia(); bool ketthuc = true;
            //bắt đầu chia
            while (ketthuc)
            {               
                if (SoChia.Length>=SoBiChia.Length)
                {
                    for (int i = 0; i < SoBiChia.Length; i++)
                    {
                        SCi = int.Parse(SoChia[i].ToString());
                        SBCi = int.Parse(SoBiChia[i].ToString());
                        KQ = congmodun(SCi, SBCi);
                        chuoitam = chuoitam + KQ.ToString();
                    }
                    if (SoChia.Length - SoBiChia.Length >= 0)
                    {
                        chuoitam = chuoitam + SoChia.Substring(SoBiChia.Length, SoChia.Length - SoBiChia.Length);
                        bool co = true;
                        for (int i = 0; i < chuoitam.Length; i++)
                        {
                            if (chuoitam[i] == '1')
                            {
                                for (int j =0;j
                                {
                                    Thuong = Thuong + "0";
                                }
                                Thuong = Thuong + "1";
                                string S1 = chuoitam.Substring(i, chuoitam.Length - i);
                                chuoitam = S1;
                                SoChia = chuoitam;
                                chuoitam = ""; co = false;
                                break;
                            }
                        }
                        if(co)
                        SoChia = chuoitam;
                    }
                    
                }
                if (SoChia.Length < SoBiChia.Length)
                {
                    for (int i = 0; i < SoChia.Length; i++)
                    {
                        if (SoChia[i] == '1')
                        {
                          //  MessageBox.Show("Đây không phải đa thức sinh:" + SoBiChia, "thong bao");                      
                            ketthuc = false;
                          //  Thuong = "";
                            break;
                        }
                    }
                }
                //Kiểm tra xem Số chia hiện giờ (hay chính là phần dư) có bằng 0 không!
                    int dem1 = 0;
                    for (int i = 0; i < SoChia.Length; i++)
                    {
                       
                        if (SoChia[i] == '0')
                        {
                            dem1++;
                        }
                    }
                    if (dem1 == SoChia.Length)//nếu Số chia=0 thì thêm số bị chia vào danh sách đa thức sinh
                    {  
                        DaThucSinh.Add(SoBiChia);
                        MTKiemTra.Add(Thuong);
                       // Thuong = "";
                        ketthuc = false;
                    }
                    else
                    {
                        dem1 = 0;
                    }       
            }
           
            
 
        }
private void XuatMaTranSinh()
        {
            MaTranSinh = new int[sodongK, socotN];
             r=new Random((int)DateTime.Now.Ticks).Next(0,DaThucSinh.Count);
            int[] ChonDaThucSinh = new int[BacR + 1];
            string chuoiDaThucSinh=DaThucSinh[r];
            for (int i = 0; i
            {
                ChonDaThucSinh[i] =int.Parse(chuoiDaThucSinh[i].ToString());
            }
            for (int i =0;i
            {
                for (int j = 0; j < socotN; j++)
                {
                    MaTranSinh[i, j] = 0;
                }
            }
            int khoangcach = 0;
            for (int i = 0; i < sodongK; i++)
            {
                for (int j =khoangcach;j
                {
                    MaTranSinh[i, j] = ChonDaThucSinh[j-khoangcach];
                }
                khoangcach++;
            }
            textBox9.Clear();
            for (int i = 0; i < sodongK; i++)
            {
                for (int j = 0; j < socotN; j++)
                {
                    textBox9.Text = textBox9.Text + MaTranSinh[i, j] + " ";
                }
                textBox9.Text = textBox9.Text + "rn";
            }
        }
tìm da thức sinh lý thuyết thông tin code chương trình ma trận Hamming ma trận