C 言語でパスカルの三角形の一行を生成する

CBeginner
オンラインで実践に進む

はじめに

この実験では、C プログラミングを用いてパスカルの三角形の行を生成する方法を学びます。この実験は、3 つの主要なステップで構成されています。ユーザーから行番号を読み取る、行の二項係数を計算する、そして行を出力する、です。まず、ユーザーに希望する行番号を入力するように促すプログラムを作成し、次に二項係数を計算する関数を実装し、最後にパスカルの三角形の行を表示します。この実験の終わりまでに、数論と離散数学の概念をしっかりと理解し、それらを C プログラミングを用いて適用する実践的な経験を身につけるでしょう。

行番号の入力

このステップでは、C プログラミングを用いてパスカルの三角形の一行を生成するために、行番号を入力する方法を学びます。ユーザーに希望する行番号を入力するように促すプログラムを作成します。

まず、プロジェクトディレクトリに新しい C ファイルを作成しましょう。

cd ~/project
nano pascal_triangle.c

次に、行番号を読み取るための以下のコードを追加します。

#include <stdio.h>

int main() {
    int rowNumber;

    printf("パスカルの三角形に行番号を入力してください:");
    scanf("%d", &rowNumber);

    printf("入力された行番号は:%d\n", rowNumber);

    return 0;
}

コンパイルしてプログラムを実行してみましょう。

gcc pascal_triangle.c -o pascal_triangle
./pascal_triangle

実行例:

パスカルの三角形に行番号を入力してください: 5
入力された行番号は: 5

コードの説明:

  • #include <stdio.h> は標準入出力ライブラリをインクルードします。
  • scanf() はユーザーからの整数入力を読み取ります。
  • printf() は入力された行番号を表示します。
  • このプログラムは、行番号の基本的なユーザー入力を検証します。

重要なポイント:

  • 整数入力を読み取るために scanf() を使用します。
  • 行番号は、パスカルの三角形の特定の行を生成するために使用されます。
  • 後続のステップで入力検証を追加します。

二項係数の計算

このステップでは、パスカルの三角形の特定の行を生成するために二項係数を計算する方法を学びます。前のプログラムを修正して、関数を用いて係数を計算します。

既存のファイルを開きます。

cd ~/project
nano pascal_triangle.c

前のコードを以下の実装に置き換えます。

#include <stdio.h>

// 二項係数を計算する関数
int binomialCoeff(int n, int k) {
    // 基底ケース
    if (k == 0 || k == n)
        return 1;

    // パスカルの三角形の性質を用いた再帰計算
    return binomialCoeff(n-1, k-1) + binomialCoeff(n-1, k);
}

int main() {
    int rowNumber;

    printf("パスカルの三角形に行番号を入力してください:");
    scanf("%d", &rowNumber);

    printf("行 %d の二項係数:\n", rowNumber);

    // 係数を生成して出力
    for (int k = 0; k < rowNumber; k++) {
        printf("%d ", binomialCoeff(rowNumber - 1, k));
    }
    printf("\n");

    return 0;
}

コンパイルしてプログラムを実行します。

gcc pascal_triangle.c -o pascal_triangle
./pascal_triangle

実行例:

パスカルの三角形に行番号を入力してください: 5
行 5 の二項係数:
1 4 6 4 1

コードの説明:

  • binomialCoeff() 関数は、二項係数を再帰的に計算します。
  • 基底ケースは、各行の最初の要素と最後の要素を処理します。
  • この関数は、パスカルの三角形の再帰的性質を使用しています。
  • ネストされたループは、指定された行の係数を生成します。

重要なポイント:

  • 二項係数は、パスカルの三角形の各行の数字を表します。
  • 再帰的な計算は、数学的な関係を示しています。
  • 再帰的アプローチのため、時間計算量は指数関数的です。

行の出力

このステップでは、パスカルの三角形のプログラムを拡張し、適切なスペースと揃えでフォーマットして行を出力することで、出力の見栄えを良くします。

既存のファイルを開きます。

cd ~/project
nano pascal_triangle.c

前のコードを以下の実装に置き換えます。

#include <stdio.h>

// 二項係数を計算する関数
int binomialCoeff(int n, int k) {
    if (k == 0 || k == n)
        return 1;
    return binomialCoeff(n-1, k-1) + binomialCoeff(n-1, k);
}

// パスカルの三角形の一行を出力する関数
void printPascalRow(int rowNumber) {
    // 整列のための先頭のスペースを出力
    for (int space = 0; space < rowNumber; space++) {
        printf("   ");
    }

    // 係数を生成して出力
    for (int k = 0; k < rowNumber; k++) {
        int coefficient = binomialCoeff(rowNumber - 1, k);
        printf("%4d ", coefficient);
    }
    printf("\n");
}

int main() {
    int rowNumber;

    printf("パスカルの三角形に行番号を入力してください (1-10): ");
    scanf("%d", &rowNumber);

    if (rowNumber < 1 || rowNumber > 10) {
        printf("行番号は 1 から 10 の間で入力してください。\n");
        return 1;
    }

    printf("パスカルの三角形 行%d:\n", rowNumber);

    // 指定された行を出力
    printPascalRow(rowNumber);

    return 0;
}

コンパイルしてプログラムを実行します。

gcc pascal_triangle.c -o pascal_triangle
./pascal_triangle

実行例:

パスカルの三角形に行番号を入力してください (1-10): 5
パスカルの三角形 行5:
            1    4    6    4    1

コードの説明:

  • printPascalRow() 関数は、行のフォーマットを処理します。
  • 整列のために先頭にスペースを追加しました。
  • 一貫した列幅のために %4d の書式指定子を使用しました。
  • 行番号の制限のための入力検証を追加しました。
  • 適切なスペースで整列された行全体を出力します。

重要なポイント:

  • フォーマットにより、パスカルの三角形の読みやすさが向上します。
  • 入力検証により、予期しない動作を防ぎます。
  • C 言語における基本的なフォーマット技術を示しています。

まとめ

この実験では、C プログラミングを用いてパスカルの三角形の一行を生成するための行番号を読み取り、二項係数を計算して行を出力する方法を学びます。最初に、ユーザーに希望する行番号を入力するように促すプログラムを作成します。次に、パスカルの三角形の再帰的性質を用いて二項係数を計算する関数を実装します。最後に、計算された係数に基づいてパスカルの三角形の一行を出力します。この実験で扱う重要な点は、scanf() を使用してユーザー入力を読み取る、再帰関数を使用して二項係数を計算する、そして生成された行を出力することです。