大学の課題で
x = t cos t, y = t sin t (0 ≤ t ≤ 6π)のグラフを作成したいのですが
以下のようにfor文を書いてみたものの全く作成されません。
どの様に改善したらよいでしょうか。
※正解は渦巻きのようなグラフになります。
[date]
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
FILE *fp;
double sin(x),cos(x);
if ((fp = fopen("graph.csv", "w")) == NULL){ /* ファイルを開く */
/* 開けなかった場合の処理 */
fprintf(stderr, "Cannot open 'graph.csv'\n");
exit(1);
}
for(cos(x)=0; cos(x) <=18.8495559; cos(x)+=0.01)
fprintf(fp,"%f,%f\n",cos(x),sqrt(1-x*x)+sqrt(fabs(x)));
for(sin(x)=0; sin(x) >=-18.8495559; cos(x)-=0.01)
fprintf(fp,"%f,%f\n",cos(x),-sqrt(1-x*x)+sqrt(fabs(x)));
fprintf(fp,"-1,1\n");
fclose(fp); /* ファイルを閉じる */
return 0;
}
[/date]
グラフの作成
- purin52002
- 記事: 235
- 登録日時: 7年前
- 連絡を取る:
Re: グラフの作成
こんにちは
変数名に()は使えなかった気がします(使ったことないからわからないけど^^;)。
とりあえず必要な変数は x,y,t の3つだと思います。
for文で t を 0~6π までループして、
x=tcos(t)、y=tsin(t)の値を計算することはできますか?
変数名に()は使えなかった気がします(使ったことないからわからないけど^^;)。
とりあえず必要な変数は x,y,t の3つだと思います。
for文で t を 0~6π までループして、
x=tcos(t)、y=tsin(t)の値を計算することはできますか?
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^
Re: グラフの作成
for文で t を 0~6π までループして、
x=tcos(t)、y=tsin(t)の値を計算することはできますか
<ループの方法、πや整数以外の計算方法が全く分かりません(TT)
x=tcos(t)、y=tsin(t)の値を計算することはできますか
<ループの方法、πや整数以外の計算方法が全く分かりません(TT)
- purin52002
- 記事: 235
- 登録日時: 7年前
- 連絡を取る:
Re: グラフの作成
for分は以下のように書きます。
一般的に
初期化式:ループ変数の初期化
判定式:ループを続けるか判定
処理1:ループ変数の処理
処理2:目的の処理
となります。
今回の場合だとループ変数は t になり、
初期化式で t=0
判定式で t<=6π
処理1で t+=delta (deltaは自分で決める微小な値、小さいほど正確なグラフになる)
とすればいいと思います。
πや整数以外の計算方法 というのが何を指しているかちょっとわからなかったのでこっちは無視します^p^
初期化式:ループ変数の初期化
判定式:ループを続けるか判定
処理1:ループ変数の処理
処理2:目的の処理
となります。
今回の場合だとループ変数は t になり、
初期化式で t=0
判定式で t<=6π
処理1で t+=delta (deltaは自分で決める微小な値、小さいほど正確なグラフになる)
とすればいいと思います。
πや整数以外の計算方法 というのが何を指しているかちょっとわからなかったのでこっちは無視します^p^
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^
Re: グラフの作成
ここまで作ってみたのですが、できませんでした…
何が原因でしょうか
何が原因でしょうか
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
FILE *fp;
double x, y, t;
if ((fp = fopen("graph.csv", "w")) == NULL){ /* ファイルを開く */
/* 開けなかった場合の処理 */
fprintf(stderr, "Cannot open 'graph.csv'\n");
exit(1);
}
for(t=0; t<=18.8495559; t+=1)
fprintf(fp,"%f,%f\n",cos(x),sqrt(1-x*x)+sqrt(fabs(x)));
for(t=0; t<=18.8495559; t+=1)
fprintf(fp,"%f,%f\n",sin(y),sqrt(1-y*y)+sqrt(fabs(y)));
fprintf(fp,"-1,1\n");
fclose(fp); /* ファイルを閉じる */
return 0;
}
Re: グラフの作成
初期化されていない自動変数x, yの値(不定)が計算に使われている(関数に渡されている)のがよくないですね。
やりたいことをよく理解していませんが、tから計算して代入する必要があるかもしれません。
やりたいことをよく理解していませんが、tから計算して代入する必要があるかもしれません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: グラフの作成
渦巻になるかどうか確かめるために作ったプログラムです。
問題の解答ではありませんが、参考にはなると思います。
#include <stdio.h> // printf
#include <string.h> // memset
#include <math.h> // cos, sin
const int N = 256; // 分割数 (点の個数は N+1)
const double PI = 3.115692653589793238;
const double MAX = 20;
char screen[20][40];
void plot(double x, double y)
{
int i = 10 * (1 - y / MAX);
int j = 20 * (1 + x / MAX);
screen[i][j] = '*';
}
void display()
{
for (int i = 0; i < 20; i++)
printf("%.40s\n", screen[i]);
}
int main(void)
{
double a, b, delta, t, x, y;
int i;
memset(screen, ' ', sizeof screen);
a = 0, b = 6 * PI;
delta = (b - a) / N;
for (i = 0; i <= N; i++) {
t = a + delta * i;
x = t * cos(t);
y = t * sin(t);
plot(x, y);
}
display();
return 0;
}