Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Симплекс-метод.... пишу программу для курсовой 
V
    Опции темы
Anchuta88
Дата 20.6.2010, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 20.6.2010

Репутация: нет
Всего: нет



Пишу курсовую по матмоделям... Надо написать программу решения задачи линейного программирования симплекс-методом (минимизация)... Писала на примере максимизации...
При выполнении команды выдает такое сообщение:
Project1.exe raised exception class EConvertError with message"X1' is not a valid floating point value' Process stopped. Use Step or Run to continue
Пожалуйста помогите, объяснте что не так((( я в программировании не шарю smile 
Вот код программы:
Код

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[0,4]:='S3';
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 2 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.

PM MAIL   Вверх
~FoX~
Дата 20.6.2010, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 5
Всего: 68



Anchuta88, На какой строке?.....Судя по сообщению, ошибка в преобразовании "X1"



--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Anchuta88
Дата 21.6.2010, 09:23 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 20.6.2010

Репутация: нет
Всего: нет



Я вот понять и не могу... он выделяет строки в Project1  smile 

А так еще такие сообщения выдает:
[Warning] Kursovaya_MatMod.pas(130): Variable 'VedSt' might not have been initialized // в этой строке VedEl := StrToFloat(StringGrid1.Cells[VedStol, VedSt]);
[Warning] Kursovaya_MatMod.pas(123): Variable 'VedStol' might not have been initialized// в этой строке  if ((A/StrToFloat(StringGrid1.Cells[VedStol, i])) > Amax)

Эти строки идут в поиске ведущей строки...

А еще меня смущает эта строчка
StringGrid1.Cells[0, VedSt] := StringGrid1.Cells[VedStol, 0]; // Что она может значить?
PM MAIL   Вверх
~FoX~
Дата 21.6.2010, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 5
Всего: 68



Anchuta88, Варнинги ерунда, не обращай внимания

Цитата(Anchuta88 @  21.6.2010,  10:23 Найти цитируемый пост)
А еще меня смущает эта строчка
StringGrid1.Cells[0, VedSt] := StringGrid1.Cells[VedStol, 0]; // Что она может значить? 

Нормальная строчка...)) Шли проект мылом miw2000 сабак mail.ru ....



--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
la399fox
  Дата 21.6.2010, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 3.3.2009

Репутация: нет
Всего: нет



Доброго времени суток, я сам недавно писал программу. Вот можна использовать готвый модуль simplex.pas
собственно сам модуль.

Результат защиты 5))

Приятного использования smile  smile 
PM MAIL   Вверх
kami
Дата 21.6.2010, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



Цитата(~FoX~ @  21.6.2010,  12:08 Найти цитируемый пост)
 Варнинги ерунда, не обращай внимания

Варнинги - не ерунда, и внимание на них обращать надо smile

На примере сразу двух варнингов:
Код

function Some:integer;
var
  x:integer;
begin
  if x>5 then // Warning - variable X may not have been initialized бо хто его знает, что будет в X - мусор какой-нибудь.
    Result:=10;
end; // variable Result may not have been initialized - если x не будет больше 5 - хз, что будет в Result.


Это же касается и 
Цитата(Anchuta88 @  21.6.2010,  09:23 Найти цитируемый пост)
Variable 'VedSt' might not have been initialized

Цитата(Anchuta88 @  21.6.2010,  09:23 Найти цитируемый пост)
Variable 'VedStol' might not have been initialized

Значит, эти переменные могут быть неинициализированы, что в принципе, видно из кода - им не присвоены начальные значения, а при прохождении циклов может получиться так, что не будут присвоены никакие. Что, само собой, непонятным образом скажется на вычислениях (например, выплывет List index out of bounds).

Это сообщение отредактировал(а) kami - 21.6.2010, 12:48
PM MAIL WWW   Вверх
~FoX~
Дата 21.6.2010, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 5
Всего: 68



Цитата(kami @  21.6.2010,  13:47 Найти цитируемый пост)
На примере сразу двух варнингов:

Не могу себе представить радиус кривизны рук у программиста  smile 

Цитата(kami @  21.6.2010,  13:47 Найти цитируемый пост)
Это же касается и 
Variable 'VedSt' might not have been initialized
Variable 'VedStol' might not have been initialized


В данном случае, даже если они не инициированы, то ничего не произойдет смертельного  smile 

З.Ы.: Я лично все вары объявляю как i: integer = 0; старая привычка, избавляет от гемороя с инициализацией и мусором в ситуациях например 

Код

try
  i := 0;
........
finally
  if i = 0 then 
......
end

Но это уже оффтоп  smile 

Это сообщение отредактировал(а) ~FoX~ - 21.6.2010, 13:36


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Anchuta88
Дата 21.6.2010, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 20.6.2010

Репутация: нет
Всего: нет



На счет этой строчки
StringGrid1.Cells[0, VedSt] := StringGrid1.Cells[VedStol, 0];
...уже поняла)))) Здесь вместо значения ячейки 'S3' (в строках) присваивается значение 'X1' 

~FoX~, на мыло отправила)))
PM MAIL   Вверх
~FoX~
Дата 21.6.2010, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 5
Всего: 68



Anchuta88, Либо вынеси     VedSt := i за if
Код

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]);
    end;
    VedSt := i;
  end;
VedEl := StrToFloat(StringGrid1.Cells[VedStol, VedSt]);

либо проверяй i на 0 


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Anchuta88
Дата 21.6.2010, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 20.6.2010

Репутация: нет
Всего: нет



~FoX~, наиогромнейшее спасибо))))
Только у меня терь другой вопрос... а почему не выводятся в листбокс значения 'Z' и где есть 'X' вот кусок из кода
Код

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;

PM MAIL   Вверх
~FoX~
Дата 21.6.2010, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 5
Всего: 68



Потому что 'Z' и 'z' это разные зеты ))))


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Anchuta88
Дата 21.6.2010, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 20.6.2010

Репутация: нет
Всего: нет



В том то и дело что я их меняла и все равно не пашет(((

И что делать с этим сообщением?
Variable 'VedStol' might not have been initialized

Это сообщение отредактировал(а) Anchuta88 - 21.6.2010, 16:28
PM MAIL   Вверх
~FoX~
Дата 21.6.2010, 16:34 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 5
Всего: 68



Anchuta88, ничего.... это нормальная реакция прекомпилятора....на всякие if, try, etc....


Это сообщение отредактировал(а) ~FoX~ - 21.6.2010, 16:47


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Anchuta88
Дата 21.6.2010, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 20.6.2010

Репутация: нет
Всего: нет



А что с листбоксом делать?   smile 
PM MAIL   Вверх
~FoX~
Дата 21.6.2010, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 5
Всего: 68



Условие if Amax = 0 then не выполнено, Amax=2  


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0597 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.