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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 4 840

/ вопрос решён /

Приветствую, уважаемые эксперты!
Мне очень нужен код программы которая строила бы графики функций: sin, cos, tg, ctg, arcsin, arccos, arctg и arcctg; можно на канве, или через TChar. Сам уже всё перепробовал.

ierihon1 Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: ierihon1 (статус: 1-ый класс)
Вопрос отправлен: 19 декабря 2010, 04:14
Состояние вопроса: решён, ответов: 0.


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

Всего сообщений: 116; последнее сообщение — 26 декабря 2010, 20:15; участников в обсуждении: 4.

Страницы: [« Предыдущая] [1] [2] [3] [4] [5] [6] [Следующая »]

min@y™

min@y™ (статус: Доктор наук), 19 декабря 2010, 09:55 [#21]:

Код посмотрел. Он не имеет никакого отношения к данной задаче.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
ierihon1

ierihon1 (статус: 1-ый класс), 19 декабря 2010, 11:00 [#22]:

min@y™: это ещё почему?
ierihon1

ierihon1 (статус: 1-ый класс), 19 декабря 2010, 11:06 [#23]:

извиняюсь скинул не тот код(((
вот правильный:
ierihon1

ierihon1 (статус: 1-ый класс), 19 декабря 2010, 11:07 [#24]:

function Tform4.ACtXF(ACtX:real; var ACtXmax,ACtXmin,ACtYmax,ACtYmin:real):real;
begin
  w:=StrToFloat(LabeledEdit16.Text);
  v:=StrToFloat(LabeledEdit20.Text);
  r:=StrToFloat(LabeledEdit26.Text);
  t:=StrToFloat(LabeledEdit32.Text);
 
  ACtXF:=w*(ArcCot(ACtX*v-r)+t);
  ACtXmax:=pi;
  ACtXmin:=-pi;
  ACtYmax:=pi;
  ACtYmin:=-pi;
end;
 
procedure TForm4.Button33Click(Sender: TObject);
var ACtX,ACtY:real;
px,py:LongInt;
begin
  if (LabeledEdit16.Text='0') or (LabeledEdit16.Text='') then
    begin
      LabeledEdit16.Text:='1';
    end;
 
  if (LabeledEdit20.Text='0') or (LabeledEdit20.Text='') then
    begin
      LabeledEdit20.Text:='1';
    end;
 
  if LabeledEdit26.Text='' then
    begin
      LabeledEdit26.Text:='0';
    end;
 
  if LabeledEdit32.Text='' then
    begin
      LabeledEdit32.Text:='0';
    end;
 
  image3.Canvas.FillRect(rect(0,0,width,height));
  FormActivate(Sender);
  for PX:=1 to Image3.Width do
    begin
      ACtX:=ACtXmin+PX*(ACtXmax-ACtXmin)/(Image3.Width);
      ACtY:=ACTXF(ACtX,ACtXmax,ACtXmin,ACtYmax,ACtYmin);
      PY:=trunc((Image3.Height)-(ACtY-ACtYmin)*(Image3.height)/(ACtYmax-ACtYmin));
      image3.Canvas.Pixels[PX,PY]:=clBlack;
    end;
end;
min@y™

min@y™ (статус: Доктор наук), 19 декабря 2010, 13:05 [#25]:

Слышь, а ты, случайно, не в Индии ли живёшь?
Код посмотрел.
Лучше бы не смотрел...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
ierihon1

ierihon1 (статус: 1-ый класс), 19 декабря 2010, 13:14 [#26]:

что так всё ужасно? ну объясни мне тупому что не так...
min@y™

min@y™ (статус: Доктор наук), 19 декабря 2010, 13:24 [#27]:

Цитата (ierihon1):

что так всё ужасно?

Полный пипец.

Цитата (ierihon1):

ну объясни мне тупому что не так...

Тебе надо графики выводить? Так программирование с этого надо начинать, а не с кидания на форму 26 TLabeledEdit'ов.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
ierihon1

ierihon1 (статус: 1-ый класс), 19 декабря 2010, 13:31 [#28]:

вообще то их 32.. на каждую функцию по 4 всего функций 8, в одном TLabeledEdit'е вводится растяжение в другой вытягивание в 3ий смещение графика по оси Х в четвёртый смещение по оси У.. как то так... так проблема в том что он строит график не так как вфглядит настоящий график Y=ArcCtgX
min@y™

min@y™ (статус: Доктор наук), 19 декабря 2010, 13:59 [#29]:

Сначала отладь отрисовку грификов, а только потом навешивай на это дело пользовательский интерфейс.
Если график строится неверно, значит ошибка в коде. Юзай отладчик.
Чем я ещё могу помочь?

Цитата (ierihon1):

вообще то их 32

Ваще пипец... Даже представить не могу, как прога на экране выглядит... В кошмарном сне такое не приснится.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
ierihon1

ierihon1 (статус: 1-ый класс), 19 декабря 2010, 14:13 [#30]:

не выглядит довольно прилично... мне надо помочь найти ошибку в этом коде:
ierihon1

ierihon1 (статус: 1-ый класс), 19 декабря 2010, 14:22 [#31]:

unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Math;
 
type
  TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    function F(X:real; var Xmax,Xmin,Ymax,Ymin:real):real;
  end;
 
var
  Form1: TForm1;
 
implementation
var Xmax,Xmin,Ymax,Ymin:real;
{$R *.dfm}
 
 
 
function Tform1.F(X:real; var Xmax,Xmin,Ymax,Ymin:real):real;
begin
  F:=ArcCot(X);
  Xmax:=pi;
  Xmin:=-pi;
  Ymax:=pi;
  Ymin:=-pi;
end;
procedure TForm1.Button1Click(Sender: TObject);
var x,y:real;
    PX,PY:longInt;
  begin
    for PX:=0 to Image1.Width do
      begin
        x:=Xmin+PX*(Xmax-Xmin)/Image1.Width;
        y:=F(x,Xmax,Xmin,Ymax,Ymin);
        PY:=trunc(Image1.Height-(y-Ymin)*Image1.height/(Ymax-Ymin));
        image1.Canvas.Pixels[PX,PY]:=clBlack;
      end;
  end;
end.
min@y™

min@y™ (статус: Доктор наук), 19 декабря 2010, 14:42 [#32]:

Цитата (ierihon1):

мне надо помочь найти ошибку в этом коде

Воспользуйся отладчиком, посмотри, какие промежуточные значения принимают твои переменные.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
ierihon1

ierihon1 (статус: 1-ый класс), 19 декабря 2010, 14:44 [#33]:

а это как сделать нужно?..
min@y™

min@y™ (статус: Доктор наук), 19 декабря 2010, 14:53 [#34]:

Цитата (ierihon1):

а это как сделать нужно?..

Поставь точку останова на строку for PX:=0 to Image1.Width do и по шагам прогони алгоритм, вывесив все интересующие тебя переменные в окно watches.
Если ты всё это не умеешь, почитай какую-нить статью в инете.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 19 декабря 2010, 14:55 [#35]:

Вот тебе чтиво.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
ierihon1

ierihon1 (статус: 1-ый класс), 19 декабря 2010, 15:01 [#36]:

ладно разберёмся) ну так вроде бы со всем разобрались... осталось только только под вопросом то как избавиться от ошибки с арксинусом.. там когда задаю смещение по оси Х или У он выдаёт "invalid floating point opreration" и как от этого избавиться я не знаю... ниже код:
ierihon1

ierihon1 (статус: 1-ый класс), 19 декабря 2010, 15:02 [#37]:

unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Math;
 
type
  TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    function F(X:real; var Xmax,Xmin,Ymax,Ymin:real):real;
  end;
 
var
  Form1: TForm1;
 
implementation
var Xmax,Xmin,Ymax,Ymin:real;
{$R *.dfm}
 
 
 
function Tform1.F(X:real; var Xmax,Xmin,Ymax,Ymin:real):real;
begin
  F:=ArcSin(X);
  Xmax:=1;
  Xmin:=-1;
  Ymax:=pi/2;
  Ymin:=-pi/2;
end;
procedure TForm1.Button1Click(Sender: TObject);
var x,y:real;
    PX,PY:longInt;
  begin
    for PX:=0 to Image1.Width do
      begin
        x:=Xmin+PX*(Xmax-Xmin)/Image1.Width;
        y:=F(x,Xmax,Xmin,Ymax,Ymin);
        PY:=trunc(Image1.Height-(y-Ymin)*Image1.height/(Ymax-Ymin));
        image1.Canvas.Pixels[PX,PY]:=clBlack;
      end;
  end;
end.
min@y™

min@y™ (статус: Доктор наук), 19 декабря 2010, 15:06 [#38]:

Отлавливай в отладчике момент, когда Х выходит за пределы ±1.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
ierihon1

ierihon1 (статус: 1-ый класс), 19 декабря 2010, 15:09 [#39]:

ну по идее он и должен выходить за эти пределы если например сместить график на любое значение по Х... ведь график относительно оси КООРДИНАТ весь должен смешаться...
min@y™

min@y™ (статус: Доктор наук), 19 декабря 2010, 15:13 [#40]:

Сам-то понял, что написал? Облсть определения арксинуса и арккосинуса - это именно ±1. И никак иначе!
Кури учебник алгебры за 7 класс.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Страницы: [« Предыдущая] [1] [2] [3] [4] [5] [6] [Следующая »]

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

Версия движка: 2.6+ (26.01.2011)
Текущее время: 26 апреля 2026, 02:48
Выполнено за 0.04 сек.