Реализовать сдвиг графика влево и вправо по оси х с помощью стрелок - 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 по умолчанию, но код вроде как был рабочий

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.5 из 5
Похожие ответы