Оператор div и оператор mod

Оператор div и оператор mod

В этой статье речь пойдет о целочисленном делении и делении с остатком.
Итак что такое целочисленное деление вообще? В математике целочисленным делением называют такое деление , при котором одно целое число делится на другое целое число ,а результатом является целая часть их частного . То есть например 20 / 5 = 4 , 55 / 6 = 9 , 100 / 3 = 33 и т.д. Согласитесь , что в некоторых случаях это очень удобно и практично . Теперь поговорим о реализации этого метода в Паскале . Тут все достаточно просто, открывать Америку не придется. В паскале за целочисленное деление отвечает оператор div . Теперь как это записывается в Pascal'e
z := x div y 

x - число , которое будем делить на y (делимое)
y - число , на которое будем делить число x (делитель)
z - результат целочисленного деления (целочисленное частное)
Таким образом, вот такая запись (55 / 6) нацело = 9 в результате использования оператора div будет выглядеть так
z := 55 div 6

z будет равно 9. Запомните ! При использовании оператора div дробная часть будет отброшена!
А сейчас поговорим о делении с остатком. Оно не особо отличается и главным здесь является то , что в результате отбрасывается как раз целая часть .То есть (40 / 6) с остатком = 4, (10 / 3) с остатком =1, (22 / 5) с остатком = 2 и т.д. В паскале для этого есть оператор mod. Записывается он точно так же.
z := x mod y

x - число , которое будем делить на y (делимое)
y - число , на которое будем делить число x (делитель)
z - остаток
Например (40 / 6) с остатком = 4 с оператором mod будет такой
z := 55 mod 6

И как результат получим z=1 .
Оператор div и оператор mod

Кстати оператор mod часто используют , для определения кратности чисел (кратность - это делимость на какое-нибудь число нацело . То есть например говорят , что числа 3 , 6, 9, 12, 21 кратны трем . Или числа 5,10,15,20 кратны 5 ) . В статье нахождение четных элементов массива я упоминал о числах кратных двум (четных) . Итак как эту кратность определить в паскале . Обратите внимание , что если число кратное , то у него есть остаток (точнее оно имеет в остатке ноль) . Этим и стоит воспользоваться.
if v mod m = 0 then

Сейчас я привел пример условия , которое проверяет кратность , где v - это число , проверяемое на кратность по числу m . Например чтобы проверить , является ли 40 кратным 4 , используем оператор mod с условием и получим
if 40 mod 4 = 0 then
Ключевые теги: оператор div, оператор mod
Понравилась новость? Добавь в закладки!
Хочешь получать свежие новости? Подпишись на обновления с сайта!
Рекомендуем посмотреть:
#1 | написал: xobot | 27 октября 2011 02:45 | ICQ: |

Группа: Гости
Публикаций: 0
Комментариев: 0

Если уж помимо Pascal пишешь и о C++ то должен знать:
1) value * n, где n % 2 == 0, эквивалентно: value << (n - 1) (т.е. смещение влево на n-1 бит) 
2) value / n, где n % 2 == 0, эквивалентно: value >> (n - 1) (т.е. смещение вправо на n-1 бит) 
Примечание по пунктам 1,2: n % 2 == 0 означает,что n дедится на два без остатка
3) запись вида: if (value % n == 1) эквивалентна if ((value & n - 1) == 1)
4)  запись вида: if (value % n == 0) эквивалентна if ((value & n - 1) == 0)


#2 | написал: Mr.Cheater | 27 октября 2011 16:33 | ICQ: 360239964 | Пользователь offline

Группа: Администраторы
Публикаций: 33
Комментариев: 68

Я отвечаю только за раздел Pascal и пишу статьи только касающие этого языка программирования. За С++ отвечает второй администратор сайта . ЕСли Вы хотите - Вы можете обратится к нему по данному и другим вопросам , касательно С++, воспользовавшись формой обратной связи .


#3 | написал: Чел | 8 декабря 2011 23:04 | ICQ: |

Группа: Гости
Публикаций: 0
Комментариев: 0

Пишите div и mod, тогда по смыслу понятно, что div,mod - целая часть и дробная часть соответственно! Советую в главной картинке тоже поменять на правильный порядок!


#4 | написал: Mr.Cheater | 8 декабря 2011 23:18 | ICQ: 360239964 | Пользователь offline

Группа: Администраторы
Публикаций: 33
Комментариев: 68

Спасибо конечно , но Вам не кажется ,что те, кто прочитал статью и так поймут ? А тем ,кто не знает - все равно какой порядок ,потому что для них нет разницы ,так как они вообще еще с этими операторами не знакомы.


#5 | написал: Aslancho | 31 декабря 2011 04:03 | ICQ: |

Группа: Гости
Публикаций: 0
Комментариев: 0

А само смешно то, что если 55 поделить на 6 в целой части будет 9, а не 8... =)


#6 | написал: Михаил | 15 января 2012 20:27 | ICQ: |

Группа: Гости
Публикаций: 0
Комментариев: 0

А почему должно быть 8? 55 div 6 = 9


#7 | написал: Mr.Cheater | 15 января 2012 20:32 | ICQ: 360239964 | Пользователь offline

Группа: Администраторы
Публикаций: 33
Комментариев: 68

Извините , опечатался. Исправлено


#8 | написал: aleksey | 27 марта 2013 01:42 | ICQ: |

Группа: Гости
Публикаций: 0
Комментариев: 0
а что будет если  если 6 div 55?

#9 | написал: Mr.Cheater | 27 марта 2013 14:16 | ICQ: 360239964 | Пользователь offline

Группа: Администраторы
Публикаций: 33
Комментариев: 68
aleksey,

т.к делитель больше делимого, то в результате будет 0
т.е 6 div 55 = 0


#10 | написал: Чукча | 26 июня 2013 16:51 | ICQ: |

Группа: Гости
Публикаций: 0
Комментариев: 0
Program Zod;
var x, a :real;
begin
read (x);
if x div a := x then write('Yes') else write ('NO, NO, No, No, no, no...');
a:=1;
end.
а что здесь не так? пишет после if x div a ошибка - неверное выражение

а надо узнать x-целое

#11 | написал: Mr.Cheater | 26 июня 2013 18:16 | ICQ: 360239964 | Пользователь offline

Группа: Администраторы
Публикаций: 33
Комментариев: 68
Чукча,
для начала, вы поставили присваивание там,где его не должно быть 
if x div a := x
правильно 
 
 if x div a = x 
далее операторы div и mod используются для целых чисел
в вашем случае вам нужно использовать оператор frac (определяет дробную часть для вещественного числа)
т.е вместо  
if x div a := x then
сделать так
if frac(x)=0 then..... 
эту строчку
a:=1;
естественно,надо убрать, здесь переменная a вообще не нужна 
 
 
 

#12 | написал: Чукча | 27 июня 2013 19:23 | ICQ: |

Группа: Гости
Публикаций: 0
Комментариев: 0
спс большое

#13 | написал: Тот,кто пожелал остаться неизвестным | 27 сентября 2014 23:51 | ICQ: |

Группа: Гости
Публикаций: 0
Комментариев: 0
что делать,если в данной ситуации a,b>=1000000000000000000(a mod b),не влезает даже в int64

#14 | написал: Алексей | 29 сентября 2014 20:57 | ICQ: |

Группа: Гости
Публикаций: 0
Комментариев: 0
выдает ошибку типы операндов не соответствуют операции

#15 | написал: член | 22 сентября 2015 21:25 | ICQ: |

Группа: Гости
Публикаций: 0
Комментариев: 0
дирьмо

#16 | написал: Наталия | 13 ноября 2015 16:35 | ICQ: |

Группа: Гости
Публикаций: 0
Комментариев: 0
Есть ли какие-то особенности в использовании div и mod в Turbo Pascal? В ABC программа работает нормально, а в турбо все значения ниже на 1, чем должны быть. С чем это может быть связано?

#17 | написал: Mr.Cheater | 13 ноября 2015 22:58 | ICQ: 360239964 | Пользователь offline

Группа: Администраторы
Публикаций: 33
Комментариев: 68
Цитата: Наталия
Есть ли какие-то особенности в использовании div и mod в Turbo Pascal? В ABC программа работает нормально, а в турбо все значения ниже на 1, чем должны быть. С чем это может быть связано?


Не заметил никаких отличий при использовании. Может у вас дело в чем-то другом?

#18 | написал: Наталия | 14 ноября 2015 13:20 | ICQ: |

Группа: Гости
Публикаций: 0
Комментариев: 0
Код такой. Задачка с олимпиады 9 класса на определение подъезда и этажа при известном номере квартиры. В ABC все работает как надо. Обо что может спотыкаться Турбо?
program podjezd;
var a,b,c,d,e,f:integer;
begin
writeln('Введите количество этажей');
readln(a);
writeln('Введите количество квартир на лестничной клетке');
readln(b);
writeln('Введите номер квартиры');
readln(c);
d:=a*b;
e:=(c div d)+1;
f:=((c mod d)div b)+1;
writeln('квартира находится на ',e,' подъезде и ',f,'этаже');
readln;
end.

#19 | написал: Сергей | 19 октября 2016 17:21 | ICQ: |

Группа: Гости
Публикаций: 0
Комментариев: 0
Помогите с задачей по олимпиаде.
В комнату занесли столы и компьютеры . Их разместили так:
1 2 3 4 .......и тд.
1 2 3 4 5 6
(Внизу компьютеры вверху столы)
нужно решить задачу с помошью цикла и div, mod. помогите плиз.
Заранее благодарю.

Добавление комментария

Ваше Имя:
Ваш E-Mail:
Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Вставка исходного кода Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера

Введите два слова, показанных на изображении: