Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2012, 19:45   #1
L3zh1Y
Пользователь
 
Регистрация: 12.05.2010
Сообщений: 34
Восклицание Симплекс

Написал код на симплекс-метод по теме тория игр. Но не пойму, почему не правильно считает. Первый столбец все нормально, обнуляет, делит, но дальше выводит ерунду какую-то! Алгоритм просмотрел по десять раз, работать должен, может кто увидит ошибку?
Код:
procedure TForm5.Button1Click(Sender: TObject);
var i,j,number,ii,it,i2,i3,jt:integer;
    max,del,pol,pol1,pol2,pol3:real;
begin
//ñèìïëåêñ
//íàõîäèì ìèíèìàëüíûéé ýëåìåíò â L ñòðîêå
for i:= 1 to sg8.ColCount-1 do
 begin
 form1.listbox1.items.add('i '+inttostr(i));
  max:=1;
  if strtofloat(sg8.Cells[i,sg8.RowCount-1])<0 then
   begin
    // íàõîäèì ìàñêèìàëüíûé ýëåìåíò â ñòîëáöå äàííîãî ìèíèìàëüíîãî áàçèñà èëè ÷åãî-òî òàì
    for j:= 1 to sg8.RowCount-1 do//íàõîäèì ìàêñèìóì
     if strtofloat(sg8.Cells[i,j])>max then
                                            begin
                                              max:=strtofloat(sg8.Cells[i,j]);
                                              number:=j;
                                            end;//íàøëè ìàêñèìóì

   form1.ListBox1.Items.Add('max'+floattostr(max));
   Label1.Caption:=floattostr(max);
   Label2.Caption:=floattostr(number);

   for ii:=1 to sg8.ColCount-1 do
    begin //Äåëèì âñþ ñòðîêó íà ñ ìàêñèìàëüíûì ýë-ì íà ìàêñ ýë-ò
     if strtofloat(sg8.Cells[ii,number])<>0 then
      pol2:=(strtofloat(sg8.Cells[ii,number])/max);
      pol3:=RoundTo(pol2,-4);
     sg8.Cells[ii,number]:=floattostr(pol3);
    end;//ðàçäåëèëè

    //îáíóëÿåì ýë-òû ñòîëáöà
   //j:=1;
  for it:= 1 to sg8.RowCount-1 do
   begin //Íà÷àëî öèêëà ïåðåñ÷åòà ýëåìåíòîâ ñòðîê
    //pol:=0;
    if it<>number then
     begin//íà÷àëî ïðîâåðêè
      del:=strtofloat(sg8.Cells[i,it]);
      //Form1.ListBox1.Items.Add('del '+floattostr(del));
      for jt:=i to sg8.ColCount-1 do
       begin
       label3.caption:=inttostr(jt);

       pol:=(strtofloat(sg8.Cells[jt,it])-(strtofloat(sg8.Cells[jt,number])*del));
       pol1:=RoundTo(pol,-4);
       sg8.Cells[jt,it]:=floattostr(pol1);
       form1.ListBox1.Items.Add(sg8.cells[jt,it]+':='+sg8.Cells[jt,it]+'-'+'('+sg8.Cells[jt,number]+'*'+floattostr(del));
       end;
     end;//êîíåö ïðîâåðêè
   end;//Êîíåö öèêëà ïåðåñ÷åòà ýëåìåíòîâ ñòðîê

// if i=2 then exit;
 end;
  end;

end;
Поясню принцип работы: Иду по строке "L" и ищу отрицательные элементы матрицы, если есть таковые, то ищу разрешающую строку, в данномслучае максимальный элемент встолбце с отрицательным элементом. Далее, разрешающую строку делю на этот же элемент и обнуляю значения в остальных строках, также деля все остальные элементы строки (как в гауссе), и отнимаю разрешающую строку от остальных строк.
И так выполняем до тех пор, пока в строке L не останется отрицательных элементов.
P.S. Пожалуйста, помогите найти ошибку, уже второй день не могу дописать этот код, а курсовую сдавать уже на следующей неделе.

Вот картинка для наглядности, на ней еще не так много косяков, иногда вообще бред выводит всякий.
Изображения
Тип файла: jpg Безымянный.jpg (122.6 Кб, 124 просмотров)

Последний раз редактировалось L3zh1Y; 12.02.2012 в 19:59.
L3zh1Y вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Симплекс метод BeZone Помощь студентам 1 24.11.2012 18:25
симплекс метод bakir Помощь студентам 3 11.04.2011 16:35
Симплекс - метод PaLb14 Помощь студентам 4 22.05.2010 12:19
Симплекс метод demaman Помощь студентам 3 29.04.2010 04:26
Симплекс метод bakir Помощь студентам 0 04.12.2009 00:39