Menu
CoddyTech

Kalkulator Luas Bangun

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Rust di Coddy. Pelajaran 61 dari 61.

challenge icon

Tantangan

Mudah

Tantangan terakhir ini menggabungkan trait, trait object, dan polimorfisme untuk menyelesaikan masalah praktis: menghitung luas total berbagai bentuk yang disimpan dalam satu koleksi.

Mari buat kalkulator luas bentuk yang menunjukkan keunggulan trait object dan polimorfisme! Kamu akan membuat sistem yang dapat menyimpan berbagai bentuk, yaitu lingkaran dan persegi, bersama-sama dalam satu koleksi dan menghitung luas totalnya melalui antarmuka terpadu.

Kamu akan mengatur kodemu dalam tiga file:

  • shape.rs: Definisikan trait Shape dengan method area yang mengembalikan f64. Trait ini menetapkan kontrak yang harus dipenuhi oleh semua bentuk.
  • shapes.rs: Buat dua struct yang mengimplementasikan trait-mu. Circle memiliki radius (f64), dan Square memiliki side (f64). Setiap struct harus mengimplementasikan trait Shape dengan rumus luas yang sesuai. Untuk lingkaran, gunakan 3.14159 sebagai π.
  • main.rs: Sertakan kedua module dan buat fungsi total_area yang menerima Vec<Box<dyn Shape>> dan mengembalikan jumlah semua luas. Dengan menggunakan input yang diberikan, buat lingkaran dan persegi, simpan keduanya dalam vector berisi trait object, hitung luas totalnya, lalu tampilkan hasilnya.

Rumus luasnya adalah:

  • Lingkaran: 3.14159 × radius × radius
  • Persegi: side × side

Output-mu harus menampilkan luas total semua bentuk:

Total area: {total}

Contohnya, dengan input 2.0 (radius lingkaran) dan 3.0 (sisi persegi):

Total area: 21.56636

Ini karena: Luas lingkaran = 3.14159 × 2² = 12.56636, luas persegi = 3² = 9, total = 21.56636

Dan dengan input 1.0 dan 4.0:

Total area: 19.14159

Kamu akan menerima dua input: radius lingkaran dan panjang sisi persegi (urai keduanya sebagai f64).

Coba sendiri

mod shape;
mod shapes;

use shape::Shape;
use shapes::{Circle, Square};

// TODO: Implementasikan fungsi total_area
// Fungsi ini harus menerima Vec<Box<dyn Shape>> dan mengembalikan jumlah seluruh luas sebagai f64
fn total_area(shapes: Vec<Box<dyn Shape>>) -> f64 {
    // TODO: Hitung dan kembalikan jumlah luas semua bentuk
    0.0
}

fn main() {
    let mut input1 = String::new();
    std::io::stdin().read_line(&mut input1).expect("Failed to read line");
    let radius: f64 = input1.trim().parse().expect("Invalid number");

    let mut input2 = String::new();
    std::io::stdin().read_line(&mut input2).expect("Failed to read line");
    let side: f64 = input2.trim().parse().expect("Invalid number");

    // TODO: Buat Circle dengan jari-jari yang diberikan
    // TODO: Buat Square dengan panjang sisi yang diberikan
    // TODO: Simpan kedua bentuk dalam Vec<Box<dyn Shape>>
    // TODO: Panggil total_area dan cetak hasilnya dalam format: "Total area: {total}"
}

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Rust online