Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 879

/ вопрос открыт /

Приветствую, уважаемые эксперты!
мне нужно узнать как написать программу в Delphi по заданию:
В полярной системе координат построить график спирали Архимеда r=a/(ф*ф).
Даю вам навсякий пример работы, мой вариант 1

Заранее спасибо!

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

nomuru Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задала: nomuru (статус: Посетитель)
Вопрос отправлен: 2 июня 2009, 14:54
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 8; последнее сообщение — 2 июня 2009, 16:43; участников в обсуждении: 2.
nomuru

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

nomuru (статус: Посетитель), 2 июня 2009, 16:08 [#3]:

т.е. мне ее нужно убрать, и nulf прога пойдет?
nomuru

nomuru (статус: Посетитель), 2 июня 2009, 16:08 [#4]:

тогда*
nomuru

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

nomuru (статус: Посетитель), 2 июня 2009, 16:40 [#7]:

я так и сделала, выскакивает ошибка
EXEPT or FINNALY
Вадим К

Вадим К (статус: Академик), 2 июня 2009, 16:43 [#8]:

ну наверно и try надо убрать.
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:59
Выполнено за 0.03 сек.