Оператор modulo (%)
Modulo — оператор остатка от деления в Dart
Оператор modulo
(%
) в Dart используется для получения остатка от деления одного числа на другое. Он особенно полезен при работе с целыми числами, когда необходимо определить кратность, циклические структуры или при выполнении математических вычислений.
Простейший пример работы с оператором modulo в Dart:
void main() {
int x = 85;
int y = 7;
print('$x mod $y = ${x % y}');
print('$x / $y = ${x / y}');
}
Результат выполнения:
85 mod 7 = 1
85 / 7 = 12.142857142857142
Как видно, x % y
возвращает остаток от деления, а /
выполняет обычное деление и возвращает вещественное число.
Ещё один наглядный пример, показывающий, что такое остаток от деления. Я хочу купить айфон за 1000 евро, но в кармане у меня только 500 евро. Я могу купить ноль айфонов, а в кармане у меня останется 500 евро.
Если мне мама с папой на день рождения подарят, скажем 800 евро, то с моими 500 у меня будет 1200 евро. Я смогу купить один айфон и у меня останется (остаток от деления) 200 евро.
Особенности оператора modulo в Dart
-
Работа с отрицательными числами В Dart знак остатка (
%
) следует знаку делимого:print(-10 % 3); // Выведет 2 print(10 % -3); // Выведет 1 ```
-
Modulo с числами с плавающей точкой В отличие от некоторых других языков, в Dart оператор
%
также поддерживаетdouble
:print(10.5 % 3); // Выведет 1.5 ```
Домашнее задание
- Чётные числа в диапазоне
Задача: Напишите функцию, которая принимает два числа a
и b
и выводит все чётные числа между ними.
evenNumbers(2, 10) → [2, 4, 6, 8, 10]
evenNumbers(5, 15) → [6, 8, 10, 12, 14]
- Нечётные числа в диапазоне
Задача: Напишите функцию, которая принимает два числа a
и b
и выводит все нечётные числа между ними.
oddNumbers(3, 11) → [3, 5, 7, 9, 11]
oddNumbers(8, 20) → [9, 11, 13, 15, 17, 19]
- Числа, кратные 11
Задача: Напишите функцию, которая принимает два числа a
и b
и выводит все числа, кратные 11, между ними.
multiplesOf11(10, 100) → [11, 22, 33, 44, 55, 66, 77, 88, 99]
- Поиск числа по остаткам
Задача: Дано число меньше 3000. При делении числа на 32 остаток 30, при делении на 58 остаток 44. Найдите это число.
findNumber() → ?
- Проверка високосного года
Задача: Напишите функцию, которая проверяет, является ли год високосным (кратным 4).
isLeapYear(2024) → true
isLeapYear(2023) → false
Задачи повышенной сложности
- Улучшенная проверка високосного года
Задача: Прочитайте в Википедии, какие годы являются високосными, и дополните предыдущую функцию, чтобы она учитывала все правила високосности.
isLeapYear(1900) → false
isLeapYear(2000) → true
- Поиск простых чисел
Задача: Напишите функцию, которая находит все простые числа в заданном диапазоне.
findPrimes(10, 50) → [11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]