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

Потренируйтесь самостоятельно: Онлайн-компилятор Rust