[Alimir_BootModal_Login]

Внутренний язык программирования 1С 8.3 для начинающих программистов: математика в 1С

 Автор уроков и преподаватель школы: Владимир Милькин

На одном из первых занятий мы уже разбирали использование арифметических операций в 1С 8.3. Конечно, это не все математические операции, которые доступны разработчику и сегодня мы восполним этот пробел.

Ваша задача на этом уроке воспроизводить все примеры у себя на компьютере в модуле управляемого приложения.

Математические операции в 1С

Представим, что у нас есть число с дробной частью:

Цена = 100.384;

И мы хотим округлить его дробную часть до первого знака после запятой:

ОкругленнаяЦена = Окр(Цена, 1); // вернёт 100.4

Мы воспользовались командой Окр, которая принимает число и количество знаков дробной части после которых нужно округлить значение.

В качестве результата округления мы получим 100.4. Но почему не 100.3?

Всё потому, что команда Окр делает округление к ближайшему целому. Другими словами, при округлении до N-го знака, мы смотрим на число, которое расположено следом (в позиции N + 1). И если это число < 5, то N-й знак сохраняет своё значение, иначе если это число >= 5, то N-й знак увеличивается на единицу.

В нашем случае мы округляем до первого знака, значит смотрим на второй знак. Там 8, она больше или равна 5, значит первый знак (там 3) мы увеличиваем на единицу. Получаем 100.4.

Отдельного рассмотрения требуют правила округления, если (N + 1)-й знак равен 5, а последующие знаки равны нулю.

Например, мы хотим округлить число 100.350 до первого знака. В этом случае мы можем явно задать в какую сторону делать округление (в меньшую или большую). За это отвечает третий параметр команды Окр:

Сообщить(Окр(100.350, 1, РежимОкругления.Окр15как10)); // вернёт 100.3
Сообщить(Окр(100.350, 1, РежимОкругления.Окр15как20)); // вернёт 100.4

Значение этого параметра по умолчанию равно РежимОкругления.Окр15как20 (округление в большую сторону).

Ещё раз обращаю ваше внимание, что третий параметр оказывает влияние на результат только тогда, когда мы:

  • округляем до N-го знака
  • N + 1 знак равен 5
  • а все знаки начиная с N + 2 равны нулю

А теперь давайте отбросим дробную часть числа, чтобы осталась только целая часть:

ЦелаяЧасть = Цел(Цена); // вернёт 100

Мы воспользовались командой Цел, которая принимает число с дробной частью и возвращает только его целую часть.

Иногда при расчётах требуется возвести число в степень:

ДесятьВКубе = Pow(10, 3); // вернёт 1000

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

А порою нам требуется, наоборот, к примеру извлечь квадратный корень из числа:

КвадратныйКореньИз25 = Sqrt(25); // вернёт 5

Ещё задача. Пусть у нас имеется конечный набор чисел и нужно найти максимальное значение:

МаксимальноеЗначениеИзТрёхЧисел = Макс(10, 20, 30); // вернёт 30
МаксимальноеЗначениеИзДвухЧисел = Макс(0, -5); // вернёт 0

Количество параметров, которые можно передавать в функцию Макс для поиска максимального элемента неограниченно.

Функция Мин решает обратную задачу:

МинимальноеЗначениеИзТрёхЧисел = Мин(10, 20, 30); // вернёт 10
МинимальноеЗначениеИзДвухЧисел = Мин(0, -5); // вернёт -5

Ещё очень популярной задачей является генерация случайных чисел. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. В 1С это делается таким образом:

ГСЧ = Новый ГенераторСлучайныхЧисел();
Сообщить(ГСЧ.СлучайноеЧисло(0, 2));

Первой строкой мы создаём объект ГенераторСлучайныхЧисел и связываем с ним нашу переменную ГСЧ.

Во второй строке мы вызываем команду этого генератора СлучайноеЧисло, которая в качестве параметров принимает левую и правую границы (включительно) диапазона в котором требуется генерировать случайные числа.

В приведенном примере вы каждый раз будете запускать программу и она каждый раз будет вам выдавать новое число от нуля (включительно) до двух (включительно). Это и есть генерация случайных чисел.

С более полным перечнем математических функций в 1С вы можете ознакомиться в справочнике по языку (ссылка).

Пройдите тест

Начать тест

Домашнее задание

Напишите программу, которая генерирует три случайные числа в диапазоне от 1 до 1000. Генератор случайных чисел инициализируете числом 2014 (об этом ниже). Затем каждое число возводится в 5 степень. Затем из каждого числа извлекается квадратный корень. Затем каждое число делится на 3. Затем каждое число округляется до второго знака (режим округления Окр15как10). Затем каждое число умножается на 0.25. Затем от каждого числа отбрасывается дробная часть. И, наконец, находится сумма всех получившихся чисел, которая и выводится пользователю. Получившееся значение будет равно 849442 (обратите внимание, что если вы вместо учебной версии платформы из урока используется свою версию платформы 8.3.22 и выше, то там ответ будет другой, 1602528, из-за того что начиная с этой версии изменили алгоритм для формирования случайных чисел).

Подсказка:

Чтобы инициализировать генератор определённым числом (например, 2014) напишем:

ГСЧ = Новый ГенераторСлучайныхЧисел(2014);

Инициализация определённым числом позволит вам получить на своём компьютере ту же самую последовательность случайных чисел, что получил я. Это нужно, чтобы вы в конце выполнения программы получили тот же самый ответ, что и я  - 849442 (или 1602528 для версии платформы 1с 8.3.22 и выше).

Эталонное решение. Сначала пишем код сами, проверяем на компьютере (как и все примеры программ из уроков), только потом сверяемся

Дополнение

Данный материал рассчитан на начинающих разработчиков. Если он показался вам слишком лёгким - рассмотрите другие примеры использования математики в 1С (ссылка).

Для учеников

Уровень сложности уроков идёт снизу вверх. Поэтому старайтесь заниматься последовательно, ничего не пропуская и не откладывая на потом.

Обязательно выполняйте все тесты и домашние задания, старайтесь улучшить свои результаты. Сверяйтесь с эталонными решениями только после самостоятельного выполнения задач.

На вопросы учеников — отвечаю по почте,  но прежде загляните в ЧАВО (ссылка) .

С уважением, Владимир Милькин