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

31.10.22

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

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

Скачать исходный код

Наименование Файл Версия Размер
Обычный калькулятор на 1С (практика для новичков):
.epf 10,09Kb
3
.epf 1.0 10,09Kb 3 Скачать

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

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

&НаКлиенте
Процедура Операция(Команда)
	
	//ПОЛУЧАЕМ ИМЯ СОБЫТИЯ (ИМЯ КОМАНДЫ)
    Событие = ЭтаФорма.ТекущийЭлемент;
	
	Если Событие.Имя = "Стереть" Тогда
		
		//КОМАНДА "СТЕРЕТЬ" УБИРАЕТ ПОСЛЕДНИЙ СИМВОЛ СПРАВА (БЕРЕМ ВСЕ СИМВОЛЫ - 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    1887    stopa85    12    

34

Алгоритм симплекс-метода для решения задачи раскроя

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

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

19.10.2023    4690    user1959478    50    

34

Регулярные выражения на 1С

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

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

1 стартмани

09.06.2023    7692    4    SpaceOfMyHead    17    

56

Мини-обзор разных решений задач

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

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

03.04.2023    3118    RustIG    6    

25

Модель распределения суммы по базе

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

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

1 стартмани

21.03.2022    7955    7    kalyaka    11    

44

Изменения формата файлов конфигурации (CF) в 8.3.16

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

Дополнение по формату файлов конфигурации (*.cf) в версии 8.3.16.

16.12.2021    4568    fishca    13    

37

Интересная задача на Yandex cup 2021

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

Мое решение задачи на Yandex cup 2021 (frontend). Лабиринт. JavaScript.

12.10.2021    8957    John_d    73    

46
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 399 30.08.22 09:45 Сейчас в теме
так можно же просто использовать функцию Вычислить(<Выражение>), по крайней мере для простых действий,
+
8. user_snowbars 26 30.08.22 19:49 Сейчас в теме
(4) Да, сейчас попробую насколько меняется быстродействие, если критично, то сделаем вилку. Спасибо за подсказку)
+
5. RustIG 1595 30.08.22 13:29 Сейчас в теме
Вполне коммерческий продукт в составе какой-либо специализированной конфигурации или механизма. Уж точно не для начинающих.
+
9. user_snowbars 26 30.08.22 19:50 Сейчас в теме
(5) Все может быть)))
+
6. starik-2005 3036 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... Как будет посвободнее с временем, поправлю
+
Оставьте свое сообщение