Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.06.2007, 15:07   #1
Diller
Пользователь
 
Аватар для Diller
 
Регистрация: 21.06.2007
Сообщений: 55
По умолчанию динамический массив

люди найдите ошибку.. прога работает до строчки ymax:=L+a*(-10)*(-10)+b*(-10)+c;
а дальше пишет illegal poit operation

код
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, TeeProcs, TeEngine, Chart, Series, Grids;

type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Chart1: TChart;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit4: TEdit;
Label4: TLabel;
Series1: TLineSeries;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Series2: TLineSeries;
Series3: TLineSeries;
Edit8: TEdit;
Label8: TLabel;
Label9: TLabel;
Edit9: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
var
a,b,c : real;
implementation


{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
i,razmer: integer;
a,b,c,L,ymax,ymin,y1,ots,razr,raz,x ,x1,x2, d : real;
y: array of real;
begin
L:=StrToFloat(Edit4.Text);
a:=StrToFloat(Edit1.Text);
b:=StrToFloat(Edit2.Text);
c:=StrToFloat(Edit3.Text);
series1.Clear;
series2.Clear;
series3.Clear;
if a=0 then
begin
ymin:=b*5+c; {для рисования графика}
ymax:=L+b*10+c+5; {для рисования графика}
edit8.Text:=floattostr(ymax);
ots:=(ymax-c)/b;
edit7.Text:=floattostr(ots);
raz:=((ots -5)/0.01);
razr:=round(raz);
edit5.Text:=floattostr(razr); {перевод из типа real в тип integer }
razmer:=strtoint(edit5.Text); {перевод из типа real в тип integer}
edit6.Text:=inttostr( razmer); {перевод из типа real в тип integer}
setlength(y,razmer);
x:=5;
i:=0;
repeat
ymin:=b*10+c; { реальные размеры БЧ}
ymax:=L+b*10+c; { реальные размеры БЧ}
y[i]:=b*x+c;
y1:=y[i];
series1.AddXY(x,y1);
series2.AddXY(x,ymin);
series3.AddXY(x,ymax);
x:=x+0.01;
i:=i+1;
until x>=ots;

end
else
begin
{ymin:=a*(-5)*(-5)+b*(-5)+c; {для рисования графика}
ymax:=L+a*(-10)*(-10)+b*(-10)+c+5; {для рисования графика}
d:=b*b - 4*a*(c-ymax);
if d<0then
begin
showmessage('неправильно введены а,b или с');
end
else
begin
x1:=(-b - sqrt(d))/(2*a);
x2:=(-b + sqrt(d))/(2*a);
Edit9.Text:=floattostr(x2);
raz:=((x2-x1)/0.01);
razr:=round(raz);
edit5.Text:=floattostr(razr); {перевод из типа real в тип integer }
razmer:=strtoint(edit5.Text);{перев од из типа real в тип integer }
edit6.Text:=inttostr( razmer);
setlength(y,razmer);
edit9.Text:=floattostr(ots);
x:=x1;
i:=0;
repeat
ymin:=a*(-10)*(-10)+b*(-10)+c;{ реальные размеры БЧ}
ymax:=L+a*(-10)*(-10)+b*(-10)+c; { реальные размеры БЧ}
y[i]:=a*x*x+b*x+c;
y1:=y[i];
series1.AddXY(x,y1);
series2.AddXY(x,ymin);
series3.AddXY(x,ymax);
x:=x+0.01;
i:=i+1;
until x>=x2;
end;
end;



end;

end.

www.nnm.ru
۩۞۩___Смысл заключается,_______________۩۞۩
۩۞۩___Лишь в величине вашего разума____.۩۞۩
۩۞۩__♣™_Diller_™♣__۩۞۩
Diller вне форума Ответить с цитированием
Старый 23.06.2007, 15:50   #2
Alex21
With best regards
Участник клуба
 
Регистрация: 20.04.2007
Сообщений: 1,448
По умолчанию

Попробуй
Код:
ymin,ymax:extended;
Alex21 вне форума Ответить с цитированием
Старый 23.06.2007, 16:36   #3
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

А еще можно немного упростить сами формулы:
ymin:=a*100 - b*10 + c;
ymax:=L+ymin
Jeni вне форума Ответить с цитированием
Старый 23.06.2007, 20:37   #4
Diller
Пользователь
 
Аватар для Diller
 
Регистрация: 21.06.2007
Сообщений: 55
По умолчанию

ymin,ymax - они расчитываются сними все ок..
массив y[i] - заполняется.., но вот грав=фик не рисуется

repeat
ymin:=a*(-10)*(-10)+b*(-10)+c;{ реальные размеры БЧ}
ymax:=L+a*(-10)*(-10)+b*(-10)+c; { реальные размеры БЧ}- они нормально считаются проверил..

y[i]:=a*x*x+b*x+c; массив заполняется проверил -
остается только
y1:=y[i];
series1.AddXY(x,y1);
series2.AddXY(x,ymin);
series3.AddXY(x,ymax);
x:=x+0.01;
i:=i+1;
until x>=x2;

www.nnm.ru
۩۞۩___Смысл заключается,_______________۩۞۩
۩۞۩___Лишь в величине вашего разума____.۩۞۩
۩۞۩__♣™_Diller_™♣__۩۞۩
Diller вне форума Ответить с цитированием
Старый 23.06.2007, 20:41   #5
Diller
Пользователь
 
Аватар для Diller
 
Регистрация: 21.06.2007
Сообщений: 55
По умолчанию

у меня как Вы успели заметить построение приблизительно одинаковых графиков.. верхний цикл repeat until работает, А ВОТ С НИЖНИМ ПРОБЛЕМА..

прочтя мою ремарку,уточните ,пожалуйста, Ваши рекомендации по исправлению возникшей ошибки..
заранее Вам спасибо..

www.nnm.ru
۩۞۩___Смысл заключается,_______________۩۞۩
۩۞۩___Лишь в величине вашего разума____.۩۞۩
۩۞۩__♣™_Diller_™♣__۩۞۩
Diller вне форума Ответить с цитированием
Старый 24.06.2007, 11:52   #6
Alex21
With best regards
Участник клуба
 
Регистрация: 20.04.2007
Сообщений: 1,448
По умолчанию

Цитата:
Сообщение от Diller Посмотреть сообщение
if d<0then
begin
.....
x1:=(-b - sqrt(d))/(2*a);
x2:=(-b + sqrt(d))/(2*a);
....
Незачет вам по математике!!!!!!!
Кто же берет корень из отрицательного числа???
Alex21 вне форума Ответить с цитированием
Старый 24.06.2007, 13:17   #7
Diller
Пользователь
 
Аватар для Diller
 
Регистрация: 21.06.2007
Сообщений: 55
По умолчанию

if d<0then
begin
showmessage('неправильно введены а,b или с');
end

Незачет вам по внимательности!!!!!!!

www.nnm.ru
۩۞۩___Смысл заключается,_______________۩۞۩
۩۞۩___Лишь в величине вашего разума____.۩۞۩
۩۞۩__♣™_Diller_™♣__۩۞۩
Diller вне форума Ответить с цитированием
Старый 24.06.2007, 14:29   #8
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, TeeProcs, TeEngine, Chart, Series;

type
  TForm1 = class(TForm)
    Chart1: TChart;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Button1: TButton;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Series1: TLineSeries;
    Series2: TLineSeries;
    Series3: TLineSeries;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  a,b,c : real;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
razmer: integer;
a,b,c,L,ymax,ymin,y1,ots,razr,raz,x,x1,x2, d : real;
begin
L:=StrToFloat(Edit4.Text);
a:=StrToFloat(Edit1.Text);
b:=StrToFloat(Edit2.Text);
c:=StrToFloat(Edit3.Text);
Chart1.Series[0].Clear;
Chart1.Series[1].Clear;
Chart1.Series[2].Clear;
if abs(a)<0.000001 then
begin
ymin:=b*5+c; 
ymax:=L+b*10+c+5; 
edit8.Text:=floattostr(ymax);
ots:=(ymax-c)/b;
edit7.Text:=floattostr(ots);
raz:=((ots -5)/0.01);
razr:=round(raz);
edit5.Text:=floattostr(razr); 
razmer:=strtoint(edit5.Text); 
edit6.Text:=inttostr( razmer);
x:=5;
ymin:=b*10+c;
ymax:=L+ymin;
repeat
y1:=y1+b*0.01;
Chart1.Series[0].AddXY(x,y1);
Chart1.Series[1].AddXY(x,ymin);
Chart1.Series[2].AddXY(x,ymax);
x:=x+0.01;
until x>=ots;

end
else
begin
ymax:=L+a*(-10)*(-10)+b*(-10)+c+5; 
d:=b*b - 4*a*(c-ymax);
if d<0then
begin
showmessage('Неправильно введены a,b или c');
end
else
begin
x1:=(-b - sqrt(d))/(2*a);
x2:=(-b + sqrt(d))/(2*a);
Edit9.Text:=floattostr(x2);
raz:=((x2-x1)/0.01);
razr:=round(raz);
edit5.Text:=floattostr(razr); 
razmer:=strtoint(edit5.Text);
edit6.Text:=inttostr( razmer);
edit9.Text:=floattostr(ots);
x:=x1;
ymin:=a*(-10)*(-10)+b*(-10)+c;
ymax:=L+ymin;
y1:=a*x*x+b*x+c;
repeat
y1:=y1+a*(0.02*x+0.0001)+b*0.01;
Chart1.Series[0].AddXY(x,y1);
Chart1.Series[1].AddXY(x,ymin);
Chart1.Series[2].AddXY(x,ymax);
x:=x+0.01;
until x>=x2;
end;
end;



end;

end.
Работает.

Последний раз редактировалось Carbon; 24.06.2007 в 14:32.
Carbon вне форума Ответить с цитированием
Старый 24.06.2007, 14:59   #9
Diller
Пользователь
 
Аватар для Diller
 
Регистрация: 21.06.2007
Сообщений: 55
По умолчанию

Chart1.Series[2].AddXY(x,ymax); поясните что это??

кроме этого Вы еще что -то меняли?? я вроде ненашел..

www.nnm.ru
۩۞۩___Смысл заключается,_______________۩۞۩
۩۞۩___Лишь в величине вашего разума____.۩۞۩
۩۞۩__♣™_Diller_™♣__۩۞۩
Diller вне форума Ответить с цитированием
Старый 24.06.2007, 15:01   #10
Diller
Пользователь
 
Аватар для Diller
 
Регистрация: 21.06.2007
Сообщений: 55
По умолчанию

нашел что еще меняли.. поясните почему..

www.nnm.ru
۩۞۩___Смысл заключается,_______________۩۞۩
۩۞۩___Лишь в величине вашего разума____.۩۞۩
۩۞۩__♣™_Diller_™♣__۩۞۩
Diller вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
динамический массив Dimon Паскаль, Turbo Pascal, PascalABC.NET 3 21.03.2008 18:08
Динамический массив _ares_ Паскаль, Turbo Pascal, PascalABC.NET 3 26.12.2007 23:54
Динамический массив. Mickle Помощь студентам 9 21.06.2007 20:31
Динамический массив Mickle Общие вопросы Delphi 8 19.06.2007 06:45
Динамический массив + Dll. LEKA Общие вопросы Delphi 7 11.05.2007 20:05