Mod в программировании
DIV и MOD в Pascal
Всем привет, как дела? Че делаешь? ммм ясно, понятно. Не будем долго и дружелюбно общаться, проходите, присаживайтесь по удобнее, чувствуйте себя как дома. На улице с каждым днем солнце порабощает планету, мне это нравится, с нетерпением жду прихода молодой теплой, походу грязной и с множеством воды, весны. Но есть и свои плюсы: тепло, птицы, растительность, легкая куртка. А как вы относитесь к весне?
В этой части поговорим о еще двух функциях DIV и MOD, в прошлой части мы говорили об математических операциях, сегодняшние функции тоже по сути ими являются. Поехали =)
DIV, MOD или обычное деление
DIV и MOD похожи на обычное деление, но все таки они для чего то существуют, значит разница быть должна. Вспомним начальную школу и математику, когда вы только-только учились умножать и делить, когда вы еще не подозревали, что судьба вас свяжет с программированием и будете работать «тыж программистом» или же помбуром. Шутки в сторону, так вот вспомним деление «столбиком». Возьмем число 23 и разделим его столбиком, как учили в школе, на число 10.
Вот таким образом мы разделили число 23 на 10. У нас осталась в целой части число 2, а в остатке число 3. Проще говоря наш ответ стал равен двум целым и трем десятых(2.3). Отлично, это было обычное деление, но как будет выглядеть это в случае с MOD и DIV?
MOD — если мы делим число с помощью функции MOD, то в ответ у нас пойдет остаток. По примеру выше, если бы мы делили не обычным делением, а с помощью mod, то ответ у нас был бы 3.
DIV — соответственно наоборот, если мы делим в с помощью DIV то в ответ пойдет только целая часть — 2.
Pascal
Откроем PascalABC и напишем заготовку
Объявим две переменные с целочисленным типом данных
Дальше присвоим переменной «a» какое-либо значение и переменную «b» приравняем к переменной «a».
Отлично, теперь выведем ответ на действие обычного деления на число 100
Теперь проделаем тоже деление, но вместо обычного используем DIV и MOD. Переменную «a» делим с помощью функции DIV, а переменную «b» соответственно функцией MOD и посмотрим что получится.
Как видим, div вывел в ответ целую часть, а mod — остаток.
Разделим число на тысячи, сотни, десятки и единицы
Думаю в голове у многих уже что-то начинает откладываться, давай закрепим знания, напишем не большую программу с линейным алгоритмом, которая будет показывать сколько в число тысяч, сотен, десятков и единиц. Напишем заготовку и объявим две переменные с целочисленным типом данных.
Присвоим переменной «a» числовое значение.
Дальше присвоим переменной «b» действие — деление переменной «a» на число 1000 с помощью функции div.
- program chislo;
- var
- a,b: integer;
- begin
- a:= 4321;
- b:= a div 1000;
- a:= a-b*1000;
- end.
Теперь напишем команду вывода с новой строки.
Тем самым мы разделили число на тысячи и вывели сколько содержится в нем тысяч, теперь тоже самое проделаем для сотен, десятков и единиц, изменив лишь пару значений и вывод.
И добавим команду вывода в самое начало
- program chislo;
- var
- a,b: integer;
- begin
- a:= 4321;
- writeln( ‘ Число » ‘+a+’ » состоит из’ );
- b:= a div 1000;
- a:= a-b*1000;
- writeln( b+’ тысячи’ );
- b:= a div 100;
- a:= a-b*100;
- writeln( b+’ сотен’ );
- b:= a div 10;
- a:= a-b*10;
- writeln( b+’ десятков’ );
- b:= a div 1;
- a:= a-b;
- writeln( b+’ единиц’ );
- end.
Запустим программу и увидим его выполнение
- Число «4321» состоит из
- 4 тысячи
- 3 сотен
- 2 десятков
- 1 единиц
Заключение
Вот и все на сегодня, думаю принцип работы понятен. Если что не так, сильно не ругайте, а пишите в комменты что и как. В следующей статье начнем изучение ветвящихся алгоритмов.
Всем спасибо.
Пока =)
Mod в программировании
В данной статье мы рассмотрим операторы mod и div, их применение при решении задач. Рассмотрим несколько примеров с решением, а также задачи для самостоятельного выполнения.
Успехов вам в программировании.
- С помощью mod мы получаем остаток от деления числа a на число b.
Переменная s будет равна 5.
- С помощью оператора div мы получим целую часть от деления числа a на число b
Переменная s будет равна 2.
Использование mod при решении задач
- Чаще всего оператор mod используется для определения кратности числа и используется в условии (оператор IF)
Задача: определить, является ли число, введенное с клавиатуры, четным.
Чтобы ответить на этот вопрос нужно поделить число a с помощью mod на 2 (a mod 2) и сравнить это значение с нулем. Условие будет выглядеть так: a mod 2 = 0
Итак, чтобы узнать: делится ли число a на число b без остатка, нужно воспользоваться условием:
- Также оператор mod используется для определения последней цифры числа
Задача: умножить последнюю цифру числа на 10 и результат вывести на экран.
Чтобы поместить последнюю цифру числа a в некоторую переменную необходимо поделить это число с помощью mod на 10. Получим: b:=a mod 10 — в переменной b окажется последняя цифра числа.
Если мы хотим отделить 2-е последние цифры числа, то должны делить с помощью mod на 100; если 3 — на 1000 и т.д.
Чтобы узнать, оканчивается ли число a на цифру b необходимо воспользоваться условием:
Задача: е с ли введенное с клавиатуры число оканчивается на 5 и делится на 7, то вывести «YES» иначе «NO»
С помощью рассмотренных условий и цикла со счетчиком можно решить следующую задачу:
посчитать количество чисел, которые кратны 9 и оканчиваются на 5 в диапазоне от 1 до 500
Использование оператора div при решении задач
Задача: дано трехзначное число. Выяснить, является ли оно палиндромом («перевертышем»), т.е. таким числом, десятичная запись которого читается одинаково слева направо и справа налево.
Отделить первую цифру числа можно, поделив его с помощью div на 100.
Отделить последнюю цифру можно, поделив его с помощью mod на 10. Вторая цифра нам не нужна для решения задачи, т.к. от нее не зависит, будет ли число палиндромом.
Задачи для самостоятельного выполнения:
- Дано трехзначное число. Определить:
- является ли сума его цифр двузначным числом
- является ли произведение его цифр трехзначным числом
- больше ли числа a произведение его цифр
- кратна ли пяти сумма его цифр
- кратна ли сумма его цифр числу a
- Дано четырехзначное число. Определить:
- равна ли сумма двух первых его цифр сумме двух его последних цифр
- кратна ли трем сума его цифр
- кратно ли четырем произведение его цифр
- кратно ли произведение его цифр числу а
Уроки Паскаль
Помимо операций умножения и сложения, над целочисленными переменными производятся операции Div (операция целочисленного деления), Mod (вычисление остатка от целочисленного деления), операция вычитания «-».
В строке №8 используется операция Div. Это операция деления нацело, т. е. в результате получится целое число без остатка. Если 17 разделить на 3, то получится 5,66666… Здесь — целое число 5, оно и будет результатом операции div.
Строка №10. Операция Mod вычисляет остаток от целочисленного деления. Если мы разделим 17 на 3, то получится 5 – целое число и 2 – остаток. Таким образом, результатом операции Mod будет число 2
Теперь запишем нашу программу в Паскале и и запустим ее.
Дополнение к материалу.
Правила приоритета при выполнении операций в Паскале.
- Сначала выполняются действия над переменными, которые стоят в скобках.
- Затем вычисляются функции.
- Затем умножение и деление.
- Затем сложение и вычитание.
Операции, которые имеют одинаковый приоритет (сложение и вычитание, деление и умножение) выполняются слева направо, т.е. в порядке очереди.
Комментарии
uses
SysUtils;
var a,b: integer;
n: word;
begin
readln(n);
a:=n mod 10;
n:= n div 10;
b:=n mod 10;
n:= n div 10;
n:=a*10+b;
writeln(n);
readln;
program prog1;
uses crt;
begin
write (‘введите двухзначное число. ‘);
read(x);
z:=10;
y:=x div z;
c:=x mod z;
writeln (c,y);
readln
end.
Program pr1;
var
x, y: integer;
begin
write (‘Введите число: ‘);
readln (x); //вводим 5264
y:=(x div 100)-(((x div 100) div 10)*10);
write (‘Третья цифра справа ‘, y);
end.
Программа всегда будет говорить, какая цифра стоит третьей
a:=a div 10;
b:=a div 10;
a:=a div 10;
b:=a mod 10;
writeln(b);
Boolean4. Даны два целых числа: A, B. Проверить истинность высказывания: «Справедливы неравенства A > 2 и B ≤ 3».
var
A, B: integer;
begin
write(‘Введите A и B: ‘);
read(A,B);
writeln(‘Справе дливы неравенства A > 2 и B ≤ 3 — ‘,(A > 2) and (B = 0) or (B B) and (B > C)));
end.
Boolean8. Даны два целых числа: A, B. Проверить истинность высказывания: «Каждое из чисел A и B нечетное».
var
A, B: integer;
begin
write(‘Введите A, B: ‘);
read(A,B);
writeln(‘Каждое из чисел A и B нечетное — ‘, (A mod 2 0) and (B mod 2 0));
end.
Boolean9. Даны два целых числа: A, B. Проверить истинность высказывания: «Хотя бы одно из чисел A и B нечетное».
var
A, B: integer;
begin
write(‘Введите A, B: ‘);
read(A,B);
writeln(‘Хотя бы одно из чисел A и B нечетное — ‘, (A mod 2 0) or (B mod 2 0));
end.
Boolean10°. Даны два целых числа: A, B. Проверить истинность высказывания: «Ровно одно из чисел A и B нечетное».
var
A, B: integer;
begin
write(‘Введите A, B: ‘);
read(A,B);
writeln(‘Хотя бы одно из чисел A и B нечетное — ‘, (A mod 2 0) xor (B mod 2 0));
end.
Boolean11. Даны два целых числа: A, B. Проверить истинность высказывания: «Числа A и B имеют одинаковую четность».
var
A, B: integer;
C: boolean;
begin
write(‘Введите A, B: ‘);
read(A,B);
C := ((A mod 2 0) and (B mod 2 0)) or ((A mod 2 = 0) and (B mod 2 = 0));
writeln(‘Числа A и B имеют одинаковую четность — ‘, C);
end.
Boolean12. Даны три целых числа: A, B, C. Проверить истинность высказывания: «Каждое из чисел A, B, C положительное».
var
A, B, C: integer;
begin
write(‘Введите A, B и C: ‘);
read(A,B,C);
writeln(‘Каждое из чисел A, B, C положительное — ‘,(A > 0) and (B > 0) and (C > 0));
end.
Что такое div в «Паскале»? Сложения, вычисления и примеры
С каждым годом растет востребованность профессии программиста. На данный момент для написания кодов активно используются около десятка языков разного уровня. Для того чтобы сделать процесс обучения компьютерному программированию более эффективным, студентов старших классов и студентов 1-2 курса учат создавать первые собственные приложения на языке «Паскаль». Операциям div и mod и другим вычислениям в его среде посвящена данная статья.
Несколько слов о языке Pascal
«Паскаль» был создан в 1968-1969 годах известным ученым Никлаусом Виртом, который впоследствии был награжден премией Тюринга и медалью «Пионер компьютерной техники». Последний незадолго до этого участвовал в разработке стандарта языка «Алгол-68». В статье, опубликованной в 1970-м году, главной целью своей работы Вирт назвал создание эффективного инструмента, использующего структурное программирование и данные.
Впоследствии язык «Паскаль» оказал огромное влияние на сферы информационных технологий, став одним из базовых. И по сей день во многих ведущих вузах мира именно на его основе ведется обучения профессиональному программированию.
Что такое целочисленное деление
В математике под таким названием понимают операцию над двумя целыми числами. В результате целочисленного деления одного из них на другое, является целая часть их частного. Иными словами, если:
Целочисленное деление называют также нахождением неполного частного.
Обратите внимание, что при такой операции, в случае, если делимое меньше делителя, результат равен нулю.
Обозначим результат целочисленного деления a на b, как q. Тогда
т. е. осуществляется деление в обычном смысле с последующим округлением результата до ближайшего целого в меньшую сторону.
Операция div в «Паскале»
В рассматриваемом нами языке для целочисленного деления предусмотрен специальный оператор — div. В Pascal выражение, формула которого представлена выше, будет иметь вид:
Если речь идет о константах, например, a=50, а b=9, то будем иметь q:= 50 div 9. В результате q будет равно 5.
Вычисление остатка
Операция div в «Паскале» обычно изучается вместе с mod. Прежде чем выяснять, что означает эта запись, разберемся, как можно найти остаток числа.
Очевидно, что его можно найти, используя величину, полученную в результате целочисленного деления, т. е.
Операция mod в «Паскале»
В Pascal найти остаток можно очень просто. Для этих целей предусмотрена бинарная операция mod.
Она записывается следующим образом:
Если, например, a=50, а b=9, то будем иметь r:= 50 mod 9. В результате r будет равно 4.
Практическое применение
Нахождение остатка от деления (r) используется в компьютерной технике и в сфере телекоммуникаций. С помощью такой операции генерируются контрольные и случайные чисел в ограниченном диапазоне.
Оператор mod используют и для определения кратности чисел, т. е. делимости одного числа на другое с целочисленным результатом. Очевидно, что это те пары чисел, для которых результат применения оператора mod дает 0.
В «Паскале» условие кратности можно записать так:
if a mod b = 0 then write (a, ‘кратно’, b).
Например, при запуске кода с условием, записанным выше, при значениях a=4 и b=2 на мониторе высветится надпись «4 кратно 2».
Кроме того, оператор mod можно использовать для вывода последней цифры числа в десятичной записи. Для этого следует использовать конструкцию r = a mod 10. Например, команда r = 37 mod 10 выдаст результат 7.
Оператор trunc
Есть еще один оператор, с помощью которого можно получить такой же результат, как от div в «Паскале». Речь идет о trunc, который применяется не только к целым числам. Он выдает результат в виде целой части дробного аргумента. Вместе с оператором «обычного» деления получается один и тот же результат. Рассмотрим сказанное на примере. Пусть a=51, а b=9. Тогда в результате выполнения команды q:= 51 div 9 получим q:= 5, получившееся в результате округления. Если же применить к тем же числам оператор trunc, то q:= trunc (51/9) даст q:= 5, т. е. имеем тот же результат.
Пример 1
Рассмотрим, как можно использовать div и mod в «Паскале» для решения практических задач. Пусть нужно найти сумму цифр двухзначного числа. Ход рассуждений должен быть следующий:
- как уже было показано выше, последнюю из цифр в записи числа можно получить, применив к нему и к числу 10, оператор mod;
- что касается первого числа, то оно получится, если заменить mod на команду div в «Паскале».
Запишем код на языке «Паскаль». Он будет выглядеть следующим образом:
program Sum_2; (название программы)
var Number,Number1,Number2,Sum: integer; (перечисление переменных и определение их типа, как целочисленного)
begin (начало тела программы)
write(‘Input Two-digit number’); (вывод на экран фразы «Input Two-digit number»)
read(Number); (ввод исходного числа)
Number1 := Number div 10; (вычисление первой цифры)
Number2 := Number mod 10; (вычисление второй цифры)
sum := Number1 + Number2; (вычисление суммы цифр)
write(Sum); (вывод результата на экран)
Для числа 25 результат использования этой программы будет 7, а, например, для 37 — 9.
Пример 2
Напишем код для программы, вычисляющей сумму цифр 3-значного числа.
Как найти последнюю цифру — понятно. Не представляет сложности и вычисление 1-й. Она получится в результате применения оператора div в «Паскале» к этому числу и к 100. Осталось выяснить, как найти вторую цифру. Для этого можно использовать более сложную конструкцию, которая получится, если к исходному числу и к 10 применить оператор div, а затем к результату и к 10 оператор mod.
Код программы для вычисления суммы цифр трехзначного числа будет выглядеть следующим образом:
program Sum_3; (название программы)
var Number3,Sum: integer; (перечисление переменных и определение их типа, как целочисленного)
begin (начало тела программы)
write (‘ Input Tree-digit number ‘); (вывод на экран фразы «Input Tree-digit number»)
read (Number3); (ввод исходного числа)
Sum := Number3 div 100 + Number3 mod 10 + Number3 div 10 mod 10; (вычисление суммы)
write (‘Sum); (вывод результата на экран)
Некоторые замечания
Обратите внимание, что операция обычного деления при применении к целочисленным аргументам выходит за пределы их класса. Это ее коренным образом отличает от операции div в «Паскале», а также от оператора mod, которые выдают результат, также являющийся целым числом.
Порядок выполнения операций бинарного типа (т. е. выполняющимися над 2-мя операндами) в сложном выражении определяется их приоритетом и круглыми скобками. Иными словами, при наличии скобок сначала вычисляются находящиеся в них выражения в порядке слева направо. При этом операции *, /, mod и div являются более приоритетными, чем + и –. Если скобок нет, то сперва слева направо следует выполнить действия с большим приоритетом, а затем — + и –.
Теперь вы знаете, для чего используется функция div в «Паскале». Вам также известны возможности, которые дает применение оператора mod, что, наверняка, поможет вам при создании собственных приложений.
Эти замечательные div и mod.
Как организовать дистанционное обучение во время карантина?
Помогает проект «Инфоурок»
Эти замечательные div и mod…
Киселева И.Ю., учитель информатики МАОУ «Лицей № 38»
В практике каждого учителя есть любимые темы, которые хочется продолжать изучать углубленно, рассматривать различные задачи, и не очень любимые, которые хочется «пройти» быстро. Есть и странные, даже загадочные темы – результат изучения которых бывает неожиданным.
Для меня такой «странной» темой является «Целочисленное деление». В языке программирования Паскаль (а также и в других языках) есть операции целочисленного деления, обозначающиеся div (частное целочисленного деления) и mod (остаток целочисленного деления). Достаточно простые и понятные операции, знакомые детям еще из курса арифметики (3 класс). Но при изучении программирования ребята почему-то избегают применять эти операции, часто путают их, пытаются применять функции int , frac, tr u nc и round , которые помнят еще хуже. Почему-то плохо воспринимают даже название «ЦЕЛОЧИСЛЕННОЕ деление», ошибаются в определении типов данных для этих операций (integer, но не real!), неверно находят значения переменных с использованием div и mod . А жаль!
Данные операции применяются достаточно широко: решение некоторых задач на линейные алгоритмы, определение четности-нечетности или кратности чисел, задачи на целочисленную арифметику, олимпиадные задачи. Более того, операции целочисленного деления часто встречаются и в заданиях ЕГЭ и ГИА. И, хотя один ученик даже заявил «Не люблю я эти div и mod!», я не теряю надежду приучить ребят применять операции целочисленного деления при составлении программ.
При изучении темы «Начала программирования» знакомство с операциями целочисленного деления происходит на первых уроках. Вспоминаем из арифметики: для целых и неотрицательных А и В (В ≠ 0), частное A div B показывает, сколько раз делитель – число B, содержится в делимом – числе A; в то же время, остаток A mod B показывает, сколько останется, если из делимого – числа А, вычесть все вхождения в него делителя – числа В.
И сразу же учащиеся получают задания на вычисления (например):
39 div 6 – 42 mod 5 + 3 div 7 = 6 – 2 + 0 = 4
( n div 100 ) mod 10 = (12345 div 100) mod 10 = 123 mod 10 = 3
n mod 1000 div 10 + n mod 100 = 12345 mod 1000 div 10 + 12345 mod 100 = = 345 div 10 + 45 = 34 + 45 = 79
И тут же выясняется: ребята не умеют производить вычисления устно, плохо помнят таблицу умножения и деление столбиком. Да и зачем! В каждом телефоне и прочих устройствах есть калькулятор! Вот только он не может делить нацело с остатком!
Вспоминаем деление столбиком из далекой начальной школы.
157 | _13_
13 12 – это результат операции div (частное)
26
– это результат операции mod (остаток от деления)
Выясняем, как проверить правильность вычислений:
Даны два натуральных числа X и Y (Y ≠ 0).
Пусть A = X div Y, B = X mod Y. Тогда справедливо равенство: X = Y ∙ A + B
Пример: 157 = 13 ∙ 12 + 1
Обращается внимание учеников на важное обстоятельство: частное от деления (результат div ) может быть любым, а остаток (результат mod ) – имеет ограничения, он должен быть не больше делителя! Т.е. 0 ≤ B ≤ Y .
Чтобы приучить ребят к операциям целочисленного деления, надо чаще использовать эти операции, поэтому почти на каждом занятии подбираются задачи с использованием div и mod .
При изучении линейного алгоритма: выделение целого количества часов из заданного количества минут, килобайтов – из байтов, определение суммы цифр заданного целого числа, например, трехзначного и др.
Для условного алгоритма: определение четности, нечетности, кратности целых чисел. (Условие четности, нечетности, кратности чисел проговариваем хором!)
При изучении циклических алгоритмов в обязательном порядке разбираются задачи: поиск палиндромов, простых чисел, совершенных чисел из заданного интервала, определение разрядности числа, нахождение наибольшей и наименьшей цифры числа и пр.
При изучении темы «Массивы» рассматриваются задачи на нахождение суммы, произведения, количества чисел с определенными свойствами, поиск максимальных и минимальных элементов. И свойства элементов опять же требуют применения операций целочисленного деления: например, найти сумму четных элементов массива, количество чисел, оканчивающихся на 5, найти максимальный элемент массива, кратный 3 и т.д.
Здесь следует обратить внимание еще на один момент, пожалуй, единственный неприятный и хорошо забываемый! Дело в том, что задаются массивы случайным образом (с помощью функции Random), элементы таких массивов могут принимать как положительные, так и отрицательные значения. Применение при необходимости целочисленного деления к отрицательным числам требует четкого представления, как выполняются операции целочисленного деления. В общем случае, когда А и В — произвольные целые (которые могут быть и отрицательными ), при определении операций div и mod , рассматриваются их модули , а знак результата учитывается отдельно. В Паскале принято, что знак частного от целочисленного деления (А div В) определяется как и при обычном алгебраическом делении, а знак остатка (A mod B) – совпадает со знаком А.
Например, 111 div (–7) = –15 и 111 mod (–7) = 6. Но, (–111) div 7 = –15, а (–111) mod 7 = –6 !
Надо постараться, чтобы учащиеся запомнили это, и условия нечетности и некратности целых чисел записывали так: X mod 2 <> 0 (X – нечетное); A mod B <> 0 ( A не кратно B , т.е. не делится нацело на B ).
При подготовке к ЕГЭ по информатике ребятам опять придется встретиться с целочисленным делением. Задания с div и mod встречаются неоднократно (в частях A , B и C ). Очень интересные задачи предложены в ЕГЭ, целая подборка представлена на сайте К.Полякова (www. kpolyakov . narod . ru ). Например, задания В6 , В7, С2, С4.
Надеюсь, что постоянный тренинг применения операций целочисленного деления на уроках программирования позволят ребятам часто использовать эти замечательные операции в олимпиадных задачах, успешно справиться с соответствующими задачами из ГИА и ЕГЭ.