• 締切済み

コンパイルした時に表示されません

バネのつり合いから,オーバーシュートとその時の時間を求めるのですが,以下のようにプログラムを作り,オーバーシュートprintf("\n%lf\n\n",y1-y0);は出せましたが,一番下のprintf("t=\n%lf\n\n",(y1-y0)/(1+y1));の部分が画面に表示されません.わかる方ぜひ教えてください. #include<stdio.h> #define G 9.8 double m,K,H,A,N,t; double h=0.01; double f1(double y1,double y2){ return(y2); } double f2(double y1,double y2){ return(-K/m*y1+G-A*N/H/m*y2); } main(){ int i; double k[5][3]; double y0,y1,y2; y1=0; y2=0; printf("m,K,H,A,N="); scanf("%lf,%lf,%lf,%lf,%lf",&m,&K,&H,&A,&N); for(i=0;i<1000;i++){ k[1][1]=h*f1(y1,y2); k[1][2]=h*f2(y1,y2); k[2][1]=h*f1(y1+k[1][1]/2.0,y2+k[1][2]/2.0); k[2][2]=h*f2(y1+k[1][1]/2.0,y2+k[1][2]/2.0); k[3][1]=h*f1(y1+k[2][1]/2.0,y2+k[2][2]/2.0); k[3][2]=h*f2(y1+k[1][1]/2.0,y2+k[1][2]/2.0); k[4][1]=h*f1(y1+k[3][1],y2+k[3][2]); k[4][2]=h*f2(y1+k[3][1],y2+k[3][2]); if(k[1][1]+k[2][1]+k[3][1]+k[4][1]<0){ break; } y1=y1+k[1][1]/6.0+k[2][1]/3.0+k[3][1]/3.0+k[4][1]/6.0; y2=y2+k[1][2]/6.0+k[2][2]/3.0+k[3][2]/3.0+k[4][2]/6.0; } y0=m*G/K; printf("\n%lf\n\n",y1-y0); printf("t=\n%lf\n\n",(y1-y0)/(1+y1)); }

みんなの回答

  • equinox2
  • ベストアンサー率48% (321/660)
回答No.1

表示されない時の入力データを教えてください。 ●以下の入力で実行したら表示されました m,K,H,A,N=1,100,0.00001,0.025,0.5 -0.098000 t= -0.098000 この時の途中結果を出してみると i:0: k[]:-0.007228 y0:0.098000 y1:0.000000 y2:0.000000 でした。 ●printf("\n%lf\n\n",y1-y0);   が表示されて  printf("t=\n%lf\n\n",(y1-y0)/(1+y1));   が表示されないケースとしては、 y1が -1 のために   「ゼロ割」ぐらいしか思いつかないですが、   y-1 が -1 になる可能性はありますか?

関連するQ&A

専門家に質問してみよう