【C言語】中空のピラミッドとダイヤモンド模様を出力するプログラム
C言語では、塗りつぶし型(ソリッド)のピラミッドパターンは比較的簡単に生成できますが、中空(輪郭のみ)のパターンにするには少し工夫が必要です。この記事では、中空ピラミッドと中空ダイヤモンドの2種類のパターンを生成する方法を、サンプルコードと実行結果とあわせてわかりやすく解説します。
中空ピラミッドのパターン
中空ピラミッドでは、最初の行に星(*)を1つだけ表示し、最後の行(n行目)にはn個の星を連続して表示します。それ以外の行では、行の先頭と末尾にちょうど2つの星を配置し、その間はすべて空白で埋めます。
サンプルコード
#include <stdio.h>
int main() {
int n, i, j;
printf("Enter number of lines: ");
scanf("%d", &n);
for(i = 1; i<=n; i++) {
for(j = 1; j<=(n-i); j++) { // 星の前に空白を出力
printf(" ");
}
if(i == 1 || i == n) { // 最初と最後の行は星を連続出力
for(j = 1; j<=i; j++) {
printf("* ");
}
} else {
printf("*"); // 各行の先頭と末尾に星を出力
for(j = 1; j<=2*i-3; j++) { // 中空にするための空白を出力
printf(" ");
}
printf("*");
}
printf("\n");
}
}実行結果
Enter number of lines: 20
*
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* * * * * * * * * * * * * * * * * * * *中空ダイヤモンドのパターン
中空ダイヤモンドでは、最初の行と最後の行に星を1つずつ表示します。それ以外の行では、行の先頭と末尾に2つの星を配置し、その間を空白で埋めます。ダイヤモンドは上半分と下半分の2つの部分で構成されており、上半分では空白の数を増やしながら幅を広げ、下半分では逆に空白の数を減らしながら幅を狭めていきます。プログラムでは、midという補助変数を使って行番号を上下の2つの部分に分割して処理します。なお、入力された行数nが奇数だった場合は、1を加えて偶数に調整しています。
サンプルコード
#include <stdio.h>
int main() {
int n, i, j, mid;
printf("Enter number of lines: ");
scanf("%d", &n);
if(n % 2 == 1) { // nが奇数の場合は1を加えて偶数にする
n++;
}
mid = (n / 2);
for(i = 1; i<= mid; i++) { // ダイヤモンドの上半分
for(j = 1; j<=(mid-i); j++) { // 星の前に空白を出力
printf(" ");
}
if(i == 1) {
printf("*");
} else {
printf("*"); // 各行の先頭と末尾に星を出力
for(j = 1; j<=2*i-3; j++) { // 中空にするための空白を出力
printf(" ");
}
printf("*");
}
printf("\n");
}
for(i = mid+1; i<n; i++) { // ダイヤモンドの下半分
for(j = 1; j<=i-mid; j++) { // 星の前に空白を出力
printf(" ");
}
if(i == n-1) {
printf("*");
} else {
printf("*"); // 各行の先頭と末尾に星を出力
for(j = 1; j<=2*(n-i)-3; j++) { // 中空にするための空白を出力
printf(" ");
}
printf("*");
}
printf("\n");
}
}実行結果
Enter number of lines: 15
*
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
*このように、ループの範囲と空白の出力個数を制御するだけで、さまざまな中空パターンを自由に描くことができます。行数を変えて実行し、動作の仕組みをぜひ確認してみてください。
-
Cプログラムで行列を対角パターンに沿って数値出力する方法
この課題は、n×nの行列を対角パターンで出力することです。 例えば n が 3 の場合、対角パターンに従って行列を出力すると、次のような配置になります。 そして、実際の出力結果は以下の通りです。 実行例 Input: 3 Output: 1 2 4 3 5 7 6 8 9 Input: 4 Output: 1 2 4 7 3 5 8 11 6 9 12 14 10 13 15 16 考え方 一見すると、「数値 n を受け取り n×n の行列を生成し、それを対角方向に走査しながら別の行列へ値を格納する」というアプローチが思い浮かびます
-
C++で中空ピラミッドとダイヤモンドパターンを出力するプログラムの作り方
この記事では、C++を使って中空(ホロー)のピラミッドとダイヤモンドのパターンを生成する方法を解説します。塗りつぶし(ソリッド)のピラミッドパターンは比較的簡単に作成できますが、中空にするにはいくつかの工夫が必要です。ポイントは、ループと条件分岐を組み合わせて「星を出す位置」と「空白を入れる位置」を制御することです。 中空ピラミッドの出力 ピラミッドでは、1行目に星(*)を1つだけ出力し、最終行にはn個の星を連続して出力します。それ以外の行では、行頭と行末にちょうど2つの星を出力し、その間は空白で埋めます。これにより、輪郭だけの中空ピラミッドが完成します。 サンプルコード #include &