Показать сообщение отдельно
  #1  
Старый 18.06.2011, 16:22
Аватар для SerginhoLD
SerginhoLD SerginhoLD вне форума
Новичок
 
Регистрация: 19.11.2009
Сообщения: 73
Репутация: 12
По умолчанию Подтолкните на мысль, удаление значений, у которых параметры меньше остальных

вообщем есть табличка(матрица), в каждой ячейке таблички еще одна матрица. да)
Например в одной ячейке такая запись:
Код:
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
Тут как видно удаляется не все.
Там где несколько пробелов, а точнее три, это разделение ячеек на одной строке
__________________
знаете почему внизу эскалатора бабка в будке сидит?
она там педальки крутит и лесенка едет!
Ответить с цитированием