質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

4125閲覧

オイラー法による斜方投射のプログラミング

tow

総合スコア20

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

1クリップ

投稿2016/11/25 09:31

###前提・実現したいこと
斜方投射のプログラムをオイラー法で作りたいのですが、このプログラムはなぜいけないのですか?

###該当のソースコード

C

1#include <stdio.h> 2#include <math.h> 3#include <stdlib.h> 4#define g 9.8 5 6double f1(double t,double x,double v); 7double f2(double t,double x,double v); 8double f3(double t,double x,double v); 9double f4(double t,double x,double v); 10 11int main(){ 12 13 double θ,v,,v0,x,xv,y,yv,t,dt,tmax; 14 double k0[2],k1[2]; 15 16 FILE *output; 17 output=fopen("output.data","w"); 18 19 x=0.0; 20 y=0.0; 21 θ=45; 22 v0=10.0; 23 dt=0.01; 24 tmax=60; 25 26 //rad=deg*(MPI/180); 27 //xv=v0*cos(rad); 28 //yv=v0*sin(rad); 29 30 31 for(t=0.0;t<=tmax;t+=dt){ 32 k0[0]=dt*f1(t,x,v); 33 k0[1]=dt*f2(t,x,v); 34 x=x+k0[0]; 35 xv=v0+k0[1]; 36 37 k1[0]=dt*f3(t,x,v); 38 k1[1]=dt*f4(t,x,v); 39 y=y+k0[0]; 40 yv=v0+k0[1]; 41 fprintf(output,"%f %f\n",x,v); 42 } 43 fclose(output); 44 return 0; 45} 46 47double f1(double t,double x,double v){ 48 return v; 49} 50double f2(double t,double x,double v){ 51 return (-x); 52} 53double f3(double t,double x,double v){ 54 return 0; 55} 56double f4(double t,double x,double v){ 57 return v; 58} 59

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

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

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

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

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

MasahikoHirata

2016/11/25 09:45

’θ’って変数名に使えます?
ardin

2016/11/25 09:58

誰にダメだといわれましたか?コンパイラにエラー出されたならば、そのエラー内容を記載した方が解答がつくと思います。またθは変数名で使えないというか2byte文字はダメですよ
guest

回答1

0

ベストアンサー

変数名に使用できる文字は、半角の大小アルファベット、数字、アンダースコア(_)だけです(先頭文字に数字は不可)。
θはdegとしましょう。

配列名 k0, k1、関数名 f1~f4 がわかりにくいですね。
y, yv も求めているのに、 fprintf で出力しないんですか?
円周率は、math.hの中で M_PI と定義されていますね。
rad=deg*(M_PI/180);

x=x+k0[0] は x=x+dtv だけど違って
for文の外の xv=v0
cos(rad); のコメントを外した上で、 x=x+dt*xv 。

xv=v0+k0[1] は xv=v0+dt*(-x) だから斜方投射的に変ですね。
xv は不変なので、for文の中では xv への代入はありません。

y=y+k0[0] は y=y+dtv だけど違って
for文の外の yv=v0
sin(rad); のコメントを外した上で、 y=y+dt*yv 。

yv=v0+k0[1] は yv=v0+dt*(-x) だけど違って yv=yv-dt*g 。

f3(), f4() は直接呼び出されていますが、結局使われていないですね。

投稿2016/11/26 03:04

naomi3

総合スコア1105

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問