C++ でループの出力を同じ行に表示する方法はありますか?



私は大学で C++ の入門クラスを受講しています。私たちは、pi=summation ((-1)^i+1)*(4/2i-1) である系列を使用して pi を概算するプログラムを作成するプロジェクトを割り当てられました。


出力を次のようにする必要があります:


このプログラムは、n 項級数展開を使用して pi を近似します。

n の値を入力してください> 6

pi[6] =4[1-1/3+1/5-1/7+1/9-1/ 11] =2.9760461760417560644


#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main()
{
int numOfTerms;
cout <<"This program calculates pi using an n-term series expansion."<<endl;
cout <<"Enter the value for n>";
cin >>numOfTerms;
if (numOfTerms<=0)
cout <<numOfTerms<<"is an invalid number of terms."<<endl;
else
{
cout <<"pi["<<numOfTerms<<"] = ";
int i;
for (i=1; i<=numOfTerms; i++)
{
double pi, sum, firstTerm, secondTerm;
firstTerm=pow(-1,(i+1));
secondTerm=1/(2*i-1);
pi=firstTerm*secondTerm;
{
if (pi <= 4)
cout <<firstTerm<<"/"<<secondTerm;
else
cout <<"You have a C++ math error.";
}
sum=sum+(4*pi);
cout <<" = "<<sum<<endl;
}
}
return 0;
}

n シリーズの近似値を正しく合計する以前のバージョンのコードがありますが、合計に等しい展開されたシリーズが表示されません。


私の現在のバージョンでは、修正の合計は表示されませんが、画面上に pi[n] が n 行にわたって n 回表示されます。


プロジェクトの大部分を自分で把握しようと思っています。ループの出力を各反復を個別に表示するのではなく、1 行に表示する方法があるかどうかを知りたいだけです。行。


答え:


3 つのこと:
まず、secondTerm の計算を次のように変更します。


secondTerm=1.0/(2*i-1);

このように、強制的に double にすることになります (そうしないと、望ましくない int が返されます)。
次に、次の行を変更します。


cout <<firstTerm<<"/"<<secondTerm;

この行:


cout <<pi;

これは、secondTerm が分母ではなく除算の結果を保持するためです。


3 番目に、この行を移動します:


cout <<" = "<<sum<<endl;

のために これは、すべての項を合計した後に行う最終結果を出力するためです。 for 内にその行を含める 改行が発生しています。 これを行う場合、次の行を移動する必要があります:


double pi, sum, firstTerm, secondTerm;

以前 のために ループするため、合計変数はその後も存在し続けます。


これをすべて行うと、プログラムは正常に動作します (すべての用語が空白なしで出力されますが)。


いくつかのコードの回答


int x = 1;
int y = 10;
for (int i = 0;
i <
y;
i++) {
x *= 2;
} printf("%d\n", x);
int i = 0;
int x = 1;
for (i = 0;
i <
10;
i++) {
x *= 2;
printf("%d\n", x);
}
int x;
for( x = 0;
x <
10;
++x ) {
printf("%d\n", pow(2, x) );
}
for (int i = 0;
i <
y;
i++) {
x *= 2;
printf("%d\n", x);
}
int x = 1;
int y = 10;
int i = 0;
int main() { for(i = 0;
i <
y;
i++) {
x *= 2;
printf("%d\n", x);
} return 0;
}
2 4 8 16 32 64 128 256 512 1024 
for(x = 1;
x<=1024;
x*=2)
{
printf("%d ",x);
}