Trang 1 / 2 12 LastLast
Hiển thị kết quả từ 1 đến 10 / 11
  1. #1
    Tham gia
    09-10-2006
    Bài viết
    63
    Like
    4
    Thanked 0 Times in 0 Posts

    Bài tập C chuyển đổi giữa các hệ cơ số đếm

    Bài này thực sự chưa biết bắt đầu từ đâu,
    Vì nó bắt chuyển đổi cơ số bất kỳ lên hơi rồi ( 10 sang 2,8,16,ngược lại,rồi lai quay sang cơ số khác)
    Có ban nào biết,chỉ dẫn chút xíu hương đi được không
    thanks
    Quote Quote

  2. #2
    Tham gia
    10-03-2012
    Bài viết
    24
    Like
    1
    Thanked 4 Times in 4 Posts
    Để đổi từ cơ số 10 sang 2 bạn chỉ cần chia số đó liên tục cho 2, lưu lại số dư, cho tới khi nào không chia được nữa.

    Ví dụ:

    5 đổi sang binary là 101

    5/2 = 2 (dư 1)
    2/2 = 1 (dư 0)
    1/2 = 0 (dư 1)

    Các cơ số khác tương tự.

  3. #3
    Tham gia
    14-02-2012
    Bài viết
    63
    Like
    0
    Thanked 16 Times in 16 Posts
    Cho mình 1 lời cảm ơn nữa! Mình rất yêu tiền, song mình không lấy tiền của bạn đâu. Mình tặng bạn code cho bài này (bài này khó với khá nhiều người!!, Code của bài này làm theo triết lý: All In One):
    #include <stdio.h>
    #include <string.h>
    #include<conio.h>

    char *doics(char *number, int n, int m)
    {
    static char ketqua[17];
    char chuso[16] = "0123456789ABCDEF";
    int i = 0, giatri = 0, len;

    len = strlen(number);
    while(i<len)
    {
    giatri = giatri * n + (strchr(chuso, number[i]) - &chuso);
    i++;
    }
    i=16;
    ketqua[17] = 0;
    do {
    ketqua[i] = chuso[giatri % m];
    giatri /= m;
    i--;
    } while (giatri > 0);
    return (ketqua + i + 1);
    }

    void main()
    { int n, m; char number[17], *ketqua; clrscr();
    do
    { printf("\nNhap co so N cua he dem xuat phat(2 - 16):");
    scanf("%d", &n);
    }
    while (n<2 || n>16);
    getchar();
    printf("Gia tri nguyen thuoc he dem co so %d : ", n);
    gets(number);
    do {
    printf("Nhap co so M cua he dem moi (2 - 16):");
    scanf("%d", &m);
    } while (m<2 || m>16);
    printf(" So %s o he dem ",number);
    printf("co so %d bieu dien o he dem co so %d",n,m);
    printf(" co gia tri la:");
    ketqua = doics(number, n, m);
    puts(ketqua);
    getch();
    }

    Bạn có thể test với nhiều hệ đếm tùy ý thích (cả xuôi, ngược)!

  4. Thành viên Like bài viết này:


  5. #4
    Tham gia
    09-04-2011
    Bài viết
    14
    Like
    6
    Thanked 0 Times in 0 Posts
    Bác ơi...em chạy đoạn code của bác trên C free nhưng nó bị lỗi dòng thứ 8 14 & 28.Bác sửa giúp em với được không ạ.

  6. #5
    Tham gia
    15-03-2010
    Bài viết
    1,562
    Like
    84
    Thanked 1,571 Times in 860 Posts
    Quote Được gửi bởi hai22 View Post
    Bác ơi...em chạy đoạn code của bác trên C free nhưng nó bị lỗi dòng thứ 8 14 & 28.Bác sửa giúp em với được không ạ.
    Chịu khó đọc code. Bộ tính đem cả bài lên nộp thầy/cô hay sao?

    Quote Được gửi bởi cunbong24 View Post
    Cho mình 1 lời cảm ơn nữa! Mình rất yêu tiền, song mình không lấy tiền của bạn đâu. Mình tặng bạn code cho bài này (bài này khó với khá nhiều người!!, Code của bài này làm theo triết lý: All In One):
    Người ta hỏi hướng đi, lại quăng cả đoạn code chép ở đâu lên vậy? Code gì mà không có comments, không chỉ dẫn giải thuật thì lấy gì học hỏi. Sai đúng cũng chẳng biết đâu mà mò.

  7. #6
    Tham gia
    09-04-2011
    Bài viết
    14
    Like
    6
    Thanked 0 Times in 0 Posts
    [QUOTE=megaownage;3989013]Chịu khó đọc code. Bộ tính đem cả bài lên nộp thầy/cô hay sao?
    Em sẽ học chăm hơn.Cám ơn bác đã mắng đúng

  8. #7
    Tham gia
    09-04-2011
    Bài viết
    14
    Like
    6
    Thanked 0 Times in 0 Posts
    Em cũng đang bập bẹ học C thoai ạ.Các bác có thể nói hướng đi & giải thuật để em tham khảo được không ạ.

  9. #8
    Tham gia
    15-03-2010
    Bài viết
    1,562
    Like
    84
    Thanked 1,571 Times in 860 Posts
    Đứng trên quan điểm toán thuần túy thì cũng có công thức để chuyển đổi số nguyên theo mọi hệ phân, đi thẳng từ hệ này sang hệ kia.

    Tuy nhiên, trong trình độ của bài tập này thì tốt hơn hết là dùng cách chuyển gián tiếp, tức là dùng thập phân làm trung gian. Mọi dạng cơ số A đều chuyển sang 10 trước khi chuyển sang B.

    Sau khi đã thống nhất luật trên rồi thì ta có thể đi bước kế tiếp: định dạng kết quả. Cách dễ nhất để định dạng số ở hệ khác thập phân là dùng chuỗi. Ví dụ số 123 ở hệ nhị phân là 1111011, định dạng bằng một chuỗi 7 ký tự; ở hệ thập lục phân là 7B, định dạng bằng chuỗi 2 ký tự.

    Sau khi hiểu rõ nhu cầu và quy ước thì có thể bắt đầu tính giải thuật:

    Để đổi dạng một số từ thập phân sang hệ N, ta làm con toán chia cho hệ, lấy số dư làm đơn vị, và lây số thương tiếp tục.
    Ví dụ 123 sang hệ thập lục:
    123 / 16 ---> thương = 7 ; dư 11 (B trong hệ 16)
    7 / 16 ---> thương 0 ; dư 7
    Kết quả là 123 ---> 7A

    Để đổi từ hệ N sang thập phân, ta làm con toán lấy đơn vị từ trái qua phải, cứ mỗi đơn vị lại nhân cho hệ:
    7A ---> lấy số 7 còn dư A
    Đem 7 nhân 16 và cộng cho 11 (A) = 123

    Đến đây, ta sẽ nhận ra điểm: nếu hệ dưới 10 thì tốt, nhưng nếu trên 10 thì làm sao biết 11 tức là B? Giai đoạn kế tiếp là tìm một giải thuật để dịch các chữ số lớn hơn 9

    Cách thông thường nhất là đặt ra một chuỗi, và dùng chỉ số để dịch:

    char dich = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    char donVi = dich[số cần dịch]; // dich[11] == 'B'

    (*) chú ý: ở đây chỉ nói chuyện số dương. Trường hợp nếu phải tính số âm thì khá rắc rối: phải đặt quy ước định dạng số âm – dùng bit đánh dấu hay dùng hệ tá trị (complement)

  10. 2 thành viên Like bài viết này:


  11. #9
    Tham gia
    09-04-2011
    Bài viết
    14
    Like
    6
    Thanked 0 Times in 0 Posts
    Quote Được gửi bởi cunbong24 View Post
    Cho mình 1 lời cảm ơn nữa! Mình rất yêu tiền, song mình không lấy tiền của bạn đâu. Mình tặng bạn code cho bài này (bài này khó với khá nhiều người!!, Code của bài này làm theo triết lý: All In One):
    #include <stdio.h>
    #include <string.h>
    #include<conio.h>

    char *doics(char *number, int n, int m)
    {
    static char ketqua[17];
    char chuso[16] = "0123456789ABCDEF";
    int i = 0, giatri = 0, len;

    len = strlen(number);
    while(i<len)
    {
    giatri = giatri * n + (strchr(chuso, number[i]) - &chuso);
    i++;
    }
    i=16;
    ketqua[17] = 0;
    do {
    ketqua[i] = chuso[giatri % m];
    giatri /= m;
    i--;
    } while (giatri > 0);
    return (ketqua + i + 1);
    }

    void main()
    { int n, m; char number[17], *ketqua; clrscr();
    do
    { printf("\nNhap co so N cua he dem xuat phat(2 - 16):");
    scanf("%d", &n);
    }
    while (n<2 || n>16);
    getchar();
    printf("Gia tri nguyen thuoc he dem co so %d : ", n);
    gets(number);
    do {
    printf("Nhap co so M cua he dem moi (2 - 16):");
    scanf("%d", &m);
    } while (m<2 || m>16);
    printf(" So %s o he dem ",number);
    printf("co so %d bieu dien o he dem co so %d",n,m);
    printf(" co gia tri la:");
    ketqua = doics(number, n, m);
    puts(ketqua);
    getch();
    }

    Bạn có thể test với nhiều hệ đếm tùy ý thích (cả xuôi, ngược)!
    Cám ơn bác đã bỏ công ra gõ đúng y SGK .Đây là bài thứ 11 tong sách:Bài tập ngôn ngữ C của Huỳnh Tấn Dũng & Hoàng Đức Hải

  12. #10
    Tham gia
    24-02-2011
    Bài viết
    8
    Like
    0
    Thanked 0 Times in 0 Posts

    source code chuyển đổi cơ số

    Chia sẻ với anh em source code chuyển đổi cơ số của số nguyên lớn

    tuvantinhoc[.]vn[/]chia-se-ma-nguon-cai-dat-so-nguyen-lon

    Các bạn bỏ dấu ngoặc vuông để lấy link nhé

Trang 1 / 2 12 LastLast

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • 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
  •