• Thứ Ba, 17/07/2007 09:51 (GMT+7)

    Viết chương trình C++ chuyển đổi số sang chữ tương ứng

    Câu hỏi :
    Xin hướng dẫn viết chương trình C++ sao cho khi nhập số từ bàn phím thì kết quả in ra chuỗi chữ tương ứng. 
     

    Trả lời :

    Chúng tôi đã từng giới thiệu chương trình VB đổi từ số thành chuỗi tiếng Việt phát âm tương ứng. Việc chuyển đổi đoạn code từ ngôn ngữ này sang ngôn ngữ khác thường rất dễ dàng nếu bạn nắm vững cả 2 ngôn ngữ liên quan. Sau đây, chúng tôi viết lại ứng dụng VC++ để thực hiện đúng yêu cầu của bạn. Bạn hãy thực hiện qui trình sau đây:

     1. chạy ứng dụng VC++, chọn menu File.New.Projects, chọn loại "MFC AppWizard (exe)", chọn vị trí Location, nhập tên Project là VCSo2Chu, ấn nút Ok.
     2. chọn checkbox "Dialog Based" rồi chọn nút Finish để tạo Project thực sự.
     3. Thiết kế trực quan cửa sổ của ứng dụng như sau :
     4. Chạy menu View.ClassWizard rồi định nghĩa các biến nhận dạng các đối tượng giao diện má ứng dụng sẽ truy xuất như :
     - biến m_so nhận dạng textbox có kiểu là UINT.
     - biến m_ketqua nhận dạng label miêu tả chuỗi phát âm.
     5. Cũng trong tiện ích ClassWizard, hãy khai báo hàm xử lý sự kiện Click chuột vào nút "Chuyen", rồi viết hàm xử lý Click chuột như sau :
     //định nghĩa dãy phát âm các ký số
     CString chuso[11] = {"",
     "một",
     "hai",
     "ba",
     "bốn",
     "năm",
     "sáu",
     "bảy",
     "tám",
     "chín" };
     //định nghĩa dãy phát âm các đơn vị tỷ, ngàn, triệu
     CString chu_cach[4] = {"", "tỷ","ngàn", "triệu"};
     
     //-----------------------------------
     // Hàm đổi 1 số có tối đa 3 ký số thành chuỗi tương ứng.
     //-----------------------------------
     CString sotram2chu(unsigned int socandoi) {
     // Khai báo dữ liệu
     int shangchuc, shangtram, shangdonvi;
     CString str;
     str = "";
     // Kiểm tra số cần đổi có hợp lệ không
     if (socandoi >= 1000) return "???";
     //Xác định 3 ký số miêu tả hàng trăm, hàng chục & đơn vị
     shangtram = socandoi / 100;
     socandoi = socandoi % 100;
     shangchuc = socandoi / 10;
     shangdonvi = socandoi % 10;
     if (shangtram >= 1) str = chuso[shangtram] + " trăm";
     if (shangchuc >= 2) str = str + " " + chuso[shangchuc] + " mươi";
     else if (shangchuc == 1) str = str + " mười";
     if (shangdonvi == 0) return str;
     if (shangchuc == 0) {
     if (shangtram != 0) str = str + " lẻ " + chuso[shangdonvi];
     else str = str + " " + chuso[shangdonvi];
     return str;
     }
     if (shangchuc == 1) {
     if (shangdonvi != 5) str = str + " " + chuso[shangdonvi];
     else str = str + " lăm";
     return str;
     }
     if (shangdonvi == 1) str = str + " mốt";
     else if (shangdonvi == 5) str = str + " lăm";
     else str = str + " " + chuso[shangdonvi];
     return str;
     }
     //------------------------------------
     // Hàm đổi 1 số nguyên bất kỳ thành chuỗi phát âm tương ứng
     //------------------------------------
     CString so2chu(long socandoi) {
     int idx;
     int ba_kyso;
     CString str, str_tram;
     CString tu_ngan_cach;
     idx = 0; // vi tri dau cham phan cach tung 3 ky so
     str = "";
     str_tram = "";
     while (socandoi != 0) {
     ba_kyso = socandoi % 1000;
     socandoi = socandoi / 1000;
     str_tram = sotram2chu(ba_kyso);
     //nen bo cac khoang trong dan dau
     if (idx == 0) { // vi tri don vi
     if (socandoi==0) str = str_tram;
     else str = "lẻ " + str_tram;
     } else if (strlen(str_tram) != 0) { //vi tri ngan, trieu, ty
     tu_ngan_cach = chu_cach[(idx % 3) + 1];
     str = str_tram + " " + tu_ngan_cach + " " + str;
     } else if ((idx % 3) == 0) str = "tỷ " + str;
     idx = idx + 1;
     }
     return str;
     }
     //hàm xử lý Click chuột vào button Chuyen
     void CVCSo2ChuDlg::OnButton1() {
     // TODO: Add your control notification handler code here
     UpdateData(TRUE);
     m_ketqua = so2chu(m_so);
     UpdateData(FALSE);
     }
     6. Chọn menu Build.Execute VCSo2Chu để chạy thử ứng dụng, mỗi lần bạn nhập 1 số nguyên vào textbox, ấn nút chuyển thì ứng dụng sẽ hiển thị chuỗi phát âm tương ứng.
     

    Chuyên mục: Lập trình