Чем отличаются div, mod и /
| Выражение | Результат | Тип результата |
|---|---|---|
7 / 2 | 3.5 | real |
6 / 2 | 3.0 | real — даже если делится нацело |
7 div 2 | 3 — сколько раз 2 помещается в 7 | целый |
7 mod 2 | 1 — остаток | целый |
2 div 5 | 0 | целый |
2 mod 5 | 2 | целый |
/— обычное деление. Результат всегдаreal, и записать его в переменнуюintegerнельзя.div— деление нацело: дробная часть отбрасывается.mod— остаток от деления нацело. Всегда верно:a = (a div b) * b + a mod b.
div и mod работают только с целыми числами: 7.5 div 2 — ошибка компиляции.
Где пригодятся div и mod
program DivModDemo;
var
n, sec: integer;
begin
n := 4725;
writeln('Последняя цифра: ', n mod 10);
writeln('Без последней цифры: ', n div 10);
writeln('Цифра сотен: ', n div 100 mod 10);
sec := 135;
writeln(sec, ' с = ', sec div 60, ' мин ', sec mod 60, ' с');
if n mod 5 = 0 then
writeln(n, ' делится на 5');
end.Последняя цифра: 5
Без последней цифры: 472
Цифра сотен: 7
135 с = 2 мин 15 с
4725 делится на 5n mod 10— последняя цифра,n div 10— число без неё. На этом построены задачи про цифры числа, см. Сумма цифр числа.n div 100 mod 10— цифра сотен: сначала отбрасываются две последние цифры, потом берётся последняя из оставшихся.divиmodодного уровня и выполняются слева направо.x mod k = 0—xделится наkбез остатка. Чётность —n mod 2 = 0.- Секунды в минуты, копейки в рубли, дни в недели —
divдаёт крупные единицы,mod— остаток в мелких.
Отрицательные числа
div отбрасывает дробную часть в сторону нуля, а знак остатка mod совпадает со знаком делимого:
| Выражение | Результат |
|---|---|
-7 div 2 | -3 |
-7 mod 2 | -1 |
7 mod -2 | 1 |
Поэтому нечётность проверяйте как n mod 2 <> 0, а не n mod 2 = 1: для n = -7 остаток равен -1, и вторая проверка ошибётся. Есть и готовая функция odd(n) — истина для нечётных, в том числе отрицательных.
Частые ошибки
n := a / bприn: integer— ошибка типов. Нужноa div bилиround(a / b), см. Ошибка: несовместимые типы.- Среднее через
div.s div nотбросит дробную часть: для суммы 7 иn = 2получится 3, а не 3.5. Среднее считайте через/и выводите с форматом:0:2. - Деление на ноль.
a div 0иa mod 0останавливают программу. Проверяйте делитель заранее.