Помощь - Поиск - Пользователи - Календарь
Полная версия: Решение транспортной задачи, плиз, помогите.
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Delphi
Анжелика
Привет, ребята.
Нужна ваша помощь при решении транспортной задачи.
Все дело в том, что я нашла опорный план методом Фогеля, но мне еще нужен второй опорный план методом северо-западного угла.
Я пыталась сделать это двумя способами, но почему-то при каждом Делфи выдает ошибку "EConvertError with message ''' is not valid integer value" и я прям уже не знаю что делать.
И так, 1 способ:
Вначале имеется таблица перевозок. я заношу поставки и потребности в одномерные массивы post и potr. После обрабатываю значения. Проверила, в массив из StringGrid все попадает корректно, но дальше ошибка. Привожу код обработки.:

    i:=0;
      while i<=n-1 do
       begin
          j:=0;
              while j<=m-1 do
              begin
                  if potr[j]<>0 then
                  begin
                      if post[i]<potr[j] then
                        begin
                            NWCorner.TabCor.Cells[j,i]:=inttostr(post[i]);
                            potr[j]:=potr[j]-post[i];
                            post[i]:=0;
                            j:=m-1;
                        end
                      else
                      if post[i]>potr[j] then
                      begin
                            NWCorner.TabCor.Cells[j,i]:=inttostr(potr[j]);
                            post[i]:=post[i]-potr[j];
                            potr[j]:=0;
                      end
                      else
                      begin
                          NWCorner.TabCor.Cells[j,i]:=inttostr(potr[j]);
                          potr[j]:=0;
                          post[i]:=0;
                      end;
                end;
                j:=j+1;
              end;
          i:=i+1;
        end;
end;


Пробовала вторым алгоритмом:
делала на новой форме копию исходной таблицы, чтобы не жалко портить было, но в новую форму заносила только самый правый столбец(поставок) и нижнюю строку(потребления). Привожу код:

      for i:=1 to NWCorner.TabCor.RowCount-2 do
      begin
          NWCorner.TabCor.Cells[table.ColCount-1,i]:=table.Cells[table.ColCount-1,i];
          NWCorner.TabCor.Cells[0,i]:=table.Cells[0,i];
      end;
      for i:=1 to NWCorner.TabCor.ColCount-2 do
      begin
          NWCorner.TabCor.Cells[i,table.RowCount-1]:=table.Cells[i,table.RowCount-1];
          NWCorner.TabCor.Cells[i,0]:=table.Cells[i,0]; 
      end;
      n := table.RowCount-1;  
      m:= table.ColCount-1;
      for i:=1 to n-1 do
          for j:=1 to m-1 do
                begin
                      If strtoint(NWCorner.TabCor.Cells[j,m])<>0
                      then
                      if strtoint(NWCorner.TabCor.Cells[j,m])>strtoint(NWCorner.TabCor.Cells[n,i])
                      then
                          begin
                               NWCorner.TabCor.Cells[j,i]:=NWCorner.TabCor.Cells[n,i];
                               NWCorner.TabCor.Cells[j,m]:= 
                                   inttostr(strtoint(NWCorner.TabCor.Cells[j,m])-strtoint(NWCorner.TabCor.Cells[n,i]));
                               NWCorner.TabCor.Cells[n,i]:= inttostr(0);
                          end
                      else
                      if strtoint(NWCorner.TabCor.Cells[j,m])<strtoint(NWCorner.TabCor.Cells[n,i])
                      then
                          begin
                               NWCorner.TabCor.Cells[j,i]:=NWCorner.TabCor.Cells[j,m];
                               NWCorner.TabCor.Cells[n,i]:= 
                                   inttostr(strtoint(NWCorner.TabCor.Cells[n,i])-strtoint(NWCorner.TabCor.Cells[j,m]));
                               NWCorner.TabCor.Cells[n,i]:= inttostr(0);
                          end
                      else
                          begin
                               NWCorner.TabCor.Cells[j,i]:=NWCorner.TabCor.Cells[j,m];
                               NWCorner.TabCor.Cells[j,m]:= inttostr(0);
                               NWCorner.TabCor.Cells[n,i]:= inttostr(0);
                          end;
                end;


Примечание: table - исходная таблица, NWCorner - StringGrid на новой форме.
Подскажите, пожалуйста, что я не так делаю. Буду очень признательна. Спасибо! smile.gif
volvo
Цитата
Делфи выдает ошибку "EConvertError with message ''' is not valid integer value" и я прям уже не знаю что делать.
Пустые ячейки в гриде есть?
Анжелика
Цитата(volvo @ 13.05.2007 13:47) *

Пустые ячейки в гриде есть?

В начальном гриде их нет. Во втором они есть, но он их не обрабатывает.
volvo
Можно присоединить код полностью? (если не хочешь сюда - можно в PM)
Анжелика
Цитата(volvo @ 13.05.2007 14:08) *

Можно присоединить код полностью? (если не хочешь сюда - можно в PM)

Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла
Анжелика
Все спасибо - решила сама)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.