28.03.2011, 18:17 | #1 (permalink) |
Новичок
Регистрация: 28.03.2011
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
График функции
их две.Вот первая: uses graph; function F(x:real):real; begin F:=exp(5/2*ln(abs(sqr(x)+3*sqr(x)*x)))+sqrt(x-1); end; var xn,xk,max,min,x,y,mx,my,dx:real; x0,y0,i,px,py:integer; s:string; begin x0:=0; initgraph(x0,y0,''); x0:=40;{начало экранных координат} y0:=getmaxY div 2; xn:=0.1;xk:=25;{интервал по Х} mx:=(getmaxX-80)/xk;{масштаб по Х} {найдем максимумдля масштаба по У, минимум-бесконечность} max:=F(xn); x:=xn; while x<=xk do begin x:=x+0.01; if F(x)>max then max:=F(x) end; my:=(y0-40)/max;{по У} setbkcolor(15);{цвет фона} setcolor(8);{цвет линий} line(0,y0,getmaxX,y0);{оси} line(x0,0,X0,getmaxY); for i:=1 to round(xk)+1 do{максимальное количество засечек в одну сторону} begin line(x0-3,y0-round(i/10*my),x0+3,y0-round(i/10*my));{засечки на оси Y} line(x0-3,y0+round(i/10*my),x0+3,y0+round(i/10*my)); line(x0+round(i*mx),y0-3,x0+round(i*mx),Y0+3); {засечки на оси Х} str(i/10:0:1,s); {подпись оси У} outtextXY(x0-35,y0-round(i/10*my),s);{соответственно засечкам} outtextXY(x0-35,y0+round(i/10*my),'-'+s); {подпись оси Х} str(i,s); outtextXY(x0+round(i*mx),y0+10,s); end; {центр} outtextXY(x0+5,y0+10,'0'); {подписи концов осей} outtextXY(getmaxX-10,y0-10,'X'); outtextXY(x0-10,10, 'Y'); setcolor(8); {график} x:=xn; dx:=0.001; while x<=xk do begin x:=x+dx; {наращиваем х} px:=x0+round(x*mx); {изменение по оси Х} y:=F(x); {график в реальных координатах} py:=y0-round(y*my);{в экранных} putpixel(px,py,8); end; readln end. ошибку выводит((( и вот вторая: uses graph; function F(x:real):real; begin F:=exp(2.8*ln(abs(18*sqr(x)-ln(x)))); end; var xn,xk,max,min,x,y,mx,my,dx:real; x0,y0,i,px,py:integer; s:string; begin writeln('vvedi interval'); readln(xk); x0:=0; initgraph(x0,y0,''); x0:=40;{начало экранных координат} y0:=getmaxY div 2; xn:=0.1; mx:=(getmaxX-80)/xk;{масштаб по Х} {найдем максимумдля масштаба по У, минимум-бесконечность} max:=F(xn); x:=xn; while x<=xk do begin x:=x+0.01; if F(x)>max then max:=F(x) end; my:=(y0-40)/max;{по У} setbkcolor(15);{цвет фона} setcolor(8);{цвет линий} line(0,y0,getmaxX,y0);{оси} line(x0,0,X0,getmaxY); for i:=1 to round(xk)+1 do{максимальное количество засечек в одну сторону} begin line(x0-3,y0-round(i/10*my),x0+3,y0-round(i/10*my));{засечки на оси Y} line(x0-3,y0+round(i/10*my),x0+3,y0+round(i/10*my)); line(x0+round(i*mx),y0-3,x0+round(i*mx),Y0+3); {засечки на оси Х} str(i/10:0:1,s); {подпись оси У} outtextXY(x0-35,y0-round(i/10*my),s);{соответственно засечкам} outtextXY(x0-35,y0+round(i/10*my),'-'+s); {подпись оси Х} str(i,s); outtextXY(x0+round(i*mx),y0+10,s); end; {центр} outtextXY(x0+5,y0+10,'0'); {подписи концов осей} outtextXY(getmaxX-10,y0-10,'X'); outtextXY(x0-10,10, 'Y'); setcolor(8); {график} x:=xn; dx:=0.001; while x<=xk do begin x:=x+dx; {наращиваем х} px:=x0+round(x*mx); {изменение по оси Х} y:=F(x); {график в реальных координатах} py:=y0-round(y*my);{в экранных} putpixel(px,py,8); end; readln end. эта вроде показывает график,но мне нужно чтоб я интервал графика сама вводила,а здесь тока одну переменную могу ввести,при вводе второй ошибку показывает(((((((((((((((((( Пожалуйстааааааааааааааааа,очень надо |
28.03.2011, 18:17 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Данные темы вам очень помогут График в Excel'e График снятия с производства процессоров в исполнении Socket AM3 График на Турбо-Паскале График функций Помогите сделать в экселе график Построить график функции |
28.03.2011, 21:48 | #2 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
readln(xk); Замените на readln(x0,xk); и не будет ошибки. Числа вводить через пробел. Соответственно дальше x0:=0; надо убрать. |
|
29.03.2011, 13:21 | #5 (permalink) |
Новичок
Регистрация: 28.03.2011
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
была бы очень благодарна))))я уже неделю с ними мучаюсь(((
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
29.03.2011, 23:11 | #6 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
М-да... Стыдно сказать, но часа три провозился. В общем, основательно переделал, получилось так:
Код:
uses CRT, graph; function F(x:real):real; begin F:=exp(5/2*ln(abs(sqr(x)+3*sqr(x)*x)))+sqrt(x-1); end; var xn,xk,max,min,x,y,mx,my,y_min,y_max,z:real; x0,y0,i,px,py,N:integer; s:string; BEGIN initgraph(..., ..., ''); {параметры процедуры InitGraph задайте сами!} {найдем максимум и минимум для масштаба по У} xn:=1.0; {начальное значение х} xk:=1.2; {конечное значение х} max:=F(xn); min:=F(xn); x:=xn; while x<=xk do begin x:=x+0.01; if F(x)>max then max:=F(x); if F(x)<min then min:=F(x); end; y_min:=TRUNC(min/10)*10; y_max:=(TRUNC(max/10)+1)*10; x0:=40;{начало экранных координат} y0:=getmaxY-40 ; mx:=(getmaxX-40)/(xk-xn);{масштаб по Х} my:=(getmaxY-40)/(y_max-y_min);{масштаб по Y} setbkcolor(15);{цвет фона} setcolor(8);{цвет линий} line(40,y0,getmaxX,y0);{оси} line(40,0,40,y0); N:=Round((y_max-y_min)/10); SetTextStyle(defaultfont,horizdir,1); SetTextJustify(RightText,CenterText); for i:=0 to N do begin line(x0-3,y0-round(i*10*my),x0+3,y0-round(i*10*my));{засечки на оси Y} str(Round(y_min+i*10),s); {подпись оси У} if i<N then outtextXY(x0-10,y0-round(i*10*my),s);{соответственно засечкам} end; N:=Round((xk-xn)/0.02); SetTextJustify(CenterText,TopText); for i:=0 to N do begin line(x0+round(i*0.02*mx),y0-3,x0+round(i*0.02*mx),y0+3);{засечки на оси Х} str((xn+0.02*i):4:2,s); {подпись оси Х} if i<N then outtextXY(x0+round(i*0.02*mx),y0+10,s);{соответственно засечкам} end; N:=Round((xk-xn)/0.0001); x:=xn; y:=F(x); MoveTo(x0,y0-round((y-y_min)*my)); SetColor(Red); for i:=1 to N do begin x:=xn+0.0001*i; y:=F(x); LineTo(x0+round((x-xn)*mx),y0-round((y-y_min)*my)); end; ReadKey; END. Со второй - и не знаю, как получится со временем. |
31.03.2011, 12:27 | #9 (permalink) |
Sparkling
Регистрация: 29.09.2010
Сообщений: 98
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 93
|
F:=exp(5/2*ln(abs(sqr(x)+3*sqr(x)*x)))+sqrt(x-1);
Я так понимаю, это уравнение рисует программа? А если я например хочу, сама ввести любое другое, будь то: F(x)=cos(x) или F(x)=ax^2+bx+c. и чтобы не только нарисовало, но и корни посчитала? |
31.03.2011, 12:46 | #10 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Тогда нужно сесть и, например, написать соответствующую универсальную программу.
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|