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

Đề tài: code sinh mã BCD, lỗi?

  1. #1
    Ngày gia nhập
    05 2007
    Bài viết
    9

    Cool code sinh mã BCD, lỗi?

    Mình lập trình 1 Bt có đề : "Mã BCD của một chữ số được tạo ra bằng cách viết liên tiếp cac gia tri nhi phan cua tung chu so. Hay viet chuong trinh nhap vao mot so nguyen n va xuat ra ma BCD cua so do.
    VD:
    23 -> 0010 0011 "

    CODE :

    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. void main () {
    4.     printf("Nhap so can doi : ");
    5.     int n,du;
    6.     scanf("%d",&n);
    7.     do {
    8.         du=n%10;    
    9.         n=n/10;            
    10.     }
    11.         while (n>9);
    12.         switch (n) {
    13.     case 1: printf("0001 "); break;
    14.     case 2: printf("0010 "); break;
    15.     case 3: printf("0011 "); break;
    16.     case 4: printf("0100 "); break;
    17.     case 5: printf("0101 "); break;
    18.     case 6: printf("0110 "); break;
    19.     case 7: printf("0111 "); break;
    20.     case 8: printf("1000 "); break;
    21.     case 9: printf("1001 "); break;
    22.     default: printf("0000 "); break;
    23.         }
    24.         switch (du) {
    25.     case 0: printf("0000 "); break;
    26.     case 1: printf("0001 "); break;
    27.     case 2: printf("0010 "); break;
    28.     case 3: printf("0011 "); break;
    29.     case 4: printf("0100 "); break;
    30.     case 5: printf("0101 "); break;
    31.     case 6: printf("0110 "); break;
    32.     case 7: printf("0111 "); break;
    33.     case 8: printf("1000 "); break;
    34.     default: printf("1001 "); break;
    35.         }
    36.     getch();
    37. }

    Mình đã lập trình rùi nhưng chương trình chỉ chạy khi nhập n <=99 thui, còn khi nhập n >=100 thì chương trình ko xuất được kết quả như ý muốn
    vd : Nhập 23 ==> 0010 0011 : OK
    Nhập 233 ==> 0010 0011 : ko OK, đúng ra là 0010 0011 0011
    Bước tới đèo ngang bỗng mắc tè
    Cỏ cây chen lá, đá đâm mông
    Lom khom dưới núi tè đã quá
    Lác đác bên sông chó cái nhìn

  2. #2
    Ngày gia nhập
    03 2007
    Bài viết
    15

    Trích dẫn Nguyên bản được gửi bởi vnnghia03 Xem bài viết
    do {
    du=n%10;
    n=n/10;
    }
    while (n>9);
    switch (n) {
    Code của bạn ko đúng với các số >= 100 vì cái vòng lặp while đó.
    Vd: khi nhập vào 111 thì:
    du = 111%10 = 1;
    n = 111/10 = 11;
    =>Do đó bạn chỉ có thể in ra được 2 mã BCD tương ứng với số dư và n mà thôi!
    Bạn hãy thử sửa lại vòng lặp while xem sao.
    ...Every step that I take is another mistake to you...I'm sorry mom..

  3. #3
    Ngày gia nhập
    04 2007
    Bài viết
    128

    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3.  
    4. void doi(int n)
    5. {
    6.     switch (n)
    7.     {
    8.         case 0: printf("0000 "); break;
    9.         case 1: printf("0001 "); break;
    10.         case 2: printf("0010 "); break;
    11.         case 3: printf("0011 "); break;
    12.         case 4: printf("0100 "); break;
    13.         case 5: printf("0101 "); break;
    14.         case 6: printf("0110 "); break;
    15.         case 7: printf("0111 "); break;
    16.         case 8: printf("1000 "); break;
    17.         case 9: printf("1001 "); break;
    18.     }
    19.  
    20. }
    21. void main ()
    22. {
    23.     printf("Nhap so can doi : ");
    24.     int t,i,n,du,a[100];
    25.     scanf("%d",&n);
    26.     printf("Doi sang ma BCD:");
    27.     i=0;
    28.     while (n>0)
    29.     {
    30.         du=n%10;
    31.         a[i++]=du;
    32.         n=n/10;
    33.     }
    34.     t=i;
    35.     for(i=t-1;i>=0;i--)
    36.         doi(a[i]);
    37.     getch();
    38. }
    Sửa rồi đây!

  4. #4
    Ngày gia nhập
    04 2007
    Bài viết
    16

    sao bạn ko đưa công việc in ra vào vòng while
    tiết kiệm thởi gian và vùng nhớ
    while (n>0)
    {
    du=n%10;
    doi(du);
    n=n/10;
    }

  5. #5
    Ngày gia nhập
    04 2007
    Bài viết
    128

    hì! bạn thử làm đi rồi sẽ biết lý do, chú ý xem vòng for của mình!

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

  1. Kỹ thuật C code bài tập về quản lý sinh viên. Không hiển thị đc tên với mã số sinh viên?
    Gửi bởi seudaudokt 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: 06-09-2010, 12:18 AM
  2. Code quản lý sinh viên bằng danh sách lối vòng. Giúp mình thay đổi code kế thừa?
    Gửi bởi caocanha trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 6
    Bài viết cuối: 04-05-2009, 03:39 PM
  3. Bài tập C++ | Code bài tập hàm lớp bạn sinh viên, lỗi ở đâu?
    Gửi bởi thangbsb trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 13-04-2009, 08:42 AM
  4. Hỏi về lỗi phát sinh khi combine code ( unreachable code detected)
    Gửi bởi dkhoa19869 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 11-03-2009, 03:39 PM
  5. xem code phát sinh???
    Gửi bởi rua_con trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 28-02-2009, 11:34 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