[C言語] 任意の段数でピラミッドを作るプログラムの書き方
C言語で任意の段数のピラミッドを作成するプログラムは、主にループを使用して実現します。
まず、ユーザーからピラミッドの段数を入力として受け取ります。
次に、外側のループで各段を処理し、内側のループでスペースとアスタリスクを適切に配置します。
スペースは段数に応じて減少し、アスタリスクは増加するように制御します。
このようにして、ピラミッドの形状を整えます。
このプログラムは、基本的なループと条件分岐の理解を深めるのに役立ちます。
ピラミッドを描画するアルゴリズム
C言語で任意の段数のピラミッドを描画するためには、いくつかの基本的なアルゴリズムを理解する必要があります。
ここでは、ピラミッドを描画するための基本的な手法を解説します。
ループを使った行の生成
ピラミッドを描画する際には、各行を生成するためにループを使用します。
行の数はピラミッドの高さに対応し、各行には特定の数の文字が含まれます。
以下に、行を生成するための基本的なループ構造を示します。
#include <stdio.h>
int main() {
int height = 5; // ピラミッドの高さ
for (int i = 0; i < height; i++) {
// 各行の処理
}
return 0;
}
空白と文字の配置
ピラミッドの形を作るためには、各行に適切な数の空白と文字を配置する必要があります。
空白はピラミッドの中心を揃えるために使用され、文字はピラミッドの形を形成します。
以下のコードは、空白と文字を配置する方法を示しています。
#include <stdio.h>
int main() {
int height = 5; // ピラミッドの高さ
for (int i = 0; i < height; i++) {
// 空白の出力
for (int j = 0; j < height - i - 1; j++) {
printf(" ");
}
// 文字の出力
for (int k = 0; k < 2 * i + 1; k++) {
printf("*");
}
printf("\n");
}
return 0;
}
中心揃えの実現方法
ピラミッドを中心に揃えるためには、各行の先頭に適切な数の空白を挿入する必要があります。
これは、ピラミッドの高さと現在の行のインデックスを使用して計算されます。
上記のコードでは、height - i - 1
が空白の数を決定しています。
完成したプログラム
以下に、ピラミッドを描画するための完成したプログラムを示します。
このプログラムは、指定された高さのピラミッドをコンソールに出力します。
#include <stdio.h>
int main() {
int height = 5; // ピラミッドの高さ
for (int i = 0; i < height; i++) {
// 空白の出力
for (int j = 0; j < height - i - 1; j++) {
printf(" ");
}
// 文字の出力
for (int k = 0; k < 2 * i + 1; k++) {
printf("*");
}
printf("\n");
}
return 0;
}
*
***
*****
*******
*********
このプログラムは、指定された高さのピラミッドを正しく描画します。
各行の空白と文字の数を調整することで、ピラミッドの形を維持しながら中心に揃えることができます。
応用例
ピラミッドを描画する基本的なプログラムを理解したら、さらに応用してさまざまな形状やパターンを作成することができます。
ここでは、いくつかの応用例を紹介します。
逆ピラミッドの作成
逆ピラミッドは、通常のピラミッドとは逆に、上から下に向かって幅が狭くなる形状です。
これを実現するためには、空白と文字の配置を逆にする必要があります。
#include <stdio.h>
int main() {
int height = 5; // 逆ピラミッドの高さ
for (int i = 0; i < height; i++) {
// 空白の出力
for (int j = 0; j < i; j++) {
printf(" ");
}
// 文字の出力
for (int k = 0; k < 2 * (height - i) - 1; k++) {
printf("*");
}
printf("\n");
}
return 0;
}
*********
*******
*****
***
*
このプログラムでは、各行の空白と文字の数を調整することで、逆ピラミッドを描画しています。
複数のピラミッドを並べる
複数のピラミッドを横に並べることも可能です。
これを実現するには、各行に複数のピラミッドを描画するためのループを追加します。
#include <stdio.h>
int main() {
int height = 5; // ピラミッドの高さ
int count = 3; // ピラミッドの数
// ピラミッドを描画
for (int i = 0; i < height; i++) {
for (int c = 0; c < count; c++) {
// 空白の出力
for (int j = 0; j < height - i - 1; j++) {
printf(" ");
}
// 文字の出力
for (int k = 0; k < 2 * i + 1; k++) {
printf("*");
}
// ピラミッド間のスペース
// ピラミッドの右端まで揃えるため、動的にスペースを計算
if (c < count - 1) {
for (int j = 0; j < height - i; j++) {
printf(" ");
}
}
}
printf("\n");
}
return 0;
}
* * *
*** *** ***
***** ***** *****
******* ******* *******
********* ********* *********
このプログラムは、指定された数のピラミッドを横に並べて描画します。
ピラミッドの素材を変更する
ピラミッドを描画する際に使用する文字を変更することで、異なる見た目のピラミッドを作成できます。
例えば、*
の代わりに#
を使用することができます。
#include <stdio.h>
int main() {
int height = 5; // ピラミッドの高さ
char material = '#'; // ピラミッドの素材
for (int i = 0; i < height; i++) {
// 空白の出力
for (int j = 0; j < height - i - 1; j++) {
printf(" ");
}
// 文字の出力
for (int k = 0; k < 2 * i + 1; k++) {
printf("%c", material);
}
printf("\n");
}
return 0;
}
#
###
#####
#######
#########
このプログラムでは、material変数
を変更することで、ピラミッドの素材を簡単に変更できます。
まとめ
C言語でピラミッドを描画するプログラムは、基本的なループと条件分岐を理解する良い練習になります。
この記事では、ピラミッドの描画方法から応用例、よくある質問までを網羅しました。
これを機に、さらに複雑な図形の描画や、他のプログラミング課題に挑戦してみてください。