Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Операции div и mod в Паскале

Мишутка Знаток (467), закрыт 8 месяцев назад
Почему такие ответы? Как это высчитывалось?
Лучший ответ
Андрей Высший разум (483575) 8 месяцев назад
Потому, что в программировании остаток от деления всегда вычисляется по формуле:
 x mod y = x - (x div y) * y 
И для отрицательных чисел результат этой формулы отличается от принятого в школьной математики.

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

В Pascal в целочисленном делении используется округление к 0: производим вещественное деление и отбрасываем дробную часть частного.

А в Python используется округление к -∞: производим вещественное деление и округляем частное вниз - к ближайшему целому, не превосходящему частное.

Для пояснения:
 |------|7 div 5|-7 div 5|7 div -5|-7 div -5|
|pascal| 1 | -1 | -1 | 1 |
|python| 1 | -2 | -2 | 1 |
 |------|7 mod 5|-7 mod 5|7 mod -5|-7 mod -5| 
|pascal| 2 | -2 | 2 | -2 |
|python| 2 | 3 | -3 | -2 |
МишуткаЗнаток (467) 8 месяцев назад
А почему тогда -31 div 10 = -4 в паскале?
-31 / 10 = -3,1 и отбросив дробную часть получим -3 ведь?
Андрей Высший разум (483575) Михаил Михалыч, В каком именно Паскале? В нормальном FreePascal (полностью совместимом со стандартным Pascal) ты получишь -3. Можешь сам убедиться: https://onlinegdb.com/uM95ybJKD
МишуткаЗнаток (467) 8 месяцев назад
Скрин в вопросе из книги Вирта "Алгоритмы и структуры данных". Нотацией примеров служит Паскаль
Андрей Высший разум (483575) Михаил Михалыч, Ну вот, не Pascal. Другой язык и другие правила целочисленного деления. Те самые, которые в моём ответе относятся к Python.
Остальные ответы
Папа Высший разум (154803) 8 месяцев назад
Видимо, по обычным математическим правилам целочисленного деления с остатком, которые излагаются в любом школьном учебнике математики за соответствующий класс?
https://ru.wikipedia.org/wiki/%D0%94%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BA%D0%BE%D0%BC
Иван Сигаев Искусственный Интеллект (156926) 8 месяцев назад
Потому что нет единого решения при целочисленном делении отрицательных чисел с остатком
В Паскале принято что остаток всегда положительный
И при делении -31 на 10 получается что -31=10*(-4)+9
Алекс Куха Высший разум (477438) 8 месяцев назад
А что не устраивает? Любой компилятор авторы создают, как они считают правильным. Воспринимать такое надо as is.
н-р Free Pascal Compiler version 3.0.4
ПапаВысший разум (154803) 8 месяцев назад
А это как раз создавалось после стократного чтения мантры "математиканенужнааааааа".
Похожие вопросы