Giúp em bài C này với (chuyển cơ số 10 sang cơ số 2)

Đề bài:Viết chưong trình chuyển từ hệ 10 sang hệ 2.
Thank trước nha.

[QUOTE=11520572;27394]Đề bài:Viết trường trình chuyển từ hệ 10 sang hệ 2.
Thank trước nha.[/QUOTE]

Em gặp khó khăn gì mới giúp được chứ?

Quy tắc chuyển từ hệ 10 sang hệ thập phân là lấy số số đó chia cho 2 cho đến khi không chia được (thương <2)và lấy nghịc đảo phần dư.
Ví dụ: đổi 4(hệ 10) sang hệ nhị phân: 4/2 =2 (dư 0), 2/2 =1 (dư 0), 1 /2 = 0 (dư 1) (lưu ý là dấu / nà là chia trong môn toán, còn trong lập trình thì đổi sang %). Sau đó, ta chỉ việc viết ngược lại các số dư : 100 thì được kết quả.
Vậy trong lập trình em dùng một mảng lưu các số dư của mỗi lần thực hiện phép chia. Khi nào không chia được nữa thì kết quả chính là mảng lưu kết quả của em từ cuối đền đầu (hoặc có thể lưu lại kết quả vào mảng khác bằng cách gán ngược)

em không biết làm sao để lấy ngược lại.
mà em chưa học phần mảng nữa chứ.

Cái yêu cầu mà cũng viết sai lỗi chính tả nữa, bó tay. Bài này cơ bản mà bạn. Nếu bạn hiểu việc chuyển đổi hệ số từ thập phân sang nhị phân bằng việc chia đôi dần và lấy phần dư của phép chia cho 2 thì bạn làm việc này đơn giản thôi. Có nhiều biện pháp: dùng vòng lặp for, while hay đệ qui…
Mình sẽ mô tả cho bạn về vòng lặp như sau:

Có mảng a để lưu kết quả
int i=0;
while(n==1)
{
a*=n%2;
n/=2;
i++;
}
Kết quả sẽ lưu ra mảng a cho bạn.

[QUOTE=11520572;27406]em không biết làm sao để lấy ngược lại.
mà em chưa học phần mảng nữa chứ.[/QUOTE]
vậy thì bây giờ bạn học đi, nhanh mà


#include <stdio.h>
int convert(int i)
{
    if (i > 0)
    {
        convert (i/2);
        printf("%d",i%2);
    }
}
void main()
{
    int i;
    printf("Input: ");
    scanf("%d",&i);
    convert(i);
}

[QUOTE=11520572;27406]em không biết làm sao để lấy ngược lại.
mà em chưa học phần mảng nữa chứ.[/QUOTE]
Phần mảng trong các sách lập trình cơ bản (ở trường mình dạy bằng C), bạn tự tìm hiểu :D.
Còn việc lấy ngược lại thì bạn chạy từ phần tử lưu cuối cùng đến phần tử đầu tiên trong mảng.
Về tài liệu tham khảo thì bạn có thể lên thư viện để mượn học tìm cuốn ebook.

[QUOTE=11520094;27409]


#include <stdio.h>
int convert(int i)
{
    if (i > 0)
    {
        convert (i/2);
        printf("%d",i%2);
    }
}
void main()
{
    int i;
    printf("Input: ");
    scanf("%d",&i);
    convert(i);
}

[/QUOTE]
Mình cũng thích dùng đệ quy. Đơn giản mà nhanh chóng :smiley:

[QUOTE=11520132;27426]Mình cũng thích dùng đệ quy. Đơn giản mà nhanh chóng :D[/QUOTE]
trời! Đệ quy à. không cần thiết thì không nên sử dụng!

[QUOTE=11520132;27426]Mình cũng thích dùng đệ quy. Đơn giản mà nhanh chóng :D[/QUOTE]

Nhanh chóng cho người code nhưng là nỗi đau cho cái máy chạy chương trình và nỗi hận khôn nguôi cho người phải đọc hoặc sửa cái code.

[QUOTE=11520572;27394]Đề bài:Viết chưong trình chuyển từ hệ 10 sang hệ 2.
Thank trước nha.[/QUOTE]
Bài này cũng dễ mà. học Mảng và Con trỏ đi bạn

[QUOTE=07520004;27431]Nhanh chóng cho người code nhưng là nỗi đau cho cái máy chạy chương trình và nỗi hận khôn nguôi cho người phải đọc hoặc sửa cái code.[/QUOTE]

ác mộng lúc debug, ko biết đang ở stack nào :slight_smile:

[QUOTE=11520132;27426]Mình cũng thích dùng đệ quy. Đơn giản mà nhanh chóng :D[/QUOTE]
Ừ “nhanh chóng” lắm, “quy” (rùa) mà! :slight_smile:

Có một cách làm bài này mình nghĩ cũng khá thú vị. Như chúng ta đã biết thì chuỗi nhị phân của 1 số hệ 10 chính là hệ 2 mà mình cần tìm. Vậy mình chỉ cần thực hiện thao tác xem thử bit thứ i của n là 0 hay 1 mà thôi.

int GetBit(int n, int i)
{
if((n>>i)&1)==1)
return 1;
else
return 0;
}

[QUOTE=09520434;27472]Có một cách làm bài này mình nghĩ cũng khá thú vị. Như chúng ta đã biết thì chuỗi nhị phân của 1 số hệ 10 chính là hệ 2 mà mình cần tìm. Vậy mình chỉ cần thực hiện thao tác xem thử bit thứ i của n là 0 hay 1 mà thôi.

int GetBit(int n, int i)
{
if((n>>i)&1)==1)
return 1;
else
return 0;
}[/QUOTE]

Điều chỉnh chút cho code bạn Tâm “ngắn hơn”:

int GetBit(int n, int i)
{
return (n>>i)&1;
}

có ai làm bài lấy dạng nhị phân số float chưa ?

[QUOTE=08520195;27488]có ai làm bài lấy dạng nhị phân số float chưa ?[/QUOTE]
Chấm phẩy động hả ông anh

[QUOTE=09520109;27503]Chấm phẩy động hả ông anh[/QUOTE]
bình thường ta thường làm là đổi số int thập phân sang nhị phân, ý anh ấy là đổi số float sang nhị phân.
kiểu như 2,5 của hệ 10 là bao nhiêu ở hệ nhị phân ấy (Dấu chấm phẩy động là gì quên mất tiêu rồi :()

[QUOTE=09520133;27508]bình thường ta thường làm là đổi số int thập phân sang nhị phân, ý anh ấy là đổi số float sang nhị phân.
kiểu như 2,5 của hệ 10 là bao nhiêu ở hệ nhị phân ấy (Dấu chấm phẩy động là gì quên mất tiêu rồi :()[/QUOTE]
là cái 2.5 của ông đó, kiêu Int mà có dấu phẩy ah. Cái này tham khảo Tin Đại Cương thui