Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.12.2010, 19:29
papapadzaepalo papapadzaepalo вне форума
Прохожий
 
Регистрация: 20.12.2010
Сообщения: 6
Репутация: 10
По умолчанию РЕбят прошу кто нибудь сможет такую штуку решить?

17. При решении некоторых задач матрица может быть всегда квадратной и симметричной относительно главной диагонали. Для экономии опера-тивной памяти в этом случае прибегают к специальным способам хране-ния таких матриц, например, хранят часть матрицы выше главной диаго-нали, построчно в одномерном массиве. Составить программу вычисле-ния ATA, где A - симметричная матрица, заданная специальным спосо-бом хранения. Произведение вида ATA всегда симметрично. Исходные данные вводить с клавиатуры.

За ранее спасибо кто решит... Ребят задачу сказали как то через форму решать... плз кто сможет сделайте
Ответить с цитированием
  #2  
Старый 21.12.2010, 19:58
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Насчет экономии памяти - довольно спорное утверждение. Это зависит от размерности данных. Если скажем у меня матрица с элементами типа байт, то произведение элементов недолжно превышать 255 - что маловероятно.
Задумка вообще оригинальная, только мне непонятен обратный процесс получения двух элементов из одного. Допустим у меня есть 3 и 5 произведение будет 15. Но из 15 я могу получить обратно как минимум 2 варианта. 5,3 и 3,5 Как спрашивается узнать правильное положение элемента относительно диагонали?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 23.12.2010, 17:40
papapadzaepalo papapadzaepalo вне форума
Прохожий
 
Регистрация: 20.12.2010
Сообщения: 6
Репутация: 10
Печаль

ппц задачи.... не могу что делать Экзамен на носу =((((( помогите плз
Ответить с цитированием
  #4  
Старый 23.12.2010, 18:52
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Я так понял, что есть матрица вида
Код:
 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  
Старый 23.12.2010, 19:47
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

По поводу хранения - это некоторый вариант хранения разреженных матриц. Фактически, тебе нужна функция, которая переведет координаты двумерного массива в координаты одномерного. В этой функции д.б. 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  
Старый 23.12.2010, 20:11
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Ага, после неоднократного прочтения задания до меня дошло, что матрица-то симметричная и следовательно множитель и множимое идентичны и в этом случае без разницы какой из элементов откуда изначально взят.
Тогда получается, что получить обратно элементы можно получив квадратный корень из числа.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:08.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025