C++で蝶の形をした面白いパターンを出力する方法
この記事では、C++プログラミングを用いて、蝶が翼を広げたような面白いパターンを出力する方法を解説します。二重ループと条件分岐を組み合わせるだけで、美しい対称模様を描くことができます。
アルゴリズム
パターン出力の基本的な流れは、以下の3つのステップで構成されています。
ステップ1: パターンのサイズを定義する(出力時は自動的に2倍の幅になる) ステップ2: ループ処理を使ってパターンの上半分を出力する ステップ3: ループ処理を使ってパターンの下半分を出力する
サンプルコード
上記のアルゴリズムに基づいて作成したC++コードが以下の通りです。
#include <iostream>
using namespace std;
int main(){
int n=3;
int i,j;
// パターンの上半分
for (i=1; i<=n; i++){
for (j=1; j<=(2*n); j++){
// パターンの左側
if (i<j)
cout<<" ";
else
cout<<"*";
// パターンの右側
if (i<=((2*n)-j))
cout<<" ";
else
cout<<"*";
}
cout<<endl;
}
// パターンの下半分
for (i=1; i<=n; i++){
for (j=1;j<=(2*n);j++){
// パターンの左側
if (i>(n-j+1))
cout<<" ";
else
cout<<"*";
// パターンの右側
if ((i+n)>j)
cout<<" ";
else
cout<<"*";
}
cout<<endl;
}
return 0;
}
このコードをコンパイルして実行すると、蝶が翼を広げたような対称的なパターンが出力されます。
実行結果
* * * * * * * * * * * * * * * * * * * * * * * *
コードのポイント
- 変数n:パターンの半分の高さを表します。ここでは3を設定していますが、値を変更すればパターンの大きさを自由に調整できます。
- 上半分の処理:外側のループが行を、内側のループが列(2×n列)を制御します。条件式「i<j」で左側の空白と「*」を切り替え、「i<=(2*n)-j」で右側を制御することで、上に向かって開く翼の形を描きます。
- 下半分の処理:条件式を反転させることで、上半分と対称の形を出力し、蝶の下半分を完成させます。
このように、二重ループとif文の条件を工夫するだけで、複雑に見える図形パターンも簡単に出力できます。nの値を変更して、さまざまなサイズのパターンを試してみてください。
-
C++で学ぶコンポジットパターン(複合デザインパターン)の基礎と実装例
コンポジットパターン(Composite Pattern)は、複数のオブジェクトからなるグループを、あたかも単一のオブジェクトであるかのように扱いたい場面で活用されるデザインパターンです。 このパターンでは、オブジェクトを木構造(ツリー構造)として組み立てることで、「部分」と「全体」の両方の階層を一貫した形で表現できます。オブジェクト群のツリー構造を生成するパターンであるため、GoFデザインパターンの分類では「構造に関するパターン(Structural Patterns)」に属します。 コンポジットパターンの基本概念 コンポジットパターンでは、自分自身と同じ型のオブジェクト群を内部に保持するク
-
C++で中空ピラミッドとダイヤモンドパターンを出力するプログラムの作り方
この記事では、C++を使って中空(ホロー)のピラミッドとダイヤモンドのパターンを生成する方法を解説します。塗りつぶし(ソリッド)のピラミッドパターンは比較的簡単に作成できますが、中空にするにはいくつかの工夫が必要です。ポイントは、ループと条件分岐を組み合わせて「星を出す位置」と「空白を入れる位置」を制御することです。 中空ピラミッドの出力 ピラミッドでは、1行目に星(*)を1つだけ出力し、最終行にはn個の星を連続して出力します。それ以外の行では、行頭と行末にちょうど2つの星を出力し、その間は空白で埋めます。これにより、輪郭だけの中空ピラミッドが完成します。 サンプルコード #include &