[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変数を変更することで、ピラミッドの素材を簡単に変更できます。

よくある質問

なぜピラミッドの形が崩れることがあるのか?

ピラミッドの形が崩れる原因の多くは、空白と文字の数が正しく計算されていないことにあります。

特に、各行の空白の数や文字の数が不適切だと、ピラミッドが左右対称にならず、形が崩れてしまいます。

プログラム内で使用するループの条件や計算式を見直し、正しい数値を設定することが重要です。

入力値が負の場合はどうなる?

ピラミッドの高さとして負の値を入力した場合、通常のプログラムでは何も描画されないか、エラーが発生する可能性があります。

負の値はピラミッドの高さとして無効であるため、プログラム内で入力値をチェックし、負の値が入力された場合にはエラーメッセージを表示するなどの対策を講じることが推奨されます。

例:if (height < 0) { printf("高さは正の整数でなければなりません。\n"); }

ピラミッドの高さを動的に変更するには?

ピラミッドの高さを動的に変更するには、ユーザーからの入力を受け取る方法が有効です。

scanf関数を使用して、ユーザーに高さを入力してもらい、その値をプログラム内で使用することができます。

これにより、実行時にピラミッドの高さを自由に設定することが可能になります。

例:scanf("%d", &height);

まとめ

C言語でピラミッドを描画するプログラムは、基本的なループと条件分岐を理解する良い練習になります。

この記事では、ピラミッドの描画方法から応用例、よくある質問までを網羅しました。

これを機に、さらに複雑な図形の描画や、他のプログラミング課題に挑戦してみてください。

当サイトはリンクフリーです。出典元を明記していただければ、ご自由に引用していただいて構いません。

関連カテゴリーから探す

  • 初学者向け (30)
  • URLをコピーしました!
目次から探す