|
| 1 | +/** |
| 2 | + * @file biner_ke_oktal.c |
| 3 | + * @brief program untuk mengkonversi biner ke angka oktal |
| 4 | + * |
| 5 | + * contoh: |
| 6 | + * biner: 110 111 |
| 7 | + * desimal 6 7 |
| 8 | + * oktal: 67 |
| 9 | + */ |
| 10 | + |
| 11 | +#include <stdio.h> |
| 12 | + |
| 13 | +/** |
| 14 | + * @brief fungsi untuk mengambil tiga digit terakhir dari bilangan desimal |
| 15 | + * |
| 16 | + * fungsi ini digunakan untuk memisah bilangan biner menjadi 3 kelompok bit |
| 17 | + * karena dalam konversi biner ke oktal, kita bekerja per 3 bit |
| 18 | + * |
| 19 | + * @param n bilangan bulat positif (biner) yang akan kita proses |
| 20 | + * @return int nilai tiga digit terakhir sebagai bilangan bulat |
| 21 | + */ |
| 22 | +int tiga_digit(int n) { |
| 23 | + // inisialisasi variabel untuk menyimpan remainder, hasil sementara |
| 24 | + // dan pangkat |
| 25 | + int d = 0, p = 1; |
| 26 | + |
| 27 | + // ambil 3 digit terakhir secara berturu-turut |
| 28 | + for (int i = 0; i < 3; i++) { |
| 29 | + int r = n % 10; // ambil digit terakhir |
| 30 | + d += r * p; // tambahkan ke hasil dengan posisi sesuai pangkat 10 |
| 31 | + p *= 10; // naikkan pangkat untuk digit berikutnya |
| 32 | + n /= 10; // hilangkan digit terakhir |
| 33 | + } |
| 34 | + |
| 35 | + // return tiga digit terakhir |
| 36 | + return d; |
| 37 | +} |
| 38 | + |
| 39 | +int main() { |
| 40 | + int angka_biner, remainder, td, hasil = 0, ord = 1; |
| 41 | + |
| 42 | + printf("masukkan angka biner: "); |
| 43 | + scanf("%d", &angka_biner); |
| 44 | + |
| 45 | + // looping sampai semua digit biner telah diproses |
| 46 | + while (angka_biner > 0) { |
| 47 | + // jika lebih dari 3 digit, ambil tiga digit terakhir |
| 48 | + if (angka_biner > 111) { |
| 49 | + td = tiga_digit(angka_biner); |
| 50 | + } else { |
| 51 | + // jika kurang atau sama dengan 111, maka kita gunakan langsung |
| 52 | + td = angka_biner; |
| 53 | + } |
| 54 | + |
| 55 | + angka_biner /= 1000; // hapus 3 digit terakhir dari angka biner |
| 56 | + int base = 1, d = 0; // reset variabel untuk konversi biner ke desimal |
| 57 | + |
| 58 | + // looping untuk konversi tiga digit biner ke desimal |
| 59 | + while (td > 0) { |
| 60 | + remainder = td % 10; // ambil digit terakhir |
| 61 | + td /= 10; // hapus digit terakhir |
| 62 | + d += (base * remainder); // kalikan dengan pangkat 2 sesuai posisi |
| 63 | + base *= 2; // naikkan pangkat 2 untuk digit berikutnya |
| 64 | + } |
| 65 | + |
| 66 | + // simpan desimal sebagai digit oktal dengan urutan yang benar |
| 67 | + hasil += d * ord; |
| 68 | + // geser tempat oktal (puluhan, ratusan, dll) |
| 69 | + ord *= 10; |
| 70 | + } |
| 71 | + |
| 72 | + printf("\nNilai oktalnya adalah: %d\n", hasil); |
| 73 | + return 0; |
| 74 | +} |
0 commit comments