Массивы.Что это такое, как их использовать

1. jan-pechka 408 26.11.17 12:18 Сейчас в теме
Недавно у меня получилось создать свою первую обработку - Калькулятор. В этой обработке мы самым примитивным способом ищем в веденном поле нужную нам операцию, далее просто вычисляем выражение с этой Одной операцией.

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

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

Сколько не читала справку - не пойму как правильно создать Массив с ДВУМЯ полями, это уже будет многомерный массив, но как правильно его для начала создать.

Потом, как правильно в него записать в каждое поле наши данные? Метод установить вообще почему-то не работает, а методы Вставить и добавить - вроде бы работают, но нужный порядок ввода моих данных у меня не получается...

Прошу помощи знающих....
Прикрепленные файлы:
МойКалькуляторСМассивом1.epf
Найденные решения
10. herfis 499 26.11.17 13:43 Сейчас в теме
Хитрость в том, что в 1С нет многомерных массивов. Но элементом массива также может выступать массив, что автоматически позволяет строить многомерные конструкции.
Другими словами, в 1С только одна разновидность массива и пофиг, как именно его создавать, т.к. массивы в 1С динамические. Многомерные варианты конструктора массива - это просто стартовая "набивка".
Двумерный массив, например, можно вручную создать так:
ДвумерныйМассив = Новый Массив; // еще не двумерный, но скоро будет :)
ДвумерныйМассив.Добавить(Новый Массив); // первое измерение
ДвумерныйМассив.Добавить(Новый Массив); // второе измерение
ДвумерныйМассив[0].Добавить("ЭлементПервогоИзмерения");
ДвумерныйМассив[1].Добавить("ЭлементВторогоИзмерения");
Сообщить(ДвумерныйМассив[1][0]);

Когда дойдешь до третьего шага апгрейда калькулятора, вбивай в поиск магическую фразу "стек алгоритм дейкстры". Заодно и второй шаг перепишешь :)
Стека в 1С нет, но динамический массив позволяет его легко эмулировать.
jan-pechka; +1 Ответить
20. spacecraft 26.11.17 15:31 Сейчас в теме
(19) я уже отвечал на этот вопрос.
Вот наглядно.
Прикрепленные файлы:
jan-pechka; +1 Ответить
27. protexprotex 115 26.11.17 15:40 Сейчас в теме
(5) Ну, а если Вам нужно неограниченный массив (массив с изменяемым (динамическим) количеством строк), то реализуется список (в с++ это TList), а в 1С используйте ТаблицуЗначений с двумя колонками:
Тбл = Новый ТаблицаЗначений;
Тбл.Колонки.Добавить ("Значение")
Тбл.Колонки.Добавить ("Оператор")
и работайте с ней как с двумерным массивом - и кол-во строк будет у Вас ограничено только возможностью Вашей ОЗУ.
jan-pechka; +1 Ответить
31. spacecraft 26.11.17 15:57 Сейчас в теме
(25) списки в УФ это динамические списки, которые содержат только то, что выбрано в них.
На стороне клиента нет доступа к объектам, как на ОФ. Т.е. если в динамическом списке есть только ссылка на объект, то получить реквизиты объекта на клиенте невозможно.
А Критерии отбора работают, если есть доступ к этим самым реквизитам.
jan-pechka; +1 Ответить
38. spacecraft 26.11.17 20:42 Сейчас в теме
(37)
Вот и Массив мой рождающийся в обработке и скрин, помогите!!! Ну как я дальше буду перебирать и расскладывать Массив на данные, если в него влазиит пустая строка и никак оттуда не вылазиит!!!!!

Это самая распространенная ошибка начинающих.
порядок=0;
Для Каждого СтрокаМассива Из Массив Цикл
   Массив.Удалить(порядок);
   порядок=порядок+1;
КонецЦикла;

Когда происходит Массив.Удалить(порядок), индексация массива не остается прежней. Все индексы последующих элементов массива смещаются на единицу.
Смысл такой: Номера индексов всегда непрерывная нумерация.
На примере. При проверке должны удалиться элементы массива 3,4,5.
Удаляем 3. Индексация перестроилась. Теперь бывший 4 стал 3, а 5 стал 4.
Следовательно при последующем порядок=порядок+1; будет проверяться элемент на данный момент под номером 4. А это бывший 5.
Таким образом элемент, который вначале был 4, просто пропускается из проверки и обработки.

Обычно выбирают или прохождение проверки/удаления элементов массива в обратном порядке.
Или копирование нужных элементов новый массив.
jan-pechka; +1 Ответить
11. jan-pechka 408 26.11.17 13:58 Сейчас в теме
(9)Как вычислить индекс двумерного массива с пустой стокой вроде бы нашла:

а="+*/-";
КвоСимволов=СтрДлина(а);
Массив=Новый Массив(КвоСимволов,2);
Массив[0][0]="Вася";
Массив[0][1]="Пупкин";
Массив[1][0]="Степа";
Массив[1][1]="Степкин";
Массив[2][0]="Петя";
Массив[2][1]="Петичкин";
порядок=0;
Сообщить(Массив.Количество());
Для каждого Номер Из Массив Цикл
	Если ПустаяСтрока(Номер[0]) Тогда
	     Сообщить("Пустая строка под индексом="+порядок);
	КонецЕсли;
	Сообщить(""+Номер[0]+Номер[1]);
	порядок=порядок+1;
КонецЦикла;
Показать


В результате цикл нам покажет:
1.Вася Пупкин
2.Степа Степкин
3.Петя Петичкин
4.Пустая строка под индексом = 3
============================================================­==
Теперь в цикл после определения пустой строки - сразу же ее удаляем:

а="+*/-";
КвоСимволов=СтрДлина(а);
Массив=Новый Массив(КвоСимволов,2);
Массив[0][0]="Вася";
Массив[0][1]="Пупкин";
Массив[1][0]="Степа";
Массив[1][1]="Степкин";
Массив[2][0]="Петя";
Массив[2][1]="Петичкин";
порядок=0;
Сообщить(Массив.Количество());
Для каждого Номер Из Массив Цикл
Если ПустаяСтрока(Номер[0]) Тогда
Сообщить("Пустая строка под индексом="+порядок);
Массив.Удалить(порядок);
КонецЕсли;
Сообщить(""+Номер[0]+Номер[1]);
порядок=порядок+1;
КонецЦикла;
Сообщить("После очистки пустых строк массива="+Массив.Количество());

В результате получим следующие данные в двумерном массиве:

1.Вася Пупкин
2.Степа Степкин
3.Петя Петичкин
После очистки пустых строк массива кол-во строк в массиве=3
42. jan-pechka 408 26.11.17 22:58 Сейчас в теме
(38)Да Вы Маг и Волшебник!!! ньдя...конечно,это слом мозга,но работает же!!!

Но в данной ситуации - конечно Ваша правда- все нулевые значения остаются ниже данных...а вот если бы они были в перемешку?...Тогда бы тоже проще можно было бы придумать - в новый (двумерный-о,ужас))) Массив записать все значения, которые не пустые...

п.с.ужас какой-то - даже удалить просто-то ничего нельзя...см.скрин

п.с.2...соединять с расчетом буду завтра, на сегодня - это уже перебор)))

Спасибо огромное,никогда бы не догадалась за обратный цикл в удалении пустых элементов из массива!!!
Прикрепленные файлы:
МойКалькуляторСМассивом3.epf
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. protexprotex 115 26.11.17 12:46 Сейчас в теме
(1) Сделайте проще - массив может быть одномерный, то обращение к элементу массива - тут как хотиие - хоть 10-ти мерный.
Допустим, у Вас массив двумерный - 10x10
Считает индексацию относительно 0
Например, так:
Массив = Новый Массив (100);
ЭлементИзВторойСтрокиИТретьейКолонки = Массив[1*10 + 2];
ЭлементИзПятойСтрокиИШестойКолонки = Массив[4*10 + 5];
ну и т.д.
jan-pechka; +1 Ответить
5. jan-pechka 408 26.11.17 12:48 Сейчас в теме
(3)пока не понятно....

вот на скрине приблительно то,что я хочу видеть в своем двухмерном массиве.
Как мне его создать и наполнить значениями?
Прикрепленные файлы:
21. protexprotex 115 26.11.17 15:31 Сейчас в теме
(5) А что тут не понятно?
Создаете массив - если Вам нужно 1000 строк, и две колонки, то:
Массив = Новый Массив(2*1000)
И заполняйте его:
Массив[0*2 + 0] = "1"
Массив[0*2 + 1] = "+"
Массив[1*2 + 0] = "6"
Массив[1*2 + 1] = "+"
Массив[2*2 + 0] = "8"
Массив[2*2 + 1] = "-"
Массив[3*2 + 0] = "10"
Массив[3*2 + 1] = "*"
Массив[4*2 + 0] = "13"
Массив[4*2 + 1] = "/"
Массив[5*2 + 0] = "18"
Массив[5*2 + 1] = "+"

ну и т.д.

Это понятно?
28. jan-pechka 408 26.11.17 15:49 Сейчас в теме
(21)Нет, не понятно.

Вот, пойдем по пути обучения как нас Радченко учит - нарисуем одномерный массив см.скрин №1, и нарисуем двумерный массив см.скрин №2

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

Представление двумерного массива - даже визуально приятны: вот полочка (строка с индексом 0) №0, в ней лежат ,н-р,"майки"(адрес Майки=полка№0, отделение=0 "Иванова" (адрес Кого=полка№0,отделение=1),
Дальше у нас полка, отданная Петрову - и все по той же логике...

Двумерный массив - я проще себе представляю в виде таблицы - с каким-то количеством строк, но колонок в этой таблице мне нужно только две. Вот,тогда четко представляя себе в уме такую табличку -ее проще и забить и считать...
Прикрепленные файлы:
33. protexprotex 115 26.11.17 16:11 Сейчас в теме
(28) "Вот,тогда четко представляя себе в уме такую табличку -ее проще и забить и считать... " - а в чем проблема работать так же с одномерным массивом? - в любом случае, и в памяти компа двумерный массив - это тоже, по сути, одномерный массив. И даже адресация типа Массив[2][3] - комп переводит его как 2*КоличествоКолонок + 3 - так что по сути, двумерный массив - это просто более удобное представление (визуальное) одномерного массива.
jan-pechka; +1 Ответить
27. protexprotex 115 26.11.17 15:40 Сейчас в теме
(5) Ну, а если Вам нужно неограниченный массив (массив с изменяемым (динамическим) количеством строк), то реализуется список (в с++ это TList), а в 1С используйте ТаблицуЗначений с двумя колонками:
Тбл = Новый ТаблицаЗначений;
Тбл.Колонки.Добавить ("Значение")
Тбл.Колонки.Добавить ("Оператор")
и работайте с ней как с двумерным массивом - и кол-во строк будет у Вас ограничено только возможностью Вашей ОЗУ.
jan-pechka; +1 Ответить
29. jan-pechka 408 26.11.17 15:53 Сейчас в теме
(27)Самая светлая мысль!!!!
...и почему она не пришла мне сразу в голову???

Вот домучаю свой калькулятор сначала на двумерном массиве, потом добавлю кодинг именно с таблицей значения!

Спасибо, хорошая идея, я уже,наверное, заучилась, чтобы так быстро до нее дойти))
34. protexprotex 115 26.11.17 16:13 Сейчас в теме
(29) Пожалуйста. Если что обращайтесь. :-)
jan-pechka; +1 Ответить
22. protexprotex 115 26.11.17 15:33 Сейчас в теме
(1) А вообще, по Вашей тематике - это обычная стековая виртуальная машина - ищите в интернете "Обратная польская запись" - там почитаете как все это реализовывать.
Вот ссылка, например:
https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%B0%D1%8F_%D­0%BF%D0%BE%D0%BB%D1%8C%D1%81%D0%BA%D0%B0%D1%8F_%D0%B7%D0%B0%­D0%BF%D0%B8%D1%81%D1%8C
23. protexprotex 115 26.11.17 15:34 Сейчас в теме
(1) В этой нотации (обратная польская запись) и пишут всякие программируемые калькуляторы и пр.
jan-pechka; +1 Ответить
24. protexprotex 115 26.11.17 15:35 Сейчас в теме
(1) Пишется все просто и элегантно. Я для своих программ с интерпретируемым языком писал как раз - все выходит очень красиво и просто.
jan-pechka; +1 Ответить
2. jan-pechka 408 26.11.17 12:37 Сейчас в теме
Вот здесь

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

Массив = Новый Массив(,2);

это правильно будет??? т.к. в моем Массиве строк должно быть неограниченное число, а колонок только две.
4. protexprotex 115 26.11.17 12:47 Сейчас в теме
(кстати, такая индексация работает намного быстрее, чем через[y][x] - т.к. в цикле можно не умножать на 10, а просто прибавлять 10 после обхода всех колонок массива по текущий строке)
6. DenisCh 26.11.17 13:01 Сейчас в теме
Вот до чего доводит людей необучение на нормальном вузе...
Там калькулятор с скобками и формулами пишут на первом курсе...
7. jan-pechka 408 26.11.17 13:05 Сейчас в теме
(6)Но мне повезло встретить на форуме человека (Вас,конечно), который учился в правильном вузе и, естественно, сможет помочь зеленым ограм с их первым массивом....
26. protexprotex 115 26.11.17 15:37 Сейчас в теме
(6) Обратная польская запись называется.
jan-pechka; +1 Ответить
30. jan-pechka 408 26.11.17 15:54 Сейчас в теме
(26)Вы заинтриговали - никогда с подобными "задом-наоборот" вещами не сталкивалась!

Пожалуйста, приведите в примере кодинг, я попробую это осмыслить, но понимаю только по примерам...
35. protexprotex 115 26.11.17 16:19 Сейчас в теме
(30) Ну, пример я только на с++ могу привести (т.к. сейчас 80% времени пишу именно на си - от 1С устал уже - 18 лет 1С-го кодинга... Далее не буду продолжать :-) )
А так - выдержка:

как пример можно разобрать - если у Вас есть строка с формулой:

Вход: 3 + 4 * 2 / (1 - 5)^2

то последовательность решения будет такой:

(
"читаем" - это сканируем строку слево - направо до первого пробела или скобки или знака оператора */-^+ и т д.
"добавить" - это добавляете в стек (стек - для извлечения pop и добавления push значения)
"выход" - что получается в стеке
)

Если что не понятно - пишите - поясню


Читаем «3»
Добавим «3» к выходной строке
Выход: 3

Читаем «+»
Кладём «+» в стек
Выход: 3
Стек: +

Читаем «4»
Добавим «4» к выходной строке
Выход: 3 4
Стек: +

Читаем «*»
Кладём «*» в стек
Выход: 3 4
Стек: + *

Читаем «2»
Добавим «2» к выходной строке
Выход: 3 4 2
Стек: + *

Читаем «/»
Выталкиваем «*» из стека в выходную строку, кладём «/» в стек
Выход: 3 4 2 *
Стек: + /

Читаем «(»
Кладём «(» в стек
Выход: 3 4 2 *
Стек: + / (

Читаем «1»
Добавим «1» к выходной строке
Выход: 3 4 2 * 1
Стек: + / (

Читаем «-»
Кладём «-» в стек
Выход: 3 4 2 * 1
Стек: + / ( -

Читаем «5»
Добавим «5» к выходной строке
Выход: 3 4 2 * 1 5
Стек: + / ( -

Читаем «)»
Выталкиваем «-» из стека в выходную строку, выталкиваем «(»
Выход: 3 4 2 * 1 5 -
Стек: + /

Читаем «^»
Кладём «^» в стек
Выход: 3 4 2 * 1 5 -
Стек: + / ^

Читаем «2»
Добавим «2» к выходной строке
Выход: 3 4 2 * 1 5 - 2
Стек: + / ^

Конец выражения
Выталкиваем все элементы из стека в строку
Выход: 3 4 2 * 1 5 - 2 ^ / +
jan-pechka; +1 Ответить
36. jan-pechka 408 26.11.17 16:30 Сейчас в теме
(35)Перебрать строку перебрали,по дороге отделяли плевер от зерна,т.е.Операции от операндов, только здесь найденные операнды записываем в "выходную строку", а операции в "стек", потом все впихнули в одну строку...

и чего делать дальше с результатом такого перебора???
39. protexprotex 115 26.11.17 21:59 Сейчас в теме
(36)

Дальше выбираете в обратном порядке, и вычисляете -

есть строка в обратной польской записи:

3 4 2 * 1 5 - 2 ^ / +

Читаем слево - направо (пока не встретится оператор) -
3 - в стек, 4 - в стек, 2 - в стек. Стек будет содержать в себе 3 4 2
Далее идет оператор умножения - ему нужно два значения - берем из стека 2 и 4 (берем из стека - это значит выталкиваем по методу pop - т.е. первый пришел - последний ушел), умножаем 2*4 = 8 и помещаем в стек. Стек будет содержать в себе 3 8. Далее 1 - опять в стек, 5 - также. Итого стек будет 3 8 1 5. Далее минус. Берем 5 и 1. 1 - 5 = -4. Опять в стек. Будет 3 8 -4. Далее - двойка - в стек. 3 8 -4 2. Далее ^ возведение в степень. Степень у нас 2. -4*-4 = 16. Стек будет 3 8 16. Далее / - деление. 8/16 = 0.5 В стеке будет 3 0.5. Далее +. 3 + 0.5 = 3.5. Итого результат на вершине стека будет содержать в себе 0.5. Проверим - 3 + 4 * 2 / (1 - 5)^2 = 3+8/16 = 3.5. Т.е. все верно.
Также можно здесь и функции использовать.
Красиво, да?
jan-pechka; +1 Ответить
40. protexprotex 115 26.11.17 22:03 Сейчас в теме
(36) Стек можно организовать из СписокЗначений.
Список = Новый СписокЗначений
Добавлять в список -
Список.Добавить (3);
Список.Добавить (4);
Список.Добавить (2);
Операнд1 = Список.Получить (Список.Размер() - 1); // Здесь будет 2
Операнд2 = Список.Получить (Список.Размер() - 1); // Здесь будет 4
Результат = Операнд1*Операнд2
Результат = 8
Список.Добавить (Результат);
Стек будет: 3 8.
Ну и т.д. как в пред. посте. Все очень просто.
jan-pechka; +1 Ответить
43. jan-pechka 408 26.11.17 23:00 Сейчас в теме
(40)вот уже вообще интересно!
41. protexprotex 115 26.11.17 22:07 Сейчас в теме
(36) Ну и последнее значение в СписокЗначений
Значение = Список.Получить(0) - это и будет результат вычисления формулы. Если что - то не так, то значит, в формуле (первоначальной) некорректно записана формула. Типа такого: 3+4++7 - т.е. нет числа между + и +. Или скобки не соблюдены - 5+7+(9-8)*2). Здесь лишняя скобка в конце.
jan-pechka; +1 Ответить
44. jan-pechka 408 26.11.17 23:05 Сейчас в теме
(41)Все...это взрыв мозга...что там обратные циклы на удаление пустых элементов из двумерного массива, заполненного по всем выборкам введенного пользователем значения в поле ввода....Все, я в аут, переваривать...

п.с.Спасибо, сам алгоритм я поняла, придумаю как его выкрутить через язык 1с и выложу обязательно результат. Все перепроверю....
45. protexprotex 115 26.11.17 23:25 Сейчас в теме
(44) Пишите, если что. Помогу.
8. jan-pechka 408 26.11.17 13:31 Сейчас в теме
Вот что-то получилось с двумерным массивом:

Массив=Новый Массив(2,2);
Массив[0][0]="Вася";
Массив[0][1]="Пупкин";
Массив[1][0]="Степа";
Массив[1][1]="Степкин";
Сообщить(Массив.Количество());
Для каждого Номер Из Массив Цикл
//Сообщить(Номер[1]+Номер[2]);
Сообщить(Номер[0]+Номер[1]);
КонецЦикла;

Сообщает, что в двумерном массиве 2 строки и в каждой строке есть заданные значения:
в первой строке: Вася Пупкин
во второй строке Степа Степкин

Но это если мы изначально задаем в условиях Массива 2 СТРОКИ (Массив(2,2) )
А как быть,если количество строк может быть неограниченно?
Как правильно задать такой массив??? Вот таким образом=>Массив=Новый Массив(,2)-не работает...
9. jan-pechka 408 26.11.17 13:39 Сейчас в теме
А что я мучаюсь, в конце концов-то,а?))

Максимальное значение строк в Массиве - это же сумма символов, в моем примере Калькулятор, которые ввел Пользователь!!!

Значит двумерный массив можно задать вот так:

а="+*/-";
КвоСимволов=СтрДлина(а);
Массив=Новый Массив(КвоСимволов,2);
Массив[0][0]="Вася";
Массив[0][1]="Пупкин";
Массив[1][0]="Степа";
Массив[1][1]="Степкин";
Массив[2][0]="Петя";
Массив[2][1]="Петичкин";

Сообщить(Массив.Количество());
Для каждого Номер Из Массив Цикл
Сообщить(""+Номер[0]+Номер[1]);
КонецЦикла;

В результате чего мы получим ответ:

1.Вася Пупкин
2.Степа Степкин
3.Петя Петичкин
4.пустая строка

Как теперь удалить пустые строки из массива?
11. jan-pechka 408 26.11.17 13:58 Сейчас в теме
(9)Как вычислить индекс двумерного массива с пустой стокой вроде бы нашла:

а="+*/-";
КвоСимволов=СтрДлина(а);
Массив=Новый Массив(КвоСимволов,2);
Массив[0][0]="Вася";
Массив[0][1]="Пупкин";
Массив[1][0]="Степа";
Массив[1][1]="Степкин";
Массив[2][0]="Петя";
Массив[2][1]="Петичкин";
порядок=0;
Сообщить(Массив.Количество());
Для каждого Номер Из Массив Цикл
	Если ПустаяСтрока(Номер[0]) Тогда
	     Сообщить("Пустая строка под индексом="+порядок);
	КонецЕсли;
	Сообщить(""+Номер[0]+Номер[1]);
	порядок=порядок+1;
КонецЦикла;
Показать


В результате цикл нам покажет:
1.Вася Пупкин
2.Степа Степкин
3.Петя Петичкин
4.Пустая строка под индексом = 3
============================================================­==
Теперь в цикл после определения пустой строки - сразу же ее удаляем:

а="+*/-";
КвоСимволов=СтрДлина(а);
Массив=Новый Массив(КвоСимволов,2);
Массив[0][0]="Вася";
Массив[0][1]="Пупкин";
Массив[1][0]="Степа";
Массив[1][1]="Степкин";
Массив[2][0]="Петя";
Массив[2][1]="Петичкин";
порядок=0;
Сообщить(Массив.Количество());
Для каждого Номер Из Массив Цикл
Если ПустаяСтрока(Номер[0]) Тогда
Сообщить("Пустая строка под индексом="+порядок);
Массив.Удалить(порядок);
КонецЕсли;
Сообщить(""+Номер[0]+Номер[1]);
порядок=порядок+1;
КонецЦикла;
Сообщить("После очистки пустых строк массива="+Массив.Количество());

В результате получим следующие данные в двумерном массиве:

1.Вася Пупкин
2.Степа Степкин
3.Петя Петичкин
После очистки пустых строк массива кол-во строк в массиве=3
10. herfis 499 26.11.17 13:43 Сейчас в теме
Хитрость в том, что в 1С нет многомерных массивов. Но элементом массива также может выступать массив, что автоматически позволяет строить многомерные конструкции.
Другими словами, в 1С только одна разновидность массива и пофиг, как именно его создавать, т.к. массивы в 1С динамические. Многомерные варианты конструктора массива - это просто стартовая "набивка".
Двумерный массив, например, можно вручную создать так:
ДвумерныйМассив = Новый Массив; // еще не двумерный, но скоро будет :)
ДвумерныйМассив.Добавить(Новый Массив); // первое измерение
ДвумерныйМассив.Добавить(Новый Массив); // второе измерение
ДвумерныйМассив[0].Добавить("ЭлементПервогоИзмерения");
ДвумерныйМассив[1].Добавить("ЭлементВторогоИзмерения");
Сообщить(ДвумерныйМассив[1][0]);

Когда дойдешь до третьего шага апгрейда калькулятора, вбивай в поиск магическую фразу "стек алгоритм дейкстры". Заодно и второй шаг перепишешь :)
Стека в 1С нет, но динамический массив позволяет его легко эмулировать.
jan-pechka; +1 Ответить
12. jan-pechka 408 26.11.17 14:12 Сейчас в теме
(10)что такое Стек? и почему его нет в 1с?
Если 1с спросить какой код Символов у скобок,то вот что она ответит:

а=КодСимвола("(");
б=КодСимвола(")");

Сообщить(""+а+";"+б);

это=> 40;41

Отсюда, если 1с может по коду определить Символ скобок, то почему она их не должна увидеть при поиске в строке Ввода,н-р,

НашиВозможныеОперации="*/-+()"

и можем выделить и НашиВозможныеОперации Скобку и так же искать ее в Введенном пользователем поле. Здесь проблема будет ни в том, чтобы найти скобку в Введенном поле, а заморочиться найти сначала открывающую скобку, потом закрывающую скобку, записать выражение внутри этих скобок и вновь ставить на цикл, чтобы это выражение рассчитать....
46. herfis 499 27.11.17 08:32 Сейчас в теме
(12) Что такое "стек" можно прочитать на вики, ссылка на которую будет первой в поисковой выдаче по этому страшному слову :)
(26) Вот алгоритм Дейкстры как раз и применяется для элегантного преобразования обычной (инфиксной) формы записей выражений в ОПН
jan-pechka; +1 Ответить
48. protexprotex 115 27.11.17 09:37 Сейчас в теме
47. protexprotex 115 27.11.17 09:37 Сейчас в теме
(12) Ну, даже не обязательно обратной польской записью все это программировать. Я когда не знал об этом сделал так:
https://infostart.ru/public/149001/
jan-pechka; +1 Ответить
13. unichkin 1565 26.11.17 14:34 Сейчас в теме
Это все не нужно. Покури функцию ГК "Вычислить"..
p.s. если хочется поколупать мозг прокачки ради - ищи обычным поисковиком задачи на программирование, например http://pas1.ru/taskcycle.. А еще лучше - для начала прорешай Радченко https://buh.ru/books/detail.php?ID=51780, или https://buh.ru/books/detail.php?ID=42714
Прикрепленные файлы:
jan-pechka; +1 Ответить
14. jan-pechka 408 26.11.17 14:42 Сейчас в теме
(13)С помощью моей обработки Калькулятор - я учусь владеть основными функциями языка 1с8, ее операторами и вот начала осваивать универсальные коллекции...

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

Кстати, очень бы хотелось посмотреть на внутренний код функции Вычислить, ведь там они уже все продумали - и обход нечисловых выражений, и расчет выражений со скобочками - ням, вкуснятина. У Вас, случайно нету этого кода от функции Вычислить?????
15. unichkin 1565 26.11.17 14:47 Сейчас в теме
(14) Платформа закрыта от внешнего вмешательства, и именно то что там написали программисты 1С наврядли кто-то когда-то узнает... Да это и не нужно:) Учиться лучше на хороших примерах, требующих решения. Эта задача - плохое начало (мое мнение). Что делать - описал выше: пройдите пару официальных самоучителей, выхлоп будет лучше. А с этим просто трата времени.
jan-pechka; +1 Ответить
16. jan-pechka 408 26.11.17 14:52 Сейчас в теме
(15)Первая Ваша ссылка не найдена, а в третьей - ссылаетесь на Радченко, в данной его книге нет подробных (и неподробных) примеров работы с массивами...а Массивы в практической деятельности программиста 1с встречаются регулярно...
Что во второй Вашей ссылке пока не знаю, сейчас посмотрю...

Вот,посмотрела вторую ссылку - это там,где тот же Радченко учит детей программировать...на скрине видим пример одномерного массива.

А вот в этом описании - двумерный массив:"Бывают и многомерные массивы. Их вы рассматривать не будете. Но если у вас хорошее воображение и вы хотите представить себе двухмерный массив 3х2, то это стеллаж из трех полок (первое измерение), на каждой полке которого стоит еще один стеллаж из двух полок (второе измерение)."

п.с.значит, я хлеще любого ребенка чтобы такой текст освоить...Поэтому буду щупать своими руками построение многомерных массивов дальше...
Прикрепленные файлы:
17. unichkin 1565 26.11.17 15:01 Сейчас в теме
(16) первая ссылка - сотрите точку в конце, попала так. По Радченко - все там есть. Возможно называется блок не массивы а универсальные коллекции значений или еще как-то, но при подробном изучении встретитесь со всеми необходимыми объектами. Ознакомьтесь для начала в принципе с объектами конфигурации и встроенного языка, научитесь пользоваться СП - это уже хороший задел.
jan-pechka; +1 Ответить
18. jan-pechka 408 26.11.17 15:06 Сейчас в теме
(17)http://pas1.ru/taskcycle
В Вашей первой ссылке - Паскаль....Все языки программирования,конечно, похожи друг на друга,но...забить одномерный массив в 1с, мне так кажется,проще, чем это же сделать в Паскале, вот его кодинг:

program n1;
uses crt;
var aw:array[1..10] of integer;
i,w,g:integer;
begin
g:=0;
w:=10;
for i:=0+1 to w do begin
aw[i]:=random(100);
write(aw[i]:6);
end;
writeln();
write('Чот');
for i:=0+1 to w do begin
if aw[i] mod 2 = 0 then g:=g+1; end; write('Всего чотных чисел ',g);
writeln();
write('Не чот');
g:=0;
for i:=0+1 to w do begin
if aw[i] mod 2 > 0 then g:=g+1;end; write('Всего не чотных чисел ',g) ;
end.

....это не считая того, что на данный момент я ввожусь с двумерным массивом в 1с, страшно подумать как он будет выглядить в Паскале...
19. jan-pechka 408 26.11.17 15:26 Сейчас в теме
(17)Роман, можно Вам задать вопрос из экзамена на Профа?
это из моей ветки https://forum.infostart.ru/forum9/topic181504/
=========================================
Вопрос1.9:

Для включения отборов в списках(обычных форм) по содержимому табличных частей объектов и их свойств,неотображаемых в форме:

Варианты:1. ничего дополнительно настраивать не надо, все реализовано на уровне платформы,2. реализуется только запросами,3. осуществляется только с помощью дополнительной настройки форм,4. необходимо создать объект критерии отбора
========================================

Я не пойму почему гугл дает правильный ответ на этот вопрос=4.необходимо создать объект критерии отбора .....Я не знаю что такое Объект критерии выбора...Покажите его наглядно,пожалуйста.
20. spacecraft 26.11.17 15:31 Сейчас в теме
(19) я уже отвечал на этот вопрос.
Вот наглядно.
Прикрепленные файлы:
jan-pechka; +1 Ответить
25. jan-pechka 408 26.11.17 15:36 Сейчас в теме
(20)ура!!!

Теперь вновь смотрим на вопрос1.10 -

==================================================
Вопрос1.10:

Для включения отборов в списках (управляемых форм) по содержимому табличных частей объектов и их свойств, не отражаемых в форме:

Варианты ответа:1. ничего дополнительно настраивать не надо, все реализовано на уровне платформы,2. реализуется произвольным запросом динамического списка.,3. осуществляется только с помощью дополнительной настройки форм,4. необходимо создать объект критерии отбора
===================================================

Почему тогда здесь правильно будет только ответ"2", а не 2 и 4????
Потому что выходит, что в 1с8 можно и динамическим вопросом задать критерии отбора, но получается их же можно задать и этим Объектом, он же есть в ветке конфигуратора 1с8.3?????
31. spacecraft 26.11.17 15:57 Сейчас в теме
(25) списки в УФ это динамические списки, которые содержат только то, что выбрано в них.
На стороне клиента нет доступа к объектам, как на ОФ. Т.е. если в динамическом списке есть только ссылка на объект, то получить реквизиты объекта на клиенте невозможно.
А Критерии отбора работают, если есть доступ к этим самым реквизитам.
jan-pechka; +1 Ответить
32. jan-pechka 408 26.11.17 15:58 Сейчас в теме
(31)доходчиво,спасибо!

Не хочу Вас бесить, но почему в обычных формах можно делать отбор в списках только через специальный Объект отборов???

Разве в обычных формах так же нельзя прибегнуть еще и к динамическому запросу????
Как мне правильно проверить в конфе, что это не работает?
37. jan-pechka 408 26.11.17 18:54 Сейчас в теме
Продолжаю в свою обработку внедрять Массив...

Вопрос просто дикого тупизма: почему, если всего операций ДВЕ штуки, и массив их ловит как две, мы на выходе берем метод Количество и видим, что он записал ТРИ строки, причем третья пустая (на скрине видно)

Вот и Массив мой рождающийся в обработке и скрин, помогите!!! Ну как я дальше буду перебирать и расскладывать Массив на данные, если в него влазиит пустая строка и никак оттуда не вылазиит!!!!!
Прикрепленные файлы:
МойКалькуляторСМассивом2.epf
38. spacecraft 26.11.17 20:42 Сейчас в теме
(37)
Вот и Массив мой рождающийся в обработке и скрин, помогите!!! Ну как я дальше буду перебирать и расскладывать Массив на данные, если в него влазиит пустая строка и никак оттуда не вылазиит!!!!!

Это самая распространенная ошибка начинающих.
порядок=0;
Для Каждого СтрокаМассива Из Массив Цикл
   Массив.Удалить(порядок);
   порядок=порядок+1;
КонецЦикла;

Когда происходит Массив.Удалить(порядок), индексация массива не остается прежней. Все индексы последующих элементов массива смещаются на единицу.
Смысл такой: Номера индексов всегда непрерывная нумерация.
На примере. При проверке должны удалиться элементы массива 3,4,5.
Удаляем 3. Индексация перестроилась. Теперь бывший 4 стал 3, а 5 стал 4.
Следовательно при последующем порядок=порядок+1; будет проверяться элемент на данный момент под номером 4. А это бывший 5.
Таким образом элемент, который вначале был 4, просто пропускается из проверки и обработки.

Обычно выбирают или прохождение проверки/удаления элементов массива в обратном порядке.
Или копирование нужных элементов новый массив.
jan-pechka; +1 Ответить
42. jan-pechka 408 26.11.17 22:58 Сейчас в теме
(38)Да Вы Маг и Волшебник!!! ньдя...конечно,это слом мозга,но работает же!!!

Но в данной ситуации - конечно Ваша правда- все нулевые значения остаются ниже данных...а вот если бы они были в перемешку?...Тогда бы тоже проще можно было бы придумать - в новый (двумерный-о,ужас))) Массив записать все значения, которые не пустые...

п.с.ужас какой-то - даже удалить просто-то ничего нельзя...см.скрин

п.с.2...соединять с расчетом буду завтра, на сегодня - это уже перебор)))

Спасибо огромное,никогда бы не догадалась за обратный цикл в удалении пустых элементов из массива!!!
Прикрепленные файлы:
МойКалькуляторСМассивом3.epf
49. jan-pechka 408 27.11.17 23:28 Сейчас в теме
Наворотила что-то ужасное....Мысль,конечно,заложена, но пока не работает механизм с многочисленными операциями. Что получилось - выкладываю здесь, может кто-то ради тренировки работы с массивами и таблицами значений приведет этот механизм в норм...может я когда-нибудь попозже все-таки смогу ее замучить...на пока хватит))
Прикрепленные файлы:
МойКалькуляторСМассивом4_покаНЕработаетКакНадо.epf
50. jan-pechka 408 28.11.17 15:36 Сейчас в теме
Ура, домучила все-таки свою обработку Калькулятора с использованием Массивов и ТаблицыЗначений. Получилось очень интересно, но этот калькулятор у меня считает только Целые одноразрядные числа....Зато несколько операций сразу, выбирать нужно из четырех операций:+/*-

Да, еще с самой строкой Ввода какая-то непонятка...С самого начала она у меня в значении Реквизита1 была задана как ограниченная строка (10символов кажется), когда мне захотелось сделать ее безразмерной, то просто сам Реквизит1 - обозначила как безразмерная строка, но при рассчетах - система почему-то видит все равно не более 11 символов....Пришлось вновь ограничитель поставить в 11 Символов, с чем это связано - не знаю, если есть у кого-нибудь идея, то поделитесь мыслью.
Прикрепленные файлы:
МойКалькуляторСМассивом_8_Супер!!!.epf
Оставьте свое сообщение

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