π/4=1-(1/3)+(1/5)-(1/7)+(1/9)-(1/11)+......
上式でπ/4を求める時、第何項まで求めれば
3.14159/4との差の絶対値が0.0001より小になるか
その項数とそのときのπ/4の近似値を求めよ
という問題なんですが、
3.14159/4との差の絶対値が0.0001より小になるという
部分がわかりません・・。
私は、3.14159を4で割ったものが0.7853975を使って
下のようにしたのですが、うまくできません。
上式のようにプラスとマイナスが繰り返される場合
sum=-sumという風にするというのは習ったのですが・・
計算式だとうまくいきません・・・
初心者でプログラミング始めたばかりなので
わかりやすく教えていただけると嬉しいです。
私の作ってみたプログラムは一応こんな感じです。
#include<stdio.h>
#include<conio.h>
int main(void){
int k,i=0;
double sum;
sum = 0,0;
printf("k = ");
scanf("%d",&k);
while(0.7853975-sum<0.0001){
i++;
sum=-sum;
sum=(double)1/((2*i)-1);
}
printf("第%d項までの和は%f\n",k,sum);
getch();
return 0;
}
No.5ベストアンサー
- 回答日時:
>1-(1/3)+(1/5)-(1/7)+(1/9)-(1/11)+......
これをよくみると、
(1/1)-(1/3)+(1/5)-(1/7)+(1/9)-(1/11) と同じ。
★全項が共通形式となり思考が容易となる。←《重要》
・分母は奇数 ( 2n + 1 )◆
・ひとつおきに引き算(負の和)▼
-----------------------------------------------
#include <stdio.h>
#include <math.h>
void main()
{
int iKou = 0;
double dSum = 0.0, dWork = 1.0;
while( dWork > 0.0001 ){ // 0.0000001 で 327484 項
dWork = 1.0; // 分子
dWork /= ( (double)iKou * 2.0 + 1.0 ); // 分母◆
if( iKou % 2 ) dWork *= -1.0; // ▼
dSum += dWork; // ▼
dWork = fabs( 0.7853975 - dSum );
iKou++;
}
printf( "第 %d 項までで、πは %f\n", iKou, ( 4.0 * dSum ) );
}
注:インデントに全角空白を用いています。タブに一括変換して下さい。
(Borland C++5.6.4)
ご回答ありがとうございます!
すごくわかりやすい説明もつけてくださって
理解することができました。
プログラムもちゃんと動きました。
自分なりに変えてみて、下のようになりました。
本当に助かりました。
これからたくさん勉強していきたいと思います。
#include <stdio.h>
#include <math.h>
void main()
{
int i = 0;
double sum = 0.0, sum2 = 1.0;
while( sum2 > 0.0001 ){
sum2 = (double)1.0/((i * 2.0)+1.0);
if(i%2){
sum2*=-1.0;
}
sum+=sum2;
sum2=fabs( 0.7853975 - sum );
i++;
}
printf( "第 %d 項までで、πは %f\n", i, (4.0*sum) );
}
No.3
- 回答日時:
No.2ですが訂正があります。
>while文の条件部分を
>abs(sum-3.14159/4)<0.0001
と書きましたが、不等号の向きが逆です。
正しくは
abs(sum-3.14159/4)>0.0001
です。
No.2
- 回答日時:
π/4の近似をどのようにして表現するかをまず考えましょう。
1項目はマイナス、二項目はプラス、となっているのでn項目は(-1)^nになります。
よってπ/4=Σ(i=1,∞) 1/(2i+1)*(-1)^i です。
sum=sum+1/(2*i+1)*(-1)^iとして、while文でiを増加させていけばπ/4にどんどん近づいていきます。
ではどの段階でwhile文を終了させればよいのでしょうか。
その条件を指定しているのが
>3.14159/4との差の絶対値が0.0001より小になるか
です。
while文の条件部分を
abs(sum-3.14159/4)<0.0001
とすればいいはずです。
abs()は絶対値を求める関数です。
math.hが必要になります。
while文から脱出したときのiが必要な項の数になります。
この回答への補足
ご丁寧な回答ありがとうございます。
わからない点がいくつかあるのですが
(-1)^nの「^」の意味はなんですか?
教科書に載っていなくてまだ習ってないのです。
shiberianさんのでやってみたのですが
kを入力したままプログラムが動きません・・
sum=0,0;やi++;はいらないですか?
No.1
- 回答日時:
>上式のようにプラスとマイナスが繰り返される場合
>sum=-sumという風にするというのは習ったのですが・・
もう一度、文法を復習しましょう。
条件反射でコードを書いても、たいてい動きません。
> while(0.7853975-sum<0.0001){
最初 sum は 0 なので、条件を満たさず、いきなりループを抜けます。
> printf("第%d項までの和は%f\n",k,sum);
第 k 項目までの和を求めるのではないですよね。
ご回答ありがとうございます。
自分の勉強不足です・・。
最後のprintfもなにを書いていいか
わからなかったんです。
アドバイスを参考にして
もう一度文法からやりなおしてみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# プログラミング実行後の表示される値を答えよ #include<stdio.h> void main( 7 2022/05/20 00:07
- C言語・C++・C# プログラミング実行後に表示される値を答えよ #include <stdio.h> void main 4 2022/05/28 10:20
- C言語・C++・C# C言語: ポインタ 5 2022/06/01 08:33
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# プログラミングを教えて欲しいです。 配列aは、int a[9]={7,6,12,8,3,5,10,9 4 2022/12/19 23:27
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
for文の中にswitch文はいれられ...
-
#if 1 #elseの意味について
-
構文エラー";"が型の前にあり...
-
プログラム
-
xのy乗を求める問題で…(ただし...
-
プログラミングで二番目に大き...
-
直角三角形を表示するプログラム
-
1年単利金利 0.2% の A銀行と...
-
if文の中に
-
データ管理プログラムを作って...
-
c言語で平均をだす
-
C言語についてですfor ifをつか...
-
分散を求めるプログラム
-
素因数分解のプログラムを作成...
-
C言語 重複しない4ケタの乱数...
-
配列を使って魔方陣
-
C言語基本 2次元配列(for文...
-
乱数を用いたプログラミング
-
for文のプログラミング 私は、...
-
C言語の二分法のプログラムにつ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構文エラー";"が型の前にあり...
-
#if 1 #elseの意味について
-
for文の中にswitch文はいれられ...
-
C言語階乗の総和を求める
-
配列を使って魔方陣
-
C言語 数字以外を入力させない...
-
C言語プログラムが理解できなくて…
-
配列を関数に渡す方法
-
初心者です。for文、if文を使っ...
-
scanf関数を用いての加減乗除%...
-
c言語プログラミングで1から100...
-
getcの改行判定
-
while文について、c言語...
-
プログラミングで二番目に大き...
-
VHDLで、case文とwhen文のどち...
-
C言語で電卓を作成する。
-
C言語の二分法のプログラムにつ...
-
階乗のプログラム!!
-
プログラミングに関して
-
C言語についてですfor ifをつか...
おすすめ情報