- 締切済み
パスカルの三角形についてのCプログラムの解説をお願いします!
プログラミング初心者です。 先日『nが入力されたときに、n段のパスカルの三角形を出力するプログラムを作成しなさい』という課題が出ました。 まだ理解しきれていないところが多いもので、手元にある資料をマネて、とりあえず動いてくれるように書いてみました。 今消化不良をおこしているのは以下の2点です。 1 一部理解できない箇所がある →解説をいただきたい 2 出力される三角形が、パスカルの三角形ではなくただの『d』の三角形になってしまう →どこが間違っているのかご指摘いただきたい 以下が書いたプログラムです。 #include<stdio.h> int comb(int n, int r) { if (r==0 || r==n) return 1; elese return comb(n - 1, r - 1) + comb(n - 1, r); } main() { int n,i,j; printf("n?"); scanf("%d",&n); for (i=0; i<=n, i++) { for(j=0; j<=i, j++) { printf("d%",comb(i,j)); } printf("\n"); } } ちなみに理解できていない(自分自身で説明できない)箇所は main関数の前、 if (r==0 || r==n) return 1; elese return comb(n - 1, r - 1) + comb(n - 1, r); の二行です。お恥ずかしい話、記号の意味もよくわかってません; どなたかご指導お願いします!!(><)
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- maya9156
- ベストアンサー率0% (0/0)
※質問者です。 パスワード忘れで再登録したのでこちらから失礼します お二人とも本当に有難うございます。 綴りミスを直して実行できました^^ お二人の解説ポイントを中心に確認して、内容のおさらいもできました。的確なアドバイス、本当に有難うございました!!! とても参考になりました。
- salsberry
- ベストアンサー率69% (495/711)
>理解できていない(自分自身で説明できない)箇所は >if (r==0 || r==n) return 1; >elese return comb(n - 1, r - 1) + comb(n - 1, r); >の二行です。 組み合わせ comb(n, r) の値は ・comb(n, 0) または comb(n, n) のときは 1 ・それ以外のときは回答No.1にある等式の右辺を使って計算 ということを表しています。 再帰呼び出しを知らないと理解できないでしょう。 >2 出力される三角形が、パスカルの三角形ではなくただの『d』の三角形になってしまう >→どこが間違っているのかご指摘いただきたい dを出力している行は上記のプログラムの中に一つしかありません。そこを直せばいいだけです。printfの例題の初歩。
- salsberry
- ベストアンサー率69% (495/711)
下に挙げることを理解していればプログラムの意味も分かるし、間違いも修正できます。 ・関数combは数学の組み合わせ (combination) を表している ・パスカルの三角形は組み合わせと密接な関係がある ・組み合わせについて、nCr = (n-1)Cr + (n-1)C(r-1) という等式が成り立つ ・再帰呼び出し ・||は論理積を表す ・printf()でint型の値を出力するにはどう書けばいいか ・elseのつづり ・for文の ( ) の中にはセミコロンが2つ要る