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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2012, 21:59   #1
@ндрю}{@
Новичок
Джуниор
 
Регистрация: 07.12.2012
Сообщений: 2
По умолчанию "Симплекс таблицы (Delphi 7)"

Пишу прогу для курсовой. В проекте 2 формы
на перовой вводиться кол-во переменных и кол-во ограничений
на второй получается исходная таблица для ввода и 2 таблица для вывода.
Проблема в том что в алгоритме на первых шагах все строки сходятся а в конце программа зацикливается.
Второй модуль
Код:
unit Unit2;
nterface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls, Buttons;
type
  TTabs = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    Button2: TButton;
    StringGrid2: TStringGrid;
    Button3: TButton;
    BitBtn1: TBitBtn;
    Button4: TButton;
    BitBtn2: TBitBtn;
    CheckBox1: TCheckBox;
    procedure Button3Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Tabs: TTabs;

implementation

uses Unit1;

{$R *.dfm}

procedure TTabs.Button1Click(Sender: TObject);{основные вычиления}
var  i,j:integer;    pos,pot:integer;  {pos - послед строка пот - послед столбец}
n:integer;  rt,rs:integer; re:double; {номера разрешаищих строк и толбцов разрешающий элемент}
min : double;  a:array[1..20] of double;{разрешающая строка}
b:array[1..20] of double;{разрешающая столбец}
k:array[1..20,1..20] of double;{коэффициенты столбец}
label 1;
begin
try
     {perenos dannih}
 For i:=0 to Tabs.StringGrid2.ColCount-1 do
    For j:=0 to Tabs.StringGrid1.RowCount-1 do
    Tabs.StringGrid2.Cells[i,j]:=Tabs.StringGrid1.Cells[i,j];
    Tabs.StringGrid2.Visible:=true;  {perenos end} {rashet nahalo}
pos:=StringGrid2.RowCount-1;             {задание коэфициентов последней строки и stolbha}
pot:= StringGrid2.ColCount-2 ;
     n:=0;          1:   for i:=2 to pot do
             begin
               if  Strtofloat(StringGrid2.Cells[i,pos])<0 then n:=i;    {1-if}
            end;
 {вывод резульата}
 if n=0 then ShowMessage('Plan optimalen')
     else {начало обработки и расчета}
Begin
min:=Strtofloat(StringGrid2.Cells[2,pos]);  rt:=2;
For i:=3 to pot do begin
                    if (min> Strtofloat(StringGrid2.Cells[i,pos])) and (Strtofloat(StringGrid2.Cells[i,pos])<>0) then rt:=i;
                   end;
                   ShowMessage('Разрешающая столбец'+Inttostr(rt));
{оценочное отношение}
 For i:=1 to pos-1 do begin

                    StringGrid2.Cells[pot+1,i]:=FloatToStr(Strtofloat(StringGrid2.Cells[1,i])/Strtofloat(StringGrid2.Cells[rt,i]) );
                     ShowMessage('Свободный член'+(StringGrid2.Cells[1,i]));

                    end;
n:=0;
for i:=1 to pos-1 do begin
                   if StrToFloat(StringGrid2.Cells[pot+1,i])>0 then n:=i;
                   end;
if n=0 then ShowMessage('Net resheniy')
                else {2 блок вычислений}
begin
rs:=1;
min:=StrToFloat(StringGrid2.Cells[pot+1,1]  );
For i:=2 to pos-1 do begin
                      if (min> Strtofloat(StringGrid2.Cells[pot+1,i])) and (Strtofloat(StringGrid2.Cells[pot+1,i])>0)

                      then rs:=i;
                     end;
                     ShowMessage('Разрешающая строка'+IntToStr(rs) );
re:=StrTofloat(StringGrid2.Cells[rt,rs]);  {разрешающий элемент}
              ShowMessage('Разрешающий элемент'+FloatToStr(re) );
for i:=1 to pot do begin
                   StringGrid2.Cells[i,rs]:=FloatTostr(StrToFloat(StringGrid2.Cells[i,rs])/re);
                  end;
for i:=1 to pot do {захват разрешающей строки и толбца} begin

a[i]:=StrTofloat(StringGrid2.Cells[i,rs]);
                                                end;
for i:=1 to pos do begin  b[i]:=Strtofloat(StringGrid2.Cells[rt,i]  );
   end ;

  for j:=1 to pos do
   for i:=1 to pot do
   k[j,i]:=-b[j]*a[i]; {умножение разрешающей строки на элемент противоположный элементу разрешающего столбца}

  for j:=1 to pos do
   for i:=1 to pot do
  StringGrid2.Cells[i,j]:=floattostr(strtofloat(StringGrid2.Cells[i,j])+k[j,i]);
{сумма строк исходной и противоположной}

for i:=1 to pot do StringGrid2.Cells[i,rs]:=floattostr(a[i]); {возвращение исходного значения разрешающей строки}
{goto 1;} {метка длЯ зацикливания и получения конечного результата если раскомментировать прога зациклится при первом проходе программы получаются точные результаты}
end;
End;
 except begin
ShowMessage('ВВедите числовые  данные!!!');
Button2.Click;  end;   end;
end;
end.
Ошибка возникает тогда, когда пытаюсь в разрешающем столбце получить сверху и низу разрешающего элемента 0.
Файл проекта http://narod.ru/disk/64357072001.d24...f52/4.rar.html
Заранее благодарен
@ндрю}{@ вне форума Ответить с цитированием
Старый 10.12.2012, 21:18   #2
@ндрю}{@
Новичок
Джуниор
 
Регистрация: 07.12.2012
Сообщений: 2
По умолчанию

Конечно копаться в чужом говне на 2000 строк не кому не хочется, я сам все исправил и все работает спасибо за помощь!
@ндрю}{@ вне форума Ответить с цитированием
Старый 21.12.2012, 00:26   #3
relaxson
 
Регистрация: 24.04.2012
Сообщений: 5
По умолчанию

Андрей поможешь мне пожалуйста кинь мне файл проекта мне на почту, тоже пишу курсовик на эту тему буду очень благодарен. soc-in@bk.ru
relaxson вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать класс "Фигура", от него наследованием создать 3 класса ("треугольник", "четырехугольник", "окружность") funnyy Помощь студентам 3 17.10.2012 17:40
Вывести название соответствующей карты вида "шестерка бубен", "дама червей","туз треф" и т.п. воваава Помощь студентам 3 01.12.2011 12:50
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04