fork download
  1. def hitungNomorBit(angka, nomorBit):
  2. # Cek angka harus positif
  3. if angka < 0:
  4. return None
  5.  
  6. # Khusus buat angka 0, langsung cek
  7. if angka == 0:
  8. if nomorBit == 0:
  9. return 1
  10. else:
  11. return None
  12.  
  13. # Konversi ke biner manual, menggunakan pembagian
  14. biner = ""
  15. temp_angka = angka
  16.  
  17. while temp_angka > 0:
  18. sisa = temp_angka % 2
  19. biner = str(sisa) + biner # tambahin di depan
  20. temp_angka = temp_angka // 2
  21.  
  22. # Hitung berapa kali bit yang dicari muncul
  23. jumlah = 0
  24. bit_dicari = str(nomorBit)
  25.  
  26. for bit in biner:
  27. if bit == bit_dicari:
  28. jumlah += 1
  29.  
  30. # Kalo nggak ada sama sekali, maka akan mebalikan None
  31. if jumlah == 0:
  32. return None
  33.  
  34. return jumlah
  35.  
  36. def tampilkanProses(angka):
  37. # Buat nampilin proses konversi (biar keliatan prosesnya)
  38. print(f"\n=== PROSES KONVERSI {angka} KE BINER ===")
  39.  
  40. if angka == 0:
  41. print("Angka 0 dalam biner: 0")
  42. return "0"
  43.  
  44. temp_angka = angka
  45. biner = ""
  46. langkah = 1
  47.  
  48. print(f"Angka awal: {angka}")
  49. print("Proses pembagian dengan 2:")
  50.  
  51. while temp_angka > 0:
  52. sisa = temp_angka % 2
  53. bagi = temp_angka // 2
  54. print(f"Langkah {langkah}: {temp_angka} ÷ 2 = {bagi}, sisa = {sisa}")
  55. biner = str(sisa) + biner
  56. temp_angka = bagi
  57. langkah += 1
  58.  
  59. print(f"Hasil biner: {biner}")
  60. return biner
  61.  
  62. # Contoh testing
  63. if __name__ == "__main__":
  64. print("=== TEST CASE DARI SOAL ===")
  65. angka_test = 13
  66.  
  67. # Liat proses konversinya
  68. biner_result = tampilkanProses(angka_test)
  69.  
  70. print(f"\nAngka {angka_test} dalam biner: {biner_result}")
  71.  
  72. # Coba hitung bit
  73. print(f"\nhitungNomorBit({angka_test}, 0) = {hitungNomorBit(angka_test, 0)}")
  74. print(f"hitungNomorBit({angka_test}, 1) = {hitungNomorBit(angka_test, 1)}")
  75. print(f"hitungNomorBit({angka_test}, 2) = {hitungNomorBit(angka_test, 2)}")
  76.  
  77. print("\n=== TEST CASE TAMBAHAN ===")
  78.  
  79. test_cases = [
  80. (7, 0),
  81. (7, 1),
  82. (8, 0),
  83. (8, 1),
  84. (15, 0),
  85. (15, 1),
  86. (0, 0),
  87. (0, 1),
  88. ]
  89.  
  90. for angka, bit in test_cases:
  91. biner = tampilkanProses(angka)
  92. hasil = hitungNomorBit(angka, bit)
  93. print(f"hitungNomorBit({angka}, {bit}) = {hasil}")
  94. print(f"Penjelasan: Angka {angka} = {biner} (biner), bit {bit} muncul {hasil if hasil else 0} kali\n")
  95.  
Success #stdin #stdout 0.07s 14088KB
stdin
Standard input is empty
stdout
=== TEST CASE DARI SOAL ===

=== PROSES KONVERSI 13 KE BINER ===
Angka awal: 13
Proses pembagian dengan 2:
Langkah 1: 13 ÷ 2 = 6, sisa = 1
Langkah 2: 6 ÷ 2 = 3, sisa = 0
Langkah 3: 3 ÷ 2 = 1, sisa = 1
Langkah 4: 1 ÷ 2 = 0, sisa = 1
Hasil biner: 1101

Angka 13 dalam biner: 1101

hitungNomorBit(13, 0) = 1
hitungNomorBit(13, 1) = 3
hitungNomorBit(13, 2) = None

=== TEST CASE TAMBAHAN ===

=== PROSES KONVERSI 7 KE BINER ===
Angka awal: 7
Proses pembagian dengan 2:
Langkah 1: 7 ÷ 2 = 3, sisa = 1
Langkah 2: 3 ÷ 2 = 1, sisa = 1
Langkah 3: 1 ÷ 2 = 0, sisa = 1
Hasil biner: 111
hitungNomorBit(7, 0) = None
Penjelasan: Angka 7 = 111 (biner), bit 0 muncul 0 kali


=== PROSES KONVERSI 7 KE BINER ===
Angka awal: 7
Proses pembagian dengan 2:
Langkah 1: 7 ÷ 2 = 3, sisa = 1
Langkah 2: 3 ÷ 2 = 1, sisa = 1
Langkah 3: 1 ÷ 2 = 0, sisa = 1
Hasil biner: 111
hitungNomorBit(7, 1) = 3
Penjelasan: Angka 7 = 111 (biner), bit 1 muncul 3 kali


=== PROSES KONVERSI 8 KE BINER ===
Angka awal: 8
Proses pembagian dengan 2:
Langkah 1: 8 ÷ 2 = 4, sisa = 0
Langkah 2: 4 ÷ 2 = 2, sisa = 0
Langkah 3: 2 ÷ 2 = 1, sisa = 0
Langkah 4: 1 ÷ 2 = 0, sisa = 1
Hasil biner: 1000
hitungNomorBit(8, 0) = 3
Penjelasan: Angka 8 = 1000 (biner), bit 0 muncul 3 kali


=== PROSES KONVERSI 8 KE BINER ===
Angka awal: 8
Proses pembagian dengan 2:
Langkah 1: 8 ÷ 2 = 4, sisa = 0
Langkah 2: 4 ÷ 2 = 2, sisa = 0
Langkah 3: 2 ÷ 2 = 1, sisa = 0
Langkah 4: 1 ÷ 2 = 0, sisa = 1
Hasil biner: 1000
hitungNomorBit(8, 1) = 1
Penjelasan: Angka 8 = 1000 (biner), bit 1 muncul 1 kali


=== PROSES KONVERSI 15 KE BINER ===
Angka awal: 15
Proses pembagian dengan 2:
Langkah 1: 15 ÷ 2 = 7, sisa = 1
Langkah 2: 7 ÷ 2 = 3, sisa = 1
Langkah 3: 3 ÷ 2 = 1, sisa = 1
Langkah 4: 1 ÷ 2 = 0, sisa = 1
Hasil biner: 1111
hitungNomorBit(15, 0) = None
Penjelasan: Angka 15 = 1111 (biner), bit 0 muncul 0 kali


=== PROSES KONVERSI 15 KE BINER ===
Angka awal: 15
Proses pembagian dengan 2:
Langkah 1: 15 ÷ 2 = 7, sisa = 1
Langkah 2: 7 ÷ 2 = 3, sisa = 1
Langkah 3: 3 ÷ 2 = 1, sisa = 1
Langkah 4: 1 ÷ 2 = 0, sisa = 1
Hasil biner: 1111
hitungNomorBit(15, 1) = 4
Penjelasan: Angka 15 = 1111 (biner), bit 1 muncul 4 kali


=== PROSES KONVERSI 0 KE BINER ===
Angka 0 dalam biner: 0
hitungNomorBit(0, 0) = 1
Penjelasan: Angka 0 = 0 (biner), bit 0 muncul 1 kali


=== PROSES KONVERSI 0 KE BINER ===
Angka 0 dalam biner: 0
hitungNomorBit(0, 1) = None
Penjelasan: Angka 0 = 0 (biner), bit 1 muncul 0 kali