Вход | Регистрация
 

Получить транспонированную матрицу

Получить транспонированную матрицу
Я
   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) + НовСтр;
            КонецЦикла;                                                    
        НовМатрица.Добавить(НовСтр);
        НовСтр = "";
        КонецЦикла;
    КонецЦикла;
    
не пойму почему не получается?
   YamEgor
 
1 - 16.11.20 - 10:46
транспонированная матрица - это когда строки матрицы становятся столбцами
   YamEgor
 
2 - 16.11.20 - 11:08
каждая строка у матрицы это массив из 5 элемнтов, и теперь каждый элемент в строке нужно поместить в новый массив и это сделать с каждой строкой, и потом 5 новых массивов добавить как строки новой транспонированной матрицы. Кто то может помочь это сделать?
   Mikeware
 
3 - 16.11.20 - 11:24
(2) а зачем _нам_ это?
   D_E_S_131
 
4 - 16.11.20 - 11:28
НовМатрица = Новый Массив ?? (5,5)// так же наверное должно быть?


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


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