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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2008, 14:13   #1
LLIypLLIyH
Пользователь
 
Аватар для LLIypLLIyH
 
Регистрация: 27.05.2008
Сообщений: 58
Печаль Исправить ошибку

Нужно построить график по формуле y=|x-30|(в кубе)+40

Яделаю, а он мне точки рисует левые совсем, помогите исправить.

Код:
program g;
Uses Graph,crt;
const
{ OPTIONS }
shag=0.1;
lgr = -50;
pgr = 150;
zcrtX=320;
zcrty=240;
mtrX=1;
mtrY=0.001;
colorG=15;
colorOXY=4;
OXYminX=-200;
OXYmaxX=200;
OXYminY=-200;
oxymaxY=200;

Var grDriver : Integer;
grMode : Integer;

x,y:real;
i:integer;
Begin
grDriver:=Detect;
InitGraph(grDriver, grMode, 'E:\bp\bgi');
for i:=OXYminX to OXYmaxX do putpixel(zcrtX+i,zcrty,colorOXY);
for i:=OXYminY to OXYmaxY do putpixel(zcrtX,zcrty-i,colorOXY);

x:=lgr;
while x<=pgr do
begin
if x<>0 then begin y:=abs((x-30)*(x-30)*(x-30))+40;
putpixel(zcrtx+trunc(x*mtrX),zcrty-trunc(y*mtrY),colorg) end;
x:=x+shag;
end;
readkey;
closegraph;
end.

Последний раз редактировалось LLIypLLIyH; 16.06.2008 в 14:16.
LLIypLLIyH вне форума Ответить с цитированием
Старый 16.06.2008, 15:43   #2
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Все у тебя правильно рисует.
Поставь масштаб по Y = 1: mtrY=1;
И сделай проверку на выход за границы переменной Integer. Цикл будет таким:
Код:
while x<=pgr do
begin
  y:=abs((x-30)*(x-30)*(x-30))+40;
  if abs(y) < MaxInt then
    putpixel(zcrtx+trunc(x*mtrX),zcrty-trunc(y*mtrY),colorg);
  x:=x+shag;
end;
_Dmitry вне форума Ответить с цитированием
Старый 16.06.2008, 15:58   #3
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

У меня нормально рисует, только сам график не на месте, у него минимум должен быть по х=+30 по у=+40, а у тебя по х в принципе в ту сторону, делений-то нет, а по у=0, лежит на оси х, а должен быть выше, где-то ошибка в расчетах, или ось х опусти вниз.
puporev вне форума Ответить с цитированием
Старый 16.06.2008, 16:10   #4
LLIypLLIyH
Пользователь
 
Аватар для LLIypLLIyH
 
Регистрация: 27.05.2008
Сообщений: 58
По умолчанию

Он получился В верхней правой четрверти??

А как на координатные оси цифры нанести?
LLIypLLIyH вне форума Ответить с цитированием
Старый 16.06.2008, 16:29   #5
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Цитата:
Он получился В верхней правой четрверти??
Все правильно, а где он по-вашему должен быть?
Цитата:
А как на координатные оси цифры нанести?
Например, наносим шкалу по оси X с шагом в 10 единиц.
Для этого вычисляем положение засечки на шкале: zcrtx+trunc(i*10*mtrX), здесь i - номер засечки. Рисуем ее и ставим цифру. По оси Y аналогично.
_Dmitry вне форума Ответить с цитированием
Старый 16.06.2008, 16:50   #6
LLIypLLIyH
Пользователь
 
Аватар для LLIypLLIyH
 
Регистрация: 27.05.2008
Сообщений: 58
По умолчанию

А. Спасибо
LLIypLLIyH вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите исправить ошибку в задаче Vladislav_87 Паскаль, Turbo Pascal, PascalABC.NET 4 04.07.2008 12:27
Помогите исправить ошибку в задаче VANOLORD Паскаль, Turbo Pascal, PascalABC.NET 9 19.05.2008 22:16
Помогите исправить ошибку Булат Общие вопросы Delphi 3 25.04.2008 10:01
помогите исправить ошибку. alen666 Паскаль, Turbo Pascal, PascalABC.NET 11 08.03.2008 16:43
MySQL как исправить ошибку Dengar PHP 8 03.03.2008 03:29