Арифметика, div и mod, приоритет и функции

Урок разбирает вычисления в Паскале: операции, целочисленное деление div и mod, приоритет и полезные стандартные функции.

div — целая часть от деления, mod — остаток от деления. Это две самые важные арифметические операции для школьных задач.

Основные арифметические операции

Программирование во многом стоит на вычислениях, и Паскаль умеет всё, что нужно. Базовые операции выглядят знакомо:

ОперацияЗнакПримерРезультат
Сложение+7 + 310
Вычитание-7 - 34
Умножение*7 * 321
Деление/7 / 23.5

Главное, что нужно запомнить про обычное деление /: оно всегда даёт дробный результат типа real, даже когда делится нацело (10 / 2 = 5.0). Поэтому для целочисленных задач у Паскаля есть две специальные операции.

div и mod: деление с остатком

Вспомните, как в начальной школе вы делили «с остатком»: 17 разделить на 5 — это 3 и 2 в остатке. Так вот, в Паскале:

  • div даёт целую часть от деления: 17 div 5 = 3.
  • mod даёт остаток от деления: 17 mod 5 = 2.
begin
  writeln(17 div 5);   // 3 — сколько раз 5 помещается в 17
  writeln(17 mod 5);   // 2 — что осталось
end.

Это не экзотика, а рабочие лошадки школьного программирования. Вот зачем они нужны на практике:

  • Проверка чётности. Число чётное, если n mod 2 = 0 (делится на 2 без остатка).
  • Последняя цифра числа. число mod 10 даёт последнюю цифру: 1234 mod 10 = 4.
  • Отбросить последнюю цифру. число div 10: 1234 div 10 = 123.
  • Делимость. Число делится на 3, если n mod 3 = 0.

Эти приёмы — основа множества задач: разложить число на цифры, найти сумму цифр, проверить делимость. Запустите Python (там те же операции называются // и %):

n = 1234
print('Последняя цифра:', n % 10)
print('Без последней цифры:', n // 10)
print('Чётное ли число:', n % 2 == 0)

Вывод:

Последняя цифра: 4
Без последней цифры: 123
Чётное ли число: True

Важно: div и mod работают только с целыми числами. Применять их к real нельзя.

Приоритет операций

Когда в выражении несколько операций, важен порядок. Паскаль следует обычным математическим правилам:

  1. Сначала — то, что в скобках ( ).
  2. Потом — умножение и деления: *, /, div, mod (все на одном уровне, слева направо).
  3. В последнюю очередь — сложение и вычитание: +, -.
begin
  writeln(2 + 3 * 4);     // 14, а не 20: сначала 3*4=12, потом +2
  writeln((2 + 3) * 4);   // 20: скобки меняют порядок
  writeln(20 - 6 div 2);  // 17: сначала 6 div 2 = 3, потом 20 - 3
end.
print(2 + 3 * 4)
print((2 + 3) * 4)
print(20 - 6 // 2)

Вывод:

14
20
17

Совет: если сомневаетесь в порядке — ставьте скобки. Они ничего не портят, зато делают намерение явным и спасают от обидных ошибок.

Стандартные функции

Паскаль даёт набор готовых математических функций — их не нужно писать самому, достаточно вызвать по имени. Вот самые нужные в школе:

ФункцияЧто делаетПример
abs(x)модуль (без знака)abs(-7) = 7
sqr(x)квадрат числаsqr(5) = 25
sqrt(x)квадратный кореньsqrt(9) = 3.0
round(x)округление до целогоround(3.7) = 4
trunc(x)отбрасывание дробной частиtrunc(3.7) = 3
random(n)случайное целое от 0 до n-1random(6)

Особенно полезна пара round и trunc: первая округляет по правилам математики (3.7 → 4, 3.4 → 3), вторая просто отрезает дробную часть (3.7 → 3). Они превращают real в integer, что часто нужно. Сравните на Python (там это round, int, abs):

import math
print(abs(-7))
print(5 ** 2)
print(math.sqrt(9))
print(round(3.7))
print(int(3.7))

Вывод:

7
25
3.0
4
3

Форматный вывод чисел

Дробные числа Паскаль по умолчанию печатает с длинным «хвостом»: writeln(1/3) выдаст что-то вроде 0.333333333333333. Чтобы вывести аккуратно, используют форматирование: после значения через двоеточие указывают ширину поля и число знаков после точки.

begin
  writeln(3.14159 : 8 : 2);   // 8 — общая ширина, 2 — знаков после точки
  writeln(1 / 3 : 6 : 3);     //   0.333
end.

Запись x : 8 : 2 читается как «вывести x в поле шириной 8 символов, оставив 2 знака после точки». Первое число (ширину) часто опускают: x : 0 : 2 или просто задают оба под себя. Это незаменимо при выводе денег, средних значений, результатов измерений.

Попробуй сам

Напишите программу, которая берёт трёхзначное число (например, 357) и выводит сумму его цифр. Подсказка: последняя цифра — n mod 10, средняя — n div 10 mod 10, первая — n div 100. Проверьте на Python:

n = 357
d1 = n // 100
d2 = n // 10 % 10
d3 = n % 10
print('Сумма цифр:', d1 + d2 + d3)

Вывод:

Сумма цифр: 15

Частые ошибки

  • Используют / там, где нужен div. Если результат должен быть целым, берите div; / даст real и может вызвать ошибку типов.
  • div и mod с дробными числами. Эти операции работают только с целыми. 7.5 div 2 — ошибка.
  • Забывают про приоритет. 2 + 3 * 4 равно 14, а не 20. Когда нужен другой порядок — ставьте скобки.
  • Путают round и trunc. round(3.7) = 4 (округление), trunc(3.7) = 3 (отбрасывание). Выбирайте осознанно.
  • Деление на ноль. x div 0 или x mod 0 вызывают аварийную ошибку. Проверяйте делитель, если он может быть нулём.

Итоги

  • Обычное деление / всегда даёт real; для целых есть div (целая часть) и mod (остаток).
  • mod 10 даёт последнюю цифру, div 10 отбрасывает её, mod 2 = 0 проверяет чётность.
  • Приоритет: скобки → * / div mod+ -; в сомнениях ставьте скобки.
  • Стандартные функции abs, sqr, sqrt, round, trunc избавляют от ручных вычислений.
  • Форматный вывод x : ширина : знаки печатает дробные числа аккуратно.
Проверьте себя
1. Чему равно 17 mod 5?
A3
B2
C12
D3.4
2. Как проверить, что целое число n чётное?
An div 2 = 0
Bn mod 2 = 0
Cn / 2 = 0
Dn mod 10 = 0
3. Чему равно выражение 2 + 3 * 4 в Паскале?
A20
B14
C24
D9
4. Чем round(3.7) отличается от trunc(3.7)?
Around даёт 4 (округление), trunc даёт 3 (отбрасывание дроби)
BОба дают 4
Cround даёт 3, trunc даёт 4
DОба дают 3
Поддержать проект