这个程序全是物理上的作图程序,改写它具有一定的挑战性。希望得到详细的操作步骤。。希望得到高手指点!!!不胜感激!!!
它们的源代码如下:
#include "dos.h";
#include "graphics.h";
#include "math.h";
#include "stdio.h";
#include "conio.h";
#include "stdlib.h";
void main()
{ double x[101]={0,},y[101]={0,},vx[101]={0,},vy[101]={0,};
double k1,k2,k3,k4,l1,l2,l3,l4,m1,m2,m3,m4,n1,n2,n3,n4,h;
int i=0;
int driver=DETECT;
int graphmode;
initgraph(&driver,&graphmode,"");
line(290,400,450,400);
line(320,0,320,480);
h=0.1;
x[i]=1;
y[i]=0;
vx[i]=0;
vy[i]=1;
for(i=0;i<=99;i++)
{ k1=vx[i];
l1=vy[i];
m1=-vy[i]/x[i];
n1=vx[i]/x[i];
k2=vx[i]+h*m1/2;
l2=vy[i]+h*n1/2;
m2=-l2/(x[i]+h*k1/2);
n2=k2/(x[i]+h*k1/2);
k3=vx[i]+h*m2/2;
l3=vy[i]+h*n2/2;
m3=-l3/(x[i]+h*k2/2);
n3=k3/(x[i]+h*k2/2);
k4=vx[i]+h*m3;
l4=vy[i]+h*n3;
m4=-l4/(x[i]+h*k3);
n4=k4/(x[i]+h*k3);
x[i+1]=x[i]+h*(k1+2*k2+2*k3+k4)/6;
y[i+1]=y[i]+h*(l1+2*l2+2*l3+l4)/6;
vx[i+1]=vx[i]+h*(m1+2*m2+2*m3+m4)/6;
vy[i+1]=vy[i]+h*(n1+2*n2+2*n3+n4)/6;
/*}
for(i=0;i<=100;i++)
{ */
putpixel(320+80*x[i+1],400-80*y[i+1],15);
/*setfillstyle(12,15);
fillellipse(320+80+x[i],400-80+y[i],3,3); */
  getch();
/*closegraph(); */
  }
}
(第四个)
#include<Mcbp_lib.h>
void main()
 {
  float x,y,L,a,k,g=9.8,t=0.1;
  double l=80,m=1,PI=3.14159265;
  int i;
  int gd=DETECT,gm;
  initgraph(&gd,&gm,"");
  outhzxy3(115,100,"倒 摆 模 型",5,0,3);
  outhzxy1(233,400,"按任意键继续",15);
  getch();
  A:
  cleardevice();
  outhzxy3(100,40,"倒摆模型",4,0,10);
  outhzxy1(80,350,"以上各值均取国际主单位",4);
  outhzxy1(80,320,"本过程中无能量损失!",5);
  outhzxy1(60,142,"请输入系数L的初值:  L=",15);
  gotoxy(34,10);
  scanf("%f",&L);
  outhzxy1(60,174,"请输入弹簧劲度系数: k=",15);
  gotoxy(34,12);
  scanf("%f",&k);
  outhzxy1(60,206,"请输入初始角度: a=    (PI)",15);
  outhzxy1(60,238,"角度请在-1与1之间取值",15);
  gotoxy(30,14);
  scanf("%f",&a);
  a=a*PI;
  for(i=0;i<1000;i++)
   {
    setfillstyle(1,0);
    bar(350,100,550,320);
 
    L=L+(m*g*l*sin(a)-k*a)*t;
    a=a+L*t/(m*l*l);
    x=l*sin(a);
    y=l*cos(a);     
    coordc(300,400,300,0,10,15);      
    setlinestyle(0,4,3);
    line(450,210,450+x,210-y);
    setfillstyle(1,14);
    fillellipse(450+x,210-y,10,10); 
    setfillstyle(1,5);
    fillellipse(450+20*a,400-L/200,1,1);
    coordc(450,450,130,90,20,15);
    delay(1);
   }
  outhzxy1(80,400,"按任意键继续,按ESC退出!",9);
  if(getch()!=27) goto A;
  else
  cleardevice();
  for(i=450;i>=100;i-=2)
    {setfillstyle(1,0);
     bar(0,0,640,480);
     outhzxy3(100,i,"欢迎您使用本程序",3,0,4);
   
     outhzxy3(225,i+250,"再 见",4,0,14);
      
    }
   delay(20000);
  closegraph();
 }