Форум программистов CodeGuru
21 Май 2018, 16:54:55 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Project Project1.exe raised exception class EConvertError with message  (Прочитано 22290 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Anchut@
Новичок
*
Офлайн Офлайн

Сообщений: 5


Просмотр профиля
« : 20 Июнь 2010, 15:59:12 »

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

Вот код программы...
Код:
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.
Вот код Project1...
Код:
program Project1;

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

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

Объясните пожалуйста - что не так... а то я в программировании не оч Грустный
Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #1 : 20 Июнь 2010, 19:34:02 »

А на какой строке выдает ?
Записан

Anchut@
Новичок
*
Офлайн Офлайн

Сообщений: 5


Просмотр профиля
« Ответ #2 : 20 Июнь 2010, 20:01:06 »

end.
Записан
Anchut@
Новичок
*
Офлайн Офлайн

Сообщений: 5


Просмотр профиля
« Ответ #3 : 20 Июнь 2010, 20:03:08 »

В Project
Записан
Anchut@
Новичок
*
Офлайн Офлайн

Сообщений: 5


Просмотр профиля
« Ответ #4 : 20 Июнь 2010, 20:05:50 »

а еще выводит сообщения:
[Warning] Kursovaya_MatMod.pas(131): Variable 'VedSt' might not have been initialized
[Warning] Kursovaya_MatMod.pas(124): Variable 'VedStol' might not have been initialized
Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #5 : 20 Июнь 2010, 21:00:43 »

Это только предупреждения.
О том, что переменные не инициализированы.
Т.е. к моменту их использования в них будет содержаться "мусор", т.е. то, что в данный момент находилось в стеке по адресу, куда размещена данная переменная (если это автоматическая переменная, выделяемая на стеке в процедуре).
Записан

Anchut@
Новичок
*
Офлайн Офлайн

Сообщений: 5


Просмотр профиля
« Ответ #6 : 20 Июнь 2010, 21:31:57 »

можете помочь как это сделать? я вообще в программировании не понимаю ((((
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2015, Simple Machines Valid XHTML 1.0! Valid CSS!