Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Chương trình đổi số thành chữ viết bằng C. Sửa lỗi đọc sai các số có lẽ!!!

  1. #1
    Ngày gia nhập
    10 2011
    Nơi ở
    Đà Nẵng
    Bài viết
    2

    Question Chương trình đổi số thành chữ viết bằng C. Sửa lỗi đọc sai các số có lẽ!!!

    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <string.h>
    4. char s[50] = "";
    5.  
    6. char *bachuso(unsigned int n)
    7. {
    8.  
    9.   char kyso[10][5]= {"", "mot", "hai", "ba", "bon", "nam", "sau",
    10.             "bay", "tam", "chin"};
    11.   int donvi, chuc, tram;
    12.  
    13.   s[0] = 0;
    14.   donvi = n % 10;
    15.   n /= 10;
    16.   chuc = n % 10;
    17.   tram = n / 10;
    18.   if (tram > 0)
    19.   {
    20.     strcat(s, kyso[tram]);
    21.     strcat(s, " tram ");
    22.   }
    23.   if (chuc > 0)
    24.   {
    25.     if (chuc== 1)
    26.        strcat(s, "muoi ");
    27.     else
    28.     {
    29.        strcat(s, kyso[chuc]);
    30.        strcat(s, " muoi ");
    31.     }
    32.   }
    33.   if (donvi > 0)
    34.   {
    35.      if (chuc == 0 && tram != 0)
    36.        strcat(s, "le ");
    37.      if (donvi == 1)
    38.        strcat(s, "mot");
    39.      else if (donvi == 5 && (chuc != 0 || tram != 0))
    40.        strcat(s, "lam");
    41.      else if (donvi == 5 && (chuc = 0 || tram != 0))
    42.        strcat(s, "nam");
    43.      else
    44.        strcat(s, kyso[donvi]);
    45.   }
    46.   return s;
    47. }
    48.  
    49. void main()
    50. {
    51.  
    52.   unsigned long n;
    53.   unsigned ngan, trieu, ty, donvi;
    54.   char chuoi[200];
    55.   clrscr();
    56.   printf("\nNhap mot so: ");
    57.   scanf("%ld", &n);
    58.   printf("So %ld doc bang chu la :\n", n);
    59.   if (n == 0)
    60.     printf("khong");
    61.   else
    62.   {
    63.      donvi = n % 1000;
    64.      n /= 1000;
    65.      ngan = n % 1000;
    66.      n /= 1000;
    67.      trieu = n % 1000;
    68.      ty = n / 1000;
    69.      chuoi[0] = 0;
    70.      if (ty > 0)
    71.        printf("%s ty ", bachuso(ty));
    72.      if (trieu > 0)
    73.        printf("%s trieu ", bachuso(trieu));
    74.      if (ngan > 0)
    75.        printf("%s ngan ", bachuso(ngan));
    76.      if (donvi > 0)
    77.        printf("%s", bachuso(donvi));
    78.   }
    79.  
    80.   getch();
    81. }
    Chương trình của mình chạy được nhưng mình không biết sao mà nó không đọc được các số lẽ. Ví dụ như: 4009 đọc là bốn ngàn chín, 50001 đọc là năm mươi ngàn chín, 5004008 đọc là năm triệu bốn ngàn tám. Ai cao thủ chỉnh sửa giúp với!!!

  2. #2
    Ngày gia nhập
    11 2011
    Bài viết
    14

    có lỗi này thật các số khác đều đọc tốt!

  3. #3
    Ngày gia nhập
    11 2011
    Bài viết
    1

    Code:
    if (donvi > 0)
      {
         if (chuc == 0 && tram != 0)//vấn đề nằm ở đây
           strcat(s, "le ");
         if (donvi == 1)
           strcat(s, "mot");
         else if (donvi == 5 && (chuc != 0 || tram != 0))
           strcat(s, "lam");
         else if (donvi == 5 && (chuc = 0 || tram != 0))
           strcat(s, "nam");
         else
           strcat(s, kyso[donvi]);
      }
    Vấn đề ở chỗ xử lý đọc đơn vị.
    Với số có ít hơn 3 chữ số thì hàm bachuso của bạn hoạt động tốt,
    nhưng với số có 4 chữ số trở lên, khi tách phần đơn vị (3 chữ số cuối) có thể có dạng 00x,
    khi đó "tram = 0", thì if(chuc == 0 && tram !=0) ko cho thêm chuỗi "le" vào chuỗi kết quả
    Gợi ý: Bạn có thể thêm 1 cờ như 1 tham số của hàm bachuso để xác định khi nào đọc trường hợp tram = 0 khi nào không
    //char *bachuso(unsigned int n, int flag)

Các đề tài tương tự

  1. Có lẽ, Hà Nội đẹp nhất khi về đêm
    Gửi bởi vietnamduhi trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 22-11-2013, 05:03 PM
  2. Tìm số lẽ mỗi hàng trong ma trận
    Gửi bởi kakaducsy trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 23-05-2013, 11:43 PM
  3. [ HOT ] Laptop DELL Chính Hãng bán lẽ với sĩ + quà tặng hấp dẫn !!!
    Gửi bởi minhtungvnn trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 1
    Bài viết cuối: 23-05-2012, 02:15 PM
  4. Bài tập C Tính tích các số lẽ từ 1 đến n, tích các số chẵn từ 2 đến n với n nhập từ bàn phím
    Gửi bởi pengox2011 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 11
    Bài viết cuối: 12-04-2011, 02:20 PM
  5. tổng các số lẽ trong mảng 1 chiều
    Gửi bởi namekct trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 11-01-2010, 12:58 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn