Menu
Coddy logo textTech

Итоги — Printable Point

Часть раздела Object Oriented Programming путешествия по Rust на Coddy — урок 39 из 61.

challenge icon

Задание

Легко

Давайте объединим все стандартные типажи (traits), которые вы изучили, создав полнофункциональную структуру Point, которую можно отлаживать, красиво отображать и сравнивать на равенство!

Вы организуете свой код в двух файлах:

  • point.rs: Определите публичную структуру Point с публичными полями x и y (оба типа i32). Ваша точка должна поддерживать три возможности:
    • Отладочный вывод с помощью {:?} — реализуйте это автоматически через derive
    • Удобное для пользователя отображение с помощью {} в формате (x, y) — реализуйте это вручную, используя std::fmt::Display
    • Сравнение на равенство с помощью == — реализуйте PartialEq через derive
  • main.rs: Подключите модуль point и создайте два экземпляра Point, используя предоставленные входные данные. Продемонстрируйте все три возможности, выведя первую точку в отладочном формате, вторую точку в формате отображения и сравнив, равны ли эти две точки.

Ваш вывод должен показывать работу всех трех типажей:

Debug: Point { x: {x1}, y: {y1} }
Display: ({x2}, {y2})
Equal: {true/false}

Например, при входных данных 3, 5, 3, 5:

Debug: Point { x: 3, y: 5 }
Display: (3, 5)
Equal: true

И при входных данных 10, 20, 5, 15:

Debug: Point { x: 10, y: 20 }
Display: (5, 15)
Equal: false

Вы получите четыре входных значения: координаты x и y для первой точки, а затем координаты x и y для второй точки. Обработайте каждое из них как i32.

Попробуйте сами

mod point;

use point::Point;

fn main() {
    // Считать четыре входных значения: x1, y1, x2, y2
    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 x2: i32 = input.trim().parse().expect("Invalid input");

    input.clear();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let y2: i32 = input.trim().parse().expect("Invalid input");

    // TODO: Создать два экземпляра Point, используя входные данные

    // TODO: Вывести первую точку, используя формат отладки {:?}
    // Формат: "Debug: Point { x: ..., y: ... }"

    // TODO: Вывести вторую точку, используя формат отображения {}
    // Формат: "Display: (..., ...)"

    // TODO: Сравнить две точки и вывести результат
    // Формат: "Equal: true" или "Equal: false"
}

Все уроки раздела Object Oriented Programming