Вопрос № 183114: Уважаемые эксперты! Помогите реализовать вот такую вещь. Я написал симплекс метод на делфи, и хочу чтобы каждая таблица помешалась в компонет PageControl (в новую закладку). Т.е получилось при решении симплекс методом 4 таблицы и должно...
Вопрос № 183114:
Уважаемые эксперты! Помогите реализовать вот такую вещь. Я написал симплекс метод на делфи, и хочу чтобы каждая таблица помешалась в компонет PageControl (в новую закладку). Т.е получилось при решении симплекс методом 4 таблицы и должно быть 4 закладки,и в каждой своя таблица. Заранее спасибо.С Уважением!!! С днем победы!!! Вот программа.(http://rfpro.ru/d/5463.rar)
Отвечает Евгений/Genia007/ (Профессионал) :
Здравствуйте, Павел Швецов! Таким образом можно программно создавать страницы на TPageControl и на новой закладке уже Stringgrid.
Код:
procedure TForm1.Button1Click(Sender: TObject); var i: integer; Tab: TTabSheet; begin
i:= PageControl1.PageCount;
// Создаем страницу Tab:= TTabSheet.Create(PageControl1); with Tab do begin Visible:= True; Caption:= 'Новая страница ' + IntToStr(i + 1); PageControl:= PageControl1; // Назначаем Tab в Page Control end;
// Создаем Stringgrid на новой странице with TStringGrid.Create(Application) do begin Parent:= PageControl1.Pages[i]; // Указываем Stringg
rid родительскую страницу Name:= 'StringGrid' + IntToStr(i + 1); Left:= 0; Top:= 0; ColCount:= 2; // Нужное количество столбцов RowCount:= 2; // Нужное количество строк Cells[0, 0]:= 'Нов таб' + IntToStr(i + 1); // Заполняем нужные ячейки данными end;
PageControl1.ActivePage:= PageControl1.Pages[i]; // Переключаемся на новую страницу end;
А вот исправленный Ваш код с автоматическим созданием закладок
Код:
procedure TForm1.N7Click(Sender: TObject); var j, i: integer; Tab: TTabSheet; begin i2:=0; t:=0; u:=0; y:=0; i1:=0; // отчищаем PageControl1 while PageControl1.PageCount <
;> 0 do PageControl1.Pages[0].Destroy; //запоминаем сколько <=,>= и где что стоит for i:=1 to m do begin if (stringgrid2.cells[n,i]='>=') then begin u:=u+1; l[i]:=-2; end; if (stringgrid2.cells[n,i]='<=') then begin u:=u+1; l[i]:=-1; end; if (stringgrid2.cells[n,i]='=') then l[i]:=i; end; //заполняю массив а и b w:=0; y:=0; for j:=1 to m do
b[j]:=strtofloat(StringGrid2.Cells[n+1,j]); for i:=1 to m do begin t:=0; w:=w+1; for j:=0 to n+u-1 do begin t:=t+1; if (0<=j) and (j<n) then a[i,t]:=strtofloat(StringGrid2.Cells[j,i]); if (l[w]=-2)and(j>=n) then begin a[i,n+i]:=-1; end; if (l[w]=-1)and(j>=n)then begin a[i,n+i]:=1; end; if (l[w]=0)and(j>=n)then a[i
,n+i]:=0; end; end; //строим первую симплек таблицу stringgrid1.colcount:=n+m+2; stringgrid1.rowcount:=m+2; stringgrid1.fixedcols:=1; stringgrid1.fixedrows:=1; form2.stringgrid1.colcount:=n+m+2; form2.stringgrid1.rowcount:=m+2; form2.stringgrid1.fixedcols:=1; form2.stringgrid1.fixedrows:=1; t:=0; y:=1;
//1-я таблица f[1]:=0; for i:=2 to n+u+1 do begin if (i<=n+1) then begin f[i]:=strtofloat(stringgrid3.cells[t,1]); if f[i]<0 then f[i]:=abs(f[i]); if f[i]>=0 then f[i]:=-f[i]; t:=t+1; end els
e f[i]:=0; end; for i:=1 to n+u+1 do begin y:=y+1; stringgrid1.cells[y,0]:='X'+inttostr(i); fo
r j:=1 to m+1 do begin if(n+i<=n+u) then stringgrid1.cells[0,y-1]:='X'+inttostr(n+i); if(n+i<=n+u) then form2.stringgrid1.cells[0,y-1]:='X'+inttostr(n+i); if (j=m+1)then stringgrid1.cells[i,j]:=floattostr(f[i]); if (i=1)and(j<=m) then stringgrid1.cells[i,j]:=floattostr(b[j]); if (i>=1)and(j<=m) then stringgrid1.cells[i+1,j]:=floattostr(a[j,i]); end; end; min:=f[1]; for i:=1 to n+u+1 do begin
if (min>f[i]) then begin min:=f[i]; k:=i; end; end; k:=k-1; for i:=1 to m do begin if ((b[i]>0)and (a[i,k]>0)or(b[i]<0)and (a[i,k]<0)) then c[i]:=b[i]/a[i,k]; if ((b[i]=0) and (a[i,k]>0)) then c[i]:=0; if (a[i,k]=0) then c[i]:=9999; if ((b[i]=0) and (a[i,k]<0)) then c[i]:=9999; if ((b[i]>0)and (a[i,k]<0)or(b[i]<0)and (a[i,k]>0)) then c[i]:=9999 end; v:=
0; for i:=1 to m do if(c[i]=0)or(c[i]=9999) then v:=v+1;
//цикл по построению новой симплекс таблици r:=0; while (min<0)and(r<=10)and(v<m) do begin r:=r+1;; i1:=i1+1;
// Создаем страницу Tab:= TTabSheet.Create(PageControl1); with Tab do begin Visible:= True; Caption:= 'Таблица ' + IntToStr(i1); PageControl:= PageControl1; // Назначаем Tab в Page Control end;
//строим массив оценочных
отношений(с) for i:=1 to m do begin if ((b[i]>0)and (a[i,k]>0)or(b[i]<0)and (a[i,k]<0)) then c[i]:=b[i]/a[i,k]; if ((b[i]=0) and (a[i,k]>0)) then c[i]:=0; if (a[i,k]=0) then c[i]:=9999; if ((b[i]=0) and (a[i,k]<0)) then c[i]:=9999; if ((b[i]>0)and (a[i,k]<0)or(b[i]<0)and (a[i,k]>0)) then c[i]:=9999 end; min:=c[1]; for i:=1 to m do if (min>=c[i]) then
begin min:=c[i]; p:=i; end; for i:=1 to m do b1[i]:=b[i]; for i:=1 to m do for j:=1 to n+u do a1[i,j]:=a[i,j]; for i:=1 to n+u+1 do f1[i]:=f[i]; //пересчитываем столбец свободных членов(массив b) for i:=1 to m do if (i=p) then b[i]:=b1[i]/a[p,k] else b[i]:=b1[i]-b1[p]*a1[i,k]/a1[p,k]; //пересчитываем целевую функцию(массив F) f[1]:=f1[1]-b1[p]*f1[k+1]/a1[p,k];
o:=2; for i:=1 to n+u+1 do begin if(i<>k) then f[o]:=f1[o]-a1[p,i]*f1[k+1]/a1[p,k] else f[o]:=0; o:=o+1; end; o:=0; //Пересчитываем матрицу переменных (а) for i:=1 to m do for j:=1 to n+u do begin if ((i<>p)or(j<>k)) then a[i,j]:=a1[i,j]-a1[p,j]*a1[i,k]/a1[p,k]; if (i=p) then a[i,j]:=a1[i,j]/a1[p,k];
if (j=k)and(i<>p) then a[i,j]:=0; end;
//Формируем новую таблицу в стрингрид y:=1; with TStringGrid.Create(Application) do begin Parent:= PageControl1.Pages[i1 - 1]; // Указываем Stringgrid родительскую страницу Name:= 'StringGrid' + IntToStr(i1); Left:= 0; Top:= 0; ColCount:= n+m+2; // Нужное количество столбцов RowCount:= m+2; // Нужное количество строк for i:=1 to n+u+1 do
begin y:=y+1; form2.stringgrid1.cells[y,0]:='X'+inttostr(i); for j:=1 to m+1 do begin if(j=p) then cells[0,j]:='X'+inttostr(k); if (j=m+1)then cells[i,j]:=floattostr(f[i]); if (i=1)and(j<=m) then cells[i,j]:=floattostr(b[j]); if (i>=1)and(j<=m) then cells[i+1,j]:=floatto
str(a[j,i]); end; end; end; PageControl1.ActivePage:= PageControl1.Pages[0]; // Переключаемся на но
вую страницу
//ищем min среди целевой функции min:=f[1]; k:=0; for i:=1 to n+u+1 do begin if (min>=f[i]) then begin min:=f[i]; k:=i; end; end; k:=k-1; v:=0; for i:=1 to m do if(c[i]=0)or(c[i]=9999) then v:=v+1; end; s:=''; z:=0; if (r<=10)and(v<m) then for i:=1 to u do begin z:=1; s:=s+floattostr(b[i]); if i<u then s:=s+',';
end else if ((r=0)or(r=11))or(v=m)or(min<0) then s1:='Функция не имеет оптимального значения'; if (z=1) then label1.caption:='{'+s+'}' else label1.caption:=s1; end;
Правильней делать локальные переменные для циклов, а не как у Вас было, Вы использовали глобальные переменные. Вот весь Ваш проект.
----- Помогли тебе, помоги и ты.
Ответ отправил: Евгений/Genia007/ (Профессионал)
Ответ отправлен: 14.05.2011, 18:58
Номер ответа: 267152 Казахстан, Петропавловск Тел.: 87776918987 Адрес сайта:Выложены мои программы со статусом freeware ICQ # 573729535 Абонент Skype: jonixjon
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 267152
на номер 1151 (Россия) |
Еще номера »
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.