Я знаю модуль (%), оператор вычисляет остаток от подразделения. Как я могу определить ситуацию, где я должен был бы использовать оператор модуля?
Я знаю, что могу использовать оператор модуля, чтобы видеть, является ли число даже или нечетный и главный или составной, но это об этом. Я не часто думаю с точки зрения остатков. Я уверен, что оператор модуля полезен, и я хотел бы учиться использовать в своих интересах его.
У меня просто есть проблемы при идентификации, где оператор модуля применим. В различных ситуациях с программированием для меня трудно видеть проблему и понять "Эй! Остаток от подразделения работал бы здесь!".
Как говорит @jweyrich, обертывание значений. Я нашел мод очень удобным, когда у меня есть конечный список, и я хочу перебирать его в цикле - например, фиксированный список цветов для некоторых элементов пользовательского интерфейса, таких как серии диаграмм, где я хочу, чтобы все серии были разными, чтобы насколько это возможно, но когда у меня заканчиваются цвета, просто чтобы начать сначала. Это также можно использовать, скажем, с узорами, так что второй раз, когда появляется красный цвет, он отображается пунктирной линией; в третий раз, пунктирная и т. д. - но мод просто используется, чтобы получить красный, зеленый, синий, красный, зеленый, синий, навсегда.
Представьте, что у вас есть прошедшее время в секундах, и вы хотите преобразовать его в часы, минуты и секунды:
h = s / 3600;
m = (s / 60) % 60;
s = s % 60;
И так далее.
Каждый раз, когда у вас есть деление и вы хотите выразить остаток не в десятичной форме, подходит оператор mod. Обычно в голову приходят вещи, когда вы хотите сделать что-то удобочитаемое с остатком. Перечислить, сколько предметов вы можете положить в ведра, и сказать «5 осталось» - это хорошо.
Кроме того, если вы когда-нибудь окажетесь в ситуации, когда у вас могут возникнуть ошибки округления, деление по модулю подойдет. Например, если вы делите на 3 довольно часто, вы не хотите передавать 0,33333 в качестве остатка. Уместно передать остаток и делитель (т.е. дробь).
Модуль также очень полезен, если по какой-то безумной причине вам нужно сделать целочисленное деление и получить десятичную дробь, а вы не можете преобразовать целое число в число, поддерживающее десятичное деление, или если вам нужно вернуть дробь вместо десятичной.
Я буду использовать %
в качестве оператора модуля
Например,
2/4 = 0
, где это делается
2/4 = 0 и 2% 4 = 2
Итак, вы можете быть действительно сумасшедшим и допустим, что вы хотите разрешить пользователю вводить числитель и делитель, а затем показывать им результат в виде целого числа, а затем дробного числа.
whole Number = numerator/divisor
fractionNumerator = numerator % divisor
fractionDenominator = divisor
Другой случай, когда деление по модулю полезно, - это если вы увеличиваете или уменьшаете число и хотите, чтобы число соответствовало определенному диапазону чисел, но когда вы добираетесь до вершины или низа, вы не хотите просто останавливаться . Вы хотите перейти в конец или вверх по списку соответственно.
Представьте себе функцию, в которой вы просматриваете массив в цикле.
Function increase Or Decrease(variable As Integer) As Void
n = (n + variable) % (listString.maxIndex + 1)
Print listString[n]
End Function
Причина, по которой это n = (n + variable)% (listString.maxIndex + 1), заключается в том, чтобы учесть максимальный индекс.
Это лишь некоторые из вещей, для которых мне пришлось использовать модуль в моем программировании не только настольных приложений, но и в робототехнике и средах моделирования.
0 % 3 = 0;
1 % 3 = 1;
2 % 3 = 2;
3 % 3 = 0;
Вы видели, что он сделал? На последнем этапе он вернулся к нулю. Это может быть использовано в таких ситуациях, как:
Чтобы проверить, делится ли N на M (например, нечетное или четное) или N делится на M.
Положить крышка определенного значения. В данном случае 3.
Я использовал его при ограничении числа определенным кратным:
temp = x - (x % 10); //Restrict x to being a multiple of 10
Есть много случаев, когда это полезно.
Если вам нужно ограничить число определенным диапазоном, вы можете использовать mod. Например, для генерации случайного числа от 0 до 99 вы можете сказать:
num = MyRandFunction() % 100;
Пример. У вас есть сообщение размером X байт, но в вашем протоколе максимальный размер Y и Y < X. Попробуйте написать небольшое приложение, которое разбивает сообщение на пакеты, и вы столкнетесь с модой :)
.Я использую его для индикаторов выполнения и т.п. О прогрессе сообщается только каждый n-й раз в цикле или при подсчете% n == 0.