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

アプローチのポイント
- まず行数を入力として受け取ります。
- このパターンは全体で ((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 を用意します。
- 最初の行: n * 2 個の空白を出力した後、「0」と改行を表示します。
- 中間の行: 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」を出力します。
- 最後の行: 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 の値を変更すれば、任意の段数のダイヤモンドパターンを同じロジックで生成できます。
-
【初心者向け】平行四辺形の外周(周長)を計算するC言語プログラム
本記事では、2つの辺の長さが与えられた平行四辺形の外周(周囲の長さ)を計算し、その結果を表示するC言語プログラムを紹介します。数式の考え方からアルゴリズム、実際のコードまで順を追って解説していきます。 平行四辺形とは? 平行四辺形とは、次のような性質を持つ四角形の一種です。 向かい合う2組の辺がそれぞれ平行である 向かい合う角の大きさが互いに等しい 2本の対角線が互いの中点で交わる 下の図では、「a」と「b」が平行四辺形の隣り合う2つの辺の長さを表しています。 平行四辺形の外周の求め方 平行四辺形の外周(周長)は、次の式で定義されます。 外周 = 2 × (a + b) = 2 ×
-
対角線の長さから正六角形の面積を求めるC++プログラム
この記事では、対角線の長さがわかっている場合に、正六角形の面積を計算する方法を解説します。ここでは対角線の長さを d とします。正六角形の内角はそれぞれ 120° であり、すべての内角の合計は 720° になります。対角線の長さが d のとき、面積は以下の公式で求められます。面積の公式正六角形の対角線 d を使った面積の式は次のとおりです。面積 = (3√3 × d²) / 8この式では、対角線の2乗に 3√3 を掛け、8 で割ることで面積が得られます。入力値が負の場合は無効な値として扱うため、プログラム側でチェックを行っています。サンプルコード(C++)#include <iostre