Реализовать сдвиг графика влево и вправо по оси х с помощью стрелок - C (СИ)
Формулировка задачи:
помогите реализовать сдвиг графика влево и вправо по оси х с помощью стрелочек,вот сам код программы который строит эти два графика....
#include <graphics.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <dos.h> #include <math.h> float fun1(float x, float a) { return log(2+x)-a*pow(x,3); } float fun2(float x,float a) { return pow(sin(x),2); } /*float fun3(float x, float a) { return fun1(x,a)*fun2(x,a); }*/ void on_graf() { int gdriver = DETECT, gmode, errorcode; initgraph(&gdriver, &gmode, "C:\\BORLANDC\\BGI\\"); errorcode = graphresult(); if (errorcode != grOk) { printf("Graphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); } } void draw(float (*fun)(float x, float a),int xn,int xk,float a) { char s[4]; int osx,osy,xt,yt,xvn,xvk,yvn,yvk,i; float x,y,dx,mx,my,min,max; setbkcolor(1); setcolor(15); max=-1000;min=1000;dx=0.5; x=xn; while(x<=xk) { y=fun(x,a); if(y>max) max=y; if(y<min) min=y; x=x+dx; } my=(getmaxy()-40)/(max-min); mx=(getmaxx()-40)/8; osy=fabs(min*my); osx=fabs(xn*mx); xvn=20; xvk=getmaxx()-20; yvn=20; yvk=getmaxy()-20; setlinestyle(0,1,1); line(xvn,osy,xvk,osy); line(osx,yvn,osx,yvk); setcolor(4); setlinestyle(0,1,3); x=xn; y=fun(x,a); xt=xvn+((x-xn)*mx); yt=yvk-((y-min)*my); moveto(xt,yt); do { x=x+dx; y=fun(x,a); xt=xvn+((x-xn)*mx); yt=yvk-((y-min)*my); lineto(xt,yt); } while(x<xk-dx); setcolor(7); setlinestyle(1,1,1); outtextxy(osx+2,yvn-8,"y"); outtextxy(xvk+2,osy,"x"); for(i=xn;i<=xk;i=i+1) { x=xvn+mx*(i-xn); line(x,yvn,x,yvk); if(i!=0) { sprintf(s,"%d",i); outtextxy(x,osy+8,s); } } float dy=(max-min)/10.; for(y=min;y<=max;y+=dy) { yt=yvk-(my*(y-min)); line(xvn,yt,xvk,yt); sprintf(s,"%.1f",y); outtextxy(osx+2,yt,s); } getch(); } void main () {on_graf(); int xn,xk,z; float a; char ch; printf("Vvedite xn,xk,const a\n"); scanf("%d%d%f",&xn,&xk,&a); printf("Viberite grafik dlya postroeniya\n"); printf("1 - graf1, 2 - graf2\n"); ch=getch(); switch(ch) { case '1': draw(fun1,xn,xk,a);getch();break; case '2': draw(fun2,xn,xk,a);getch(); break; getch(); closegraph(); }
я так понял,что при каждом нажатии на клавишу должен уменьшаться или увеличиваться хн и хк....не могу это реализовать,помогите..
Решение задачи: «Реализовать сдвиг графика влево и вправо по оси х с помощью стрелок»
textual
Листинг программы
const KEY_UP = 72; const KEY_DOWN = 80; const KEY_LEFT = 75; const KEY_RIGHT = 77; //это кусок из кода, я не знаю поддерживает ли Borland int по умолчанию, но код вроде как был рабочий
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д