Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 5 của 5
  1. #1

    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 :


    Mã:
    #include<stdio.h>#include<conio.h>void main () {    printf("Nhap so can doi : ");    int n,du;    scanf("%d",&n);    do {        du=n%10;            n=n/10;                 }        while (n>9);        switch (n) {    case 1: printf("0001 "); break;    case 2: printf("0010 "); break;    case 3: printf("0011 "); break;    case 4: printf("0100 "); break;    case 5: printf("0101 "); break;    case 6: printf("0110 "); break;    case 7: printf("0111 "); break;    case 8: printf("1000 "); break;    case 9: printf("1001 "); break;    default: printf("0000 "); break;        }        switch (du) {    case 0: printf("0000 "); break;    case 1: printf("0001 "); break;    case 2: printf("0010 "); break;    case 3: printf("0011 "); break;    case 4: printf("0100 "); break;    case 5: printf("0101 "); break;    case 6: printf("0110 "); break;    case 7: printf("0111 "); break;    case 8: printf("1000 "); break;    default: printf("1001 "); break;        }    getch();}
    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

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi vnnghia03
    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.

  3. #3
    Mã:
    #include<stdio.h>#include<conio.h> void doi(int n){    switch (n)     {        case 0: printf("0000 "); break;        case 1: printf("0001 "); break;        case 2: printf("0010 "); break;        case 3: printf("0011 "); break;        case 4: printf("0100 "); break;        case 5: printf("0101 "); break;        case 6: printf("0110 "); break;        case 7: printf("0111 "); break;        case 8: printf("1000 "); break;        case 9: printf("1001 "); break;    } }void main () {    printf("Nhap so can doi : ");    int t,i,n,du,a[100];    scanf("%d",&n);    printf("Doi sang ma BCD:");    i=0;    while (n>0)    {        du=n%10;        a[i++]=du;        n=n/10;    }    t=i;    for(i=t-1;i>=0;i--)        doi(a[i]);    getch();}
    Sửa rồi đây!

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    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 tham gia
    Sep 2015
    Bài viết
    0
    hì! bạn thử làm đi rồi sẽ biết lý do, chú ý xem vòng for của mình!

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •