C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++で菱形(ダイヤモンド)パターンを出力するプログラムの作り方

本記事では、コンソールに菱形(ダイヤモンド型)の星形パターンを出力するC++プログラムを紹介します。行数を入力すると、その大きさに応じた菱形が表示される、定番のアルゴリズム演習問題です。二重ループの考え方を学ぶのに最適な題材なので、ぜひ参考にしてください。

アルゴリズム

菱形の出力は「上半分」と「下半分」の2段階に分けて考えるのがポイントです。まず上向きの三角形を作り、次に同じ処理を逆順に実行することで、対称的な菱形が完成します。

Begin
    行数 n を入力として受け取る(nは菱形の寸法を表す)。
    変数 i、j を宣言し、space = 1 で初期化する。
    space = n - 1 と設定する。
    i が n に達するまでforループを繰り返す。
        空白を出力するためのforループを実行する。
        space を1つ減らす。
        星印(*)を出力するためのforループを実行する。
    同じ処理を今度は逆順に行う。
    space = 1 で初期化する。
    i が n に達するまでforループを繰り返す。
        空白を出力するためのforループを実行する。
        space を1つ増やす。
        星印(*)を出力するためのforループを実行する。
End

サンプルコード

#include<iostream>
using namespace std;
int main() {
    int n, i, j, space=1;
    cout<<"Enter number of rows : ";
    cin>>n;
    space=n-1;
    for (i=1; i<=n; i++) {
        for(j=1; j<=space; j++) {
            cout<<" "; //空白を出力
        }
        space--;
        for(j=1; j<=(2*i-1); j++) {
            cout<<"*"; //星印を出力
        }
        cout<<"\n";
    }
    //ここから逆順の出力
    space=1;
    for (i=1; i<=n; i++) {
        for(j=1; j<=space; j++) {
            cout<<" "; //空白を出力
        }
        space++;
        for(j=1; j<=(2*(n-i)-1); j++) {
            cout<<"*"; //星印を出力
        }
        cout<<"\n";
    }
    return 0;
}

※元のコードでは戻り値の型を省略した main() が使われていますが、現代のC++規格では int main() と記述するのが正しい書き方のため、上記のサンプルでは修正しています。

プログラムの仕組み

上半分のループでは、各行ごとに空白の数を1つずつ減らしながら、星印を奇数個(1個、3個、5個…)ずつ増やしていきます。星印の個数は 2 * i - 1 という式で計算されており、これにより中央に向かって幅が広がる三角形が描かれます。

下半分のループではその逆を行い、空白を増やしながら星印を 2 * (n - i) - 1 個ずつ減らしていくことで、下向きの三角形が描かれます。この2つの三角形を組み合わせることで、完全な菱形になります。

実行結果

Enter number of rows: 4
*
***
*****
*******
*****
***
*

行数として「4」を入力すると、上記のように7段の菱形パターンが出力されます。入力する数値を変えれば、任意の大きさの菱形を自由に生成できます。

  1. C++で二分木の奇数レベルにあるノードを出力するプログラム

    このチュートリアルでは、与えられた二分木(バイナリツリー)の中から、奇数レベルに存在するノードを出力するC++プログラムについて解説します。 本プログラムでは、ルートノードのレベルを「1」と定義し、それ以降のレベルは交互にカウントしていきます。つまり、レベル1・3・5…といった奇数番目の階層に属するノードが出力の対象となります。 例として、以下のような二分木が与えられた場合を考えてみましょう。 この二分木の場合、奇数レベルに存在するノードは 1, 4, 5, 6 となります。 アルゴリズムの考え方 実装には再帰呼び出しを利用します。ルートから探索を開始し、現在のレベルが奇数かどうかをブール

  2. C++で中空ピラミッドとダイヤモンドパターンを出力するプログラムの作り方

    この記事では、C++を使って中空(ホロー)のピラミッドとダイヤモンドのパターンを生成する方法を解説します。塗りつぶし(ソリッド)のピラミッドパターンは比較的簡単に作成できますが、中空にするにはいくつかの工夫が必要です。ポイントは、ループと条件分岐を組み合わせて「星を出す位置」と「空白を入れる位置」を制御することです。 中空ピラミッドの出力 ピラミッドでは、1行目に星(*)を1つだけ出力し、最終行にはn個の星を連続して出力します。それ以外の行では、行頭と行末にちょうど2つの星を出力し、その間は空白で埋めます。これにより、輪郭だけの中空ピラミッドが完成します。 サンプルコード #include &