アプリ版:「スタンプのみでお礼する」機能のリリースについて

プログラミング初心者です。
先日『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);
の二行です。お恥ずかしい話、記号の意味もよくわかってません;


どなたかご指導お願いします!!(><)

A 回答 (3件)

下に挙げることを理解していればプログラムの意味も分かるし、間違いも修正できます。



・関数combは数学の組み合わせ (combination) を表している
・パスカルの三角形は組み合わせと密接な関係がある
・組み合わせについて、nCr = (n-1)Cr + (n-1)C(r-1) という等式が成り立つ
・再帰呼び出し
・||は論理積を表す
・printf()でint型の値を出力するにはどう書けばいいか
・elseのつづり
・for文の ( ) の中にはセミコロンが2つ要る
    • good
    • 0

>理解できていない(自分自身で説明できない)箇所は


>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の例題の初歩。
    • good
    • 0

※質問者です。


パスワード忘れで再登録したのでこちらから失礼します

お二人とも本当に有難うございます。
綴りミスを直して実行できました^^

お二人の解説ポイントを中心に確認して、内容のおさらいもできました。的確なアドバイス、本当に有難うございました!!!
とても参考になりました。
    • good
    • 0

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