Kalkulator Luas Bangun
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Rust di Coddy. Pelajaran 61 dari 61.
Tantangan
MudahTantangan 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 traitShapedengan methodareayang mengembalikanf64. Trait ini menetapkan kontrak yang harus dipenuhi oleh semua bentuk.shapes.rs: Buat dua struct yang mengimplementasikan trait-mu.Circlememilikiradius(f64), danSquarememilikiside(f64). Setiap struct harus mengimplementasikan traitShapedengan rumus luas yang sesuai. Untuk lingkaran, gunakan3.14159sebagai π.main.rs: Sertakan kedua module dan buat fungsitotal_areayang menerimaVec<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.56636Ini 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.14159Kamu 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
1Method dan Perilaku
Pengantar Blok ImplementasiParameter SelfMethod MutableFungsi TerkaitBeberapa Blok ImplementasiMethod BerantaiRangkuman: Aksi Persegi Panjang4Proyek: Hewan Peliharaan Virtual
Mendefinisikan Hewan PeliharaanMemberi Makan Hewan Peliharaan2Enkapsulasi dan module
Dasar-Dasar moduleKata Kunci publicField privateGetterSetterRekap: Loker AmanLatihan sendiri: Compiler Rust online