Chủ Nhật, 19 tháng 8, 2012

Viết chương trình chuyển đổi số nguyên sang dạng nhị phân

Mục đích:
- Nhận 1 số nguyên dương bất kỳ từ bàn phím
- Chuyển đổi số đó sang dạng nhị phân, và in trở lại màn hình kết quả

Để làm được việc này, đầu tiên chúng ta phải mô tả lại cách chuyển số thập phân sang dạng nhị phân, như sau:
Chúng ta lấy số thập phân chia cho số 2, kết quả chúng ta được phần nguyên và phần dư khi chia hết cho 2. Lấy phần nguyên và chia tiếp cho . Làm như vậy cho đến khi phần nguyên bé hơn 2, thực hiện nốt phép chia hết cho 2 và dừng lại. Ghi lại kết quả các phần dư, rồi viết ngược lại, vậy là ta đổi được ra số nhị phân.
Lấy ví dụ: đổi số 11 ra số nhị phân
11 / 2 được phần nguyên là 5, phần dư là 1. Tiếp tục lấy phần nguyên là 5 chia tiếp cho 2, được 2 dư 1. Lấy 2 chia tiếp cho 2, được 1 dư 0. Lấy 1 chia tiếp cho 2 được 0 dư 1. Ta không chia nữa vì số phần nguyên 1 bé hơn 2. Các kết quả số dư là như sau 1101, sau đó viết đảo lại thành 1011, đó chính là số nhị phân của số thập phân 11.
Code của chương trình:
def dec2bin(n):  # n là số nguyên dương cho trước
 
   s = '' # Đây chính là phần dư, ban đầu là chưa có gì, rỗng
 
   while n:   #Thực hiện liên tục phép chia hết cho 2
 
      s = str(n % 2) + s # % 2 là phép chia cho 2 lấy phần dư, s chính là xâu lưu trữ kết quả các phần dư
 
      n = n / 2 # Gán lại n bằng phần nguyên của n chia cho 2
 
   return s # trả kết quả thành chuỗi nhị phân


Dưới đây là chương trình hoàn chỉnh, theo cách viết của mình. Mỗi bài toàn phần mềm có rất nhiều cách viết, cách của mình chỉ là 1 trong số đó. Như vậy có thể có những cách khác hay hơn, chứ không bao giờ có duy nhất 1 cách viết, đó là cái hay của phần mềm cũng như sự linh hoạt cực kỳ của nó.

#!/usr/bin/python
#Chuong trinh chuyen doi so thap phan nguyen duong nhap tu ban phim sang so nhi phan
#Author: Cu Hanh
#Version: 1.0
#Date: Jul 07 2012
 
### Nhap so nguyen duong tu ban phim ###
 
start = 1
while start:
 s = raw_input('Nhap so nguyen duong tu ban phim: ')
 try:
  num = int(s)
  if num <= 0:
   print("So ban nhap khong phai la so nguyen duong, moi ban nhap lai.\n")
  else: start = 0
 except:
  print('So ban nhap khong dung, moi nhap lai.\n')
 
### Chuyen doi so thap phan sang so nhi phan ###
 
bin = ''
while num:
 bin = str(num % 2) + bin
 num /= 2
 
### In so nhi phan sang man hinh ###
print('So nhi phan tuong ung la: ' + bin)
 
### Het. ###
 
 
Chạy thử nghiệm chương trình:
  

2 nhận xét:

  1. rất cám ơn bạn, mà sao chương trình đầu tiên mà bạn giới thiệu, mình code theo và thử với n = 10 chẳng hạn thì không có kết quả in ra màn hình vậy bạn?

    Trả lờiXóa