質問するログイン新規登録
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

131閲覧

C++ オイラー法 わからない

aiueydyheyheyhe

総合スコア1

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2025/08/03 15:15

0

0

実現したいこと

以下のプログラムを稼働させたいです。

発生している問題・分からないこと

自分はプログラミング初心者で、あまり理解していない部分が多いです。
今回の場合、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等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

エラーをコピーして調べたが、よくわからなかった

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2025/08/03 15:52

問題がなければ、なぜこのプログラムを作っているのかを教えていただけますか? 独学/webで c++ を学ばれていて何処かのサイトで見つけた問題たとか、学校/会社から出された課題の穴埋め問題だとか…、
guest

回答1

0

ベストアンサー

最初のwarningは、x_0が、その後で使用されていないという警告です。
とりあえず、そのままでもよいです。
最終的に使用するか、削除するか自分で決めてください。

残りの2個のエラーは、変数ρの後ろに演算子が無いので、関数として解釈されているというエラーです。
何らかの演算子を入れるか、他の関数に置き換えるかは、数学の問題なので自分で考えてください。

投稿2025/08/03 15:58

hiroki-o

総合スコア1485

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問