実は宿題なんですけど、明後日締め切りなのに、この問題がどうしても自分にはできなくて、皆さんにお願いしたいのです。ぜひよろしくお願いします!
二項展開に関するプログラムなんですが、
キーボードから n を入力して、(a+b)^n の展開式を表示するプログラムです。例えば、nが4の時(a+b)^4 = a^4 + 4a^3b + 6a^2b^2 + 4ab^3 + b^4

A 回答 (1件)

> この問題がどうしても自分にはできなくて、皆さんにお願いしたいのです。



どこが「どうしても、できない」んでしょうね?
プログラムの問題か、二項展開の問題か。

二項展開が

     n
(a+b)^n = Σ (nCk a^k b^(n - k))
     k=0

であることを知っていれば、その Σ を for ループで扱って、改行せずに
一項ずつ出力していくだけなんですが…

それとも、組合わせの計算が分からない?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QC言語についてです 整数nを入力すると、1+2+3...+nの 合計値を出力するプログラムを作りたい

C言語についてです
整数nを入力すると、1+2+3...+nの
合計値を出力するプログラムを作りたいの
ですが
これではなぜできないのでしょうか?

Aベストアンサー

初心者がよくやる間違いです。
気をつけましょう。


教科書等には
 for(〜) { 処理 }  で「処理」を繰り返す
等と書いてありますが、処理が1命令だけの場合
 for(〜) 命令 ;
と書くこともできます。この場合、forの条件に従って「命令」を繰り返すことになります。
この命令には「何もしない」命令、つまり、「空白」も該当します。
つまり
 for(〜);
で、「何もしない」を繰り返すfor文となります。

また、 {} は、 forとか if とかの後でなくても利用できます。
そのときには{文1;文2;...} といいた複数の文を、一つの文として扱う、という意味になります。
これは、 { } をはずしたのと同等です。 (forとかifとかの後等の特定の条件でなければ)

つまり
for(〜) { 処理 }
のつもりで
for(〜) ; { 処理 }
と書いてしまうと

for(〜) ; で「何もしない命令」を繰り返し実行
↓その後
{処理}を (1回だけ)実行

となります。



※ なお、上記は理解しやすいように、ちょっと不正確な部分があります。

初心者がよくやる間違いです。
気をつけましょう。


教科書等には
 for(〜) { 処理 }  で「処理」を繰り返す
等と書いてありますが、処理が1命令だけの場合
 for(〜) 命令 ;
と書くこともできます。この場合、forの条件に従って「命令」を繰り返すことになります。
この命令には「何もしない」命令、つまり、「空白」も該当します。
つまり
 for(〜);
で、「何もしない」を繰り返すfor文となります。

また、 {} は、 forとか if とかの後でなくても利用できます。
そのときには{文1;文2;...} といいた複数...続きを読む

QC言語です 整数nを入力すると1+2+....+nという計算式と 合計値を出力するプログラムを作りた

C言語です
整数nを入力すると1+2+....+nという計算式と
合計値を出力するプログラムを作りたいの
ですが
このようになってしまいます
なぜでしょうか?

Aベストアンサー

printf("+%d=",i); → printf("+%d",i);
printf("%d",sum); → printf("=%d",sum);

でそ?

QC言語でsqrt(a^2+b^2)のテーブル引き

プログラムに悩んでいるものです.

とある画像処理のプログラムを組んでいるのですが,処理が遅くテーブル引きを組んでいます.
三角関数などはすんなりできたのですが,質題にもある通りsqrt(a^2+b^2)が実現できず,この場を借りて質問させていただきました.
以下にプログラムの一部を示します.
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
void filter(unsigned char* d, short *dx, short *dy, int w, int h)
{
///// テーブル生成 /////
static int c_size = 0;// static 次の呼び出しでも値保持
static double *c_sqrt = NULL;//
c_size = 255;              // u,v:0~255
c_sqrt = (double *)malloc(sizeof(double)*c_size*c_size);// 領域確保
for(int i=0; i<c_size; ++i){    // 有りえるすべての値を生成
for(int j=0; j<c_size; ++i){
c_sqrt[i*j] = sqrt( (double)(i*i + j*j) );
}
}
///// d = sqrt(dx^2 + dy^2) /////
for(int y = 1; y < h-1; ++y){
for(int x = 1; x < w-1; ++x){
double u = (double)dx[y*w+x];
double v = (double)dy[y*w+x];
int val = (int)c_sqrt[ (int)(u*v) ] /4;
if (val>255) val=255;
d[y*w+x] = val;
}
}

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
見てご察し頂ける(?)と思いますが,この関数は何回も呼び出すので,上のほうででテーブル引きしようとしてます.
ただ明らかなプログラム経験不足のためかうまくいってません.
個人的にはc_sqrtを別途関数c_sqrt(u,v)にしたほうがよいのかと思ってます.
どういうプログラム記述をすれば,このテーブル引きが実現できるでしょうか?
ご回答,お力添え,よろしくお願い致します.

プログラムに悩んでいるものです.

とある画像処理のプログラムを組んでいるのですが,処理が遅くテーブル引きを組んでいます.
三角関数などはすんなりできたのですが,質題にもある通りsqrt(a^2+b^2)が実現できず,この場を借りて質問させていただきました.
以下にプログラムの一部を示します.
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
void filter(unsigned char* d, short *dx, short *dy, int w, int h)
{
///// テーブル生成 /////
static int c_size = 0;// static 次の呼び...続きを読む

Aベストアンサー

何をやりたいのか今ひとつ見えませんが、
c_sqrt[i*j] = sqrt( (double)(i*i + j*j) );
とやってしまうと、
i=2、j=8の時には
c_sqrt[16]=√(2*2+8*8)=√68

i=4、j=4の時は
c_sqrt[16]=√(4*4+4*4)=√32
ということで、c_sqrt[16]が上書きされてしまいますが、それで良いんでしょうか?

sqrt(a^2+b^2)
の値引きテーブルを作るならc_sqrt[a][b]のような二次元配列で用意してやるのが常道ではないかと思います。

Q行列A(l行m列)と行列B(m行n列)の積C(l行n列)を求めるプログラム

ヒントを頂きたいです。
よろしくおねがいします。

Aベストアンサー

行列の積を求めるプログラムは、過去にも、何回かでてきました。
参考URLのものは、固定のサイズですけど、
mallocで動的にサイズを確保するか、
計算可能な最大の大きさをあらかじめ決めておくか
することになると思います。

参考URL:http://okweb.jp/kotaeru.php3?qid=1391489

Q2 ~ 200 の素数 a, b, c (a < b < c) が、b - a = c - b を満たすa,b,cをビット操作を用いて求め、すべてを表示せよ

ちょっと考えてみました。でも、分かりません・・・まず、int型のintvalに200bitを割り当てて、intval=0としたいのですが、どうしたらいいのでしょう??
とりあえず考えてみたプログラムを誰か見て下さい!!お願いします。
#define BYTESIZE 200
#define MAX 200
main()
{
int i,j,intval=0;
for(i=2;i<=MAX/2;i++)
{
if(intval&(1<<(i-1)){}
else for(j=i*2;j<=MAX;j+=i)intval|=(1<<(j-1));
}/*素数を0、それ以外を1に
for(i=2;i<=MAX/2;i++)
for(j=2;j<=(MAX-i)/2;j++)
if((intval&(1<<(i-1))&&(intval&(i+j-1))&&(intval&(1<<(i+2*j-1)))) print("%3d %3d %3d (%3d)\n",i,i+j,i+2*j,j);
}/*三つ子の素数を調べ出力

ちょっと考えてみました。でも、分かりません・・・まず、int型のintvalに200bitを割り当てて、intval=0としたいのですが、どうしたらいいのでしょう??
とりあえず考えてみたプログラムを誰か見て下さい!!お願いします。
#define BYTESIZE 200
#define MAX 200
main()
{
int i,j,intval=0;
for(i=2;i<=MAX/2;i++)
{
if(intval&(1<<(i-1)){}
else for(j=i*2;j<=MAX;j+=i)intval|=(1<<(j-1));
}/*素数を0、それ以外を1に
for(i=2;i<=MAX/2;i++)
for(j=2;j<=(MAX-i)/2;j++)
if((intval&...続きを読む

Aベストアンサー

まずint型は200ビットもありません。通常は32ビットです。
200ビット使いたければint型を7個用意する必要があります。
つまり
int intval[7];
宣言して、
intval[0] 0~31ビット
intval[1] 32~63ビット
intval[2] 64~95ビット
.
.
.
intval[6] 182~200ビット
として使います。

第iビットの情報を取り出すときは
(intval[i>>5]>>(i&31))&1

第iビットを1にするときは
intval[i>>5]|=1<<(i&31);

とすれば良いでしょう。
関数やマクロを用意することをお勧めします。
例えば
int get(int intval[],int i)
{
return (intval[i>>5]>>(i&31))&1;/*0か1が返って来る。*/
}

void on(int intval[],int i)
{
intval[i>>5]|=1<<(i&31);
}

という感じです。

まずint型は200ビットもありません。通常は32ビットです。
200ビット使いたければint型を7個用意する必要があります。
つまり
int intval[7];
宣言して、
intval[0] 0~31ビット
intval[1] 32~63ビット
intval[2] 64~95ビット
.
.
.
intval[6] 182~200ビット
として使います。

第iビットの情報を取り出すときは
(intval[i>>5]>>(i&31))&1

...続きを読む


人気Q&Aランキング

おすすめ情報