![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Значит вот какое дело.
У меня имеется код программы которая строит графики, а конкретно для функции y=1-ax^2+x^4 a=3 Мне необходимо, чтобы она строила по графику функции y=x^(2)*e^(-x)+sqrt(3) а и b не дано. (y=икс в квадрате умножить на e в степени минус икс, плюс корень квадратный из 3) буду очень признателен за вашу помощь, т.к сам я в этом деле не очень Значит вот какое дело. У меня имеется код программы которая строит графики, а конкретно для функции y=1-ax^2+x^4 a=3 Мне необходимо, чтобы она строила по графику функции y=x^(2)*e^(-x)+sqrt(3) а и b не дано. (y=икс в квадрате умножить на e в степени минус икс, плюс корень квадратный из 3) буду очень признателен за вашу помощь, т.к сам я в этом деле не очень Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Grids;
type
TForm1 = class(TForm)
Edit_Xn: TEdit;
Edit_Xk: TEdit;
Edit_n: TEdit;
Memo1: TMemo;
StringGrid1: TStringGrid;
Image1: TImage;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Label5: TLabel;
Label6: TLabel;
Button4: TButton;
Edit_a: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
n:integer;
Xn,Xk,a:extended;
X,Y:array[1..100] of extended;// объявлена переменная типа массива с плавающей точкой
Xr,Yr:array[1..100] of integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
dx:extended;
S:string;
begin
n:=strtoint(edit_n.Text);
Xn:=strtofloat(edit_Xn.Text);
Xk:=strtofloat(edit_Xk.Text);
a:=strtofloat(edit_a.Text);
dx:=(Xk-Xn)/(n-1);//расчет шага
for i:=1 to n do
begin
X[i]:=Xn+(i-1)*dx;//расчет точек по абсциссе.
Y[i]:=(1-a)*sqr(x[i])+sqr(sqr(x[i]));//расчет точек по ординате
stringgrid1.Cells[1,i]:=floattostrf(x[i],fffixed,8,2);//вывод значений X
stringgrid1.Cells[2,i]:=floattostrf(y[i],fffixed,8,2);//вывод значений Y
end;
s:=' ';
memo1.Lines.Add(s);
s:='| N | X | Y |';
Memo1.Lines.Add(s);
for i:=1 to n do
begin
s:='';
s:='|'+inttostr(i)+' | '+floattostrf(x[i],fffixed,8,2)+' | '+floattostrf(y[i], fffixed,8,2);
memo1.Lines.Add(s);//Вывод значений в memo
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
i:integer;
begin
image1.Canvas.FillRect(clientrect);//очистка image
for i:=1 to n do
Begin
Stringgrid1.cells[1,i]:=' ';// очистка ряда с X
Stringgrid1.cells[2,i]:=' ';// очистка ряда с Y
end;
Memo1.Clear;//очистка memo
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Close;//закрытие программы
end;
procedure TForm1.Button4Click(Sender: TObject);
var
i,v,c,x0,y0:integer;
minX,maxX,minY,maxY:extended;
begin
minX:=x[1];maxX:=x[1];
minY:=y[1];maxY:=y[1];
for i:=2 to n do
begin
if x[i]<minX then minX:=x[i];//поиск минимального X
if x[i]>maxX then maxX:=x[i];//поиск максимального X
if y[i]<minY then minY:=y[i];//поиск минимального Y
if x[i]>maxY then maxY:=y[i];//поиск максимального X
end;
v:=2;//начальная высота
c:=5;
With image1,Canvas do
Begin
pen.Color:=clRed;x0:=150; y0:=150;//задание цвета карандаша
x0:=150;y0:=150;
MoveTo(x0,0); LineTo(x0,0+height);
MoveTo(0,y0); LineTo(0+Width,y0);
Font.Size:=14;
TextOut(0+Width,y0,'X');
TextOut(x0,0+height,'Y');//задание осей координат
For i:=1 to n do
begin
xr[i]:=c+Round((x[i]-minX)/(maxX-minX)*(Width-2*c));
yr[i]:=Height-c-Round((y[i]-minY)/(maxY-minY)*(Width-2*c));
MoveTo(xr[1],yr[1]);//перемещение из начальной позиции в заданную конечную
end;
for i:=1 to n do LineTo(xr[i],yr[i]);
for i:=1 to n do
Rectangle(xr[i]-v,yr[i]-v,xr[i]+v,yr[i]+v);//прямоугольник вместо точек
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
begin
n:=50;
Xn:=3;
Xk:=10;
Stringgrid1.RowCount:=n+1 ;
Stringgrid1.cells[0,0]:='№';
Stringgrid1.cells[1,0]:='X';
stringgrid1.cells[2,0]:='Y';
for i:=1 to n do
Stringgrid1.cells[0,i]:=''+inttostr(i);
with image1.canvas do
begin
pen.Color:=clred;
Brush.Color:=clwhite;
fillrect(clientrect);
end;
end;
end.
|
|
#2
|
|||
|
|||
|
64-я строка в приведенном коде.
Код:
Y[i]:=sqr(x[i])+exp(-1*x[i])+sqrt(3); //расчет точек по координате |
|
#3
|
|||
|
|||
|
Цитата:
Вот спасибо, очень сильно помогли, дай бог вам здоровья ![]() |
|
#4
|
|||
|
|||
|
Рано я сказал спасибо
Есть еще кое что, программа строит график в виде Снимок2.JPG А мне необходимо чтобы строил в виде Снимок.JPG как мне добиться этого? Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Grids;
type
TForm1 = class(TForm)
Edit_Xn: TEdit;
Edit_Xk: TEdit;
Edit_n: TEdit;
Memo1: TMemo;
StringGrid1: TStringGrid;
Image1: TImage;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Label5: TLabel;
Label6: TLabel;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
n:integer;
Xn,Xk,a:extended;
X,Y:array[1..100] of extended;// объявленна переменная типа массива с плавающей точкой
Xr,Yr:array[1..100] of integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
dx:extended;
S:string;
begin
n:=strtoint(edit_n.Text);
Xn:=strtofloat(edit_Xn.Text);
Xk:=strtofloat(edit_Xk.Text);
dx:=(Xk-Xn)/(n-1);//расчет шага
for i:=1 to n do
begin
X[i]:=Xn+(i-1)*dx;//расчет точек по абсциссе.
Y[i]:=sqr(x[i])+exp(-1*x[i])+sqrt(3); //расчет точек по ординате.
stringgrid1.Cells[1,i]:=floattostrf(x[i],fffixed,8,2);//вывод значений X
stringgrid1.Cells[2,i]:=floattostrf(y[i],fffixed,8,2);//вывод значений Y
end;
s:=' ';
memo1.Lines.Add(s);
s:='| N | X | Y |';
Memo1.Lines.Add(s);
for i:=1 to n do
begin
s:='';
s:='|'+inttostr(i)+' | '+floattostrf(x[i],fffixed,8,2)+' | '+floattostrf(y[i], fffixed,8,2);
memo1.Lines.Add(s);//Вывод значений в memo
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
i:integer;
begin
image1.Canvas.FillRect(clientrect);//очистка image
for i:=1 to n do
Begin
Stringgrid1.cells[1,i]:=' ';// очистка ряда с X
Stringgrid1.cells[2,i]:=' ';// очистка ряда с Y
end;
Memo1.Clear;//очистка memo
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Close;//закрытие программы
end;
procedure TForm1.Button4Click(Sender: TObject);
var
i,v,c,x0,y0:integer;
minX,maxX,minY,maxY:extended;
begin
minX:=x[1];maxX:=x[1];
minY:=y[1];maxY:=y[1];
for i:=2 to n do
begin
if x[i]<minX then minX:=x[i];//поиск минимального X
if x[i]>maxX then maxX:=x[i];//поиск максимального X
if y[i]<minY then minY:=y[i];//поиск минимального Y
if x[i]>maxY then maxY:=y[i];//поиск максимального X
end;
v:=2;//начальная высота
c:=5;
With image1,Canvas do
Begin
pen.Color:=clRed;x0:=150; y0:=150;//задание цвета карандаша
x0:=150;y0:=150;
MoveTo(x0,0); LineTo(x0,0+height);
MoveTo(0,y0); LineTo(0+Width,y0);
Font.Size:=14;
TextOut(0+Width,y0,'X');
TextOut(x0,0+height,'Y');//задание осей координат
For i:=1 to n do
begin
xr[i]:=c+Round((x[i]-minX)/(maxX-minX)*(Width-2*c));
yr[i]:=Height-c-Round((y[i]-minY)/(maxY-minY)*(Width-2*c));
MoveTo(xr[1],yr[1]);//перемещение из начальной позиции в заданную конечную
end;
for i:=1 to n do LineTo(xr[i],yr[i]);
for i:=1 to n do
Rectangle(xr[i]-v,yr[i]-v,xr[i]+v,yr[i]+v);//прямоугольник вместо точек
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
begin
n:=50;
Xn:=3;
Xk:=10;
Stringgrid1.RowCount:=n+1 ;
Stringgrid1.cells[0,0]:='№';
Stringgrid1.cells[1,0]:='X';
stringgrid1.cells[2,0]:='Y';
for i:=1 to n do
Stringgrid1.cells[0,i]:=''+inttostr(i);
with image1.canvas do
begin
pen.Color:=clred;
Brush.Color:=clwhite;
fillrect(clientrect);
end;
end;
end. |
|
#5
|
|||
|
|||
|
А с фига ли?
a^x всегда растет быстрее, чем x^n соотв. это не будет параболой, а будет экспонентой. |
|
#6
|
|||
|
|||
|
Я имел в виду, как сделать чтобы в моей программе были подписаны оси координат, и может некоторые значения, а то просто голый график.
|
|
#7
|
|||
|
|||
|
ну подписывай.
оси рисуются в строках 123-126. Вот там и вставляй TextOut'ом, например. |