Как работает оператор модуля?

Допустим, мне нужно отформатировать вывод массива для отображения фиксированного количества элементов в строке. Как мне это сделать, используя операцию модуля?

Используя С++, приведенный ниже код работает для отображения 6 элементов в строке, но я понятия не имею, как и почему это работает?

for ( count = 0 ; count < size ; count++)
{
    cout << somearray[count];
    if( count % 6 == 5) cout << endl;
}

Что делать, если я хочу отображать 5 элементов в строке? Как найти нужное выражение?


person Tex Qas    schedule 23.09.2012    source источник
comment
Обратите внимание, что название операции — операция по модулю. Термин модуль представляет собой роль, отведенную b в a % b. en.wikipedia.org/wiki/Modulo_operation   -  person parml    schedule 02.09.2019


Ответы (5)


в выражении С++ a % b возвращает остаток от деления a на b (если они положительные. Для отрицательных чисел знак результата определяется реализацией). Например:

5 % 2 = 1
13 % 5 = 3

С этими знаниями мы можем попытаться понять ваш код. Условие count % 6 == 5 означает, что новая строка будет записана, когда остаток от деления на 6 равен пяти. Как часто это происходит? Ровно через 6 строк (упражнение: напишите числа 1..30 и подчеркните те, которые удовлетворяют этому условию), начиная с 6-й строки (количество = 5).

Чтобы получить желаемое поведение от вашего кода, вы должны изменить условие на count % 5 == 4, что даст вам новую строку каждые 5 строк, начиная с 5-й строки (количество = 4).

person KCH    schedule 23.09.2012
comment
Для отрицательных чисел знак результата определяется реализацией. Это неверно в С++ 11 - см. ISO14882: 2011 (e) 5.6-4 или stackoverflow .com/questions/7594508. - person Tom Swirly; 30.04.2016
comment
какие операнды ожидает по модулю? Почему это не работает со значениями с плавающей запятой? - person Cătălina Sîrbu; 12.01.2020

В основном оператор модуля дает вам простой остаток. Пример в математике, что осталось/остаток от 11, разделенного на 3? ответ 2

для того же самого C++ имеет оператор модуля ('%')

Основной код для объяснения

#include <iostream>
using namespace std;


int main()
{
    int num = 11;
    cout << "remainder is " << (num % 3) << endl;

    return 0;
}

Который будет отображать

остаток 2

person Atri Dave    schedule 10.10.2017

Этот проект JSFiddle может помочь вам понять, как работает модуль: http://jsfiddle.net/elazar170/7hhnagrj

Функция модуля работает примерно так:

     function modulus(x,y){
       var m = Math.floor(x / y);
       var r = m * y;
       return x - r;
     }
person SkySibe    schedule 18.07.2016

Это дает вам остаток от деления.

int c=11, d=5;
cout << (c/d) * d + c % d; // gives you the value of c
person Gung Foo    schedule 23.09.2012

Вы можете думать об операторе модуля как о выдаче остатка. count % 6 делит 6 из подсчета столько раз, сколько может, и дает вам остаток от 0 до 5 (это все возможные остатки, потому что вы уже разделили 6 столько раз, сколько сможете). Все элементы массива печатаются в цикле for, но каждый раз, когда остаток равен 5 (каждый 6-й элемент), он выводит символ новой строки. Это дает вам 6 элементов в строке. Для 5 элементов в строке используйте

если (количество% 5 == 4)

person Andy Harris    schedule 23.09.2012