- Остаток от деления в 1С 8.3 и 8.2
- Программирование в 1С для всех
- Деление в Python
- Оператор деления
- Деление без остатка
- Остаток
- Проблемы чисел с плавающей точкой
- Деление комплексных чисел
- Сокращенные операции деления
- Деление на ноль
- Выведите в порядке возрастания все числа от a до b, которые дают остаток c при делении на d
- Решение
- Решение
Остаток от деления в 1С 8.3 и 8.2
Недавно в чужом программном столкнулся с тем, что не все программисты 1С знают, как в 1С 8.2 или 8.3 получить остаток от деления.
Периодически встречаются вот такие конструкции:
ОстатокОтДеления = Делимое — Цел(Делимое / Делитель) * Делитель;
Это конечно забавный и остроумный способ. Но есть более простой метод, встроенный в платформу:
ОстатокОтДеления = Делимое % Делитель;
Вот, собственно, и всё!
P.S. Кстати, результат 1%2 = 1, некоторые почему-то думают, что ноль 🙂
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
- 5
- 4
- 3
- 2
- 1
(0 голосов, в среднем: 0 из 5)
Поддержите нас, расскажите друзьям!
СПРОСИТЕ в комментариях!
Добрый вечер.А вы уже пробовали заполнять матрицу змейкой числами от 1 до 100 на 1с?
Змейкой уже не актуально. Правильнее Бустадефон (ходом быка).
Если надо получить остаток от деления в запросе, то к сожалению это «ОстатокОтДеления = Делимое — Цел(Делимое / Делитель) * Делитель» похоже единственный способ. Самому пришлось так делать.
В каком смысле «1%2 = 1». Это по каким таким логикам, каких миров. Что за великий программист подобное в голове своей провернул? Я не понимаю, как можно сию мысль осознать.
По обычной такой математической логике. Остаток от деления единицы на два равен единице.
тут надо смотреть на процесс деления с стороны только целых чисел. 1 на 2 целочисленно не делится. результат деления тут будет 0, а вот остаток и будет 1.
если всЁ равно не понятно пока, тогда предлагаю рассмотреть деление 3 на 2 (или 5 на 2) в качестве примера.
3 / 2 = 1, остаток 1 (так как 3 — 2 * 1 = 1).
5 / 2 = 2, остаток 1 (так как 5 — 2 * 2 = 1).
а теперь наш случай:
1 / 2 = 0, остаток 1 (так как 1 — 2 * 0 = 1).
ps: а вообще процессор компьютера, выполняя целочисленное деление командой div или idiv, получает целочисленный результат от деления и остаток одним действием.
целочисленный результат помещается в регистр RAX (если рассматриваем 64-битный вариант), а остаток помещается в регистр RDX.
При использовании данного сайта, вы подтверждаете свое согласие на использование файлов cookie в соответствии с настоящим уведомлением в отношении данного типа файлов. Если вы не согласны с тем, чтобы мы использовали данный тип файлов, то вы должны соответствующим образом установить настройки вашего браузера или не использовать сайт.
Отправляя любую форму на сайте, вы соглашаетесь с политикой конфиденциальности данного сайта.
Источник
Программирование в 1С для всех
Оператор %
В этой статье я подробно разберу оператор %, который возвращает остаток от деления. Рассмотрим особенности его работы, и задачи, когда он может быть применим.
Работа оператора % описана в моей книге «Программировать в 1С за 9 шагов», но не приведены случаи, когда он может понадобиться, в этой статье я восполню пробел, и, возможно, она войдет в уже новую редакцию книги.
И так начнем. Оператор % получает остаток от деления одного числа на другое.
Е = A % B;
E – остаток от деления А на В.
Когда он может быть применим?
Рассмотрим самые . С его помощью можно определить четное число или нет. Если выражение А%2 равно 0, то число четное (остатка от деления нет), а если А%2 не равно 0, то число нечетное.
Так же с его помощью можно вычислять число определенной кратности. Например, есть цикл от 1 до 100, нам нужно вывести на экран числа кратные, к примеру, 7. В этом случае будет такой код:
И такой результат работы этого кода
Рассмотрим, еще один способ применения оператора %. Очень часто время получается в секундах, например при вычитании одной даты из другой. И бывает необходимость привести все это в какой-то нормальный вид. Поясню, какой будет в этом случае алгоритм
Пусть мы имеем число секунд: 56321.
Нам сейчас нужно получить точное количество минут в этом числе секунд, минута состоит из 60 секунд. Поэтому получив остаток 56321 % 60, мы получим «лишние» секунды (например. 142 = 60 + 60+ 22, 22 – и будет остаток от деления 142 %60). А после того, как вычтем из исходного числа остаток от деления, и поделим все это на 60, то узнаем ровное количество минут в этом числе. Точно так же узнаем ровное количество часов, дней, месяцев и т.д.
Сейчас я создам небольшую обработку, которая будет раскладывать число в секундах на минуты, часы и дни (на месяцы и года дальше будет раскладывать не совсем корректно).
Данная форма обработки будет иметь следующий вид:
Код, который раскладывает число секунд на составляющие:
&НаКлиенте
Процедура Разложить ( Команда )
Секунды = СекундыОбщие % 60 ;
МинутыОбщие = ( СекундыОбщие — Секунды ) / 60 ;
Минуты = МинутыОбщие % 60 ;
ЧасыОбщие = ( МинутыОбщие — Минуты ) / 60 ;
Часы = ЧасыОбщие % 24 ;
Дни = ( ЧасыОбщие — Часы ) / 24 ;
КонецПроцедуры
Посмотрим результат работы этого кода, на некоторых примерах.
Эти два пример должны Вам дать хорошее представление о работе данного оператора, и, надеюсь, в процессе работы его использование не вызовет у Вас затруднений. А код, где он написан, будет понятен и прост.
Если Вам пригодилась информация из моего блога, или Вы узнали что-то полезное для себя, то Вы можете поддержать мой проект, перечислив любую сумму:
Можно оплатить напрямую
Яндекс.Деньги — 410012882996301
Web Money — R955262494655
Изучите программирование в 1С с помощью моей книги «Программировать в 1С за 9 шагов»
- Без сложных технических терминов.
- Более 500 страниц практического материала.
- Каждое задание сопровождается рисунком (скриншот).
- Сборник задач для домашней проработки.
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
Промо-код на скидку в 16%: vCph8bW3rE
Источник
Деление в Python
Python — популярный высокоуровневый язык программирования. Он обладает большим набором инструментов, имеет динамическую типизацию и используется для решения любых видов задач.
Деление в Python разделяется на три вида: обычное, целочисленное и взятие остатка. Программисту не нужно заботиться о типах операндов, Python сам определяет их и приводит результат к нужному виду. Как это делается, разберемся в этой статье.
Оператор деления
Деление в Python обозначается косой чертой «/». Примечательно, что результат в консоле всегда приводится к типу «float», даже если оба операнда были целочисленного типа, об этом свидетельствует появление «.0» у полученного значения.
Это появилось в 3-ей версии Python, ранее результатом деления целых чисел было только целое число, чтобы получить дробный результат, программисты явно указывали одному из операндов тип «float», в противном случае дробная часть просто отбрасывалась.
Важно понимать, что деление в Python, как и другие операции, работает медленнее, чем в более низкоуровневых языках программирования. Это связано с высоким уровнем автоматизации и абстракции, из-за динамической типизации интерпретатор вынужден приводить числа к дробному типу «float», который требует большего количества памяти.
Деление в представлении человека отличается от его представления в компьютере. Компьютер устроен так, что все арифметические операции могут выполняться только через сложение. Это значит, что быстрее всего выполняется сложение, затем вычитание, где необходимо менять знак операндов, умножение, где число складывается много раз. Деление выполняется дольше всех, потому что помимо многократно повторяющейся операции сложения необходимо также менять знак операндов, что требует больше памяти и действий.
Из примера видно, что не смотря на то, что во всех случаях операция была между целыми числами, результатом деления в Python 3 является вещественное число. В первом случае мы даже специально использовали приведение к типу int.
Деление без остатка
Чтобы выполнить деление на цело в Python, можно воспользоваться целочисленным делением. В этом случае результатом будет целое число, без остатка. Целочисленное деление в Python обозначается двумя косыми чертами «//».
В отличие от других языков программирования Python позволяет результату целочисленного деления быть как целым (int), так и дробным (float) числом. В обоих случаях дробная часть отбрасывается и получается число с окончанием «.0».
Примеры нахождения целой части от деления:
В первых двух случаях деление осуществлялось между целыми числами. Поэтому в результате было получено целое число. В третьем примере одно из чисел вещественное. В этом случае в результате получаем так же вещественное число (типа float), после запятой у которого 0.
Остаток
Для получения остатка от деления в Python 3 используется операция, обозначающаяся символом процента «%». Остаток — это оставшаяся после целочисленного деления часть числа. Операция взятия остатка используется для решения различных видов задач.
Определение остатка от деления очень часто используется в программах для нахождения, допустим, чётных чисел. Или, например, если обработка данных выполняется в цикле, и нужно выводить в консоль сообщение о ходе обработки не каждый раз, а на каждой 10-ой итерации.
Вот пример вывода чётных чисел из списка в консоль:
Проблемы чисел с плавающей точкой
Компьютер устроен так, что на аппаратном уровне понимает только две цифры: один и ноль. Из-за этого при делении и других операциях с дробями часто возникают проблемы. Например, 1/10 в двоичном представлении является неправильной бесконечной дробью. Её нельзя написать полностью, поэтому приходится округлять, а выбор значения при округлении ограничен нулем и единицей.
Что говорить о делении, если ошибки возникают и при операции сложения. Если сложить число «0.1» с самим собой четырнадцать раз, то получиться 1.400…01. Откуда взялась эта единица? Она появилась при переводе числа из двоичного вида в десятичный.
Более технически сложное деление приводит к подобным неточностям гораздо чаще. Обычно Python округляет результат так, что пользователь не замечает этой проблемы, но если получается достаточно длинное число, то проблема проявляется.
Деление комплексных чисел
Комплексные числа — это числа вида «a + b·i». Они занимают наивысшую ступень в иерархии чисел, арифметические операции над ними существенно отличаются от операций над обычными числами.
Деление комплексного числа на обычное меняет лишь длину радиус вектора, но не его направление.
Сокращенные операции деления
Чтобы упростить жизнь программистов, разработчики Python включили в язык «сокращенные операции». Их используют если надо выполнить операцию над переменной и полученный результат записать в эту же переменную. То, что записывается в длинной форме, можно записать в более короткой по следующим правилам:
Полная форма | Краткая форма | |
Деление | a = a / b | a /= b |
Целая часть | a = a // b | a //=b |
Остаток | a = a % b | a %= b |
Деление на ноль
Если попробовать в Python выполнить деление на 0, то мы получим исключение ZeroDivisionError.
Исключение следует обрабатывать, это можно сделать так:
Но в этом случае мы обрабатываем все исключения. Зачастую так делать не совсем корректно. Мы знаем, что в нашем коде возможно деление на 0 и, чтобы отловить именно эту ошибку, следует заменить except Exception as e: на except ZeroDivisionError as e: .
Но можно и проверять перед выполнением операции, что делитель не равен 0. Например так:
Источник
Выведите в порядке возрастания все числа от a до b, которые дают остаток c при делении на d
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Вывести в порядке возрастания все числа от a до b, которые дают остаток c при делении на d
Остатки Даны целые неотрицательные числа a, b, c, d, при этом 0≤c 14
Решение
Где вы все берёте такие задачи для маньяков, а?
За то из подсказок есть следующее, только что узнали:
Можно вычесть из чисел a и b число c. Тогда задача сведётся в поиску всех чисел на отрезке от a до b, которые делятся на d. Важно не забыть прибавить c к числам, которые выводятся в качестве ответа.
Ближайшее число, больше или равное a, которое делится на d можно вычислить по формуле: (a+d−1)/d∗d (деление в данном случае целочисленное).
А кто «Он»? Сириус — лагерь для тех, кто себя ненавидит.
Решение
a = c + ((a + d — 1) / d) * d
Иначе некорректно например в таком случае: foo(2, 1, 2, 2); https://ideone.com/6lp9nX
Добавлено через 16 минут
Ребят, честно, уже не можем, обидно перекладывать все на вас, но это полный. Да.
Вот наш код:
#include
using namespace std;
long foo(long a, long b, long c, long d)
<
for (a = c + ((a + d — 1) / d) * d; a > a >>b >> c >>d;
foo(a,b,c,d);
return 0;
>
По-итогу выдает: «Программа выдает ошибку».
Добавлено через 28 минут
Я нашел ответ.
Вывод: Сириус — дрянь, где максимум — можно потерять весь интерес к программированию
Код:
#include
using namespace std;
int main()
<
long int a,b,c,d=0;
cin>>a>>b>>c>>d;
a -=c; b-=c;
long start = (a + d — 1) / d * d;
for(long i = start; i 0
Источник