Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Заполнить двухмерный массив

Заполнить двухмерный массив
Я
   serg999
 
11.06.21 - 10:22
Добрый день .

Уже мозг сломал .. надо заполнить массив, есть кол.столбцов = Х и кол.строк = Y
Пример для  Х = 3, Y = 4

0 0 0
0 0 1
0 0 2
0 0 3
0 0 4
0 1 0
0 1 1
0 1 2
0 1 3
0 1 4
0 2 0
.
.
4 4 4
   Beduin
 
1 - 11.06.21 - 10:23
Цикл по Х
Цикл по У
ту-ту-ту
   mikecool
 
2 - 11.06.21 - 10:24
Новый масиив[Х][Y]
   Vadim_37
 
3 - 11.06.21 - 10:27
Слова = Новый Массив(3, 2);
 
    Слова[0][0] = "Юрий";
    Слова[0][1] = "Гагарин";
 
    Слова[1][0] = "Герман";
    Слова[1][1] = "Титов";
 
    Слова[2][0] = "Валентина";
    Слова[2][1] = "Терешкова";
   serg999
 
4 - 11.06.21 - 10:28
Ну это понятно .. а дальше
   serg999
 
5 - 11.06.21 - 10:29
Создать я его создал, а вот заполнить ...
   Beduin
 
6 - 11.06.21 - 10:30
(4)(5) Ты нас троллишь или реально пишешь?
   serg999
 
7 - 11.06.21 - 10:31
Да блин реально не получается ...
   Малыш Джон
 
8 - 11.06.21 - 10:32
(7) Для А = 0 По 624 Цикл
    Массив[А][0] = А%5;
    А = Цел(А/5);
    Массив[А][1] = А%5;
    А = Цел(А/5);
    Массив[А][2] = А%5;
    А = Цел(А/5);
   КонецЦикла;
   Малыш Джон
 
9 - 11.06.21 - 10:33
+(8) Ну только не А в цикле делить конечно, а в какую нибудь временную копировать
   ДенисЧ
 
10 - 11.06.21 - 10:35
Для сч1 = 1 по Х Цикл
   Для сч2 = 1 по У Цикл
     Й = сч1 + сч2;
     масс[Х][У] = Й;
   КонецЦикла;
КонецЦИкла
   Малыш Джон
 
11 - 11.06.21 - 10:36
(10) Y - не количество строк массива
   Малыш Джон
 
12 - 11.06.21 - 10:37
+(11) а , пардон, в описании именно так и написано, хотя в приведенном примере логика другая
   SeriyP
 
13 - 11.06.21 - 10:46
(0) пример не соответствует описанию по количеству строк
   SeriyP
 
14 - 11.06.21 - 10:48
У - это количество строк в "блоке"
   SeriyP
 
15 - 11.06.21 - 10:48
1
   serg999
 
16 - 11.06.21 - 10:58
Как правильно объяснить .. надо заполнить массив по всем возможным вариантам ..
Стобцов -3; Строк -4;

0 0 0 
0 0 1
0 0 2
0 0 3
0 0 4 <- Тут переход на другой столбец, так как строк 4 
0 1 0 
0 1 1 
0 1 2
0 1 3
0 1 4 <- Тут переход на другой столбец 
0 2 0 
0 2 1 ... ну и т.д.
.
.
4 4 4 - тут завершение ..
   serg999
 
17 - 11.06.21 - 11:00
(8) сейчас пробую
   acht
 
18 - 11.06.21 - 11:03
(16) Представь себе хорошо изученную последователность чисел:
000
001
002
003
004
005
006
007
008
009
010
011
012
...
098
099
100
101
102
...


Понятно, как она формируется по разрядам? =)
   SeriyP
 
19 - 11.06.21 - 11:48
тут еще условие должно быть что У <= 9
   polosov
 
20 - 11.06.21 - 12:21
У вас массив из какого языка программирования?
Вроде 3 на 4 = 12 элементов, а у вас тут чисел что-то у всех многовато.
   serg999
 
21 - 11.06.21 - 12:23
(20) 1C ..

Мне надо перебрать все возможные варианты ..
   acht
 
22 - 11.06.21 - 12:42
(20) У него "кол.строк" имеет особый смысл - это он так "основание системы счисления" называет.
   serg999
 
23 - 11.06.21 - 13:24
Вот такой "крокодил" получился ..

Процедура Команда1 (Команда)
    ВсегоСтолбцов = Столбцов;
    ВсегоСтрок = Pow (Строк+1, Столбцов);
    
    знч = 0;
    м = Новый массив (ВсегоСтолбцов+1, ВсегоСтрок+1);
    
    стл = ВсегоСтолбцов;
    
    Пока стл >= 1 Цикл
        Для стр = 0 По ВсегоСтрок Цикл
            Если стл = ВсегоСтолбцов Тогда 
                //Первый столбец с края

                Если знч >= Строк ИЛИ стр = 0 Тогда
                    знч = 0;
                Иначе 
                    знч = знч + 1;
                КонецЕсли;
            Иначе
                сумм = 0;
                Для яч = стл+1 По ВсегоСтолбцов Цикл
                    сумм = сумм + м[яч][стр];
                КонецЦикла;
                Если стр = 0 Тогда
                    знч = 0;
                ИначеЕсли сумм = 0 Тогда            
                    знч = знч + 1;
                    Если знч > Строк Тогда
                        знч = 0;
                    КонецЕсли;
                КонецЕсли;
                
            КонецЕсли;
            
            м[стл][стр] = знч;            
            
        КонецЦикла;
        знч = 0;
        стл = стл - 1;
    КонецЦикла;
КонецПроцедуры
   Малыш Джон
 
24 - 11.06.21 - 13:40
(23)  то есть вот так тебя не устроило:
Х = 3; У = 4;
МаксА = Pow(У+1,Х)-1;
Массив = Новый Массив(МаксА+1,Х);
Для А = 0 По МаксА Цикл
    temp = А;
    Массив[А][0] = temp%5;
    temp = Цел(temp/5);
    Массив[А][1] = temp%5;
    temp = Цел(temp/5);
    Массив[А][2] = temp%5;
    temp = Цел(temp/5);
КонецЦикла;
   Малыш Джон
 
25 - 11.06.21 - 13:42
+(24) ну с учетом переменного Х:

МаксА = Pow(У+1,Х)-1;
Массив = Новый Массив(МаксА+1,Х);
Для А = 0 По МаксА Цикл
    temp = А;         
    Для В = 0 По Х-1 Цикл
        Массив[А][В] = temp%5;
        temp = Цел(temp/5);
    КонецЦикла;
КонецЦикла;
   Вафель
 
26 - 11.06.21 - 14:00
Тут же просто 3 цикла нужно
   serg999
 
27 - 11.06.21 - 14:08
(24) Ну, недопер .. (25) Малыш Джон, красиво!
   Cthulhu
 
28 - 11.06.21 - 15:08
только не 5 а (Y+1) наверное...
а вообще если глянуть внмательнее - в (0) каждая строка - это +1 от предыдущей строки в (Y+1)-ричной системе счисления. от 1 до (Y+1)^X-1
   Cthulhu
 
29 - 11.06.21 - 15:12
ЗЫ: 444 это 5^3-1 = 124 в 5-ричной системе счисления (4*5^2 + 4*5^1 + 4*5^0)
   Кулибин
 
30 - 11.06.21 - 16:44
Думаю, что этого будет достаточно:

//Если шаблон "01", то перевод будет осуществлен в двоичную систему счисления, если "01234567", то в восьмиричную, если "0123456789ABCDEF", то в шестнадцатиричную


Функция Из_Число_В_XСчисл(Знач Значение, Шаблон)
    Результат="";
    Основание = СтрДлина(Шаблон);
    Пока Значение>0 цикл
        Остат = Значение%Основание;
        Результат1=Сред(Шаблон,Остат+1,1);
        Значение = (Значение-Остат)/Основание;
        Результат = Результат1 + Результат;
    КонецЦикла;
    Возврат Результат;
КонецФункции
 
 
   DES
 
31 - 11.06.21 - 19:18
Это пятиричная система счистления.
Есть стандартная функция перевода  десятичной системы в любую по заданому основанию
потом просто заносишь разряды  в колонки до заполнения


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.