Langsung ke konten utama

Day 60 : membuat program sederhana go part 5 : mengkonversi angka desimal menjadi angka Romawi

 Angka Romawi adalah sistem penulisan angka yang berasal dari Roma Kuno. Meskipun terkesan kuno, angka Romawi masih digunakan hingga saat ini dalam berbagai konteks, seperti penomoran bab buku, acara resmi, hingga tahun rilis film. Sistem ini menggunakan huruf untuk mewakili nilai tertentu, dan terdapat beberapa aturan khusus dalam penulisannya.

Berikut adalah huruf dan nilai dasar dalam angka Romawi:

  • I = 1
  • V = 5
  • X = 10
  • L = 50
  • C = 100
  • D = 500
  • M = 1.000

Aturan Penulisan Angka Romawi:

  1. Penambahan: Jika huruf kecil berada di kanan huruf besar, maka nilainya ditambahkan.
    Contoh: VI = 5 + 1 = 6, XIII = 10 + 3 = 13

  2. Pengurangan: Jika huruf kecil berada di kiri huruf besar, maka nilainya dikurangkan.
    Contoh: IV = 5 - 1 = 4, IX = 10 - 1 = 9

  3. Pengulangan:

    • Huruf I, X, C, dan M dapat diulang hingga 3 kali. Contoh: III = 3, XXX = 30
    • Huruf V, L, dan D tidak boleh diulang.

Dengan memahami aturan-aturan ini, kita bisa melakukan konversi angka desimal menjadi angka Romawi. Nah, dalam contoh berikut, kita akan membuat program sederhana menggunakan Golang untuk melakukan konversi angka otomatis berdasarkan aturan tersebut.



Berikut adalah kode program lengkap untuk mengonversi angka desimal ke angka Romawi menggunakan bahasa pemrograman Go.

package main

import "fmt"

func keRomawi(Number int) string {
    var hasil string
    diaz := []struct {
        nilai  int
        simbol string
    }{
        {1000, "M"}, {900, "CM"}, {500, "D"}, {400, "CD"},
        {100, "C"}, {90, "XC"}, {50, "L"}, {40, "XL"},
        {10, "X"}, {9, "IX"}, {5, "V"}, {4, "IV"}, {1, "I"},
    }
    for _, i := range diaz {
        for Number >= i.nilai {
            hasil += i.simbol
            Number -= i.nilai

        }
    }
    return hasil
}

func main() {
    var Number int
    fmt.Printf("Masukkan Angka : ")
    fmt.Scan(&Number)
    if Number < 1 || Number > 1000 {
        fmt.Println("Masukkan Angka antara 1 sampai 1000")
    } else {
        fmt.Printf("Angka %d dalam Romawi : %s ", Number, keRomawi(Number))
    }
}

Penjelasan Program :

1. Deklarasi Package dan Import

package main

import "fmt"
  • package main: Menunjukkan bahwa ini adalah paket utama dari program Go yang dapat dieksekusi. Setiap program Go harus memiliki paket utama untuk dijalankan.

  • import "fmt": Mengimpor paket fmt, yang berfungsi untuk menangani input dan output, seperti mencetak ke layar dan membaca input dari pengguna.

2. Fungsi keRomawi

func keRomawi(Number int) string {
    var hasil string
    diaz := []struct {
        nilai  int
        simbol string
    }{
        {1000, "M"}, {900, "CM"}, {500, "D"}, {400, "CD"},
        {100, "C"}, {90, "XC"}, {50, "L"}, {40, "XL"},
        {10, "X"}, {9, "IX"}, {5, "V"}, {4, "IV"}, {1, "I"},
    }
  • func keRomawi(Number int) string: Mendefinisikan fungsi bernama keRomawi yang menerima parameter Number bertipe integer dan mengembalikan hasil dalam bentuk string. Fungsi ini bertanggung jawab untuk mengonversi angka desimal ke angka Romawi.

  • var hasil string: Mendeklarasikan variabel hasil yang akan menyimpan hasil konversi dalam bentuk string. Variabel ini diinisialisasi sebagai string kosong.

  • diaz := []struct {...}: Membuat slice bernama diaz yang berisi struktur dengan dua elemen: nilai (tipe int) dan simbol (tipe string). Slice ini menyimpan pasangan nilai desimal dan simbol Romawi yang sesuai. Struktur ini memudahkan pengelompokan data.

3. Inisialisasi Data dalam Slice

{
        {1000, "M"}, {900, "CM"}, {500, "D"}, {400, "CD"},
        {100, "C"}, {90, "XC"}, {50, "L"}, {40, "XL"},
        {10, "X"}, {9, "IX"}, {5, "V"}, {4, "IV"}, {1, "I"},
    }
  • Setiap pasangan nilai dan simbol dalam struktur di atas diurutkan dari yang terbesar ke yang terkecil. Ini penting untuk proses konversi yang efektif, karena kita mulai dari nilai tertinggi untuk mengurangi angka input.

4. Proses Konversi

for _, i := range diaz {
        for Number >= i.nilai {
            hasil += i.simbol
            Number -= i.nilai

        }
    }
  • for _, i := range diaz: Mengiterasi setiap elemen dalam slice diaz. Variabel i akan berisi setiap pasangan nilai dan simbol dari diaz.

  • for Number >= i.nilai: Memeriksa apakah Number (angka desimal yang ingin dikonversi) lebih besar atau sama dengan i.nilai. Jika ya, langkah-langkah berikut dilakukan:

    • hasil += i.simbol: Menambahkan simbol Romawi yang sesuai ke dalam variabel hasil.

    • Number -= i.nilai: Mengurangi nilai Number dengan nilai i.nilai. Proses ini terus berlangsung hingga Number menjadi lebih kecil dari i.nilai.

  • Setelah semua iterasi selesai, fungsi mengembalikan string hasil, yang berisi representasi angka Romawi dari input.

5. Fungsi main()

func main() {
    var Number int
    fmt.Printf("Masukkan Angka : ")
    fmt.Scan(&Number)
  • func main(): Fungsi utama yang menjadi titik awal eksekusi program.

  • var Number int: Mendeklarasikan variabel Number bertipe integer untuk menyimpan input angka dari pengguna.

  • fmt.Printf("Masukkan Angka : "): Mencetak pesan ke layar yang meminta pengguna untuk memasukkan angka.

  • fmt.Scan(&Number): Membaca input dari pengguna dan menyimpannya ke dalam variabel Number. Simbol & digunakan untuk mendapatkan alamat variabel Number, sehingga fungsi Scan dapat mengubah nilainya.

6. Validasi Input

if Number < 1 || Number > 1000 {
        fmt.Println("Masukkan Angka antara 1 sampai 1000")
    } else {
        fmt.Printf("Angka %d dalam Romawi : %s ", Number, keRomawi(Number))
    }
}
  • if Number < 1 || Number > 1000: Memeriksa apakah input yang dimasukkan berada dalam rentang yang valid (1 hingga 1000).

  • fmt.Println("Masukkan Angka antara 1 sampai 1000"): Jika input tidak valid, mencetak pesan kesalahan.

  • else: Jika input valid, memanggil fungsi keRomawi(Number) untuk melakukan konversi dan mencetak hasilnya.

  • fmt.Printf("Angka %d dalam Romawi : %s ", Number, keRomawi(Number)): Mencetak hasil konversi dengan format yang sesuai.


Contoh Output Program

Jika pengguna memasukkan angka 456, output yang dihasilkan adalah : CDLVI





Komentar

Postingan populer dari blog ini

Day 109 : Akhir dari Perjalanan PKL: Terima Kasih untuk PT Excellent

Hari ini adalah hari terakhir saya menjalani PKL di PT Excellent. Momen ini menjadi penutup dari perjalanan yang luar biasa penuh pembelajaran, pengalaman, dan kenangan yang tak terlupakan. Saya ingin menyampaikan rasa terima kasih yang sebesar-besarnya kepada keluarga besar PT Excellent atas kesempatan, bimbingan, dan kepercayaan yang telah diberikan kepada saya selama saya melaksanakan PKL di sini. Selama PKL, saya mendapatkan banyak pengetahuan baru yang sebelumnya belum pernah saya pelajari. Dari segi teknis, saya belajar banyak tentang teknologi seperti Zimbra, bahasa pemrograman Golang, hingga DevOps hal-hal yang awalnya terasa asing, kini menjadi ilmu yang berharga dan menjadi ilmu baru bagi saya. Namun, pembelajaran saya di PT Excellent tidak hanya terbatas pada aspek teknis. Saya juga belajar tentang kedisiplinan, tanggung jawab, profesionalisme, serta bagaimana pentingnya kolaborasi dalam lingkungan kerja. Terima kasih kepada Mas Ridwan, yang selalu membimbing saya dengan sab...

Day 82 : Membuat image dengan bahasa pemrograman golang

Hari ini, saya melanjutkan perjalanan belajar Docker dengan memanfaatkan Visual Studio Code (VSCode), editor favorit saya. Fokus utama saya adalah memahami cara membuat Docker image menggunakan alur kerja yang terintegrasi dengan VSCode. Proses ini tidak hanya efisien tetapi juga menyenangkan karena VSCode memiliki ekosistem yang kaya, termasuk berbagai ekstensi pendukung yang mempermudah pekerjaan. Mengapa Menggunakan VSCode untuk Docker? VSCode menyediakan lingkungan pengembangan yang lengkap dengan berbagai fitur, seperti: Docker Extension : Mempermudah pengelolaan image, container, dan jaringan Docker langsung dari editor. Terminal Terintegrasi : Menjalankan perintah Docker langsung dari VSCode tanpa perlu beralih aplikasi. Debugging Tools : Membantu melacak masalah aplikasi yang berjalan di dalam container, terutama bagi pengembang Golang. Dengan semua keunggulan ini, VSCode menjadi alat yang sangat mendukung dalam pengembangan berbasis Docker. Langkah-langkah Membuat Docker Image...

Day 35 : jalan-jalan bersama excellent

 Hari ini terasa sangat istimewa, dan jauh berbeda dari hari-hari biasanya selama PKL di PT Excellent. Ini adalah pengalaman pertama saya diajak jalan-jalan oleh perusahaan tempat saya magang, dalam rangka merayakan ulang tahun PT Excellent sekaligus melakukan sesi brainstorming tim.  Pagi itu, saya memulai hari dengan penuh semangat. Saya berangkat ke kantor menggunakan Gojek, menikmati perjalanan sambil membayangkan serunya hari yang akan dilalui. Setibanya di kantor, saya langsung bergabung dengan tim dan mulai memeriksa perlengkapan yang sudah disiapkan sebelumnya. Tugas saya adalah memastikan semua barang yang diperlukan tidak ada yang tertinggal, mulai dari alat-alat untuk acara hingga barang-barang pribadi tim. Saya sangat teliti kali ini, karena tidak ingin ada kesalahan di hari spesial ini. Setelah semuanya siap, sebelum berangkat, kami sempatkan untuk mengambil foto bersama seluruh tim. Rasanya hangat sekali, seperti menjadi bagian dari keluarga besar PT Excellent. P...