【C++】for文を使った直角三角形の表示方法
はじめに
本記事では、C++言語におけるfor文を用いて直角三角形を表示する方法について、できるだけ詳細に解説します。プログラミング初心者から中級者まで、for文の基本的な使い方や入れ子のループの利用方法を学ぶのに最適な内容となっています。直角三角形は、1行目に1つ、2行目に2つ、3行目に3つ…というように、行番号に合わせて出力する文字数が増えていくパターンです。これにより、ループのネスト(入れ子)や条件分岐の考え方を自然に理解することができます。
C++のfor文の基本
C++におけるfor文は、決められた回数だけ繰り返し処理を行うための構文です。基本的な構文は次の通りです。
for (初期化; 条件; 更新) {
// 繰り返し実行する処理
}
各部分の意味は以下の通りです。
-
初期化: ループが始まる前に変数の初期値を設定します。たとえば、
int i = 1;
のように書きます。 -
条件: この条件が真(true)である限り、ループ内の処理が実行されます。
i <= n
などが一般的です。 -
更新: ループごとに変数の値を変更する部分です。
i++
のようにインクリメントするのがよく使われます。
例として、1から10までの数字を表示するプログラムを見てみましょう。
#include
using namespace std;
int main() {
for (int i = 1; i <= 10; i++) {
cout << i << " ";
}
return 0;
}
このコードでは、i
の値を1から10までインクリメントしながら出力しています。for文の基本構造を理解するためのシンプルな例です。
直角三角形の表示方法
直角三角形は、各行ごとに表示する文字数が行番号と同じになる形状です。たとえば、1行目に1つ、2行目に2つ、3行目に3つ…という具合です。これを実現するために、外側のfor文で行数を管理し、内側のfor文でその行に表示する文字の数を制御します。
以下に、星印(*)を用いて直角三角形を表示する基本的なコード例を示します。
#include
using namespace std;
int main() {
int rows = 5; // 三角形の行数
// 外側のループで行を管理
for (int i = 1; i <= rows; i++) {
// 内側のループで各行に出力する星の数を決定
for (int j = 1; j <= i; j++) {
cout << "*";
}
// 行の終わりに改行を出力
cout << endl;
}
return 0;
}
このコードでは、i
が1から5まで変化し、各行ごとにj
のループでその行番号分の星印が出力されます。最終的に、以下のような直角三角形が表示されます。
*
**
***
****
*****
ここでのポイントは、内側のループの回数が外側のループの変数i
に依存している点です。これにより、行番号に応じた出力が実現されます。
サンプルコードの詳細解説
ここでは、直角三角形を表示するサンプルコードの各部分について、詳しく解説します。
#include
using namespace std;
int main() {
int rows = 7; // 三角形の行数を7に設定
// 外側のループ:1行目から7行目まで処理
for (int i = 1; i <= rows; i++) {
// 内側のループ:現在の行番号iの数だけループして星印を出力
for (int j = 1; j <= i; j++) {
cout << "*"; // 星印を表示
}
// 内側のループ終了後、改行して次の行に移動
cout << "\n";
}
return 0;
}
このコードの主要なポイントは以下の通りです。
-
変数
rows
: 表示する直角三角形の行数を管理しています。値を変更することで、出力される三角形の大きさを自由に調整できます。 -
外側のfor文: 各行の処理を担当し、
i
の値が行番号となっています。 -
内側のfor文: 現在の行番号
i
に応じて、出力する文字(ここでは星印)の数を決定します。j
は1からi
までインクリメントされるため、各行にi
個の星印が出力されます。 -
改行処理: 各行の最後で
cout << "\n";
またはcout << endl;
を使って改行し、次の行の表示に備えます。
追加の例
ここでは、直角三角形の表示に関するいくつかの追加例を紹介します。基本の例に加えて、ユーザー入力や文字の変更、配置の工夫など、さまざまな応用が可能です。
例1: 行数をユーザーから入力する
#include
using namespace std;
int main() {
int rows;
cout << "三角形の行数を入力してください: ";
cin >> rows;
for (int i = 1; i <= rows; i++) {
for (int j = 1; j <= i; j++) {
cout << "#"; // 星印ではなく「#」を表示
}
cout << "\n";
}
return 0;
}
この例では、ユーザーが入力した行数に基づいて直角三角形が描画され、表示する記号を「#」に変更しています。実行時に行数を変えることで、動的な出力を確認できます。
例2: 三角形を右寄せに表示する
#include
#include
using namespace std;
int main() {
int rows = 5;
for (int i = 1; i <= rows; i++) {
// setwを使って必要な空白を出力し、右寄せにする
cout << setw(rows - i + 1);
for (int j = 1; j <= i; j++) {
cout << "*";
}
cout << "\n";
}
return 0;
}
このコードでは、iomanip
ヘッダーの setw
関数を使い、行の先頭に必要な空白を挿入することで、三角形全体を右寄せに表示しています。
例3: アルファベットを使って直角三角形を表示する
#include
using namespace std;
int main() {
int rows = 4;
for (int i = 1; i <= rows; i++) {
for (int j = 1; j <= i; j++) {
// ASCIIコードを利用してA, B, C, ...と出力
cout << char(64 + j);
}
cout << "\n";
}
return 0;
}
この例では、char(64 + j)
を使って、1行目はA、2行目はAB、3行目はABC、というようにアルファベットを連続して出力します。ASCIIコードの仕組みを利用した面白い例です。
応用例と拡張
基本的な直角三角形の表示方法を習得したら、応用として他のパターンや図形表示にも挑戦することができます。ここではいくつかの応用例を紹介します。
- 逆直角三角形の表示: 上から下に向かって星印の数が減少するパターンです。外側のループを逆順にすることで実現できます。
- 数字や記号を使ったパターン表示: 表示する文字を変更することで、視覚的に異なるパターンを作り出すことができます。
- 多重ループを使った複雑な図形: 複数の入れ子ループを利用して、ピラミッドやダイヤモンド形状など、より複雑な図形の表示にも挑戦できます。
逆直角三角形の例
#include
using namespace std;
int main() {
int rows = 5;
// 行数が減少するようにループを制御
for (int i = rows; i >= 1; i--) {
for (int j = 1; j <= i; j++) {
cout << "*";
}
cout << "\n";
}
return 0;
}
このコードでは、外側のループを逆順にすることで、1行目に5つ、2行目に4つ、といった具合に星印の数が減少する逆直角三角形が表示されます。
また、各行の先頭に空白を加えるなど、さらに複雑なパターンに挑戦することも可能です。これらの応用例を実際に試して、C++のループ構造に慣れることが、プログラミングスキル向上の鍵となります。
まとめ
本記事では、C++のfor文を用いて直角三角形を表示する方法について、基本的なfor文の構造から、入れ子ループを利用した実際のコード例、さらには応用例や拡張パターンまで詳しく解説しました。for文の使い方やループのネストの理解は、C++プログラミングにおいて非常に重要なスキルです。これらの知識を基に、さまざまな図形表示やパターン生成に挑戦してみてください。
コードを実際に書き、動かしてみることで、理解がより深まるはずです。ぜひ、今日学んだ知識を活用して、自分だけのオリジナルなパターン表示にチャレンジしてみてください。