Tanpa menggunakan fungsi/method bawaan yang terdapat pada bahasa pemrograman Python untuk konversi antar sistem bilangan, buatlah sebuah program yang dapat menerima input sebuah bilangan bulat positif dalam sistem bilangan desimal, dan menghasilkan output berupa bilangan yang ekuivalen pada sistem bilangan berikut ini: - Basis 2 (biner, 0 dan 1) - Basis 6 - Basis 8 (oktal) - Basis 16 (heksadesimal) - Basis 36 ___________________
Keterangan: Satuan bilangan berbasis 36 adalah angka 0 hingga 9, dilanjutkan abjad A hingga Z.
(Mohon bantuannya, terutama yang basis 36. Yang lainnya sudah.)
# konversibilangan.py def nilai_ke_char(angka): # Mengembalikan kode ASCII # dari sebuah angka # 0 - 9 => angka + ord('0') # 10 - 35 => angka-10 + ord('A') return (angka + ord('0')) if (angka in range(0, 10)) \ else (angka - 10 + ord('A'))
def konversi_dari_desimal(n: int, basis: int): # Mengembalikan bilangan (dalam bentuk string) # pada sistem bilangan basis [basis] # yang ekuivalen dengan n (desimal) # dengan pendekatan rekursif return "" if (n == 0) \ else konversi_dari_desimal(n // basis, basis) \ + nilai_ke_char(n % basis)
### Program Utama if __name__ == '__main__': print('\nKONVERSI BILANGAN') print('=================') while (True): n = int(input('Input bilangan bulat desimal positif: ')) if (n >= 0): break print("Input tidak valid. Silahkan ulangi lagi.\n") for basis in [2, 6, 8, 16, 36]: print(f'=> {n} (desimal) = ' + f'{konversi_dari_desimal(n, basis)} (basis {basis})' ) ### Akhir Program Utama _________________
Pembahasan
Untuk persoalan ini, kita dapat menggunakan prinsip utama mengubah bilangan dari sistem bilangan desimal (basis 10) ke sistem bilangan berbasis lain, yaitu dengan pembagian secara berulang oleh nilai basis bilangan. Rangkaian mundur dari sisa-sisa pembagiannya adalah bilangan yang ekuivalen dalam sistem bilangan yang lain.
Untuk angka satuan desimal yang lebih dari 9, seperti pada basis 16 (heksadesimal), huruf alfabet menggantikan nilai bilangan. A untuk 10, B untuk 11, dst. hingga Z untuk 35. Jadi, untuk angka satuan pada sistem bilangan lain, kita gunakan tipe data karakter.
Apakah perlu mengetahui atau mengingat kode ASCII dari karakter 0 - 9 dan A - Z? Silahkan jika Anda mau. Namun Python menyediakan fungsi ord(c) yang mengembalikan nilai kode ASCII dari karakter c. Mengingat batasan pada pertanyaan, yaitu tanpa menggunaan fungsi bawaan (built-in) dari Python dalam hal konversi antar sistem bilangan, saya rasa penggunaan fungsi ord() diperbolehkan. Fungsi bawaan yang dimaksud pada pertanyaan pastilah bin(), oct, dan hex().
Pada program di atas, fungsi konversi_dari_desimal(n: int, basis: int) dirancang secara rekursif. Anda bisa juga merancang fungsi tersebut secara iteratif.
Contoh hasil eksekusi program dapat dilihat pada gambar.
4 votes Thanks 2
henriyulianto
string c h r() tidak bisa dipost karena mungkin dideteksi sebagai html injection. Di komentar juga tidak bisa. Di jawaban saya gunakan latex untuk menulis c h r()
4dministraktor
weh singkat banget trnyata. basisnya pun msk dlm for. sy bikinnya 1 fungsi utk 1 basis. terima ksh bnyk kak.
4dministraktor
btw, mo tny. baris: "if __name__ == '__main__':" apa mmg diperlukan utk program utama?
henriyulianto
tidak perlu. tanpa baris itu pun, baris2 di bawahnya tetap dianggap sebagai program utama (driver codes). oh ya. saya pakai Python versi 3.10 yang sudah terinstall di Ubuntu WSL saya. Kalau pakai versi 2.x, ada beberapa hal yang harus disesuaikan.
4dministraktor
OK kak. terima ksh sekali lagi. Ada tgs saya yg baru. Msh blm kepikiran gimana buatnya. Mgkn kakak bs bantu lg. hehe
Kode Program (Python)
# konversibilangan.py
def nilai_ke_char(angka):
# Mengembalikan kode ASCII
# dari sebuah angka
# 0 - 9 => angka + ord('0')
# 10 - 35 => angka-10 + ord('A')
return (angka + ord('0')) if (angka in range(0, 10)) \
else (angka - 10 + ord('A'))
def konversi_dari_desimal(n: int, basis: int):
# Mengembalikan bilangan (dalam bentuk string)
# pada sistem bilangan basis [basis]
# yang ekuivalen dengan n (desimal)
# dengan pendekatan rekursif
return "" if (n == 0) \
else konversi_dari_desimal(n // basis, basis) \
+ nilai_ke_char(n % basis)
### Program Utama
if __name__ == '__main__':
print('\nKONVERSI BILANGAN')
print('=================')
while (True):
n = int(input('Input bilangan bulat desimal positif: '))
if (n >= 0): break
print("Input tidak valid. Silahkan ulangi lagi.\n")
for basis in [2, 6, 8, 16, 36]:
print(f'=> {n} (desimal) = ' +
f'{konversi_dari_desimal(n, basis)} (basis {basis})'
)
### Akhir Program Utama
_________________
Pembahasan
Untuk persoalan ini, kita dapat menggunakan prinsip utama mengubah bilangan dari sistem bilangan desimal (basis 10) ke sistem bilangan berbasis lain, yaitu dengan pembagian secara berulang oleh nilai basis bilangan. Rangkaian mundur dari sisa-sisa pembagiannya adalah bilangan yang ekuivalen dalam sistem bilangan yang lain.
Untuk angka satuan desimal yang lebih dari 9, seperti pada basis 16 (heksadesimal), huruf alfabet menggantikan nilai bilangan. A untuk 10, B untuk 11, dst. hingga Z untuk 35. Jadi, untuk angka satuan pada sistem bilangan lain, kita gunakan tipe data karakter.
Apakah perlu mengetahui atau mengingat kode ASCII dari karakter 0 - 9 dan A - Z?
Silahkan jika Anda mau. Namun Python menyediakan fungsi ord(c) yang mengembalikan nilai kode ASCII dari karakter c. Mengingat batasan pada pertanyaan, yaitu tanpa menggunaan fungsi bawaan (built-in) dari Python dalam hal konversi antar sistem bilangan, saya rasa penggunaan fungsi ord() diperbolehkan. Fungsi bawaan yang dimaksud pada pertanyaan pastilah bin(), oct, dan hex().
Pada program di atas, fungsi konversi_dari_desimal(n: int, basis: int) dirancang secara rekursif. Anda bisa juga merancang fungsi tersebut secara iteratif.
Contoh hasil eksekusi program dapat dilihat pada gambar.
terima ksh bnyk kak.
oh ya. saya pakai Python versi 3.10 yang sudah terinstall di Ubuntu WSL saya. Kalau pakai versi 2.x, ada beberapa hal yang harus disesuaikan.
Ada tgs saya yg baru. Msh blm kepikiran gimana buatnya.
Mgkn kakak bs bantu lg. hehe