| 
| 
 | Вопрос # 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 надо убрать. Галочка "подтверждения прочтения" - вселенское зло. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |