Tugas Alpro (Python)Tanpa menggunakan fungsi/method bawaan yang terdapat pada bahasa

Berikut ini adalah pertanyaan dari 4dministraktor pada mata pelajaran TI untuk jenjang Sekolah Menengah Atas

Tugas Alpro (Python)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.)

Jawaban dan Penjelasan

Berikut ini adalah pilihan jawaban terbaik dari pertanyaan diatas.

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 \tt {ch}r(angka + ord('0')) if (angka in range(0, 10)) \
       else \tt {ch}r(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.

Kode Program (Python)# konversibilangan.pydef nilai_ke_char(angka):    # Mengembalikan kode ASCII    # dari sebuah angka    # 0 - 9 => angka + ord('0')    # 10 - 35 => angka-10 + ord('A')      return [tex]\tt {ch}r[/tex](angka + ord('0')) if (angka in range(0, 10)) \        else [tex]\tt {ch}r[/tex](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 Kode Program (Python)# konversibilangan.pydef nilai_ke_char(angka):    # Mengembalikan kode ASCII    # dari sebuah angka    # 0 - 9 => angka + ord('0')    # 10 - 35 => angka-10 + ord('A')      return [tex]\tt {ch}r[/tex](angka + ord('0')) if (angka in range(0, 10)) \        else [tex]\tt {ch}r[/tex](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 Kode Program (Python)# konversibilangan.pydef nilai_ke_char(angka):    # Mengembalikan kode ASCII    # dari sebuah angka    # 0 - 9 => angka + ord('0')    # 10 - 35 => angka-10 + ord('A')      return [tex]\tt {ch}r[/tex](angka + ord('0')) if (angka in range(0, 10)) \        else [tex]\tt {ch}r[/tex](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

Semoga dengan pertanyaan yang sudah terjawab oleh henriyulianto dapat membantu memudahkan mengerjakan soal, tugas dan PR sekolah kalian.

Apabila terdapat kesalahan dalam mengerjakan soal, silahkan koreksi jawaban dengan mengirimkan email ke yomemimo.com melalui halaman Contact

Last Update: Sat, 05 Nov 22