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

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

ただいまの
回答率

90.51%

  • C

    4524questions

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

  • for

    289questions

    for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

初歩的なプログラミング 角度単位でループ

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 964

mikann_

score 15

前提・実現したいこと

様々な意見ありがとうございます。
よくわかっていない状態で質問してしまいました。
改めて質問させてください。

以下のプログラムは質点の軌道を示す方程式を使って離心率eを0にした時に円軌道を示すプログラムを作成したいと思っています。
先ほど上に記載してあるプログラムから変更し、for文で5度ずつ計算させてx,yの値を出力するようにプログラムしたつもりでしたが、結果は円軌道をしませんでした。

どこがいけないのかわからないので、教えていただきたいです。

該当のソースコード

#include <stdio.h>
#include <stdlib.h> //rand() 
#include <math.h> //sin(), cos(), M_PI 
#include <time.h> //time() 
int main(void){
float e, a, l, r, x, y, theta;
scanf(" %f %f", &e, &a);
theta = rand() % 360;
l = a*(1.0-pow(x,2.0));
r = l/(1.0 + e*cos(theta * M_PI / 180.0));
x = r* cos(theta*M_PI/180.0);
y = r* sin(theta*M_PI/180.0);
printf ("x=%.3f y=%.3f",x,y);
}
----------------------------------------------
#include <stdio.h>
#include <math.h> //sin(), cos(), M_PI 
#include <time.h> //time() 
int main(void){
float e, a, l, r, x, y, theta;

printf("e a");scanf(" %f %f", &e, &a);


for(theta=0;theta<360;theta+=5.0){

l = a*(1.0-pow(x,2.0));
r = l/(1.0 + e*cos(theta * M_PI / 180.0));
x = r* cos(theta*M_PI/180.0);
y = r* sin(theta*M_PI/180.0);
printf ("%.3f %.3f\n",x,y);
}
return 0;
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • iwamoto_takaaki

    2016/10/27 08:00

    初心者プログラマにありがちなことなのですが、問題点の整理が出来ていません。もっと具体的な出力結果を書けば整理出来るかもしれません。手計算でやってみてはいかがでしょうか?

    キャンセル

  • mit0223

    2016/10/27 09:14

    「プログラムを適当な角度刻みで0度から360度まで回したいです」とのことですが、プログラムを回すことはできないと思います。 何を入力するとどのような計算をして何を出力するプログラムを作ろうとしているかを記載してもらえますか。

    キャンセル

回答 3

checkベストアンサー

0

まず、何を入力させるか分かるようにしましょう。
作成者はプログラムの中身見れば分かりますけれども。
scanfのところで入力待ちが急に発生するので、使用する人にはこれでは意味不明です。
変数名も分かりやすくすると見栄えが良いでしょう。

パッと見て分かる問題点
変数xの値が初期化もしておらず不定なのに、powの引数に使用している。よって得られるlがどうなるか不明
以後の各結果にも影響を及ぼすでしょう

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/10/27 14:16

    追記されたプログラムについて
    変わらず変数xが値が不定のままpow関数の引数として使用しています。
    forループ2周目からはいいとして、1周目の結果(xに入る値)は大丈夫なのでしょうか。
    これがずれていると以降もずれたままになります。
    1周目のxは何が妥当になりますか?

    あと手動計算(Excelなんかでも良いですが)では、軌跡は正しく描かれますか?
    式があっているか検証はしていないので^^;

    キャンセル

  • 2016/10/27 15:02

    アドバイスありがとうございます。
    powの引数の部分アドバイスいただいていたのに気がつきませんでした。
    無事pow(e,2.0)に変更し求めていた解を得ることができました。
    ありがとうございます。

    キャンセル

0

rand 使うなら srand しましょう。
あと、どこかで theta を出力しとかないと、何度回した結果の出力なのかわからないので計算が合ってるのかどうか出力から判断できないのじゃありませんか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/10/27 15:00

    アドバイスありがとうございます。
    thetaの出力結果参考にします。

    キャンセル

0

l = a*(1.0-pow(x,2.0));

この行の意味がわかりません。 

  • x は初期化されていないので最初の値は不定です
  • 2回目以降は x には前回の r cos(θ)の値が入ります

私の環境では x が 0 で始まるので、 e=0, a=1.0 ではじめると l の値が 1 と 0 の間を振動し、とても円軌道にはなりません。この行の意味を追記してください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/10/27 14:59

    アドバイスありがとうございます。
    pow(x,2.0)の部分でした。

    キャンセル

同じタグがついた質問を見る

  • C

    4524questions

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

  • for

    289questions

    for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。