Имя: Пароль:
1C
 
Получить транспонированную матрицу
0 YamEgor
 
16.11.20
10:00
добрый день! подскажите как получить транспонированную Матрицу: Сделать матрицу случайных чисел 5 x 5. Вывести пользователю. Получить по исходной матрице транспонированную матрицу. Вывести пользователю.

    Генератор = Новый ГенераторСлучайныхЧисел();
    Матрица = Новый Массив(5,5);
    Для Инд = 0 по Матрица.ВГраница() Цикл
        Для ИндКол = 0 По Матрица[Инд].ВГраница() Цикл
            Матрица[Инд][ИндКол] = Генератор.СлучайноеЧисло(1,100);
        КонецЦикла;
    КонецЦикла;
    
    Для каждого СтрМасс Из Матрица Цикл
        Сообщить("Матрица "+СтрМасс[0]+" "+СтрМасс[1]+" "+СтрМасс[2]+" "+СтрМасс[3]+" "+СтрМасс[4]);
    КонецЦикла;
    
    НовМатрица = Новый Массив;
    Для Стр = 0 По Матрица.Количество() - 1 Цикл
        Для Значение = 0 По Матрица[Стр].Количество() - 1 Цикл
            Для Сч = 1 По Значение Цикл
                НовСтр = Сред(Стр,Сч,1) + НовСтр;
            КонецЦикла;                                                    
        НовМатрица.Добавить(НовСтр);
        НовСтр = "";
        КонецЦикла;
    КонецЦикла;
    
не пойму почему не получается?
1 YamEgor
 
16.11.20
10:46
транспонированная матрица - это когда строки матрицы становятся столбцами
2 YamEgor
 
16.11.20
11:08
каждая строка у матрицы это массив из 5 элемнтов, и теперь каждый элемент в строке нужно поместить в новый массив и это сделать с каждой строкой, и потом 5 новых массивов добавить как строки новой транспонированной матрицы. Кто то может помочь это сделать?
3 Mikeware
 
16.11.20
11:24
(2) а зачем _нам_ это?
4 D_E_S_131
 
16.11.20
11:28
НовМатрица = Новый Массив ?? (5,5);// так же наверное должно быть?

НовМатрица.Добавить(НовСтр);// а раньше было "Матрица[Инд][ИндКол] = Генератор.СлучайноеЧисло(1,100);" - почему так же не использовать?
5 D_E_S_131
 
16.11.20
11:29
И еще, может не правильно понял написанный текст, но ИМХО (1) не сходится с (2).
6 YamEgor
 
16.11.20
11:39
(5) немного запарился я уже, плохо голова соображает..
7 YamEgor
 
16.11.20
11:40
(3) это на собеседовании задали решить.
8 fisher
 
16.11.20
11:45
(6) Отладчик? Бумажка с ручкой?
9 YamEgor
 
16.11.20
11:49
(5) Транспонирование матрицы - это операция над матрицей, когда ее строки становятся столбцами с теми же номерами. пояснения с сайта Webmath.ru
10 HawkEye
 
16.11.20
11:53
(7) зарплатой тоже будешь делиться? )))
11 Креатив
 
16.11.20
11:55
(0)В олдскульных языках программирования это делалось при помощи двух вложенных циклов.
для i = 1 по n цикл
   для j = 1 по n цикл
      н[i, j] = c[j, i]
   конеццикла
конеццикла
12 fisher
 
16.11.20
11:56
Это элементарная ТРЕНИРОВОЧНАЯ задачка. Можно попросить кого-то сделать вместо тебя утреннюю зарядку, но польза от этого будет весьма сомнительная для тебя.
13 Василий Алибабаевич
 
16.11.20
11:56
(11) Для этого теорию алгоритмов учить нужно было. А не так как сейчас - гугление наше фсьо.
14 ДенисЧ
 
16.11.20
11:57
(13) ТКВ
15 Irbis
 
16.11.20
11:58
(11) А без второй матрицы? Нам за такое конечности могли клавиатурой поотбивать.
16 Василий Алибабаевич
 
16.11.20
12:00
(14) ТК ответ: Совсем недавно студенту 4-го курса писал алгоритмы поиска в массивах МИН, МАКС, частичной суммы. Буквально на прошлой неделе. Теория алгоритмов у них была во втором семестре 1-го курса. Сессию сдали и пипетц. Забыли все.
17 Ботаник Гарден Меран
 
16.11.20
12:01
Таблицу в источник данных в СКД.
В настройках структуры таблицу, в которой строки - колонки, а колонки - строки.
На выходе - транспонированная таблица.
18 YamEgor
 
16.11.20
12:05
(12) так я же и стараюсь разобраться..
19 Василий Алибабаевич
 
16.11.20
12:07
(17) Можно еще выгрузить в SQL оттуда экспортировать в XML, а потом уже его и разбирать.
20 Mikeware
 
16.11.20
12:10
(16) "теорию алгоритмов проходили на втором семестре и мимо"
21 Mikeware
 
16.11.20
12:11
(19) можно нанять индуса, отправлять ему электронкой и получать обратно уже транспонированную
22 acht
 
16.11.20
12:15
(18) [Голосом Дроздова]
- А мы с вами пока проследим за рождением нового Ливингстара. Вот он выбрался из обломков своей скорлупы и сушит на солнце свой пушок...
23 fisher
 
16.11.20
12:15
(18) Нет. Ты пришел за решением. От готового решения такой простой задачи со стороны тебе будет больше вреда чем пользы. Родив его сам - ты запомнишь навсегда.
24 Mikeware
 
16.11.20
12:20
(22) :-)))
Дроздов не говорит, где у них гнездо?
25 YamEgor
 
16.11.20
12:24
(23)     

ну тогда вот это наверно подойдет?


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

    
    НовМатрица =Новый Массив(нн, мм);//(4,5);
    Для поз1 = 0 по нн - 1 Цикл
        Для поз2 = 0 По мм - 1 Цикл
            НовМатрица[поз2][поз1] = Матрица[поз1][поз2];
        КонецЦикла;
    КонецЦикла;
    
    //вывод матрицы 2
    Сообщить("транспонированный массив:");
    Для поз1 = 0 по нн - 1 Цикл
        Значения = "";
        Для поз2 = 0 По мм - 1 Цикл
            Значения = Значения + НовМатрица[поз1][поз2] + ", ";
        КонецЦикла;
        Сообщить(Значения);
    КонецЦикла;

(11) большое спасибо за помощь


да мне уже 60 лет вот изучаю 1С ...Сори
26 Irbis
 
16.11.20
12:29
(24) Хочешь добавить ещё один в Чёрную книгу?
27 Irbis
 
16.11.20
12:32
(25) Для квадратной матрицы, хоть и не оптимально (главная диагональ переставляется, чего можно не делать), прокатит а для произвольной >>НовМатрица =Новый Массив(нн, мм)//(4,5); индексы местами не поменял.
28 YamEgor
 
16.11.20
12:43
(27) да я уже потом увидел спасибо
29 Креатив
 
16.11.20
13:59
(15)Очень часто исходная матрица тоже нужна. А транспонирование внутри матрицы - задача ненамного сложней.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.