Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 12 kết quả

Đề tài: Đổi từ cơ số bất kì sang cơ số bất kì, chỉ đúng 1 trường hợp, còn lại là sai?

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

    Mặc định Đổi từ cơ số bất kì sang cơ số bất kì, chỉ đúng 1 trường hợp, còn lại là sai?

    các bạn ơi giúp mình sửa lỗi bài này với.đề bài là chuyển từ cơ số bất kì sang cơ số bất kì(vs các cơ số <=16) trong C.chỉ yêu cầu chuyển vs các số nguyên dương.
    Vì mình mới học C nên những bài của các bạn trên diễn đàn mình tham khảo và tự viết theo những hàm cơ bản mà mình được học.mình dựa vào cơ số trung gian là cơ số 10.
    Khi mình nhập vào thì chỉ đúng trường hợp duy nhất: nhập số 30 (cơ số 10)-->kq:(cơ số 16) 1E.
    còn lại tất cả các trường hợp khác đều cho kết quả sai .
    M Ko hiểu sai ở đâu. nên hnay post lên đây mong các bạn xem và sửa giúp mình với.cảm ơn các bạn nhiều.

    Đây là code của mình:
    Code:
    #include<stdio.h>
    #include<conio.h>
    #include<math.h>
    #include<string.h>
    int KtoDEC(int so,int k)
    {
        int tong=0,dem=0;
        do
        {tong=tong+(so%10)*(int)pow(k,dem);
        so=so/k;
        dem++;
        }
        while(so!=0);
        return tong;
    }
    int DECtoK(int so,int k)
    {
        int a[100],i=0,n;
        while(so!=0)
        {
                    a[i]=so%k;
                    so=so/k;
                    i++;
        }
        n=i;
        for(i=n-1;i>=0;i--)
        {
                           if(a[i]<10)
                           printf("%d",a[i]);
                           else
                           printf("%c",a[i]+55);
        }
    }
    int main()
    {
        int so,k,j,a[100],m,dem;
        printf("nhap so can chuyen:");
        scanf("%d",&so);
        printf("nhap co so goc cua %d:",so);
        scanf("%d",&k);
        printf("nhap co so muon chuyen sang:");
        scanf("%d",&j);
        m=so;
        dem=0;
        do
        {
              
              if(m%10>=k)
              dem++;
              m=m/10;
        }
        while(m!=0);
        if(dem!=0)
        printf("cac so ko hop le");
        else
        {
            printf("ket qua tu he %d sang he %d la:",k,j);
            DECtoK(KtoDEC(so,k),j);
        }
        getch();
        return 0;
    }

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

    chả biết nhập 17 trả về 11, 31 trả về 1F là đúng hay sai nữa :(
    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #include<math.h>
    4. #include<string.h>
    5.  
    6. int a[100];
    7. int KtoDEC(int so,int k)
    8. {
    9.     int tong=0,dem=0;
    10.     do
    11.     {tong=tong+(so%10)*(int)pow((double)k,dem);
    12.     so=so/k;
    13.     dem++;
    14.     }
    15.     while(so!=0);
    16.     return tong;
    17. }
    18. int DECtoK(int so,int k)
    19. {
    20.     int i=0,n;
    21.     while(so!=0)
    22.     {
    23.                 a[i]=so%k;
    24.                 so=so/k;
    25.                 i++;
    26.     }
    27.     n=i;
    28.     for(i=n-1;i>=0;i--)
    29.     {
    30.                        if(a[i]<10)
    31.                        printf("%d",a[i]);
    32.                        else
    33.                        printf("%c",a[i]+55);
    34.     }
    35.     return 1;
    36. }
    37. int main()
    38. {
    39.     int so,k,j,m,dem;
    40.     printf("nhap so can chuyen:");
    41.     scanf("%d",&so);
    42.     printf("nhap co so goc cua %d:",so);
    43.     scanf("%d",&k);
    44.     printf("nhap co so muon chuyen sang:");
    45.     scanf("%d",&j);
    46.     m=so;
    47.     dem=0;
    48.     do
    49.     {
    50.          
    51.           if(m%10>=k)
    52.           dem++;
    53.           m=m/10;
    54.     }
    55.     while(m!=0);
    56.     if(dem!=0)
    57.     printf("cac so ko hop le");
    58.     else
    59.     {
    60.         printf("ket qua tu he %d sang he %d la:",k,j);
    61.         DECtoK(KtoDEC(so,k),j);
    62.     }
    63.     getch();
    64.     return 0;
    65. }
    t.b: Tìm hiểu lại cách khai báo biến mảng đi
    Đã được chỉnh sửa lần cuối bởi rossoneri : 01-03-2012 lúc 10:31 PM. Lý do: bổ sung ghi chú
    Programming tutorials and source code examples

    Trong nhà không vợ không con
    Uống bia gặm thịt sao ngon thế này
    Nhậu nhẹt không bị la rầy
    Một tuần ta cứ bảy ngày " nâng ly "....

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

    Bạn có thể xem lại giúp mình được ko,vì ch trình trên đúng vs mọi số từ hệ 10-->16 ,nhưng với các hệ khác,ví dụ:1111(cs 2)-->(cs16)kq đúng là:F.nhưng ở đây ra 1337.
    M đang bị mắc chỗ đó.mong các bạn xem giúp

  4. #4
    Ngày gia nhập
    05 2011
    Bài viết
    299

    hệ khác thì dùng hàm khác để đổi chứ @@, tính dùng hàm đổi từ 10-> 16 cho các cơ số khác à
    dùng if else để chọn hàm để áp dụng đổi
    Đã được chỉnh sửa lần cuối bởi rossoneri : 01-03-2012 lúc 10:57 PM. Lý do: bổ sung ý kiến
    Programming tutorials and source code examples

    Trong nhà không vợ không con
    Uống bia gặm thịt sao ngon thế này
    Nhậu nhẹt không bị la rầy
    Một tuần ta cứ bảy ngày " nâng ly "....

  5. #5
    Ngày gia nhập
    09 2011
    Bài viết
    9

    Trích dẫn Nguyên bản được gửi bởi rossoneri Xem bài viết
    hệ khác thì dùng hàm khác để đổi chứ @@, tính dùng hàm đổi từ 10-> 16 cho các cơ số khác à
    dùng if else để chọn hàm để áp dụng đổi
    Tks b.mình hiểu ý bạn r. nhưng như chtrinh trên của m là đổi qua trung gian là cs 10 m ngĩ kug có thể đổi được từ cs bất kì sag cs bất kì...vđề là m ko hỉu sai chỗ nào

  6. #6
    Ngày gia nhập
    09 2011
    Bài viết
    9

    Mặc định Đổi từ cơ số bất kì sang cơ số bất kì, chỉ đúng 1 trường hợp, còn lại là sai?

    hic,cac bạn ai giúp m vs,m ko biết sai ở đâu nữa.tại sao nó lại ko đúng vs tất cả các hệ số nhỉ...

  7. #7
    Ngày gia nhập
    06 2010
    Bài viết
    4

    Code:
    int KtoDEC(int so,int k)
    {
        int tong=0,dem=0;
        do
        {   
    	    double temp = pow(k,dem); 
    	    tong=tong+(so%10)*temp;
    	    so=so/10;
    	    dem++;
        }
        while(so!=0);
        return tong;
    }
    Đã được chỉnh sửa lần cuối bởi bakuryu90 : 02-03-2012 lúc 03:18 AM.

  8. #8
    Ngày gia nhập
    09 2011
    Bài viết
    9

    Trích dẫn Nguyên bản được gửi bởi bakuryu90 Xem bài viết
    Ở hàm KtoDEC, so = so/k bạn sửa thành so = so/10 là được
    Đúng là sai ở đó,hix.thank bạn nhiều nhé!

    m còn một thắc mắc, mog các bạn xem giúp.hix..đó là chtrinh của m tại sao lại ko đúng vs các số 100,200,...nhỉ.
    vd:300(10)-->12C(16) nhưng khi m chạy ctrinh lại ra kq 129 nhỉ.ban đầu m nghĩ đó là do đk(while>0)nhưng ko phải.

  9. #9
    Ngày gia nhập
    06 2010
    Bài viết
    4

    Mình sửa lại ở phần trên rồi. Bạn xem đã được chưa. Còn chi tiết tại sao thì mình cũng chưa rõ :(

  10. #10
    Ngày gia nhập
    09 2011
    Bài viết
    9

    m đã sửa như b nhưng nó báo lỗi temp is not typegì gì ý.hix.
    h như bị xug đột giữa kiểu int vs double hay sao ý...
    tks đã giúp đỡ nhé!
    Đã được chỉnh sửa lần cuối bởi thienduongvang : 02-03-2012 lúc 04:01 AM.

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

  1. Kiểm tra chuỗi đối xứng. Sai khi nhập chuỗi 3 ký tự, còn lại đúng. Ai xem giúp mình với
    Gửi bởi Shock0z trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 10
    Bài viết cuối: 12-11-2011, 09:28 PM
  2. Tại sao mã hóa Base64 không còn đúng với yahoo ?
    Gửi bởi bkavPro trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 0
    Bài viết cuối: 31-08-2010, 10:16 PM
  3. Chuyển xâu sang đúng dạng mã ASCII của từng ký tự trong nó
    Gửi bởi MrSkynet trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 2
    Bài viết cuối: 07-07-2010, 12:07 PM
  4. Chuyển code từ turbo C++ 3.0 sang VC++ không còn chạy nữa?
    Gửi bởi bachtrong43 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 5
    Bài viết cuối: 20-04-2009, 06:27 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