C言語でダイヤモンドパターンを出力するプログラム
プログラムの概要
ダイヤモンドパターンは、正ピラミッドパターンと逆ピラミッドパターンを組み合わせたものです。上半分は数字が増えていくピラミッド形状、下半分はそれが逆さになった形状を出力することで、全体としてダイヤモンド(ひし形)が描かれます。
アルゴリズム
このプログラムでは、1から始まる連続した数字を使ってダイヤモンド型のパターンを表示します。各行の出力内容は以下のとおりです。
1行目:1 を表示 2行目:1,2,3 を表示 3行目:1,2,3,4,5 を表示 4行目:1,2,3,4,5,6,7 を表示 5行目:1,2,3,4,5,6,7,8,9 を表示 6行目以降:5行目から4行目までの内容を逆順に表示
処理の流れ
- 外側のループで行数(1〜5)を制御します。
- 最初の内側ループで、行番号に応じた数の半角スペースを出力し、数字を中央に寄せます。
- 次の内側ループで、1から「行番号×2−1」までの数字を連続して出力します。
- 上半分の出力後、同様のロジックで4行目から1行目までを逆順に出力し、下側の三角形を完成させます。
サンプルコード
/* ダイヤモンドパターンを出力するプログラム */
#include<stdio.h>
int main(){
int i,j,k;
clrscr();
printf("\n");
printf("Diamond Pattern");
printf("\n");
printf("\n");
/* 上半分(正ピラミッド) */
for(i = 1;i<=5;i++){
for(j = i;j<5;j++){
printf(" ");
}
for(k = 1;k<(i*2);k++){
printf("%d",k);
}
printf("\n");
}
/* 下半分(逆ピラミッド) */
for(i = 4;i>=1;i--){
for(j = 5;j>i;j--){
printf(" ");
}
for(k = 1;k<(i*2);k++){
printf("%d",k);
}
printf("\n");
}
getch();
return 0;
}
実行結果
このプログラムを実行すると、以下のようなダイヤモンド状の数字パターンがコンソールに表示されます。中央の5行目が最も幅が広く、上下対称の美しいひし形になります。
1
123
12345
1234567
123456789
1234567
12345
123
1
ポイント解説
- スペース出力の役割: 各行の先頭に適切な数の空白を入れることで、数字が中央揃えになり、ダイヤモンドの形状が際立ちます。
- 二重ループ構造: 外側のループが行を、内側のループがスペースと数字の出力を担当する、定番のネスト構造です。
- clrscr() と getch() について: これらは古いTurbo Cなどで使われる関数です。GCCなどの現代的な環境では
system("clear")やgetchar()に置き換えるか、削除しても動作します。
-
C言語で行列の要素を斜め下方向に出力するプログラム
n×nサイズの配列が与えられたとき、その整数型の行列要素を斜め下方向に出力するのが課題です。「斜め下方向」とは、任意のn×nサイズの配列を、下図のように左上から右下へ斜めに移動しながら順番に出力することを意味します。具体的には、まず「1」を出力し、次に「2」を出力した後、斜め下の「4」へ移動して出力します。この操作を行列のすべての要素に対して繰り返していきます。入力例と出力例入力:Matrix [3][3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }} 出力:1 2 4 3 5
-
C++で中空ピラミッドとダイヤモンドパターンを出力するプログラムの作り方
この記事では、C++を使って中空(ホロー)のピラミッドとダイヤモンドのパターンを生成する方法を解説します。塗りつぶし(ソリッド)のピラミッドパターンは比較的簡単に作成できますが、中空にするにはいくつかの工夫が必要です。ポイントは、ループと条件分岐を組み合わせて「星を出す位置」と「空白を入れる位置」を制御することです。 中空ピラミッドの出力 ピラミッドでは、1行目に星(*)を1つだけ出力し、最終行にはn個の星を連続して出力します。それ以外の行では、行頭と行末にちょうど2つの星を出力し、その間は空白で埋めます。これにより、輪郭だけの中空ピラミッドが完成します。 サンプルコード #include &