#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define MAX 1000
main(void)
{
int i;
float x1, x2, en, sum=0.0, s;
srand( (unsigned)time( NULL ) );
for(i=0;i<MAX;i++)
{
x1=((float)rand()/(float)RAND_MAX);
x2=((float)rand()/(float)RAND_MAX);
if(en=(x1-0.5)*(x1-0.5)+(x2-0.5)*(x2-0.5)<=(0.5)*(0.5))
{
sum++;
}
}
s=sum/MAX;
printf("円の面積:%15.6e\n",s);
}
この方法で円の面積を求めたんですが、もう少し精度を上げたいと思います。ただそのプログラムをどうやって書けばいいのかさえわからずとまどっています。円全体でなくその一部を考え、またその部分を簡単に面積が求められるようにわけるプログラムを組みたいのですがどのようにすればいいのか教えてください。
No.4ベストアンサー
- 回答日時:
No.2のプログラムは、半径1の円の1/4を求めて4倍しています(半径1の円の面積を計算している)から、半径0.5の円の面積を求めたければ1/4倍しないといけませんね。
(半径1の円の面積はπ、半径0.5の円の面積は0.25π)精度をあげるには繰り返し回数を増やすのが簡単ですかね。ただし回数を増やすとsumの数値が大きくなって精度落ちますので一定回数で区切って計算したほうがいいです。
質問の「円全体でなくその一部を考え、またその部分を簡単に面積が求められるようにわける」というのはよく意味が分かりませんでした。
この回答への補足
円全体を考えるのではなく、ある一部を考えて、またその一部においても、簡単に面積が求められる部分にわける。って感じなんですけど。。なんかうまく伝えれなくてすいません。。とりあえず円を分割したら精度があがるのかなと。。そのプログラムが知りたいんですけど。。わかりにくい質問に答えていただいてありがとうございました!
補足日時:2004/11/01 09:16No.3
- 回答日時:
> なぜか円周率が求まってしまいます。
。半径1の円の面積はπですが。
No.2
- 回答日時:
>円全体でなくその一部を考え・・・
円の第一象限だけ計算することができます。
半径1の円の右上の部分です。
乱数の発生の部分はそのまま中心(0,0)から距離が1未満の場合円の中にあるとカウントして最後に4倍すれば結果が出ます。
この回答への補足
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define MAX 1000
main(void)
{
int i;
float x1, x2, en, sum=0.0, s;
srand( (unsigned)time( NULL ) );
for(i=0;i<MAX;i++)
{
x1=((float)rand()/(float)RAND_MAX);
x2=((float)rand()/(float)RAND_MAX);
if(en=x1*x1+x2*x2<1.0)
{
sum++;
}
}
s=(sum/MAX)*4;
printf("円の面積:%15.6e\n",s);
}
としたのですが、なぜか円周率が求まってしまいます。。どこか間違っていますか?どう書き換えればいいのか教えてください。
すいませんがどのように扇形を求めるプログラムを書けばいいのか教えてもらえないでしょうか。。わからないんです。。
えとつまりその式を4倍したらいいんですよね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語: ポインタ 5 2022/06/01 08:33
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# プログラミングを教えて欲しいです。 配列aは、int a[9]={7,6,12,8,3,5,10,9 4 2022/12/19 23:27
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- その他(プログラミング・Web制作) Pythonにおける物理のシミュレーションでの単位変換について 2 2023/06/02 17:11
- その他(プログラミング・Web制作) Pythonによる物理の斜方投射の位置座標表示について 2 2023/06/05 12:46
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessのクエリの値を変換(代入...
-
VB2010で、時刻と時間の計算に...
-
経過日数を調べたい
-
Matlabで群遅延特性
-
あと何日or何日目?を計算する方法
-
VB2013での時間帯判定で困って...
-
vba 時間の引き算 例えば 15:00...
-
Designer.vbは直接コードをいじ...
-
Visual Studio 「AnyCpu」について
-
「読み込み違反」が起きたとき...
-
Windows PowerShellでC言語を実...
-
VBAでOutlookを終了させたい Ex...
-
意味不明の実行時エラーで困っ...
-
VBAで印刷の成功判定
-
印刷ダイアログを表示させない方法
-
vbaでPDFファイルが印刷されない
-
EXCEL VBAから他アプリケーショ...
-
VBからのプリンタ制御について
-
ACCESS VBAで別のACCESS(mdb)を...
-
分かる人は簡単なのだろうが、v...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
matplotlibで任意の角度の円弧...
-
経過日数を調べたい
-
Accessのクエリの値を変換(代入...
-
秒数を入力すると○時間○分○秒と...
-
カラーコード 濃くしたい
-
VB2013での時間帯判定で困って...
-
画像を二次元フーリエ変換
-
FORTRANの課題
-
DateDiff関数の怪!?
-
Visual Basicで多角形を描くプ...
-
Matlabで群遅延特性
-
VB2010で、時刻と時間の計算に...
-
電卓の作成 VB
-
世界測地系から東京測地系へ変換
-
c言語またはVBのSin Cos Tan
-
キャスト演算について。
-
あと何日or何日目?を計算する方法
-
プログラム作成 計算
-
VBで時間計算の方法
-
4桁の整数の前位の足し算を行い...
おすすめ情報