【C++】for文を使った直角三角形の表示方法

【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++プログラミングにおいて非常に重要なスキルです。これらの知識を基に、さまざまな図形表示やパターン生成に挑戦してみてください。

コードを実際に書き、動かしてみることで、理解がより深まるはずです。ぜひ、今日学んだ知識を活用して、自分だけのオリジナルなパターン表示にチャレンジしてみてください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です