www.samag.ru
Журнал «БИТ. Бизнес&Информационные технологии»      
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

Интеграция Open Source-решений  

Open Source в облачной среде

Облачные решения становятся всё более популярными в мире. Компании стремятся использовать их для

 Читать далее...

Автоматизация  

Нейросеть вам в руки! Как использовать ИИ для автоматизации задач

Использование ИИ для автоматизации задач помогает компании получить конкурентное преимущество, поскольку объединение

 Читать далее...

Рынок труда  

Специалист по этическому ИИ, инженер по квантовым вычислениям или аналитик по метавселенной?

Новые тенденции в развитии ИТ могут привести к возникновению новых специальностей в

 Читать далее...

Книжная полка  

Учитесь убеждать и побеждать

Издательство «БХВ», как всегда, порадовало своих читателей хорошими книжными новинками. Кроме популярных

 Читать далее...

Сетевая инфраструктура  

Как удаленная работа меняет подход к сетевой инфраструктуре?

С увеличением числа сотрудников, работающих из дома, организации сталкиваются с необходимостью создания

 Читать далее...

Мониторинг  

Какой мониторинг нужен сегодня?

По мнению экспертов ГК InfoWatch, действия сотрудников – самая распространенная причина инцидентов

 Читать далее...

Книжная полка  

Руководство для тех, кто увлечен ИИ, программированием. И дизайном

Накануне лета издательство «БХВ» выпустило книжные новинки, от которых любителям чтения будет

 Читать далее...

Мобильные приложения  

Искусственный интеллект в мобильных приложениях: возможности и перспективы

Обзор современных применений ИИ в мобильных приложениях, анализ перспектив развития этой технологии,

 Читать далее...

ИТ-образование  

Как сделать ИТ-образование эффективным?

Эксперты ИТ-отрасли отвечают на вопросы «СА». Обсуждаем ключевые аспекты для улучшения образовательных

 Читать далее...

Work-life balance  

Как айтишнику найти баланс между работой и личной жизнью?

Обсуждаем инструменты для эффективного управления временем, снижения уровня стресса и достижения гармонии. На

 Читать далее...

Книжная полка  

Всё самое нужное – под одной обложкой

Отличительная черта книжных новинок, выпущенных недавно издательством «БХВ» – это их универсальность. Не просто

 Читать далее...

ИТ-инфраструктура  

Системы мониторинга ИТ-инфраструктуры-2025

Без мониторинга ИТ-инфраструктуры не обходится ни одна компания, хотя бы потому, что

 Читать далее...

Открытое ПО  

Безопасность Open Source: рискуем или контролируем?

Компания «Кросс технолоджис» изучила, как используется ПО с открытым кодом в компаниях

 Читать далее...

Работа с нейросетью  

Скажи, есть ли у тебя AI, и я скажу, кто ты

Недавно сервис по поиску работы SuperJob выяснил, что каждый второй россиянин уже

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 9576
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 9770
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 7189
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 4478
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 5280
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 5283
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 7959
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 4646
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 4892
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 8920
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 12354
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 13903
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 15683
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 10544
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 8572
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 6787
Комментарии: 4
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 5938
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 4813
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 4509
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 4729
Комментарии: 1
Рецензия на книгу «MongoDB в действии»

 Читать далее...

Друзья сайта  

 Генерируемая ASCII-графика в 1С

Архив номеров / 2018 / Выпуск №9 (190) / Генерируемая ASCII-графика в 1С

Рубрика: Разработка /  Изучаем «1С»   | Дополнительные материалы

Кирилл Ткаченко КИРИЛЛ ТКАЧЕНКО, инженер 1-й кат., ФГАОУ ВО «Севастопольский государственный университет», tkachenkokirillstanislavovich@gmail.com

Генерируемая ASCII-графика в 1С

Рассматривается программа на языке 1С, позволяющая генерировать ASCII-изображение известного религиозного символа. Приводятся алгоритм, исходный код, результаты работы

Генерируемая ASCII-графика в 1СИзучение алгоритмических языков программирования должно начинаться с наиболее простых примеров. В частности, необходимо уделить особое внимание базовым элементам языка, таким как операторы цикла и условные операторы. Безих знания во многих случаях невозможно будет правильно и полноценно программировать. Поэтому кажется разумным уделить особое внимание им. Необходимо совместить как рассмотрение указанных операторов, так и манипулирование графикой в текстовом режиме, для которой стоит продолжить рассмотрение.

Одним из видов современного искусства является ASCII-графика [1]. В основном ASCII-графика играет вспомогательную, оформительскую, служебную роль. Несомненным ее преимуществом является возможность применения такой графики без наличия графических средств отображения информации. Например, построение изображений для сохранения их в текстовые файлы и вывода на печать. Для примера такого изображения можно выполнить текстовую генерацию религиозного символа, известного под названием Инь и Ян [2].

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

Рисунок 1. Иллюстрация для формул

Рисунок 1. Иллюстрация для формул

Стоит отметить, что в отличие от общепринятой декартовой системы координат на рис. 1 и далее для удобства компьютерных расчетов предполагается, что условно верхняя полуось y содержит отрицательные величины (y < 0), в то же самое время нижняя – положительные (y > 0).

Также в дальнейшем полагается, что рисунок генерируется на некотором двумерном текстовом поле, ячейки которого имеют целочисленные координаты (xy).

Согласно [3] уравнение окружности с центром в точке (x0,y0) и радиусом R имеет вид:

(1)

На основании (1), чтобы определить принадлежность точки окружности и кругу с центром в точке (x0,y0) и радиусом R необходима истинность выражения:

(2)

Наибольшая окружность получает номер 1, средние – 2 и 3, наименьшие – 4 и 5. Из рис. 1 следует, что для всех окружностей координаты x одинаковы:

(3)

С другой стороны, координаты y разнятся:

(4)

Очевидно, что радиусы окружностей равны, соответственно:

(5)

Удобно ввести формулу по (2) для определения принадлежности точки окружности и кругу с центром в точке (x0,y0) и радиусом R:

(6)

На основании (1)-(6) можно определить цвет ячейки двумерного текстового поля с координатами (xy):

ЦветЯчейки ← Если ПринадлежитКругу(x,y,x04,y04,R4) Тогда ЧЕРНЫЙ
ИначеЕсли ПринадлежитКругу(x,y,x05,y05,R5) Тогда БЕЛЫЙ
ИначеЕсли ПринадлежитКругу(x,y,x01,y01,R1) Тогда
    Если ПринадлежитКругу(x,y,x02,y02,R2) Тогда БЕЛЫЙ
    ИначеЕсли ПринадлежитКругу(x,y,x03,y03,R3) Тогда ЧЕРНЫЙ
    ИначеЕсли x<0 Тогда БЕЛЫЙ
    Иначе ЧЕРНЫЙ
    КонецЕсли
Иначе ПУСТО
КонецЕсли

Подставив в этот алгоритм значения (3)-(5), получаем:

ЦветЯчейки ← Если ПринадлежитКругу(x,y,0,yI,RII) Тогда ЧЕРНЫЙ
ИначеЕсли ПринадлежитКругу(x,y,0,yI,RII) Тогда БЕЛЫЙ
ИначеЕсли ПринадлежитКругу(x,y,0,0,R) Тогда
    Если ПринадлежитКругу(x,y,0,yI,RI) Тогда БЕЛЫЙ
    ИначеЕсли ПринадлежитКругу(x,y,0,yI,RI) Тогда ЧЕРНЫЙ
    ИначеЕсли x<0 Тогда БЕЛЫЙ
    Иначе ЧЕРНЫЙ
    КонецЕсли
Иначе ПУСТО
КонецЕсли

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

Вначале определяется служебная функция, которая возвращает квадрат аргумента:

Функция КвадратЧисла(x)
    Возврат x * x;
КонецФункции

Затем определяется функция, определяющая принадлежность точки с координатами (xy) окружности и кругу с центром в точке (x0,y0) и радиусом Радиус:

Функция ПринадлежитКругу(x, y, x0, y0, Радиус)
    Возврат КвадратЧисла(x – x0) + КвадратЧисла(y – y0) <= КвадратЧисла(Радиус);
КонецФункции

Расчет ведется по формулам (2), (6).

Непосредственное построение ASCII-рисунка происходит в функции ИньЯн. Единственный аргумент этой функции – Радиус – это радиус большой окружности. Функция начинается с определения переменных:

Функция ИньЯн(Радиус)
    Перем ЦВЕТ_БЕЛЫЙ, ЦВЕТ_ЧЕРНЫЙ, ЦВЕТ_ПУСТО;
    Перем x, y;
    Перем РадI, РадII;
    Перем yI, yII;
    Перем x2;
    Перем Рез;

В переменных ЦВЕТ_БЕЛЫЙЦВЕТ_ЧЕРНЫЙЦВЕТ_ПУСТО сохраняются символы, которые будут в результирующей строке играть роль цветной точки.

Переменные x и y – это счетчики циклов, указывающих координаты на поле рисунка.

Для хранения результатов целочисленного деления величины радиуса на 2 и на 6 служат РадI и РадII.

Центры средних и малых окружностей размещаются в yI и yII.

Результат целочисленного уменьшения координаты x в два раза помещается в x2.

Наконец, строка с ASCII-картинкой помещается в Рез.

Устанавливаются символы, соответствующие цветам ячейки:

    ЦВЕТ_БЕЛЫЙ = ".";
    ЦВЕТ_ЧЕРНЫЙ = "o";
    ЦВЕТ_ПУСТО = " ";

Рассчитываются радиусы средних и малых окружностей:

    РадI = Цел(Радиус / 2);
    РадII = Цел(Радиус / 6);

Определяются координаты y центров средних и малых окружностей:

    yI = -РадI;
    yII = РадI;

Результирующая выходная строка пуста:

    Рез = "";

По всем координатам y, которые могут принадлежать большей окружности и кругу:

    Для y = -Радиус По Радиус Цикл

По всем координатам y, которые могут принадлежать большей окружности и кругу, причем применяется масштабирование для учета распространенных соотношений сторон символов:

	Для x = -2 * Радиус По 2 * Радиус Цикл

Масштабирование отменяется:

	    x2 = Цел(x / 2);

Если точка принадлежит малому верхнему кругу, то устанавливается черный цвет:

	    Если ПринадлежитКругу(x2, y, 0, yI, РадII) Тогда
		Рез = Рез + ЦВЕТ_ЧЕРНЫЙ;

Если точка принадлежит малому нижнему кругу, то устанавливается белый цвет:

	    ИначеЕсли ПринадлежитКругу(x2, y, 0, yII, РадII) Тогда
		Рез = Рез + ЦВЕТ_БЕЛЫЙ;

Если точка принадлежит большому кругу:

	    ИначеЕсли ПринадлежитКругу(x2, y, 0, 0, Радиус) Тогда

И при этом принадлежит верхнему среднему кругу, то устанавливается белый цвет:

		Если ПринадлежитКругу(x2, y, 0, yI, РадI) Тогда
		    Рез = Рез + ЦВЕТ_БЕЛЫЙ;

И при этом принадлежит нижнему среднему кругу, то устанавливается черный цвет:

		ИначеЕсли ПринадлежитКругу(x2, y, 0, yII, РадI) Тогда
		    Рез = Рез + ЦВЕТ_ЧЕРНЫЙ;

Если же находится слева, то цвет нужно выставлять белый:

		ИначеЕсли x < 0 Тогда
		    Рез = Рез + ЦВЕТ_БЕЛЫЙ;

Если находится справа, то цвет черный:

		Иначе
		    Рез = Рез + ЦВЕТ_ЧЕРНЫЙ;
		КонецЕсли;

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

	    Иначе
		Рез = Рез + ЦВЕТ_ПУСТО;
	    КонецЕсли;

Внутренний цикл повторяется:

	КонецЦикла;

К результирующей строке добавляется терминатор и повторяется внешний цикл:

	Рез = Рез + ""
	    "";
    КонецЦикла;

Результат возвращается и функция завершается:

    Возврат Рез;
КонецФункции

Пользователю сообщаются результаты расчетов ASCII-рисунков для радиусов 8 и 16:

Сообщить(ИньЯн(8));
Сообщить(ИньЯн(16));

Схема соответствующего программе алгоритма приводится на рис. 2.

Рисунок 2. Схема алгоритма

Рисунок 2. Схема алгоритма

Полный текст программы доступен на сайте журнала http://samag.ru.

Результаты работы – см. рис. 3.

Рисунок 3. Результаты работы программы

Рисунок 3. Результаты работы программы

Полученные алгоритм и программа позволят глубже взглянуть на простейшие, элементарные управляющие конструкции языка 1С. Многократное повторение и использование этих важных конструкций позволит закрепить знание основ языка 1С.

  1. ASCII-графика // Википедия. URL: https://ru.wikipedia.org/wiki/ASCII-графика (дата обращения: 01.06.2018).
  2. Yin and yang // Rosetta Code. URL: http://rosettacode.org/wiki/Yin_and_yang (дата обращения: 26.05.2018).
  3. Окружность // Википедия. URL: https://ru.wikipedia.org/wiki/Окружность (дата обращения: 07.06.2018).

Ключевые слова: 1С, ASCII.


Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru