Помощь - Поиск - Пользователи - Календарь
Полная версия: графики для биоритмов
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
sergey_180
Перенесено из форума FAQ

помогите , пожалуйста, дополнить программу по определению биоритмов(из учебника Фаронова). Нужно графически показать поведение 3-х синусоид, каждая из которых соответствует определенному биоритму , на заданном интервале. Обязательно нужна легенда. Зараннее спасибо
volvo
sergey_180, я, кажется, просил не постить вопросы в форум FAQ !!!
sergey_180
У меня минимальная абсцисса равна 2*pi/33*days , но программа выдает ошибку N133. Подскажите , пожалуйста , что делать.
klem4
133 -- невозможно вычислить данное выражения, приведи пожалуйста для каких чисел ты это считаешь, и каких типов переменная days и то чему ты это все дело присваиваещь :yes:
sergey_180
у меня days - типа integer и равна целому количеству дней, прошедших от одной даты(даты рождения) до другой. Обе даты вводятся с клавы причем я учитываю что дата рождения меньше второй даты. TI - период интеллектуальной активности unsure.gif
volvo
:no: Не пойдет... Приведи кусок кода (2-3 строки), где происходит ошибка, и типы всех переменных в ошибочном выражении, иначе получается опять гадание на кофейной гуще...
sergey_180
function ScreenY( y: integer ): integer;
begin
  ScreenY := round( GetMaxY / 2 ) - y;
end;
function ScaleX( x: real ): integer;
const
  MinX = 2 * 3.14159 / 33 * days; {вот тут и появляется ошибка}
  MaxX = 2 * 3.14159 / 28 * ( days + interval );
begin
  ScaleX := round( ( x - MinX ) / ( MaxX - MinX ) * GetMaxX );
end;

X-типа real
interval-константа(например interval = 30) huh.gif
volvo
function ScaleX( x: real ): integer;
const
  MinX = 2 * 3.14159 / 33 * days;(вот тут и появляется ошибка)

Заметь, ты пытаешься изменить значение константы !!! Не даст тебе Паскаль этого сделать... Одно дело, когда ты пишешь:
Const
  MinX = 180 * Pi; 
, то есть константа вычисляется при компиляции из уже известных составляющих (это возможно), а совсем другое, когда ты пытаешься вычислить константу с помощью переменной (это запрещено). Что можно сделать:
function ScaleX( x: real ): integer;
Var MinX, MaxX: Real; { определяешь как переменные }
begin
  { и сначала вычисляешь... }
  MinX = 2 * 3.14159 / 33 * days;  { ошибки быть НЕ должно... }
  MaxX = 2 * 3.14159 / 28 * ( days + interval );

  { ... а потом используешь }
  ScaleX := round( ( x - MinX ) / ( MaxX - MinX ) * GetMaxX );
end;
sergey_180
большое спасибо ! :molitva: Вроде все работает .
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.