![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() 17. При решении некоторых задач матрица может быть всегда квадратной и симметричной относительно главной диагонали. Для экономии опера-тивной памяти в этом случае прибегают к специальным способам хране-ния таких матриц, например, хранят часть матрицы выше главной диаго-нали, построчно в одномерном массиве. Составить программу вычисле-ния ATA, где A - симметричная матрица, заданная специальным спосо-бом хранения. Произведение вида ATA всегда симметрично. Исходные данные вводить с клавиатуры.
За ранее спасибо кто решит... Ребят задачу сказали как то через форму решать... плз кто сможет сделайте |
#2
|
||||
|
||||
![]() Насчет экономии памяти - довольно спорное утверждение. Это зависит от размерности данных. Если скажем у меня матрица с элементами типа байт, то произведение элементов недолжно превышать 255 - что маловероятно.
Задумка вообще оригинальная, только мне непонятен обратный процесс получения двух элементов из одного. Допустим у меня есть 3 и 5 произведение будет 15. Но из 15 я могу получить обратно как минимум 2 варианта. 5,3 и 3,5 Как спрашивается узнать правильное положение элемента относительно диагонали? Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
![]() ппц задачи.... не могу что делать Экзамен на носу =((((( помогите плз
|
#4
|
||||
|
||||
![]() Я так понял, что есть матрица вида
Код:
1 2 3 4 2 5 6 7 3 6 8 9 4 7 9 0 Код:
1 2 3 4 5 6 7 8 9 0 Код:
k:=1; for i:=1 to N do for j:=i to N do begin a[i,j]:=b[k]; inc(k); end; Код:
for i:=1 to N do for j:=i+1 to N do a[j,i]:=a[i,j]; Можно эти два шага сразу: Код:
k:=1; for i:=1 to N do for j:=i to N do begin a[i,j]:=b[k]; a[j,i]:=b[k]; inc(k); end; Как-то так. Получишь нужную матрицу. А дальше я не понимаю, что значит "произведение вида АТА". Если это А*Т*А то не знаю чего за Т. Так что дальше спрашиваешь Вику или Гугл "умножение матриц", после чего выполняешь указанные там инструкции. jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 23.12.2010 в 18:54. |
#5
|
|||
|
|||
![]() По поводу хранения - это некоторый вариант хранения разреженных матриц. Фактически, тебе нужна функция, которая переведет координаты двумерного массива в координаты одномерного. В этой функции д.б. 2 ветки - координаты выше главной диагонали и ниже. Во втором случае надо их "отразить" и вернуться к первой ветке.
Код:
function GetIndex(I, J, N : Integer) : Integer; // I, J - координаты в "квадрате" // N - размер матрицы // Result - коорд в линейном массиве begin If J > I Then // Ниже диагонали Begin Result := GetIndex(J,I,N); End Else // Выше диагонали и диагональ Begin // Трансляция координат матрицы в линейный массив // Сделаешь сам :) End; |
#6
|
||||
|
||||
![]() Ага, после неоднократного прочтения задания до меня дошло, что матрица-то симметричная и следовательно множитель и множимое идентичны и в этом случае без разницы какой из элементов откуда изначально взят.
Тогда получается, что получить обратно элементы можно получив квадратный корень из числа. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |