IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Разреженные матрицы
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 26

Репутация: -  0  +


Поможите кто может !!!! Препод задал такую задачу: разместить разреженную матрицу в динамической памяти с помощью линейных списков. Не могли бы вы мне сказать, что такое разреженная матрица и как ее разместить в динамической памяти. Если можно, то сразу на паскале smile.gif . БУду очень признателен за любую помощь, так как сам я это сделать увы не смогу.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 775
Пол: Мужской

Репутация: -  0  +


Что такое динамическая память я ишшо может и знаю, а вот разреженная матрица... (есть лишь преположение, что это матрица которую разрядили  ;))??
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 119
Пол: Мужской

Репутация: -  0  +


Версия:
Список из координат элемента матрицы и его значения.
Т.е. (x, y, info).
Т.к. матрица разреженная, не должно занимать много места.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Профи
****

Группа: Пользователи
Сообщений: 775
Пол: Мужской

Репутация: -  0  +


2zx1024 Может быть, но тогда получается, что понятие линейный список уже имеет место быть... а может это и нелинейный список.
А линейный список тогда получается что-то по типу:
A[1,1..X] - первый линейный список.
A[2,1..D] - второй линейный список.
A[3,1..F] - третий линейный список.
..................................................................
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 26

Репутация: -  0  +


А как ее разместить в динамической памяти ??? Ну считал я с файла какието значения, а как их в динамическую память разместить???
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Профи
****

Группа: Пользователи
Сообщений: 775
Пол: Мужской

Репутация: -  0  +


Попробуй что-то типа GetMem or New... до 64Кб в режиме 8086 проца
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 26

Репутация: -  0  +


В продолжении темы. Препод задал такую задачу: найти след разреженной матрицы. След-сумма собственных чисел. Матрицу надо сделать насколько я понял, с использованием линейного списка, с размещением ее в динамической памяти. А как это сделать?? никто бы не мог привести код программы. Люди, помогите!!!!! Я проболел весь сентябрь, лекций нет, друзья помочь не могут(у них свои задачиsmile.gif). Я не поверю, что на сайте посвященном паскалю, не найдется ни одного хорошего(и очень доброго, понимающего) программиста, который не мог бы сделать эту задачу. Я буду очень благодарен.
ЗЫ: кстати этот сайт мне посоветовал мой друг, однажды кто то из форума ему очень помог, и он сдал паскаль на 5. Надеюсь, что этот ктото поможет и мне.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 26

Репутация: -  0  +


Если вы мне объясните, что такое разреженая матрица, то я смогу помочь.
Знаю, что такое динамичнская память.


--------------------
QUI NON PROFICIT, DEFICIT(Кто не идёт вперёд, идёт назад)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Профи
****

Группа: Пользователи
Сообщений: 775
Пол: Мужской

Репутация: -  0  +


См. 3-4 пост сверху, больше вариантов на данный момент нет, во всяком случае у меня.
И, кстати, у препода нельзя спросить, что такое разреженные матрицы??
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

Группа: Пользователи
Сообщений: 26

Репутация: -  0  +


разреженная матрица - это матрица очень большого размера, ну скажем 1000 на1000, у которой большинство элементов равны нулю. Поэтому в дин. память надо разместить все ненулевые элементы, а элементы равные нулю-вообще не учитывать. Кстати, я там сверху немного ошибся - надо найти не собств.числа, а сумму диагональных элементов.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Новичок
*

Группа: Пользователи
Сообщений: 26

Репутация: -  0  +


Ну тогда первая задача лёгкая.

Код
const n=1000;
type mass:[1..n,1..n]of integer;
      list:^node
      node:record
               k:integer;
               next:list;
              end;
var
mas:mass;
head:list;
i,g:integer;

begin
 new(head);
 head^.next:=nil;
 for i:=1 to n do
      for g:=1 to n do if mas[i,g]<>0
                                 then begin
                                          new(head^.next);
                                          head:=head^.next;
                                          head^.k:=mas[i,g];
                                          head^.next:=nil;
                                         end;
end.


Сообщение отредактировано: volvo -


--------------------
QUI NON PROFICIT, DEFICIT(Кто не идёт вперёд, идёт назад)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Новичок
*

Группа: Пользователи
Сообщений: 26

Репутация: -  0  +


А след матрицы я думаю ты сам найдёш.(Я так и не понял- искать по списку или по матрице?)


--------------------
QUI NON PROFICIT, DEFICIT(Кто не идёт вперёд, идёт назад)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Новичок
*

Группа: Пользователи
Сообщений: 48
Пол: Мужской

Репутация: -  1  +


> const n=1000;
> type mass:[1..n,1..n]of integer;
> var  
>  mas:mass;

нельзя определять переменные > 64Кб, в этом весь и прикол. Нужно грузить по одному значению, например из файла, или использовать что-нибудь вроде TCollection.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Новичок
*

Группа: Пользователи
Сообщений: 26

Репутация: -  0  +


Все значения ненулевых элементов и их "координаты" в матрице надо брать из внешнего файла.  Как я понял, сначала надо считать данные в некий массив, а потом с помощью указателей на его элементы найти сумму диаг.элементов исходной матрицы. Вот этото я и не понял как делать
2Fire-Rage: пасибки  за код, а можеш сделать чтоб из файла считывались значения ??
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Гость






Цитата(GLuk @ 1.10.03 18:58)
2zx1024 Может быть, но тогда получается, что понятие линейный список уже имеет место быть... а может это и нелинейный список.
А линейный список тогда получается что-то по типу:
A[1,1..X] - первый линейный список.
A[2,1..D] - второй линейный список.
A[3,1..F] - третий линейный список.
..................................................................

Конечно, существуют и нелинейные списки, но что понимать под нелинейностью? В данном случае это действитьельно структура списк4а: нелинейный список состоит из частей (ветвей), переход между которыми возможен только через общий узел данных ветвей. Для нелинейных списков даже есть специальное название - деревья. Дерево может ветвиться не только в корне, а на каждом своем узле, кроме нижнего уровня. Вопрос не в существовании нелинейных списков, а втом, нужна ли нелинейность в конкретном случае.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Гость






Цитата(Camel_Toe @ 6.10.03 6:12)
разреженная матрица - это матрица очень большого размера, ну скажем 1000 на1000, у которой большинство элементов равны нулю. Поэтому в дин. память надо разместить все ненулевые элементы, а элементы равные нулю-вообще не учитывать. Кстати, я там сверху немного ошибся - надо найти не собств.числа, а сумму диагональных элементов.

Не совсем так. Разреженнеой называется не большая матрица, а матрица, в которой много нехранимых элементов. Причем, критерий их множественности - возможность извлекать выгоду из факта их существования, то есть возможность использовать для сжатия матрицы исключение из нее ненужных элем5ентов, причем, если матрица не сжимается таким способом, то она все равно не считается разреженной, то есть разреженность это не свойство матрицы, а способ ее хранения.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Гость






Атавин Т. А.,
очень мудрое решение, поднять тему, которой почти полтора года... angry.gif
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 3:07
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name