Вообщем тема...
Разряженая матрица в виде мультисписков.
Необходимо найти максимальный элемент и удалить строку и столбец его содержащие.
==================
В принципе проблем нет, НО - мульти списки...
В реале это просто:
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];
kase666, погоди... У тебя уже задана матрица в виде мультисписка, или мультисписок еще надо организовать?
матрица нулевая А[X, X] ее необходимо загрузить
из файла в виде мультисписка и выполнить операции...
Повторяю вопрос: Мультисписок умеешь создавать, или нет?
(то, что работать с ним не умеешь - это понятно, но может уже есть хоть какая-то готовая реализация, в которую можно хотя-бы загрузить данные.)
список создавать могу, простой...
но не для двухмерных матриц, парюсь с указателями...
вот процедурка для линейного
толкаюсь от нее, но как X, Y организовать не знаю
Да ладно, ты с тэгами...
буду ставить.
Да ладно ? Это между прочим правила форума, если ты не в курсе, так вот я советую тебе пойти и прочитать их
Ну, насчет прочитать матрицу в список списков, я набросал кое-что... Особо не тестировал, только сама идея. Но компиляцию проходит... Попробуй с использованием этого реализовать свое задание...
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.