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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2013, 18:18   #1
Dina 85
Пользователь
 
Регистрация: 09.10.2012
Сообщений: 49
Восклицание Turbo Pascal, программа построения графика

Помогите пожалуйста написать программу которая строит график заданного нелинейного уравнения(как на картинке) :2^x=sin(x+Pi/6) или запись в Pascal (exp(ln(2)*x)-sin(x+Pi/6)).
Изображения
Тип файла: jpg Безымянный.jpg (47.4 Кб, 129 просмотров)
Dina 85 вне форума Ответить с цитированием
Старый 28.04.2013, 08:24   #2
Dina 85
Пользователь
 
Регистрация: 09.10.2012
Сообщений: 49
По умолчанию

Уже программа есть, только работает в принципе правильно, но выдает ошибку, помогите исправить.
Код:
Program Grafik;
uses crt, graph;
const
s=0.001;
xs=30;
ys=-30;
var
j, X0, Y0, x, y, a, b:integer;
i:real;
st:string;
 
function f1(x:real):real;
begin
f1:=sin(x+Pi/6);
end;
 
function f2(x:real):real;
begin
f2:=exp(ln(2)*x);
end;
 
procedure labels;
begin
setcolor(white);
settextstyle(1,0,1);
outtextxy(x0-30,3,'y');
outtextxy(x0+290,y0-35,'x');
line(x0,1,x0,getmaxy);
line(1, y0,getmaxx,y0);
settextstyle(2,0,2);
for j:=-10 to 10 do
begin
setcolor(15);
line(x0+xs*j,y0-7,x0+xs*j,y0+7);
line(x0-7,y0+ys*j,x0+7,y0+ys*j);
setcolor(green);
str(j,st);
outtextxy(x0+xs*j-10,y0+7,st);
if j<>0 then
outtextxy(x0+10,y0+ys*j-10,st);
end;
end;
 
procedure drawgrafik1;
begin
i:=-10;
settextstyle(1,0,4);
repeat
i:=i+s;
x:=round(x0+i*xs);
y:=y0+round(f1(i)*ys);
putpixel(x,y,14);
until i>25;
begin
settextstyle(1,0,1);
setcolor(14);
outtextxy(x0+300,y0+50,'y1=sin(x+Pi/6)');
end;
end;
 
procedure drawgrafik2;
begin
i:=-10;
repeat
i:=i+s;
x:=round(x0+i*xs);
y:=y0+round(f2(i)*ys);
putpixel(x,y,13);
until i>25;
begin
settextstyle(1,0,1);
setcolor(13);
outtextxy(x0+170,y0-200,'y2=2^x');
end;
end;
 
BEGIN
clrscr;
a:=detect;
initgraph(a,b,'');
line(682,0,690,10);
line(682,0,674,10);
line(1362,353,1357,363);
line(1362,353,1357,345);
x0:=round(getmaxx/2);
y0:=round(getmaxy/2);
labels;
drawgrafik1;
drawgrafik2;
readln;
closegraph;
END.
Выдает ошибку 201.Ошибка проверки диапазона.
Изображения
Тип файла: jpg аппй.jpg (39.7 Кб, 65 просмотров)
Dina 85 вне форума Ответить с цитированием
Старый 28.04.2013, 08:52   #3
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Навскидку: Вы всерьез считаете, что имеет смысл строить график при x>2?

Код не смотрел, но вполне вероятно, что правая часть графика уходит слишком высоко вверх так, что это выходит за диапазон представления чисел.
Значит, нужно отсекать: либо заданием других пределов для построения графика в целом, либо, если это по каким-то причинам нежелательно, - проверять, что очередной сегмент кривой попадает в область построения графика (в данном случае y<8) и если не попадает - не пытаться его строить.
s-andriano вне форума Ответить с цитированием
Старый 28.04.2013, 09:16   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от s-andriano
Навскидку: Вы всерьез считаете, что имеет смысл строить график при x>2?
девочка хочет получить такой же график, как у неё не скриншоте (см. пост #1)

На этом графике шкала по Y и шкала по X на данном графике имеют РАЗНУЮ размерность (единичный отрезок по оси X во много раз больше, чем тот же единичный отрезок по оси Y).
В программе на Паскале этого, как мы видим, НЕТ.

поэтому, нужно или ограничивать размерность графика 2^x (как и предложил s-andriano), либо вводить коэффициент сжатия по оси Y...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.04.2013, 18:09   #5
Dina 85
Пользователь
 
Регистрация: 09.10.2012
Сообщений: 49
По умолчанию

Спасибо! Исправила, все работает.
Dina 85 вне форума Ответить с цитированием
Старый 28.04.2013, 19:27   #6
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
На этом графике шкала по Y и шкала по X на данном графике имеют РАЗНУЮ размерность (единичный отрезок по оси X во много раз больше, чем тот же единичный отрезок по оси Y).
Для алгебры это нормально - здесь масштабы по разным осям никак не связаны. Вообще. Поэтому по каждой из осей разумно выбирать наиболее естественный масштаб. Надеяться на их совпадение - утопия.
Если бы это была геометрия - другое дело, там единый масштаб по осям - насущная необходимость, иначе у нас будет форменная вакханалия с углами.
s-andriano вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal. Требуется разработать программу для построения на экране графика функции f(X) igagogi Помощь студентам 0 23.12.2012 18:59
Графика (программа построения графиков)) zooom Общие вопросы C/C++ 1 16.04.2009 15:47
Программа построения графика KpeHDeJIb Помощь студентам 3 07.07.2008 08:05