|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Опции просмотра |
26.04.2013, 11:22 | #1 (permalink) |
Member
Регистрация: 04.10.2012
Сообщений: 49
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Turbo Pascal, построение графика нелинейного уравнения
График должен выглядеть так. |
26.04.2013, 11:22 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Решение проблемы может скрываться в одной из этих тем Построение графика нелинейного уравнения, Turbo Pascal Построение фигур в Turbo Pascal Построение блок схем по коду Pascal Задача в Паскале на построение графика функции Решение нелинейного уравнения на Паскале Построение графика ФНЧ, LR Фильтр |
27.04.2013, 08:59 | #2 (permalink) |
Member
Регистрация: 04.10.2012
Сообщений: 49
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Уже программа есть, работает в принципе правильно, но выдает ошибку, помогите исправить, чтобы ошибку не выдавало.
Код:
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=cos2x'); 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=lg(x+2)'); 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. |
27.04.2013, 21:43 | #3 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
К сожалению, помочь не смогу: у меня графика работает в DOS VGA моде, т.е. с экраном 640х480 пикселей, у Вас же в явной форме заданы параметры экрана с большим разрешением. Единственно, установил, что сбой происходит при рисовании графика второй (показательной) функции. Вот если бы все параметры экрана задавались через доли GetMaxX и GetMaxY, было бы другое дело. А то у Вас где-то так, где-то этак. Увы...
|
28.04.2013, 10:34 | #5 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Ладно, получите:
Код:
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; settextstyle(1,0,1); setcolor(14); SetTextJustify(RightText,CenterText); outtextxy(2*x0,y0+50,'y1=Sin(x+Pi/6)'); end; procedure drawgrafik2; var Xmax:Word; begin i:=-10; repeat i:=i+s; x:=round(x0+i*xs); y:=y0+round(f2(i)*ys); putpixel(x,y,13); Xmax:=x; until i>3; settextstyle(1,0,1); setcolor(13); SetTextJustify(LeftText,CenterText); outtextxy(Xmax+20,40,'y2=Exp(x*Ln(2))'); end; BEGIN a:=detect; initgraph(a,b,''); x0:=GetMaxX div 2; y0:=GetMaxY div 2; line(x0,0,x0+8,10); line(x0,0,x0-8,10); line(2*x0,y0,2*x0-5,y0+10); line(2*x0,y0,2*x0-5,y0-10); labels; drawgrafik1; drawgrafik2; ReadKey; closegraph; END. Кроме того, исправлены еще некоторые мелочи: графические выводы теперь годятся для любого экранного разрешения, исправлен вид формул выводимых функций (те, что прописаны в программе, явно не отсюда) и параметры вывода формул, убрана абсолютно ненужная команда очистки текстового экрана ClrScr: при включении (InitGraph) графического экрана он автоматически очищается; а чтобы очистить его в процессе работы принудительно, следует использовать команду ClearDevice, ну и т.п. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|