Skip to content

Commit d8c227f

Browse files
authored
chore: konversi bilangan biner ke oktal (#12)
* chore: konversi bilangan biner ke oktal Signed-off-by: slowy07 <[email protected]> * fix: scope variabel r dan d - mengurangi scope variabel r di dalam looping - hapus variabel d dan buat variabelnya saat data ingin direset Signed-off-by: slowy07 <[email protected]> * fix: minor codacy scope variabel can be reduce Signed-off-by: slowy07 <[email protected]> --------- Signed-off-by: slowy07 <[email protected]>
1 parent 12df633 commit d8c227f

File tree

3 files changed

+90
-1
lines changed

3 files changed

+90
-1
lines changed

CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,10 @@ if (NOT HAS_INTTYPES_H)
3939
endif()
4040

4141
add_subdirectory(math)
42+
add_subdirectory(hashing)
43+
add_subdirectory(konversi)
4244
add_subdirectory(algoritma/sorting)
4345
add_subdirectory(algoritma/searching)
44-
add_subdirectory(hashing)
4546

4647
cmake_policy(SET CMP0054 NEW)
4748
cmake_policy(SET CMP0057 NEW)

konversi/CMakeLists.txt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
file( GLOB APP_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.c )
2+
foreach( testsourcefile ${APP_SOURCES} )
3+
string( REPLACE ".c" "" testname ${testsourcefile} )
4+
add_executable( ${testname} ${testsourcefile} )
5+
6+
if(OpenMP_C_FOUND)
7+
target_link_libraries(${testname} OpenMP::OpenMP_C)
8+
endif()
9+
if(MATH_LIBRARY)
10+
target_link_libraries(${testname} ${MATH_LIBRARY})
11+
endif()
12+
install(TARGETS ${testname} DESTINATION "bin/konversi")
13+
14+
endforeach( testsourcefile ${APP_SOURCES} )

konversi/biner_ke_oktal.c

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
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

Comments
 (0)