Skip to content

Оператор 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

Оператор modulo в Dart

Как видно, x % y возвращает остаток от деления, а / выполняет обычное деление и возвращает вещественное число.

Ещё один наглядный пример, показывающий, что такое остаток от деления. Я хочу купить айфон за 1000 евро, но в кармане у меня только 500 евро. Я могу купить ноль айфонов, а в кармане у меня останется 500 евро.

Если мне мама с папой на день рождения подарят, скажем 800 евро, то с моими 500 у меня будет 1200 евро. Я смогу купить один айфон и у меня останется (остаток от деления) 200 евро.

Особенности оператора modulo в Dart

  1. Работа с отрицательными числами В Dart знак остатка (%) следует знаку делимого:

      print(-10 % 3); // Выведет 2
      print(10 % -3); // Выведет 1
      ```
     
  2. Modulo с числами с плавающей точкой В отличие от некоторых других языков, в Dart оператор % также поддерживает double:

      print(10.5 % 3); // Выведет 1.5
      ```

Домашнее задание

  1. Чётные числа в диапазоне

Задача: Напишите функцию, которая принимает два числа a и b и выводит все чётные числа между ними.

evenNumbers(2, 10) → [2, 4, 6, 8, 10]
evenNumbers(5, 15) → [6, 8, 10, 12, 14]

  1. Нечётные числа в диапазоне

Задача: Напишите функцию, которая принимает два числа a и b и выводит все нечётные числа между ними.

oddNumbers(3, 11) → [3, 5, 7, 9, 11]
oddNumbers(8, 20) → [9, 11, 13, 15, 17, 19]

  1. Числа, кратные 11

Задача: Напишите функцию, которая принимает два числа a и b и выводит все числа, кратные 11, между ними.

multiplesOf11(10, 100) → [11, 22, 33, 44, 55, 66, 77, 88, 99]

  1. Поиск числа по остаткам

Задача: Дано число меньше 3000. При делении числа на 32 остаток 30, при делении на 58 остаток 44. Найдите это число.

findNumber()?

  1. Проверка високосного года

Задача: Напишите функцию, которая проверяет, является ли год високосным (кратным 4).

isLeapYear(2024) → true
isLeapYear(2023) → false

Задачи повышенной сложности

  1. Улучшенная проверка високосного года

Задача: Прочитайте в Википедии, какие годы являются високосными, и дополните предыдущую функцию, чтобы она учитывала все правила високосности.

isLeapYear(1900) → false
isLeapYear(2000) → true

  1. Поиск простых чисел

Задача: Напишите функцию, которая находит все простые числа в заданном диапазоне.

findPrimes(10, 50) → [11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]

Дополнительные ссылки