Арифметика, div и mod, приоритет и функции
Урок разбирает вычисления в Паскале: операции, целочисленное деление div и mod, приоритет и полезные стандартные функции.
div — целая часть от деления, mod — остаток от деления. Это две самые важные арифметические операции для школьных задач.
Основные арифметические операции
Программирование во многом стоит на вычислениях, и Паскаль умеет всё, что нужно. Базовые операции выглядят знакомо:
| Операция | Знак | Пример | Результат |
| Сложение | + | 7 + 3 | 10 |
| Вычитание | - | 7 - 3 | 4 |
| Умножение | * | 7 * 3 | 21 |
| Деление | / | 7 / 2 | 3.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 нельзя.
Приоритет операций
Когда в выражении несколько операций, важен порядок. Паскаль следует обычным математическим правилам:
- Сначала — то, что в скобках
( ). - Потом — умножение и деления:
*,/,div,mod(все на одном уровне, слева направо). - В последнюю очередь — сложение и вычитание:
+,-.
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-1 | random(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 : ширина : знакипечатает дробные числа аккуратно.