![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 12.11.2007
Сообщений: 31
|
![]()
Господа! У меня возникает ошибка с константой в формуле. Впринципе прога должна быть универсальной и строить любой график.
![]() ![]() unit grfunc_; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormPaint(Sender: TObject); procedure FormResize(Sender: TObject); private { Private declarations } public { Public declarations } end; const e0=8.85e-12; e=1; q=5; var Form1: TForm1; implementation {$R *.DFM} // график который строим Function f(x:real):Extended; var zn:Integer; begin //f:=Sin(x) //если брать аргрумент синуса то он строит гр // с синусом все просто есть функция и аргумент, а у меня в фомуле не знаю что взять за аргумент for x:=2 to 1000 do f:=2*q/(4*pi*e0*e*sqr(x)); end; // строим график procedure GrOfFunc; var x1,x2:Extended; // границы изменения аргумента функции y1,y2:Extended; //границы изменения значения функции x:Extended; //аргумент функции y:Extended; // знач ф-ии в точке dx:Extended; // приращение аргумента l,b:integer; //область вывода графика w,h:integer; //ширина и высота области вывода mx,my:Extended; //масштаб по осям x0,y0:integer; // начло координат begin //область выода графика l:=10; // X -координата лев верхнего угла b:=Form1.ClientHeight-20; // Y - h:=Form1.ClientHeight-40; //высота w:=Form1.Width-40; // ширина x1:=0; // нижняя граница аргумента x2:=25; // верхняя граница аргумента dx:=0.01; // шаг y1:=f(x1); // мин y2:=f(x1); // макс x:=x1; repeat y := f(x); if y < y1 then y1:=y; if y > y2 then y2:=y; x:=x+dx; until (x>=x2); // масштабируем my:=h/abs(y2-y1);{тут дает вторую ошибку} mx:=w/abs(x2-x1); // оси x0:=l; y0:=b-Abs(Round(y1*my)); with form1.Canvas do begin MoveTo(l,b);LineTo(l,b-h); MoveTo(x0,y0);LineTo(x0+w,y0); TextOut(l+5,b-h,FloatToStrF(y2,ffGeneral,6,3)); TextOut(l+5,b,FloatToStrF(y1,ffGene ral,6,3)); x:=x1; repeat y:=f(x); Pixels[x0+Round(x*mx),y0-Round(y*my)]:=clRed; x:=x+dx; until (x>=x2); end; end; procedure TForm1.FormPaint(Sender: TObject); begin GrOfFunc; end; procedure TForm1.FormResize(Sender: TObject); begin form1.Canvas.FillRect(Rect(0,0,Clie ntWidth,ClientHeight)); //вывод графика GrOfFunc; end; end. //Ну что ж думаю что все подробно описано) |
![]() |
![]() |
![]() |
#2 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
![]()
А что призван делать загадочный цикл по вещественной (!) переменной в функции f? Вообще говоря, вещественные числа на 0 делить можно, это у Дельфи бзык на эту тему, может быть кто-то, кто силён в дельфи, подскажет, как это выключается, правда толку в данном случае от этого мало. Проще развернуть деление при пересчёте координат наоборот - делить на размеры формы, а в функции предусмотреть эту неприятность с помощью IsInfinite или IsZero, или даже через try и возвращать какое-нибудь откалиброваное большое значение.
|
![]() |
![]() |
![]() |
#3 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Что за проблема поставить проверки?
I'm learning to live...
|
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 12.11.2007
Сообщений: 31
|
![]()
так чего понять то надо?
|
![]() |
![]() |
![]() |
#5 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Ну везде где есть потенциальная опасность деления на 0 If или Try ставь
I'm learning to live...
|
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 12.11.2007
Сообщений: 31
|
![]() |
![]() |
![]() |
![]() |
#7 | |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
![]() Цитата:
и сделай лучше так: Код:
|
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Построить график функции, используя компонент TChart. | vitalik007 | Компоненты Delphi | 3 | 09.06.2014 11:20 |
Графика в паскале (построить график функции) | matic | Помощь студентам | 4 | 26.11.2012 17:02 |
График функции в C++ Builder.. ПОМОГИТЕ! | Cyberbest | Помощь студентам | 2 | 25.06.2009 21:06 |
График функции | Леха | Общие вопросы Delphi | 18 | 16.04.2007 20:50 |