вообщем есть табличка(матрица), в каждой ячейке таблички еще одна матрица. да)
Например в одной ячейке такая запись:
Код:
8 2
9 4
4 4
а может быть такая:
8 2 5
9 4 4
4 4 8
вообщем задается динамически, но это не важно, за колво отвечает переменная m
Мне из ячейки таблицы нужно удалить не эффективные оценки, т.к. если в ячейке такая запись:
8 2
9 4
То должно остаться только
9 4
так как все параметры одного больше другого.
Вот мне нужно чтобы меня кто-то на мысль подтолкнул как это сделать, пробовал сделать что-то типа сортировки, но как-то все это не правильно, да и результат не тот:
Код:
z = record
k: array of array of double; // значения критериев
end;
t: array of array of z;
.....
// тут нужно будет удалить не эффективные оценки
for i:=0 to n-1 do // stroki
for j:=0 to w-1 do // stolbcy - ves
// бежим по матрице, у нас есть ячейка, теперь ломаем ячейку:
begin
for h:=0 to length(t[i,j].k)-1 do
begin
for b:=0 to length(t[i,j].k)-1 do
begin
if (eff(t[i,j].k[b],t[i,j].k[h]) = true) and (h<>b) then // если эффективна
begin
t[i,j].k[h] := t[i,j].k[length(t[i,j].k)-1];
setlength(t[i,j].k, length(t[i,j].k)-1, m);
end;
end;
end;
end;
функция проверки эффективности:
Код:
function eff(a,b:array of double):boolean;
// оценка A эффективнее чем оценка B?
var i:integer;
begin
result:=true;
if length(a) = length(b) then
begin
for i:=0 to length(a)-1 do
if a[i]>=b[i] then continue
else begin
result:=false;
break;
end;
end
else begin
result:=false;
//showmessage(' Ошибка! Размерность векторов отличается! ');
end;
end;
ДО:

Uploaded with
ImageShack.us После:

Uploaded with
ImageShack.us
Тут как видно удаляется не все.
Там где несколько пробелов, а точнее три, это разделение ячеек на одной строке