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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.06.2010, 13:26   #1
Anchut@
 
Регистрация: 09.06.2010
Сообщений: 3
Вопрос Variable <Имя> might not have been initialized

Пишу курсовую по матмоделям... Надо написать программу решения задачи линейного программирования симплекс-методом (минимизация)... Писала на примере максимизации, но выдает такие сообщения
Variable 'VedSt' might not have been initialized
Variable 'VedStol' might not have been initialized
... Не пойму что не так...я же задала значения вроде...
Код:
unit Kursovaya_MatMod;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Edit10: TEdit;
    Edit11: TEdit;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    StringGrid1: TStringGrid;
    Button1: TButton;
    Button2: TButton;
    ListBox1: TListBox;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;


implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
StringGrid1.ColCount:=7;
StringGrid1.RowCount:=5;
StringGrid1.cells[0,1]:='Z';
StringGrid1.cells[0,2]:='S1';
StringGrid1.cells[0,3]:='S2';
StringGrid1.cells[1,0]:='X1';
StringGrid1.cells[2,0]:='X2';
StringGrid1.cells[3,0]:='S1';
StringGrid1.cells[4,0]:='S2';
StringGrid1.cells[5,0]:='S3';
StringGrid1.cells[6,0]:='Решение';

// z-строка
StringGrid1.cells[1,1]:=FloatToStr(StrToFloat(Edit1.Text)*(-1));
StringGrid1.cells[2,1]:=FloatToStr(StrToFloat(Edit2.Text)*(-1));
StringGrid1.cells[3,1]:='0';
StringGrid1.cells[4,1]:='0';
StringGrid1.cells[5,1]:='0';
StringGrid1.cells[6,1]:='0';

// S1-строка
StringGrid1.cells[1,2]:=FloatToStr(StrToFloat(Edit3.Text)*(-1));
StringGrid1.cells[2,2]:=FloatToStr(StrToFloat(Edit4.Text)*(-1));
StringGrid1.cells[3,2]:='1';
StringGrid1.cells[4,2]:='0';
StringGrid1.cells[5,2]:='0';
StringGrid1.cells[6,2]:=FloatToStr(StrToFloat(Edit5.Text)*(-1));

// S2-строка
StringGrid1.cells[1,3]:=FloatToStr(StrToFloat(Edit6.Text)*(-1));
StringGrid1.cells[2,3]:=FloatToStr(StrToFloat(Edit7.Text)*(-1));
StringGrid1.cells[3,3]:='0';
StringGrid1.cells[4,3]:='1';
StringGrid1.cells[5,3]:='0';
StringGrid1.cells[6,3]:=FloatToStr(StrToFloat(Edit8.Text)*(-1));

// S3-строка
StringGrid1.cells[1,4]:=FloatToStr(StrToFloat(Edit9.Text)*(-1));
StringGrid1.cells[2,4]:=FloatToStr(StrToFloat(Edit10.Text)*(-1));
StringGrid1.cells[3,4]:='0';
StringGrid1.cells[4,4]:='0';
StringGrid1.cells[5,4]:='1';
StringGrid1.cells[6,4]:=FloatToStr(StrToFloat(Edit11.Text)*(-1));
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  A, Amax, VedEl: real;
  i, j, VedStol, VedSt: integer;
begin
// Поиск ведущего столбца

Amax := -9999;
for i := 1 to 3 do
  begin
    A := StrToFloat(StringGrid1.Cells[i,1]);
    if A > Amax Then
      begin
        Amax := A;
        VedStol :=i;
      end;
  end;

// Поиск ведущей строки

Amax := -9999;
for i:=2 to 4 do
  begin
    A := StrToFloat(StringGrid1.Cells[6,i]);
    if ((A/StrToFloat(StringGrid1.Cells[VedStol, i])) > Amax)
    and ((StrToFloat(StringGrid1.cells[VedStol, i])) > 0) then
    begin
      Amax := A/StrToFloat(StringGrid1.Cells[VedStol, i]);
      VedSt := i;
    end;
  end;
VedEl := StrToFloat(StringGrid1.Cells[VedStol, VedSt]);

// Пересчет ведущей строки

for i := 1 to 6 do
begin
  StringGrid1.Cells[i, VedSt] := FloatToStr(StrToFloat(StringGrid1.Cells[i, VedSt])/VedEl);
end;
  ListBox1.Items.Add('Строка '+FloatToStr(VedStol)+' строка '+FloatToStr(VedSt));
  ListBox1.Items.Add('Ведущий элемент '+FloatToStr(VedEl));

// Пересчет строк

  for j := 1 to 4 do
  begin
    if j <> VedSt then
    begin
      VedEl := StrToFloat(StringGrid1.Cells[VedStol, j]);
      for i := 1 to 6 do
      begin
        StringGrid1.Cells[i, j] := FloatToStr(StrToFloat(StringGrid1.Cells[i,j]) - StrToFloat(StringGrid1.Cells[i, VedSt]) * VedEl);
      end;
    end;
  end;
StringGrid1.Cells[0, VedSt] := StringGrid1.Cells[VedStol, 0];



// Вывод результатов
Amax := 0;
for i := 1 to 6 do
  begin
  A := StrToFloat(StringGrid1.Cells[i, 1]);
  if A < 0 then
    begin
      Amax := Amax + 1;
    end;
  end;
if Amax = 0 then
  begin
    for i := 1 to 4 do
    begin
      if Pos('x', StringGrid1.Cells[0, i])>0 then ListBox1.Items.Add(StringGrid1.Cells[0, i] + ' = ' +  StringGrid1.Cells[6, i]);
      if StringGrid1.Cells[0, i] = 'z' then ListBox1.Items.Add(StringGrid1.Cells[0, i] + ' = ' + StringGrid1.Cells[6, i]);
    end;
  end;

end;

end.
Срочно нужно... Заранее спасибо
Anchut@ вне форума Ответить с цитированием
Старый 20.06.2010, 13:28   #2
Девочка-Скандал
Пользователь
 
Регистрация: 16.06.2010
Сообщений: 42
По умолчанию

Код:
if A > Amax Then
      begin
        Amax := A;
        VedStol :=i;
      end;
это событие может и не наступить
также как и это
Код:
if ((A/StrToFloat(StringGrid1.Cells[VedStol, i])) > Amax)
    and ((StrToFloat(StringGrid1.cells[VedStol, i])) > 0) then
    begin
      Amax := A/StrToFloat(StringGrid1.Cells[VedStol, i]);
      VedSt := i;
    end;
Девочка-Скандал вне форума Ответить с цитированием
Старый 20.06.2010, 13:32   #3
Anchut@
 
Регистрация: 09.06.2010
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Девочка-Скандал Посмотреть сообщение
это событие может и не наступить
также как и это
А как тогда быть? я вообще в программировании не шарю
Anchut@ вне форума Ответить с цитированием
Старый 20.06.2010, 13:38   #4
Девочка-Скандал
Пользователь
 
Регистрация: 16.06.2010
Сообщений: 42
По умолчанию

Цитата:
А как тогда быть?
либо вначале их обнулить,либо если не мешает --то ничего не делать
Девочка-Скандал вне форума Ответить с цитированием
Старый 20.06.2010, 14:21   #5
Anchut@
 
Регистрация: 09.06.2010
Сообщений: 3
По умолчанию

Извините, в коде была мною допущена ошибка - ведущий столбец выбирается из двух столбцов, т.е.
Код:
// Поиск ведущего столбца
 
Amax := -9999;
for i := 1 to 2 do
  begin
    A := StrToFloat(StringGrid1.Cells[i,1]);
    if A > Amax Then
      begin
        Amax := A;
        VedStol :=i;
      end;
  end;
Сам интерфейс программы выглядит так:
Скрин.JPG
Так что должно полюбому выполниться...

Только теперь выдает такое сообщение:
Сообщение3.JPG
Вот текст Project1:
Код:
program Project1;

uses
  Forms,
  Kursovaya_MatMod in 'Kursovaya_MatMod.pas' {Form1};

{$R *.res}
// Выделяет этот блок
begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
Цитата:
Сообщение от Девочка-Скандал Посмотреть сообщение
либо вначале их обнулить,либо если не мешает --то ничего не делать
А как мне ничего не делать если не считает?(((
А обнулять это как?

Последний раз редактировалось Stilet; 21.06.2010 в 10:59.
Anchut@ вне форума Ответить с цитированием
Старый 21.06.2010, 11:01   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
A := StrToFloat(StringGrid1.Cells[i,1]);
Напиши A := StrToFloatDEF(StringGrid1.Cells[i,1],0); для успокоения души, тогда оно вернет 0 если не сможет преобразовать строку в число.
Цитата:
Variable 'VedSt' might not have been initialized
Это разве ошибка? Это предупреждение, а на них не обращай особого внимания.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка - Run-time error '91' Object variable or With block variable not set Артур Иваныч Microsoft Office Excel 13 12.09.2012 14:18
For loop control variable must be simple local variable Hehe Общие вопросы Delphi 11 26.12.2011 19:42
Undefined variable SPY-FeinD PHP 5 27.05.2009 19:41
BGI Error: Graphics not initialized (use InitGraph) Klyan Паскаль, Turbo Pascal, PascalABC.NET 3 30.04.2009 15:32
Assignment to FOR-Loop variable zotox Помощь студентам 4 24.03.2009 11:32