Построение графика

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Построение графика

Сообщение Decessus » 11.04.2011 22:00:22

Здравствуйте. В программе пользователь вводит начальное и конечное значение х(xn и xk соответственно), шаг h и коэфициент а. Button1 расчитывает значения функции и заносит из в StringGrid1, при нажатии на Button2 должен создаваться график на основе полученны х и у из StringGrid1, но мне выдаёт ошибку "" is an invalid float. В чём проблема?

Код: Выделить всё
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  StdCtrls, Grids, Menus, TAGraph, TASeries, PrintersDlgs, Printers;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Chart1: TChart;
    Chart1LineSeries1: TLineSeries;
    Chart1LineSeries2: TLineSeries;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    MainMenu1: TMainMenu;
    MenuItem1: TMenuItem;
    MenuItem2: TMenuItem;
    Panel1: TPanel;
    StringGrid1: TStringGrid;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure MenuItem1Click(Sender: TObject);
    procedure MenuItem2Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;i:integer;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.MenuItem1Click(Sender: TObject);
begin
  Close;
end;

procedure TForm1.Button1Click(Sender: TObject);
var x,y,a,xk,h:real; j:integer;
begin
x:=StrToFloat(Edit1.Text);;
xk:=StrToFloat(Edit2.Text);
i:=1;
h:=StrToFloat(Edit3.Text);
a:=StrToFloat(Edit4.Text);
with StringGrid1 do begin
    RowCount:=24;
    for j:=1 to RowCount-1 do begin
      Cells[0,j]:='';
      Cells[1,j]:='';
    end;
  while x<=xk do begin
    Cells[0,i]:=FloatToStr(x);
    y:=sqrt(x*x*x);
    Cells[1,i]:=FloatToStr(y);
    inc(i);
    x:=x+h;
    if  RowCount=i then RowCount:=RowCount+1;
  end;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var x,y,a,xk,h:real; j:integer;
begin
    with StringGrid1 do
      for j:=1 to i-1 do begin
          x:=StrToFloat(Cells[0,i]);
          y:=StrToFloat(Cells[1,i]);

    With  Chart1LineSeries1 do begin
      AddXY(x,y,'',clBlack);

    end;
    end;
end;



procedure TForm1.FormCreate(Sender: TObject);
begin
  with StringGrid1 do begin
      Cells[0,0]:='X';
      Cells[1,0]:='Y';
  end;
end;

procedure TForm1.MenuItem2Click(Sender: TObject);

begin

end;

end.
     
Decessus
новенький
 
Сообщения: 11
Зарегистрирован: 01.04.2011 18:36:52

Re: Построение графика

Сообщение Padre_Mortius » 11.04.2011 22:44:45

Что-то мне подсказывает, что проблема скорее всего с разделителем десятичных знаков
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Построение графика

Сообщение vada » 12.04.2011 18:34:12

Код: Выделить всё
for j:=1 to i-1 do begin
          x:=StrToFloat(Cells[0,i]);
          y:=StrToFloat(Cells[1,i]);


Вот тут ошибка. Непонятно назначение цикла, если Вы все время читаете из пустой последней строки. Видимо надо Cells[0,J]... :?:
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: Построение графика

Сообщение Decessus » 12.04.2011 18:56:01

вот...
по привычке i вписал, спасибо:)
Decessus
новенький
 
Сообщения: 11
Зарегистрирован: 01.04.2011 18:36:52


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 35

Рейтинг@Mail.ru