実現したいこと
以下のプログラムを稼働させたいです。
発生している問題・分からないこと
自分はプログラミング初心者で、あまり理解していない部分が多いです。
今回の場合、returnがどのようなものなのかわからず、たぶん意味の分からない使い方をしていると思います。
有識者の方、どのようにしたらよいか教えていただけないでしょうか。
エラーメッセージ
error
1Main.cpp:25:17: warning: unused variable 'x_0' [-Wunused-variable] 2 double x_0 = 0.0;//xの初期値 3 ^ 4Main.cpp:59:52: error: called object type 'double' is not a function or function pointer 5 result_x = (-v_x/sqrt(v_x*v_x+v_y*v_y))*ρ(v_x*v_x+v_y*v_y)*S*Cd/(2*M) ; 6 ~^ 7Main.cpp:82:52: error: called object type 'double' is not a function or function pointer 8 result_y = (-v_y/sqrt(v_x*v_x+v_y*v_y))*ρ(v_x*v_x+v_y*v_y)*S*Cd/(2*M)-g; 9 ~^ 101 warning and 2 errors generated.
該当のソースコード
C++
1#include <stdio.h> 2 3#include <math.h> 4 5#define M_PI 3.14159265358979323846 6 7double gfunc1(double,double,double,double,double); 8 9double gfunc2(double,double,double,double,double); 10 11double euler2( double, double, double, double, double,double); 12 13 14 15int main(void){ 16 17 double h = 0.01;//オイラー法において設定する刻み幅 18 19 double t_0 = 0.0; //t の初期値 20 21 double v_x_0 = 55*cos((1/2)*M_PI); //Vxの初期値 22 23 double v_y_0 = 55*sin((1/2)*M_PI);//Vyの初期値 24 25 double x_0 = 0.0;//xの初期値 26 27 double y_0 = 0.05; //y の初期値 28 29 double t_n = 2.0; //計算終了時間 30 31 32 33 printf( " result_x = %f [m] \n" , euler2( y_0 , v_x_0 , v_y_0, t_0 , t_n , h ) ); 34 35 printf( " result_y = %f [m] \n" , euler2( y_0 , v_x_0 ,v_y_0, t_0 , t_n , h ) ); 36 37 return 0; 38 39} 40 41 42 43double gfunc1( double t, double x , double v_x ,double v_y ){ 44 45 46 47 double ρ=1.184; 48 49 double M=0.046; 50 51 double S=0.00145; 52 53 double Cd=0.35; 54 55 double g=9.8066; 56 57 double result_x; 58 59 result_x = (-v_x/sqrt(v_x*v_x+v_y*v_y))*ρ(v_x*v_x+v_y*v_y)*S*Cd/(2*M) ; 60 61 return(result_x); 62 63} 64 65double gfunc2( double t, double x , double v_x ,double v_y ){ 66 67 68 69 double ρ=1.184; 70 71 double M=0.046; 72 73 double S=0.00145; 74 75 double Cd=0.35; 76 77 double g=9.8066; 78 79 80 double result_y; 81 82 result_y = (-v_y/sqrt(v_x*v_x+v_y*v_y))*ρ(v_x*v_x+v_y*v_y)*S*Cd/(2*M)-g; 83 84 return(result_y); 85 86} 87 88 89 90double euler2( double x_0 , double y_0 , double v_x_0, double v_y_0 , double t_0 , double t_n , double h ){ 91 92 // きざみ幅 h で t_0 での値 y_0,x_0 から t_n まで計算を行い、 y の値を返す関数 93 94 95 96 double t = t_0;//tの初期値を代入する 97 98 double x = y_0;//xの初期値を代入する 99 100 double y = y_0;//yの初期値を代入する 101 102 double v_x = v_x_0; 103 104 double v_y = v_y_0; 105 106 107 double t_new ;//h 経過後の tの値を保持する 108 109 double x_new ;//h 経過後の xの値を保持する 110 111 double y_new ;//h 経過後の yの値を保持する 112 113 double v_x_new ; 114 115 double v_y_new ; 116 117 118 119 int i = 0; //ループの回数カウントアップ 120 121 122 123 while( t < t_n ){//tiに対応する変数 t が t_n を超えるまで計算を繰り返す 124 125 126 127 if( i % 10 == 0 ) 128 129 printf("%f,%f,%f,%f,%f \n" , t , x , y , v_x , v_y ); 130 131 132 133 134 t_new = t + h; 135 136 v_x_new = v_x + h * gfunc1( t , x , y , v_x, v_y ) ; 137 138 v_y_new = v_y + h * gfunc2( t , x , y , v_x, v_y ) ; 139 140 x_new = x + h * v_x; 141 142 y_new = y + h * v_y; 143 144 145 146 147 t = t_new; 148 149 v_x = v_x_new; 150 151 v_y = v_y_new; 152 153 // 次のループで用いることができるよう、値を入れ替える 154 155 i++; 156 157 } 158 159 160 161 return( x ); 162 return( y ); 163 164} 165 166 167
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
エラーをコピーして調べたが、よくわからなかった
補足
特になし
問題がなければ、なぜこのプログラムを作っているのかを教えていただけますか?
独学/webで c++ を学ばれていて何処かのサイトで見つけた問題たとか、学校/会社から出された課題の穴埋め問題だとか…、

回答1件
あなたの回答
tips
プレビュー