Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

異なるレイヤーのダイヤモンドパターンを出力するCプログラム

整数 n を入力として与え、n 段のレイヤー(階層)を持つダイヤモンド型の数字パターンを生成して表示するのが、本プログラムの目的です。パターンは数字 0 を頂点とし、中央行で最大値 n に達した後、再び 0 へと戻る左右対称の構造になります。

実行例

Input: n = 3

上記の入力に対する出力は次のようになります。

異なるレイヤーのダイヤモンドパターンを出力するCプログラム

アプローチのポイント

  • まず行数を入力として受け取ります。
  • このパターンは全体で ((2 * n) + 1) 行で構成されます。
  • 0 行目〜 n 行目までの各行の先頭には、(2 * (n − i)) 個の空白を出力します。
  • n + 1 行目以降から最終行までは、((i − n) * 2) 個の空白を出力します。
  • 数値と数値の間には半角スペースを挿入し、各行の両端は必ず 0 で閉じます。

参考までに、n = 3 の場合の出力をテキストで表すと以下のようになります(全体で 7 行)。

      0
    0 1 0
  0 1 2 1 0
0 1 2 3 2 1 0
  0 1 2 1 0
    0 1 0
      0

アルゴリズム

ステップ 1:パターンを表示する関数を定義する

関数 void print_pattern(int n) を宣言し、補助変数として int i, j を用意します。

  1. 最初の行: n * 2 個の空白を出力した後、「0」と改行を表示します。
  2. 中間の行: i を 1 から (n * 2) − 1 まで繰り返します。
    • i < n の場合:((n − i) * 2)個の空白を出力し、0 から i % n まで昇順に数値を表示、その後 (i % n) − 1 から 1 まで降順に表示して、最後に「0」を出力します。
    • i > n の場合:((i % n) * 2)個の空白を出力し、0 から n − (i − n) まで昇順に数値を表示、その後逆順に表示して「0」で締めくくります。
    • i == n の場合(中央行):空白を出力せず、0 から n まで昇順に表示し、n − 1 から 1 まで降順に表示して「0」を出力します。
  3. 最後の行: n * 2 個の空白を出力した後、「0」を表示します。

ステップ 2:main() 関数での呼び出し

main() 内で変数 int n = 3 を宣言し、print_pattern(n) を呼び出します。

C言語による実装例

#include <stdio.h>

void print_pattern(int n) {
    // 最初の行の空白を出力
    int i, j;
    for (i = 1; i <= n * 2; i++)
        printf(" ");
    printf("0\n");

    // 中央部分のパターンを生成
    for (i = 1; i <= (n * 2) - 1; i++) {
        // 増加パターンの処理
        if (i < n) {
            for (j = 1; j <= (n - i) * 2; j++)
                printf(" ");
        } else {
            for (j = 1; j <= (i % n) * 2; j++)
                printf(" ");
        }

        if (i < n) {
            for (j = 0; j <= i % n; j++)
                printf("%d ", j);
            for (j = (i % n) - 1; j > 0; j--)
                printf("%d ", j);
            printf("0");
        }
        // 減少パターンの処理
        else if (i > n) {
            for (j = 0; j <= n - (i - n); j++)
                printf("%d ", j);
            for (j = (n - (i - n)) - 1; j > 0; j--)
                printf("%d ", j);
            printf("0");
        } else {
            for (j = 0; j <= n; j++)
                printf("%d ", j);
            for (j = n - 1; j > 0; j--)
                printf("%d ", j);
            printf("0");
        }
        printf("\n");
    }

    // 最終行の空白を出力
    for (i = 1; i <= n * 2; i++)
        printf(" ");
    printf("0");
}

int main() {
    int n = 3;
    print_pattern(n);
    return 0;
}

出力結果

このプログラムをコンパイルして実行すると、n = 3 の場合は上記の画像のように 7 行からなるダイヤモンド型のパターンが表示されます。頂点と底辺は「0」のみの行となり、中央行で最大値「3」に達した後、対称的に数値が減少していきます。n の値を変更すれば、任意の段数のダイヤモンドパターンを同じロジックで生成できます。

  1. 【初心者向け】平行四辺形の外周(周長)を計算するC言語プログラム

    本記事では、2つの辺の長さが与えられた平行四辺形の外周(周囲の長さ)を計算し、その結果を表示するC言語プログラムを紹介します。数式の考え方からアルゴリズム、実際のコードまで順を追って解説していきます。 平行四辺形とは? 平行四辺形とは、次のような性質を持つ四角形の一種です。 向かい合う2組の辺がそれぞれ平行である 向かい合う角の大きさが互いに等しい 2本の対角線が互いの中点で交わる 下の図では、「a」と「b」が平行四辺形の隣り合う2つの辺の長さを表しています。 平行四辺形の外周の求め方 平行四辺形の外周(周長)は、次の式で定義されます。 外周 = 2 × (a + b)   = 2 ×

  2. 対角線の長さから正六角形の面積を求めるC++プログラム

    この記事では、対角線の長さがわかっている場合に、正六角形の面積を計算する方法を解説します。ここでは対角線の長さを d とします。正六角形の内角はそれぞれ 120° であり、すべての内角の合計は 720° になります。対角線の長さが d のとき、面積は以下の公式で求められます。面積の公式正六角形の対角線 d を使った面積の式は次のとおりです。面積 = (3√3 × d²) / 8この式では、対角線の2乗に 3√3 を掛け、8 で割ることで面積が得られます。入力値が負の場合は無効な値として扱うため、プログラム側でチェックを行っています。サンプルコード(C++)#include <iostre