|
Вопрос # 2 879/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!
мне нужно узнать как написать программу в Delphi по заданию:
В полярной системе координат построить график спирали Архимеда r=a/(ф*ф).
Даю вам навсякий пример работы, мой вариант 1
Заранее спасибо!
К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)
 |
Вопрос задала: nomuru (статус: Посетитель)
Вопрос отправлен: 2 июня 2009, 14:54
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 8; последнее сообщение — 2 июня 2009, 16:43; участников в обсуждении: 2.
|
nomuru (статус: Посетитель), 2 июня 2009, 15:52 [#1]:
вот моя прога, подскажите, в чем моя ошибка:
procedure TForm1.FormPaint(Sender: TObject);
const
XScale = 200;
XShift = XScale;
YScale = 200;
YShift = YScale;
ER = 2;
var
n, i, X, Y: Integer;
r, fi, fi_0, fi_n, h, a: Real;
begin
try
n := StrToInt(Edit1.Text);
a := StrToFloat(Edit2.Text);
fi_0 := StrToFloat(Edit3.Text);
fi_n := StrToFloat(Edit4.Text);
h := Abs(fi_n - fi_0) / n;
with Canvas do
begin
Pen.Color := clNavy;
Brush. Color := clLime;
end;
for i := 0 to n do
begin
fi := fi_0 + i * h;
r := a/(fi*fi);
X := Round(XScale * r * Cos(fi) + XShift);
Y := Round(YScale * r * Sin(fi) + YShift);
Canvas.Ellipse(X - ER, Y - ER, X + ER, Y + ER
end;
except
on e: EConvertError do
MessageDlg('Нужно вводить числа', mtError, [mbOK], 0);
else
raise;
end;
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
Invalidate;
end;
procedure TForm1.Edit4Change(Sender: TObject);
begin
Caption := Format('График функции r=a/fi*fi ', [Edit4.Text]);
Edit1Change(Self);
end;
end.
|
|
Вадим К (статус: Академик), 2 июня 2009, 15:55 [#2]:
учитывая то, что процедура Paint вызывается каждый раз, как только надо обновить форму, строка MessageDlg('Нужно вводить числа', mtError, [mbOK], 0); выглядит издевательством. Ведь как только сообщение будет закрыто, вызоветься снова процедура обновления...и снова сообщение... и так до победного конца.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
nomuru (статус: Посетитель), 2 июня 2009, 16:08 [#3]:
т.е. мне ее нужно убрать, и nulf прога пойдет?
|
|
nomuru (статус: Посетитель), 2 июня 2009, 16:08 [#4]:
тогда*
|
|
nomuru (статус: Посетитель), 2 июня 2009, 16:21 [#5]:
сейчас я убрала эту процедуру и прога выглядит так:
procedure TForm1.FormPaint(Sender: TObject);
XScale = 200;
XShift = XScale;
YScale = 200;
YShift = YScale;
ER = 2;
var
n, i, X, Y: Integer;
r, fi, fi_0, fi_n, h, a: Real;
begin
try
n := StrToInt(Edit1.Text);
a := StrToFloat(Edit2.Text);
fi_0 := StrToFloat(Edit3.Text);
fi_n := StrToFloat(Edit4.Text);
h := Abs(fi_n - fi_0) / n;
with Canvas do
begin
Pen.Color := clNavy;
Brush. Color := clLime;
end;
for i := 0 to n do
begin
fi := fi_0 + i * h;
r := a/(fi*fi);
X := Round(XScale * r * Cos(fi) + XShift);
Y := Round(YScale * r * Sin(fi) + YShift);
Canvas.Ellipse(X - ER, Y - ER, X + ER, Y + ER);
end;
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
Invalidate;
end;
procedure TForm1.Edit4Change(Sender: TObject);
begin
Caption := Format('Ãðàôèê ôóíêöèè r=a/fi*fi ', [Edit4.Text]);
Edit1Change(Self);
end;
end.
Но когда жму компелировать то выскакивает ошибка:
Unknown directive: 'XScale'
Undeclared identifier: 'XScale'
Undeclared identifier: 'XShift'
че делать?
|
|
Вадим К (статус: Академик), 2 июня 2009, 16:29 [#6]:
написать так, как положено
procedure TForm1.FormPaint(Sender: TObject);
const
XScale = 200;
XShift = XScale;
YScale = 200;
Галочка "подтверждения прочтения" - вселенское зло.
|
|
nomuru (статус: Посетитель), 2 июня 2009, 16:40 [#7]:
я так и сделала, выскакивает ошибка
EXEPT or FINNALY
|
|
Вадим К (статус: Академик), 2 июня 2009, 16:43 [#8]:
ну наверно и try надо убрать.
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|