Menu
CoddyTech

Rangkuman: Titik Koordinat

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

challenge icon

Tantangan

Mudah

Mari buat sistem koordinat fleksibel yang berfungsi dengan tipe numerik apa pun! Kamu akan membuat struct generik Point yang dapat merepresentasikan posisi menggunakan bilangan bulat untuk game berbasis grid atau bilangan floating-point untuk grafik yang presisi, semuanya dari satu definisi.

Kamu akan mengatur kodemu dalam dua file:

  • point.rs: Definisikan struct generik Point<T> publik dengan dua field publik: x dan y, keduanya bertipe T. Implementasikan method untuk point-mu:
    • Fungsi terkait new yang membuat point dari koordinat x dan y
    • Method translate yang menerima nilai dx dan dy lalu mengembalikan Point baru dengan koordinat yang digeser sebesar nilai tersebut (ini mengharuskan T mendukung penjumlahan dan penyalinan, jadi gunakan batasan T: std::ops::Add<Output = T> + Copy)
  • main.rs: Muat module point-mu dan tunjukkan bagaimana struct generik yang sama berfungsi dengan lancar menggunakan tipe numerik yang berbeda.

Di file utama, tunjukkan penggunaan Point generik dengan cara:

  1. Membuat point bilangan bulat menggunakan dua input pertama (diurai sebagai i32)
  2. Menggesernya menggunakan input ketiga dan keempat (juga i32)
  3. Membuat point floating-point menggunakan input kelima dan keenam (diurai sebagai f64)
  4. Menampilkan ketiga point

Output-mu harus mengikuti format ini:

Integer point: ({x}, {y})
After translation: ({x}, {y})
Float point: ({x}, {y})

Contohnya, dengan input 3, 5, 2, -1, 1.5, dan 2.5:

Integer point: (3, 5)
After translation: (5, 4)
Float point: (1.5, 2.5)

Perhatikan bagaimana Point::new(3, 5) membuat Point<i32>, sedangkan Point::new(1.5, 2.5) membuat Point<f64>: definisi struct yang sama menyesuaikan diri dengan keduanya!

Kamu akan menerima enam input: dua bilangan bulat untuk point pertama, dua bilangan bulat untuk translasi, dan dua bilangan desimal untuk point kedua.

Coba sendiri

mod point;

use point::Point;

fn main() {
    // Baca input
    let mut input = String::new();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let x1: i32 = input.trim().parse().expect("Invalid input");
    
    input.clear();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let y1: i32 = input.trim().parse().expect("Invalid input");
    
    input.clear();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let dx: i32 = input.trim().parse().expect("Invalid input");
    
    input.clear();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let dy: i32 = input.trim().parse().expect("Invalid input");
    
    input.clear();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let x2: f64 = input.trim().parse().expect("Invalid input");
    
    input.clear();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let y2: f64 = input.trim().parse().expect("Invalid input");
    
    // TODO: Buat titik bilangan bulat menggunakan x1 dan y1
    
    // TODO: Geser titik bilangan bulat sebesar dx dan dy
    
    // TODO: Buat titik bilangan desimal menggunakan x2 dan y2
    
    // TODO: Cetak hasilnya dalam format yang diminta:
    // println!("Integer point: ({}, {})", ...);
    // println!("After translation: ({}, {})", ...);
    // println!("Float point: ({}, {})", ...);
}

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Rust online