![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
вообщем есть табличка(матрица), в каждой ячейке таблички еще одна матрица. да)
Например в одной ячейке такая запись: Код:
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Тут как видно удаляется не все. Там где несколько пробелов, а точнее три, это разделение ячеек на одной строке Последний раз редактировалось SerginhoLD, 18.06.2011 в 16:45. |