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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2008, 20:33   #1
gred
Пока ещё
Форумчанин
 
Аватар для gred
 
Регистрация: 26.02.2008
Сообщений: 116
По умолчанию Затухающае колебание пружина

Затухающие колебание пружины - сори за ошибки
Помогите исправить этот код
Код:
program sinus;
uses Crt, Graph;
{$I InitGr.inc}
const
  A = 1;         { амплитуда }
  F = 1000;      { частота }
  T = 1/F;       { период }
  M = 5;         { количество периодов }
  Xmax = M * T;  { наибольшее значение Х. Xmax=x2-x1=M*T-0=M*T }
  Ymax = 2;      { наибольшее значение Y. Ymax=y2-y1=1-(-1)=2 }
  cx = 10;       { Х-координата начала отсчёта }
  cy = 240;      { Y-координата начала отсчёта }
  sx = (640-cx) / Xmax;  { масштабирование по оси X }
  sy = (480-cy) / Ymax;  { масштабирование по оси Y }

{*** Преобразование матем. коор. X в граф. коор. X ***} function CoordX(X: Extended): Integer; var
  RezX: LongInt;
begin
  RezX := Trunc(X * sx) + cx;
  if RezX > $FFFF then
    RezX := Integer(RezX);
  if RezX < cx then
    RezX := cx
  else if RezX > 640 then
    RezX := 640;
  CoordX := RezX
end;

{*** Преобразование матем. коор. Y в граф. коор. Y ***} function CoordY(Y: Extended): Integer; var
  RezY: LongInt;
begin
  RezY := cy - Trunc(Y * sy);
  if RezY > $FFFF then
    RezY := Integer(RezY);
  if RezY < 0 then
    RezY := 0
  else if RezY > 480 then
    RezY := 480;
  CoordY := RezY
end;
{############################################################################}
var
  X,Y, step: Extended;
gd,gm:integer;
begin
InitGraph(gd,gm,'с\tp\bgi');
  graphInit;
  SetColor(13);
  MoveTo(cx, cy);
  step := Xmax / (640-cx);
  X := step;
  while X <= Xmax do
  begin
    { Y = A*sin(wt + fi);        w = 2*Pi/T = 2*Pi*F;        F = 1/T
      где: A - амплитуда; w - круговая частота; T - период; F - частота;
      wt + fi - фаза колебаний; fi - фаза в начальный момент времени (t=0) }
    Y := A*Sin(2*Pi*F*X);
    LineTo(CoordX(X), CoordY(Y));
    X := X + step
  end;
  SetColor(15);
  Line(cx,cy,       640,cy);
  Line(cx,0,        cx,480);
  repeat until KeyPressed;
  CloseGraph
end.
Я мегапрограммер потерявший память.
Если кому помог, поставте '+' я буду благодарен

Последний раз редактировалось gred; 17.05.2008 в 22:03. Причина: исправил
gred вне форума Ответить с цитированием
Старый 17.05.2008, 21:59   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Первое, что бросилось в глаза.
var
X,Y, step: Extended;
gd,gm:integer;
begin
InitGraph(gd,gm,'d\tp\bgi');//создаем путь к файлу(у вас свой)
SetColor(13);
MoveTo(cx, cy);
step := Xmax / (640-cx);
X := step;
while X <= Xmax do
begin
{ Y = A*sin(wt + fi); w = 2*Pi/T = 2*Pi*F; F = 1/T
где: A - амплитуда; w - круговая частота; T - период; F - частота;
wt + fi - фаза колебаний; fi - фаза в начальный момент времени (t=0) }
Y := A*Sin(2*Pi*F*X);
LineTo(CoordX(X), CoordY(Y));
X := X + step
end;
SetColor(15);
Line(cx,cy, 640,cy);
Line(cx,0, cx,480);
repeat until KeyPressed;
CloseGraph
end.
Теги кода не поставил, потому что с ними не работают теги шрифта.
puporev вне форума Ответить с цитированием
Старый 17.05.2008, 22:10   #3
gred
Пока ещё
Форумчанин
 
Аватар для gred
 
Регистрация: 26.02.2008
Сообщений: 116
По умолчанию

Код:
RezX := Trunc(X * sx) + cx;
тут пишет ошибку
Я мегапрограммер потерявший память.
Если кому помог, поставте '+' я буду благодарен
gred вне форума Ответить с цитированием
Старый 17.05.2008, 22:34   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Попробуйте вместо Trunc(X * sx) + cx;
написать round(X * sx) + cx;
puporev вне форума Ответить с цитированием
Старый 17.05.2008, 23:18   #5
pil69
Пользователь
 
Регистрация: 03.04.2008
Сообщений: 11
По умолчанию

А какая необходимость X объявлять как Extended?
pil69 вне форума Ответить с цитированием
Старый 19.05.2008, 16:44   #6
gred
Пока ещё
Форумчанин
 
Аватар для gred
 
Регистрация: 26.02.2008
Сообщений: 116
По умолчанию

А какой тип надо? если не Extended
Я мегапрограммер потерявший память.
Если кому помог, поставте '+' я буду благодарен
gred вне форума Ответить с цитированием
Старый 19.05.2008, 16:58   #7
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Естественно Integer, т.к. в графике работают только целые числа, поскольку часть пиксела нельзя изобразить.
puporev вне форума Ответить с цитированием
Ответ


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