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

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

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

 
 Ответить  Открыть новую тему 
> Разряженная матрица. Мультисписки., Matrix Forever!
kase666
сообщение 22.12.2005 13:15
Сообщение #1





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

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


Вообщем тема...

Разряженая матрица в виде мультисписков.
Необходимо найти максимальный элемент и удалить строку и столбец его содержащие.
==================
В принципе проблем нет, НО - мульти списки...
В реале это просто:

MAX:=A[1,1];DEL_X:=1; DEL_Y:=1;
FOR I:=1 TO RAZ_Y DO BEGIN
FOR J:=1 TO RAZ_X DO
IF MAX<A[J,I] THEN
BEGIN
MAX:=A[J,I];
DEL_X:=J; DEL_Y:=I;
END;

RAZ_Y:=RAZ_Y-1;
FOR I:=DEL_Y TO RAZ_Y DO
FOR J:=1 TO RAZ_X DO
A[J,I]:=A[J,I+1];
RAZ_X:=RAZ_X-1;
FOR I:=1 TO RAZ_Y DO
FOR J:=DEL_X TO RAZ_X DO
A[J,I]:=A[J+1,I];

Но с указателями через динамическую память да еще списки...
Подскажите?

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


--------------------
Господи! Сколько же еще не сделано...
А сколько же еще предстоит не сделать...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 22.12.2005 13:44
Сообщение #2


Гость






kase666, погоди... У тебя уже задана матрица в виде мультисписка, или мультисписок еще надо организовать?
 К началу страницы 
+ Ответить 
kase666
сообщение 22.12.2005 14:23
Сообщение #3





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

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


матрица нулевая А[X, X] ее необходимо загрузить
из файла в виде мультисписка и выполнить операции...


--------------------
Господи! Сколько же еще не сделано...
А сколько же еще предстоит не сделать...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 22.12.2005 15:10
Сообщение #4


Гость






Повторяю вопрос: Мультисписок умеешь создавать, или нет?
(то, что работать с ним не умеешь - это понятно, но может уже есть хоть какая-то готовая реализация, в которую можно хотя-бы загрузить данные.)
 К началу страницы 
+ Ответить 
kase666
сообщение 22.12.2005 15:28
Сообщение #5





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

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


список создавать могу, простой...
но не для двухмерных матриц, парюсь с указателями...
вот процедурка для линейного
толкаюсь от нее, но как X, Y организовать не знаю
Код

        { загрузить список с файла }
           procedure Load(var f:FilType; start: AddrPointer):
                        AddrPointer;
           var
             temp, temp2: AddrPointer
             first: boolean;
           begin
             Writeln('load file');
             Reset(f);
             while start <> nil do begin  { освобождение памяти
                                           при необходимости }
               temp := start^.next
               dispose(start);
               start := temp;
             end;

             start := nil; last := nil;
             if not eof(f) then begin
               New(temp);
               Read(i, temp^);
               temp^.next := nil;  temp^.prior:= nil;
               load := temp;  { указатель на начало списка }
             end;

               while not eof(f) do begin
                 New(temp2);
                 Read(i, temp2^);
                 temp^.next := temp2; { построить список }
                 temp2^.next := nil;
                 temp^.prior := temp2;
                 temp := temp2;
               end;
               last := temp2;
             end; { конец загрузки }


тэги!

Сообщение отредактировано: GoodWind - 22.12.2005 17:43


--------------------
Господи! Сколько же еще не сделано...
А сколько же еще предстоит не сделать...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
kase666
сообщение 22.12.2005 17:51
Сообщение #6





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

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


Да ладно, ты с тэгами...
буду ставить.

Да ладно ? Это между прочим правила форума, если ты не в курсе, так вот я советую тебе пойти и прочитать их

Сообщение отредактировано: klem4 - 22.12.2005 17:53


--------------------
Господи! Сколько же еще не сделано...
А сколько же еще предстоит не сделать...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 22.12.2005 19:14
Сообщение #7


Гость






Ну, насчет прочитать матрицу в список списков, я набросал кое-что... Особо не тестировал, только сама идея. Но компиляцию проходит... Попробуй с использованием этого реализовать свое задание...

type
plist = ^tlist;
tlist = { это - список по строке }
record
col_num, value: integer;
next: plist;
end;

pvector = ^tvector;
tvector = { это - список самих строк }
record
row_num: integer;
next: pvector;
end;

var
f: text;
pl, pl_first, pl_last: plist;
pv, pv_first, pv_last: pvector;

i, j, X: integer;

begin
assign(f, '__razr.txt');
reset(f);

pv_first := nil; pv_last := nil;

i := 1;
while not seekeof(f) do begin

j := 1; pl_first := nil; pl_last := nil;

while not seekeoln(f) do begin

read(f, X);

if X <> 0 then begin
{
append new item to the end of list
}
new(pl);
pl^.value := x;
pl^.col_num := j;
pl^.next := nil;

if pl_first = nil then pl_first := pl
else pl_last^.next := pl;
pl_last := pl;

inc(j);
end;

end;
readln(f);

if pl_first <> nil then begin
new(pv);
pv^.row_num := i;
pv^.next := nil;

if pv_first = nil then pv_first := pv
else pv_last^.next := pv;
pv_last := pv;
end;

inc(i);
end;

close(f);

{ Теперь в pv_first хранится указатель на начало списка списков }
end.
 К началу страницы 
+ Ответить 
kase666
сообщение 23.12.2005 21:48
Сообщение #8





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

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


good.gif
Код

texmode(3);
clrscr;
gotoxy(15,10);
write('БОЛЬШОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО!!!');


--------------------
Господи! Сколько же еще не сделано...
А сколько же еще предстоит не сделать...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



- Текстовая версия 19.07.2025 23:51
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"