Обычный калькулятор на 1С (практика для новичков)

31.10.22

Разработка - Математика и алгоритмы

Зачастую первое задание любого уважающего себя программиста, не считая "Привет, Мир" - реализация калькулятора. Очень сильно удивился, когда не нашел примеров создания калькулятора на YouTube и Infostart с возможностью вывода выражения и вычисления значения по правилам математики. Решил добавить статью для будущих поколений. Алгоритмы простые, поэтому статья для начинающих

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование SM По подписке [?] Купить один файл
Обычный калькулятор на 1С (практика для новичков):
.epf 10,09Kb
4
4
1 SM
Скачать Купить за 1 850 руб.

Код программы (внизу пояснение кода)

&НаКлиенте
Процедура ПрибавитьЦифру(Команда)
	
	//ПРОВЕРЯЕМ ЧИСЛО ВЫБРАННОЕ ПОЛЬЗОВАТЕЛЕМ (ИМЯ КОМАНДЫ)
	Событие 		= ЭтаФорма.ТекущийЭлемент;         
	//ДОБАВЛЯЕМ ЗНАЧЕНИЕ ЧИСЛА К ИТОГОВОМУ ПОЛЮ (СТРОКА)
	ИтоговоеПоле 	= ИтоговоеПоле + Событие.Заголовок;
	
КонецПроцедуры

&НаКлиенте
Процедура Операция(Команда)
	
	//ПОЛУЧАЕМ ИМЯ СОБЫТИЯ (ИМЯ КОМАНДЫ)
    Событие = ЭтаФорма.ТекущийЭлемент;
	
	Если Событие.Имя = "Стереть" Тогда
		
		//КОМАНДА "СТЕРЕТЬ" УБИРАЕТ ПОСЛЕДНИЙ СИМВОЛ СПРАВА (БЕРЕМ ВСЕ СИМВОЛЫ - 1 ОТ ЛЕВОГО КРАЯ)
		ИтоговоеПоле = Лев(ИтоговоеПоле,СтрДлина(ИтоговоеПоле) - 1);

	ИначеЕсли Событие.Имя = "Очистить" Тогда
		
		//КОМАНДА "ОЧИСТИТЬ" СТИРАЕТ ЗНАЧЕНИЕ В "ИТОГОВОЕПОЛЕ"
		ИтоговоеПоле = "";
		
	ИначеЕсли Событие.Имя = "Разделить" Или
			  Событие.Имя = "Умножить" Или
			  Событие.Имя = "Прибавить" Или
			  Событие.Имя = "Отнять" Тогда
			  
		//ПРОВЕРИМ НЕТ ЛИ ДО ЭТОГО ЗНАКА ОПЕРАЦИИ. ЕСЛИ ЕСТЬ ЗАМЕНИМ НА ТЕКУЩИЙ
		ПредыдущийСимвол = Прав(ИтоговоеПоле, 1);
		
		Если ПредыдущийСимвол = "+" 
				ИЛИ ПредыдущийСимвол = "-"
				ИЛИ ПредыдущийСимвол = "*"
				ИЛИ ПредыдущийСимвол = "/" Тогда
				
			//ЗАМЕНИМ. ПОЛУЧИМ ИТОГОВУЮ СТРОКУ БЕЗ ПОСЛЕДНЕГО ЗНАКА И ЗАМЕНИМ НА НУЖНЫЙ
			ИтоговоеПоле = Лев(ИтоговоеПоле, СтрДлина(ИтоговоеПоле) - 1) + Событие.Заголовок;
		Иначе                                                                          
			//НИЧЕГО МЕНЯТЬ НЕ НАДО, ПРОСТО ДОБАВИМ
			ИтоговоеПоле = ИтоговоеПоле + Событие.Заголовок;
		КонецЕсли;
		
		
	ИначеЕсли Событие.Имя = "Точка" И СтрДлина(ИтоговоеПоле) Тогда
		
		//КОМАНДА ТОЧКА ДОБАВЛЯЕТ ДРОБНУЮ ЧАСТЬ ЧИСЛА 
		//МОЖНО ПОСТАВИТЬ, ЕСЛИ ДО ЭТОГО БЫЛО ВВЕДЕНА ПЕРВАЯ (ЦЕЛАЯ) ЧАСТЬ ЧИСЛА
		//И В ЭТОМ ЧИСЛЕ НЕТ УЖЕ ТОЧКИ
		
		//ПРИМЕР
		//+. НЕЛЬЗЯ
		//52. МОЖНО
		//52.41. НЕЛЬЗЯ 
		
		//АЛГОРИТМ ДЕЙСТВИЙ
		//ПРОВЕРИМ ЕСТЬ ЛИ У НАС В СТРОКЕ ЛЮБОЙ СИМВОЛ ОПЕРАЦИИ (+ - * /)
			//ЕСЛИ НЕТ, ТО ЗНАЧИТ ЭТО ПЕРВОЕ ЧИСЛО. В НЕМ ДОЛЖНО БЫТЬ НЕ БОЛЬШЕ ОДНОЙ ТОЧКИ
			//ЕСЛИ ЕСТЬ, ТО МОЖЕТ БЫТЬ ЭТО ВТОРОЕ, ТРЕТЬЕ И ТД ЧИСЛО. ПОЛУЧИМ ЕГО ДО СИМВОЛА И ПРОВЕРИМ НЕТ ЛИ В НЕМ ТОЧКИ
		
		ПрисутствуютСимволыОперации = СтрНайти(ИтоговоеПоле, "+")
										ИЛИ СтрНайти(ИтоговоеПоле, "-")
										ИЛИ СтрНайти(ИтоговоеПоле, "*") 
										ИЛИ СтрНайти(ИтоговоеПоле, "/");
										
		Если ПрисутствуютСимволыОперации Тогда
			
			//СИМВОЛЫ ЕСТЬ, ПОЛУЧАЕМ ЧИСЛО ДО БЛИЖАЙЩЕГО СИМВОЛА (+ - * /)
			СписокЦифрСтроки = ПолучитьСписокЦифр(ИтоговоеПоле);
			
			//ПОЛУЧИМ ПОСЛЕДНЕЕ ЧИСЛО ИЗ СПИСКА
			
			ПоследнийЭлемент = СписокЦифрСтроки.Получить(СписокЦифрСтроки.Количество() - 1);
			
			Если Не СтрЧислоВхождений(ПоследнийЭлемент, ".") 
					И Не СтрЧислоВхождений(ПоследнийЭлемент, ",") Тогда
				ИтоговоеПоле = ИтоговоеПоле + ".";
			КонецЕсли;
		Иначе
			
			//СИМВОЛОВ НЕТ, ЗНАЧИТ ЭТО ПЕРВОЕ ЧИСЛО        
			
			//ЕСЛИ НЕ БУДЕТ ВХОЖДЕНИЙ, ЗНАЧИТ ДОБАВЛЯЕМ 
			Если НЕ СтрЧислоВхождений(ИтоговоеПоле, ".")
					И Не СтрЧислоВхождений(ПоследнийЭлемент, ",") Тогда
				ИтоговоеПоле = ИтоговоеПоле + ".";
			КонецЕсли;
		КонецЕсли;
		
	ИначеЕсли Событие.Имя = "Ровно" Тогда 
		
		//ЗАПОЛНИМ СПИСОК ДЛЯ СВЕРКИ ЗНАЧЕНИЙ
		МассивВозможныхСимволов = Новый Массив;
		МассивВозможныхСимволов.Добавить("*");
		МассивВозможныхСимволов.Добавить("/");
		МассивВозможныхСимволов.Добавить("+");
		МассивВозможныхСимволов.Добавить("-");
		
		//ПОЛУЧИМ ТОЛЬКО СПИСОК ЦИФР ИЗ СТРОКИ
		СписокЦифр = ПолучитьСписокЦифр(ИтоговоеПоле);		
		
		//ПОЛУЧИМ ПОСЛЕДОВАТЕЛЬНОСТЬ ОПЕРАЦИЙ СТРОКИ
		МассивОпераций = Новый Массив;
		
		Для  Счет = 1 по СтрДлина(ИтоговоеПоле) Цикл
			
			//ПРОЙДЕМСЯ ПО КАЖДОМУ СИМВОЛУ (СЧЕТ = 1, ПОТОМ 2, 3 И ТД)
			ОбрабатываемыйСимвол = Сред(ИтоговоеПоле, Счет, 1);
			
			//ЕСЛИ СИМВОЛА НЕТ В НАШЕМ СПИСКЕ "МАССИВ ВОЗМОЖНЫХ СИМВОЛОВ", ЗНАЧИТ ЭТО ЧИСЛО ИЛИ ТОЧКА, ПРОПУСКАМ
			Если Не МассивВозможныхСимволов.Найти(ОбрабатываемыйСимвол) = Неопределено Тогда
				
				МассивОпераций.Добавить(ОбрабатываемыйСимвол);
				КонецЕсли;	
			
		КонецЦикла;
		
		//МОЖЕТ БЫТЬ ПОСТАВИЛИ ЛИШНИЙ ЗНАК И НАЖАЛИ РАВНО, ТОГДА ДОБАВИМ В КОНЕЦ НОЛЬ (ПО ХОРОШЕМУ ПРОСТО УБРАТЬ ЛИШНИЙ ЗНАК, НО ДОЛЬШЕ)
		//ПРИМЕР
		//14 + 15 + 
		//+ В КОНЕЦ ЛИШНИЙ, ДОБАВИМ ПРОСТО 0 В КОНЕЦ
		Если СписокЦифр.Количество() = МассивОпераций.Количество() Тогда
			СписокЦифр.Добавить(0);
		КонецЕсли;
		
		//ПОЛУЧИМ ЗНАЧЕНИЕ И ОГРАНИЧИМ ПО ТОЧНОСТИ, ВЫБРАННОЙ ПОЛЬЗОВАТЕЛЕМ
		СтрокаФормата = "ЧДЦ=" + Точность;
		
		ИтоговоеПоле = Формат(ВычислитьВыраженияНаСервере(СписокЦифр, МассивОпераций), СтрокаФормата);	
		
	КонецЕсли;
	
КонецПроцедуры 

Функция ПолучитьСписокЦифр(СтрокаРазбивки)

	//ЗАМЕНЯЕМ В СТРОКЕ СИМВОЛ (+ - * /) НА \ И РАЗДЕЛЯЕМ СТРОКУ НА ЭЛЕМЕНТЫ
	//БЫЛО 
	//23+45*67
	//ПОСЛЕ ЗАМЕНЫ СТАЛО
	//23\45\67
	//ПОСЛЕ РАЗДЕЛЕНИЯ 
	//1. 23
	//2. 45
	//3. 67
	
	СтрокаБезСимволов = СтрЗаменить(СтрокаРазбивки, 	"+", "\");
	СтрокаБезСимволов = СтрЗаменить(СтрокаБезСимволов, 	"*", "\");
	СтрокаБезСимволов = СтрЗаменить(СтрокаБезСимволов, 	"-", "\");
	СтрокаБезСимволов = СтрЗаменить(СтрокаБезСимволов, 	"/", "\");

	Список = СтрРазделить(СтрокаБезСимволов, "\");
	
	Возврат Список;

КонецФункции

Функция ВычислитьВыраженияНаСервере(МассивЦифр,МассивОпераций)                         
	
	//АЛГОРИТМ 
	//ПРИМЕР
	//2+2*2-3*6
	//СОЗДАЕМ ДВА ДОПОЛНИТЕЛЬНЫХ СПИСКА, ОДИН БУДЕТ ХРАНИТ ЦИФРЫ ДЛЯ СЛОЖЕНИЯ, ВТОРОЙ ОПЕРАЦИИ
	//В ПЕРВЫЙ СПИСОК КЛАДЕМ НАШ ПЕРВЫЙ ЭЛЕМЕНТ - 2, ВО ВТОРОЙ КЛАДЕМ НАШЕ ДЕЙСТВИЕ. + ИМЕЕТ ПРИОРИТЕТ 1
	//СМОТРИМ ДАЛЬШЕ, 2 КЛАДЕМ В ПЕРВЫЙ СПИСОК (2 2) И ПРОВЕРЯЕМ, ОПЕРАЦИИ * БОЛЬШЕ ПО ПРИОРИТЕТУ ЧЕМ ПРЕДЫДУЩАЯ
	//ЕСЛИ ПРИОРИТЕТ БОЛЬШЕ, ТО КЛАДЕМ ТАКЖЕ В СТЕК И ИДЕМ ДАЛЬШЕ. ЕСЛИ НЕТ, ТО БЕРЕМ ДВА ПОСЛЕДНИХ ЧИСЛА ИЗ ПЕРВОГО СПИСКА И ПОСЛЕДНЮЮ ОПЕРАЦИЮ
	//ОПЕРАЦИЮ УБИРАЕМ И ДВА ЧИСЛА УБИРАЕМ, ЗАПЫСЫВАЕМ РЕЗУЛЬТАТ
	
	//ДОБАВИМ ВРЕМЕННЫЕ ПЕРЕМЕННЫЕ ДЛЯ РАСЧЕТА
	ВременныйСписокОпераций = Новый Массив;
	ВременныйСписокЦифр		= Новый Массив;
	
	//ДОБАВИМ СООТ. ОПЕРАЦИИ И ЕЕ ПРИОРИТЕТА
	СоотПриоритетов = Новый Соответствие;
	СоотПриоритетов.Вставить("+", 1);
	СоотПриоритетов.Вставить("-", 1);
	СоотПриоритетов.Вставить("*", 2);
	СоотПриоритетов.Вставить("/", 2);
	
	Результат = 0;
	
	Для Счет = 0 По МассивЦифр.Количество() - 1 Цикл
		
		Если ВременныйСписокОпераций.Количество() Тогда
			
			//ЕСЛИ ОПЕРАЦИЙ БОЛЬШЕ НЕТ И ЭТО БЫЛА ПОСЛЕДНЯЯ ПОЧИТАЕМ ЗНАЧЕНИЕ
			Если МассивОпераций.Количество() = Счет Тогда
				
				//ДОБАВИМ ПОСЛЕДНЕЕ ЧИСЛО В ПОСЛЕДОВАТЕЛЬНОСТЬ
				ВременныйСписокЦифр.Добавить(Число(МассивЦифр.Получить(Счет)));
				
				//ВСЕ НАШИ ПЕРЕДАННЫЕ СПИСКИ МЫ ПРОШЛИ, ОСТАЛОСЬ ПРОЙТИСЬ ПО ВРЕМЕННЫМ ТАБЛИЦАМ ОТ БОЛЬШЕГО К МЕНЬШЕМУ
				Пока ВременныйСписокОпераций.Количество() Цикл
				
					ПервоеЧисло = ВременныйСписокЦифр.Получить(ВременныйСписокЦифр.Количество() - 2);
					ВтороеЧисло = ВременныйСписокЦифр.Получить(ВременныйСписокЦифр.Количество() - 1);
					
					Операция = ВременныйСписокОпераций.Получить(ВременныйСписокОпераций.Количество() - 1);
					
					Если Операция = "+" Тогда
						Результат = Результат + ПервоеЧисло + ВтороеЧисло;
					ИначеЕсли Операция = "-" Тогда
						Результат = Результат + ПервоеЧисло - ВтороеЧисло;
					ИначеЕсли Операция = "*" Тогда
						Результат = Результат + (ПервоеЧисло * ВтороеЧисло);
					ИначеЕсли Операция = "/" Тогда
						Результат = Результат + (ПервоеЧисло / ВтороеЧисло);	
					КонецЕсли;                                                                             
					
					//УДАЛИМ ПОСЛЕДНЮЮ ЦИФРУ И ОПЕРАЦИЮ И ЗАПИШЕМ НОВУЮ                                    
					ВременныйСписокЦифр.Удалить(ВременныйСписокЦифр.Количество() - 1);                 
					ВременныйСписокОпераций.Удалить(ВременныйСписокОпераций.Количество() - 1);
					ВременныйСписокЦифр.Добавить(Результат);                                           
					
				КонецЦикла;
				
			Иначе
				
				Если СоотПриоритетов.Получить(МассивОпераций.Получить(Счет)) > 
						СоотПриоритетов.Получить(ВременныйСписокОпераций.Получить(ВременныйСписокОпераций.Количество() - 1)) Тогда
						
					//ЕСЛИ ТЕКУЩАЯ ОПЕРАЦИЯ БОЛЬШЕ ПО ПРИОРИТЕТУ, ТО ПРОСТО ДОБАВЛЯЕМ В СПИСОК	
					ВременныйСписокЦифр.Добавить(Число(МассивЦифр.Получить(Счет)));
					ВременныйСписокОпераций.Добавить(МассивОпераций.Получить(Счет));
				Иначе
					
					//ЕСЛИ ТЕКУЩАЯ ОПЕРАЦИЯ МЕНЬШЕ ИЛИ РАВНА ПО ПРИОРИТЕТУ, ТО СНАЧАЛА ВЫПОЛНЯЕМ СТАРУЮ
					
					ПервоеЧисло = ВременныйСписокЦифр.Получить(ВременныйСписокЦифр.Количество() - 1);
					ВтороеЧисло = Число(МассивЦифр.Получить(Счет));
					
					Операция = ВременныйСписокОпераций.Получить(ВременныйСписокОпераций.Количество() - 1);
					
					Если Операция = "+" Тогда
						Результат = Результат + ПервоеЧисло + ВтороеЧисло;
					ИначеЕсли Операция = "-" Тогда
						Результат = Результат + ПервоеЧисло - ВтороеЧисло;
					ИначеЕсли Операция = "*" Тогда
						Результат = Результат + (ПервоеЧисло * ВтороеЧисло);
					ИначеЕсли Операция = "/" Тогда
						Результат = Результат + (ПервоеЧисло / ВтороеЧисло);	
					КонецЕсли;                                    
					
					//УДАЛИМ ПОСЛЕДНЮЮ ЦИФРУ И ОПЕРАЦИЮ И ЗАПИШЕМ НОВУЮ
					ВременныйСписокЦифр.Удалить(ВременныйСписокЦифр.Количество() - 1);                 
					ВременныйСписокОпераций.Удалить(ВременныйСписокОпераций.Количество() - 1);
					ВременныйСписокЦифр.Добавить(Результат);                                           
				КонецЕсли;
			КонецЕсли;
		Иначе
			
			//ОПЕРАЦИЙ НЕТ, ДОБАВЛЯЕМ ЗНАЧЕНИЕ ЧИСЛА И ОПЕРАЦИИ В СТЕК
			ВременныйСписокЦифр.Добавить(Число(МассивЦифр.Получить(Счет)));
			ВременныйСписокОпераций.Добавить(МассивОпераций.Получить(Счет));
			
		КонецЕсли;
		
	КонецЦикла;
	
	Возврат Результат;

КонецФункции

 

Объяснение решений:

1. В обработке за все кнопки калькулятора отвечает всего две команды, одна за цифры, другая за операции.

В подобных обработках на каждую кнопку калькулятора добавляют свою команду.

Плюсы решения:

- Простота кода, нет кучи команд, в которых легко запутаться;

Минусы решения:

- Нет возможности привязать горячие клавиши на каждую цифру;

 

2. В обработке использовал свой расчет значения.

Плюс решения:

- Легко добавить нужные команды, например ( ) n! nn. Для этого добавляем новые операции и пишем приоритет данной операции;

Минусы решения:

- Большое количество кода;

Альтернатива:

- Простые операции + - * / можно сделать через типовую функцию Вычислить(Выражение);

 

Описание создания формы:

- Создал новую чистую обработку;

- Добавил реквизиты:

Реквизит "ИтоговоеПоле" хранит в себе значение выражения и результат после расчета.

Реквизит "Точность" является числом с видом "Поле переключателя" и видом "Тумблер". 

- Добавил команды:

Команда "Операция" отвечает за:

"Стереть последний символ",

"Очистить значения", 

"Точка (точность)", 

"Равно", 

"Математические операции + - * /"

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

Команда "ПрибавитьЦифру" отвечает за добавление цифр от 0 до 9.

 

Структура формы обработки:

У групп - "Обертка", "Кнопочки", "Цифры" и "ЭлементыУправления" группировка вертикальная, остальные горизонтальные.

Группа "Обертка" имеет ширину - 17.

 

Описание кода:

- При нажатии на кнопки, связанные с командами "Операция" и "ПрибавитьЦифру", добавляется значение числа или знака операции в реквизит "ИтоговоеПоле", сам реквизит закрыт для редактирования пользователем

 

Обработка универсальна, работает на любых конфигурациях на управляемых формах, запускается через "Файл" - "Открыть".

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

См. также

Математика и алгоритмы Программист Платформа 1C v8.2 Конфигурации 1cv8 Россия Абонемент ($m)

На написание данной работы меня вдохновила работа @glassman «Переход на ClickHouse для анализа метрик». Автор анализирует большой объем данных, много миллионов строк, и убедительно доказывает, что ClickHouse справляется лучше PostgreSQL. Я же покажу как можно сократить объем данных в 49.9 раз при этом: 1. Сохранить значения локальных экстремумов 2. Отклонения от реальных значений имеют наперед заданную допустимую погрешность.

1 стартмани

30.01.2024    2587    stopa85    12    

34

Математика и алгоритмы Бесплатно (free)

Разработка алгоритма, построенного на модели симплекс-метода, для нахождения оптимального раскроя.

19.10.2023    6162    user1959478    50    

36

Математика и алгоритмы Разное Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Расширение (+ обработка) представляют собою математический тренажер. Ваш ребенок сможет проверить свои знание на математические вычисление до 100.

2 стартмани

29.09.2023    2489    maksa2005    8    

24

Математика и алгоритмы Инструментарий разработчика Программист Платформа 1С v8.3 Мобильная платформа Россия Абонемент ($m)

Что ж... лучше поздно, чем никогда. Подсистема 1С для работы с регулярными выражениями: разбор выражения, проверка на соответствие шаблону, поиск вхождений в тексте.

1 стартмани

09.06.2023    9642    7    SpaceOfMyHead    17    

60

Математика и алгоритмы Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Три задачи - три идеи - три решения. Мало кода, много смысла. Мини-статья.

03.04.2023    3785    RustIG    7    

25

Механизмы платформы 1С Математика и алгоритмы Программист Платформа 1С v8.3 Россия Бесплатно (free)

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

23.11.2022    2846    gzharkoj    14    

24

Математика и алгоритмы Программист Платформа 1С v8.3 Россия Абонемент ($m)

Обычно под распределением понимают определение сумм пропорционально коэффициентам. Предлагаю включить сюда также распределение по порядку (FIFO, LIFO) и повысить уровень размерности до 2-х. 1-ое означает, что распределение может быть не только пропорциональным, но и по порядку, а 2-ое - это вариант реализации матричного распределения: по строкам и столбцам. Возможно вас заинтересует также необычное решение этой задачи через создание DSL на базе реализации текучего интерфейса

1 стартмани

21.03.2022    8679    7    kalyaka    11    

44
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Brook 77 30.08.22 09:18 Сейчас в теме
Студенты будут скачивать. Скоро во всех курсовых исходники этой статьи
2. user_snowbars 26 30.08.22 09:20 Сейчас в теме
(1) Ахах, мне не жалко, сами же когда-то проходили через это😁
user2028931; Brook; +2 Ответить
3. SlavaKron 30.08.22 09:44 Сейчас в теме
Можно было и не алгоритмизировать все операторы, если этот код
ИтоговоеПоле = Формат(ВычислитьВыраженияНаСервере(СписокЦифр, МассивОпераций), СтрокаФормата);
заменить на
ИтоговоеПоле = Формат(Вычислить(ИтоговоеПоле), СтрокаФормата);
7. user_snowbars 26 30.08.22 19:46 Сейчас в теме
(3) Да, действительно. Все что касается обычных операций считает нормально, но более сложные, типа факториал, степени и прочие не считает. Калькулятор заточен под более сложные операции, плюс показывает сам алгоритм. Сейчас дополню статью, спасибо за исправления)
4. KVIKS 421 30.08.22 09:45 Сейчас в теме
так можно же просто использовать функцию Вычислить(<Выражение>), по крайней мере для простых действий,
8. user_snowbars 26 30.08.22 19:49 Сейчас в теме
(4) Да, сейчас попробую насколько меняется быстродействие, если критично, то сделаем вилку. Спасибо за подсказку)
5. RustIG 1726 30.08.22 13:29 Сейчас в теме
Вполне коммерческий продукт в составе какой-либо специализированной конфигурации или механизма. Уж точно не для начинающих.
9. user_snowbars 26 30.08.22 19:50 Сейчас в теме
6. starik-2005 3073 30.08.22 18:53 Сейчас в теме
На джавоскрипте занимает сильно меньше слов. По крайней мере у меня )))
10. Vlan 36 21.10.22 12:46 Сейчас в теме
А жуткие грамматические ошибки специально внесли в статью? Хороший материал, но неграмотность режет глаз.
11. user_snowbars 26 31.10.22 02:11 Сейчас в теме
(10) Где конкретно ошибки, возможно, просто упустил. Поправите?
12. Vlan 36 31.10.22 07:11 Сейчас в теме
(11) Я не претендую на должность корректора. Мое субъективное мнение, что предложения должны заканчиваться точками. Есть много вопросов к расстановкам запятых, но я не стану лезть так глубоко.
Вот то, что мне бросилось в глаза:

В моем решение сделал всего две команды
"ЭлиментыУаправления" (а чеп и нет?)
(ПО ХОРОШЕМУ ПРОСТО УБРАТЬ ЛИШНИЙ ЗНАК, НО ДОЛЬШЕ)
Ну и соот доп функции из команды операции
//СОЗДАЕМ ДВА ДОПОЛНИТЕЛЬНЫХ СПИСКА, ОДИН БУДЕТ ХРАНИТ ЦИФРЫ ДЛЯ СЛОЖЕНИЯ, ВТОРОЙ ОПЕРАЦИИ
//ЕСЛИ ОПЕРАЦИЙ БОЛЬШЕ НЕТ И ЭТО БЫЛА ПОСЛЕДНЯЯ ПОЧИТАЕМ ЗНАЧЕНИЕ
13. user_snowbars 26 31.10.22 21:42 Сейчас в теме
(12) Поправил статью, спасибо за критику. Писал на коленке, пока никто другой не добавил эту статью)))
14. osa1C 25.08.23 07:16 Сейчас в теме
(13) и зря добавил статью, код не работает от слова совсем. Попробуй для начала пример: 0.1+0.2, ты просто не наберешь второе число, потому что точка у тебя может быть только одна.
Ну и классический пример 2+2*2 у тебя странным образом равно 10, даже не 8, что тоже не правильно, а 10, как так?
15. user_snowbars 26 25.08.23 10:02 Сейчас в теме
(14) Сам в шоке, когда увидел 10... Как будет посвободнее с временем, поправлю
Оставьте свое сообщение