30/09/2018, 21:20

Nhờ mọi người giúp đỡ em về 1 bài tập trong C: Viết hàm chuyển đổi hệ 10 (hệ thập phân) sang hệ 16 (hệ thập lục phân)

Xin chào mọi người. Hôm nay em có làm 1 bài tập trong ngôn ngữ C như sau: Viết hàm chuyển đổi hệ 10 (hệ thập phân) sang hệ 16 (hệ thập lục phân)

Bài này nghe thoạt đầu có vẻ đơn giản nhưng đối với em thì điều đó có vẻ không đúng lắm.
Dưới đây là đoạn code làm bài của em:

void ChuyenHe(int x, int he)
{
	if (he == 16)
	{
		int bien_phu = 0;
		int phantu = 0;
		char mang[100];
		int a = x;
		while (a != 0)
		{
			int chuso = a % 16;
			if (chuso <= 9)
				mang[phantu++] = chuso;
			else if (chuso == 10)
				mang[phantu++] = 'A';
			else if (chuso == 11)
				mang[phantu++] = 'B';
			else if (chuso == 12)
				mang[phantu++] = 'C';
			else if (chuso == 13)
				mang[phantu++] = 'D';
			else if (chuso == 14)
				mang[phantu++] = 'E';
			else if (chuso == 15)
				mang[phantu++] = 'F';
			bien_phu++;
			a /= 16;
		}
		printf("
Ketqua = ");
		for (int i = bien_phu - 1; i >= 0; i--)
		{
			if (mang[i] >= 48 && mang[i] <= 57)
				printf("%d", mang[i]);
			else if (mang[i] >= 65 && mang[i] <= 90)
				printf("%c", mang[i]);
		}
	}
	else
		printf("
Chuong trinh khong ho tro he co so nay
");
}
int main()
{
	int x, he;
	printf("
Nhap vao he so: ");
	scanf("%d", &he);
	printf("
Nhap gia tri can doi: ");
	scanf("%d", &x);
	ChuyenHe(x, he);
	getch();
	return 0;
}

Cái duy nhất mà em không làm được đó là ở line 7 . Nếu em để kiểu int thì kết quả xuất ra chỉ toàn số. Còn nếu em để kiểu char thì kết quả xuất ra chỉ toàn chữ.
Vậy nên thắc mắc duy nhất của em là có kiểu nào kết hợp cả số và chữ hay không ? Hay đơn giản là giải quyết được vấn đề mảng chứa được cả số lẫn ký tự

Hung viết 23:26 ngày 30/09/2018

Vì sao lại có bài tập này? Chế tạo lại cái bánh xe à?

int a = 6970;
printf("%x\n", a);

Nguyễn Văn Nam viết 23:28 ngày 30/09/2018

char mang[100];

Để là char nhé. và sửa lại 1 chút như thế này.

if (chuso <= 9)
mang[phantu++] = chuso+48;

Lúc in ra thì chỉ cần thế này.

for (int i = bien_phu - 1; i >= 0; i–)
{
printf("%c", mang[i]);
}

Người bí ẩn viết 23:24 ngày 30/09/2018

Vì sao lại có bài tập này? Chế tạo lại cái bánh xe à?

Hì, chủ yếu luyện tư duy thôi Mà dùng %x cũng hay chứ nhỉ ! Thanks !

Người bí ẩn viết 23:28 ngày 30/09/2018

Cảm ơn bạn nhiều nhé ![quote=“NamTe, post:3, topic:27573”]
if (chuso <= 9) mang[phantu++] = chuso+48;
[/quote]

for (int i = bien_phu - 1; i >= 0; i--) { printf("%c", mang[i]); }

Bạn giải thích 2 chỗ này cụ thể cho mình xíu được không ?

Nguyễn Văn Nam viết 23:35 ngày 30/09/2018

Cái này mình dựa vào bảng mã ascii. Không biết phải giải thích sao :3.

Người bí ẩn viết 23:36 ngày 30/09/2018

Cái này mình dựa vào bảng mã ascii.

Ái chà quên béng mất vụ này. Mình hiểu rồi dù sao cũng cảm ơn bạn nhé

Thật sự nghe bạn nói luyện tư duy làm mình mắc cười quá
Nói thật mấy bài này làm chỉ tổ phí thời gian

Người bí ẩn viết 23:36 ngày 30/09/2018

Hihi, đối với những người kinh nghiệm như bạn thì cần gì làm đúng không, hay nói cách khác làm mấy bài này chỉ tốn thời gian của bạn !
Mình mới học lập trình mà, nên làm hay không đâu ảnh hưởng tới bạn

Có vẻ bạn mới học lập trình, nên cảm giác giải thành công 1 bài toán như thế này làm bạn rất vui, nhưng thực tế thì bạn chỉ giải 1 bài toán chứ bạn chưa tạo ra 1 ứng dụng, mục đích bạn học lập trình để giải toán hay làm ứng dụng
Sao bạn ko tìm hiểu cái cách viết code sao cho dễ hiểu, các giai đoạn phát triển ứng dụng, các mẫu design pattern, mà lại ngồi giải mấy bài toán vớ vẩn với mục đích “rèn luyện tư duy”

Người bí ẩn viết 23:36 ngày 30/09/2018

Có vẻ bạn mới học lập trình

Đúng thế ! Chính xác !

mục đích bạn học lập trình để giải toán hay làm ứng dụng

Để làm ứng dụng nhưng trước khi làm ứng dụng thì phải biết giải toán đã chứ nhỉ ? Ví dụ lập trình 1 trang web như Google thì phải biết làm thuật toán để tìm kiếm được , và muốn làm được thuật toán đó thì phải giải được những bài toán đơn giản !

mà lại ngồi giải mấy bài toán vớ vẩn với mục đích “rèn luyện tư duy”

Đối với bạn thì vớ vẩn nhưng đối với mình thì lại không Nhiều người nói vớ vẩn chứ giải có được đâu hay sau này khi làm 1 ứng dụng, cần làm 1 thuật toán mà thuật toán đó lại cùng dạng với bài toán kia thì không biết làm

P/S: Mình cũng mới học lập trình nên cũng không đủ kiến thức để tranh cãi với bạn làm gì. Hơn nữa sẽ loãng Topic mất và Topic này cũng đã giải đáp được thắc mắc của mình rồi nên bạn cũng đừng “xía” vô nhé

thực sự thì mấy bài này lúc làm việc có thư viện sẵn rồi, mình khuyên bạn thế thôi

Người bí ẩn viết 23:35 ngày 30/09/2018

thực sự thì mấy bài này lúc làm việc có thư viện sẵn rồi, mình khuyên bạn thế thôi

printf("%x\n", a);

Cái này đúng không Mình trước khi làm bài tập này thì chưa biết cái %x nên cũng … Mà thôi, làm xong cũng ok rồi Mình cũng đánh giá cao lời khuyên của cậu

Nhờ các Leader đẹp troai @david15894 @thanhmssl10 … close giùm mình nhé !

Thành Phạm viết 23:22 ngày 30/09/2018

Mình thấy việc đào sâu vào chi tiết xem mọi thứ hoạt động như nào chẳng có vấn đề gì cả, đặc biệt là đang học chứ không phải đang chạy theo deadline, Cứ dùng thư viện mãi thì đến lúc muốn tự viết 1 cái thư viện thì sao nhỉ hay muốn contribute/debug một cái thư viện nào đó chẳng hạn Kiểu chỉ biết dùng cái bánh xe đi đường cao tốc thôi, đến lúc muốn sửa, cải tiến cái bánh xe để đi đường núi thì chẳng biết làm thế nào

Bài liên quan
0