Введение
Программы становятся полезными, когда умеют выбирать между вариантами и повторять вычисления для нескольких значений. В Rust для принятия решений используются логические условия, а для управляемого повторения — циклы.
В этой лабораторной работе вы завершите четыре небольшие части подготовленной сводки по отправлениям. На каждом шаге изменяется только одно конкретное выражение: сравнение, результаты двух ветвей, выражение для накопления итога и условие приёма.
Создайте логическое сравнение
На этом шаге вы сравните вес посылки с установленным пределом и сохраните результат сравнения в виде значения true или false.
Перейдите в подготовленный проект и откройте исходный файл:
cd /home/labex/project/shipping-summary
nano src/main.rs
Оператор сравнения == проверяет, равны ли два значения. Он отличается от одиночного =, который ранее использовался для сохранения или присваивания значения. Исходное сравнение даёт false, потому что 12 не равно 10. В отчёте посылка считается тяжёлой, если её вес больше установленного предела.
В строке Step 1 замените только == на оператор «больше» >:
let is_heavy = package_weight > heavy_limit; // Step 1
Сравнение возвращает логическое значение true, которое сохраняется в is_heavy. Сохраните файл с помощью Ctrl+O, нажмите Enter, а затем выйдите с помощью Ctrl+X. Запустите программу:
cargo run --quiet
Теперь её первая строка должна выглядеть так:
Heavy package: true
Выберите значение с помощью выражения if
На этом шаге вы используете выражение if, чтобы выбрать транспортную маркировку.
Конструкция if проверяет логическое условие. Если условие равно true, Rust вычисляет первый блок; в противном случае вычисляется блок else. В Rust if может быть выражением, возвращающим значение. Обе ветви здесь возвращают текст, поэтому выбранный текст можно присвоить переменной shipping_label. Поскольку весь if становится одним сохранённым значением, его ветви должны возвращать совместимые типы.
Откройте файл:
nano src/main.rs
В строке Step 2 замените первое "unknown" на "Freight", а второе — на "Standard":
let shipping_label = if is_heavy { "Freight" } else { "Standard" }; // Step 2
Rust не требует скобок вокруг условия. Фигурные скобки ясно отделяют два возможных результата.
Сохраните файл, выйдите из редактора и запустите отчёт:
cargo run --quiet
Так как is_heavy равно true, вторая строка должна выглядеть так:
Shipping label: Freight
Складывайте значения с помощью цикла for
На этом шаге вы используете ограниченный цикл for и диапазон с включёнными границами, чтобы получить накопленный итог.
Диапазон 3..=6 представляет целые числа от 3 до 6 включительно. Цикл for последовательно берёт каждое значение из этого диапазона и временно называет его weight внутри тела цикла.
Изменяемая переменная total_weight начинается со значения 0. На каждой итерации к уже накопленному итогу нужно прибавлять текущее значение weight.
Откройте файл и найдите строку Step 3:
nano src/main.rs
Замените только weight * 0 на weight:
total_weight = total_weight + weight; // Step 3
Сохраните файл и выйдите из редактора, затем проверьте код:
cargo check
Запустите отчёт:
cargo run --quiet
Цикл складывает значения 3 + 4 + 5 + 6, поэтому вы должны увидеть:
Total weight: 18
Принимайте решение внутри цикла
На этом шаге вы объедините повторение и условие, чтобы подсчитать принятые заказы.
Второй цикл также перебирает веса от 3 до 6. Заказ принимается, если его вес меньше или равен 5. Оператор <= означает «меньше или равно».
Откройте файл и найдите строку Step 4:
nano src/main.rs
Замените временное сравнение weight < 0 на следующее:
let is_accepted = weight <= 5; // Step 4
Следующая конструкция if используется как инструкция: когда is_accepted равно true, её блок увеличивает счётчик. Ветка else не нужна, потому что для отклонённых заказов здесь не требуется выполнять никаких действий.
Сохраните файл и выйдите из редактора, затем запустите готовый отчёт:
cargo run --quiet
Веса 3, 4 и 5 соответствуют условию приёма, а вес 6 — нет. Итоговый вывод должен быть таким:
Heavy package: true
Shipping label: Freight
Total weight: 18
Accepted orders: 3
Итоги
Вы создали логические сравнения, выбрали значение с помощью выражения if, повторили операции с помощью цикла for и диапазона с включёнными границами, поддерживали накопленный итог и добавили решение внутри цикла для подсчёта значений, соответствующих условию.



