【C#】for文を使って直角三角形を表示する方法
目次
はじめに
本記事では、C#言語においてfor文を利用して直角三角形をコンソール上に表示する方法について、基本から応用例まで詳しく解説します。プログラミング初心者でも理解できるように、for文の仕組み、ネストされたループの使い方、そして直角三角形を作成するためのロジックを順を追って説明していきます。直角三角形のパターンは、文字や記号を使った出力の基本例としてよく取り上げられるため、プログラミングの基礎を学ぶ上で非常に有用です。
for文の基本
C#におけるfor文は、決められた回数だけ繰り返し処理を行うための制御構文です。for文は、主に以下の3つの部分から構成されます。
- 初期化式: ループの開始時に1回だけ実行され、カウンタ変数の初期値を設定します。
- 条件式: 各ループの開始時に評価され、条件がtrueの場合にループ内部の処理が実行されます。
- 反復式: ループの最後に実行され、カウンタ変数の更新を行います。
以下は、for文の基本的な書き方の例です。
// 基本的なfor文の例
for (int i = 0; i < 5; i++)
{
Console.WriteLine("iの値は " + i);
}
この例では、変数 i
を0から始め、5未満の間(つまり0から4まで)の各回でコンソールに i
の値を出力しています。初期化、条件式、反復式がそれぞれどのように動作するかを確認してみましょう。
直角三角形の表示方法
直角三角形を表示するためには、行数に応じて繰り返し文字(例えば「*」)を出力する必要があります。基本的な考え方は次の通りです。
- 外側のfor文で行数を制御する。
- 内側のfor文で、各行に出力する文字の数を制御する。1行目では1個、2行目では2個、といった具合に、行番号と同じ数の文字を出力します。
このロジックを実現するために、ネストされたfor文(for文の中にfor文)を使用します。外側のループが「行」を管理し、内側のループが「列」に相当する文字の繰り返しを管理します。
シンプルなコード例
ここでは、基本的な直角三角形をコンソールに表示するシンプルな例を示します。下記のコードは、行数を固定(例:5行)とし、各行に「*」を順次増やして表示します。
// シンプルな直角三角形を表示する例
using System;
namespace TriangleExample
{
class Program
{
static void Main(string[] args)
{
int rows = 5; // 三角形の行数
// 各行に対してループ処理
for (int i = 1; i <= rows; i++)
{
// 各行でi個の"*"を出力するためのループ
for (int j = 1; j <= i; j++)
{
Console.Write("*");
}
// 1行分の出力が終わったら改行する
Console.WriteLine();
}
}
}
}
このプログラムでは、外側のループで1からrows
までの行番号を管理し、内側のループで行番号に応じた「*」を出力しています。最初の行は1個、次の行は2個、といった具合に、直角三角形の形状が形成されます。
また、ユーザー入力を利用して行数を動的に変更できる例も示します。以下のコードでは、コンソールから行数を入力し、その値に応じた直角三角形を表示します。
// ユーザー入力により行数を指定できる例
using System;
namespace TriangleExample
{
class Program
{
static void Main(string[] args)
{
Console.Write("直角三角形の行数を入力してください: ");
int rows = int.Parse(Console.ReadLine());
for (int i = 1; i <= rows; i++)
{
for (int j = 1; j <= i; j++)
{
Console.Write("* ");
}
Console.WriteLine();
}
}
}
}
この例では、ユーザーからの入力を受け取り、その数値に応じて直角三角形のサイズが変わるようになっています。出力される三角形は、行ごとに「* 」が増加していく形となります。
応用例とカスタマイズ
基本的な直角三角形の表示方法に加え、少し応用的なパターンとして、右寄せの直角三角形や他の文字を使用した表示方法も考えられます。ここではいくつかの応用例を紹介します。
右寄せの直角三角形の表示
右寄せの直角三角形を表示するためには、各行の先頭に適切な数の空白を出力する必要があります。以下の例では、まず空白を出力し、その後に「*」を出力する方法を示しています。
// 右寄せの直角三角形を表示する例
using System;
namespace RightAlignedTriangle
{
class Program
{
static void Main(string[] args)
{
int rows = 5; // 三角形の行数
for (int i = 1; i <= rows; i++)
{
// 空白を出力(右寄せのためのスペース)
for (int j = 1; j <= rows - i; j++)
{
Console.Write(" ");
}
// "*"を出力
for (int k = 1; k <= i; k++)
{
Console.Write("*");
}
Console.WriteLine();
}
}
}
}
このコードでは、各行の先頭にrows - i
個の空白を出力することで、出力結果が右寄せとなります。さらに、出力する文字を変更することで、異なるパターンの表示にも対応できます。
数字や文字を用いた三角形の表示
以下の例は、行番号を表示することで、数字による直角三角形を作成する例です。
// 数字を使った直角三角形の表示例
using System;
namespace NumberTriangle
{
class Program
{
static void Main(string[] args)
{
int rows = 5; // 三角形の行数
for (int i = 1; i <= rows; i++)
{
for (int j = 1; j <= i; j++)
{
Console.Write(i + " ");
}
Console.WriteLine();
}
}
}
}
この例では、各行において行番号 i
を i
回出力するため、出力結果として数字の直角三角形が得られます。ユーザーのニーズに合わせて、出力する内容を柔軟に変更できる点がfor文の大きなメリットです。
エラー処理とデバッグ
for文を使用する際に陥りがちなエラーとして、ループの条件設定やカウンタの更新に関する「オフバイワンエラー(off-by-one error)」が挙げられます。例えば、開始値や終了条件が不適切であると、意図した回数だけループが実行されなかったり、逆に無限ループになってしまう可能性があります。
また、ネストされたfor文の場合、内側のループの変数と外側のループの変数が混同されないよう、名前を分かりやすくすることも重要です。デバッグ時には、各ループのカウンタ変数の値を適宜出力して確認する方法も有効です。
以下は、デバッグ出力を取り入れて各ループの動作を確認する例です。
// デバッグ用にカウンタの値を出力する例
using System;
namespace DebugTriangle
{
class Program
{
static void Main(string[] args)
{
int rows = 5;
for (int i = 1; i <= rows; i++)
{
Console.Write("行 " + i + " : ");
for (int j = 1; j <= i; j++)
{
Console.Write("*");
}
// デバッグ出力:現在の行の終了を確認
Console.WriteLine(" <-- 終了(i=" + i + ")");
}
}
}
}
このコードは、各行の末尾に現在の行番号を表示することで、ループの動作を視覚的に確認できるようになっています。プログラムの動作確認やエラー発見に役立ちます。
まとめ
本記事では、C#言語におけるfor文の基本構造と、ネストされたループを用いた直角三角形の表示方法について詳しく解説しました。シンプルな例から、ユーザー入力を取り入れた動的な例、さらには右寄せや数字を用いた応用例まで、さまざまなパターンを紹介しました。プログラミングにおいてループ処理は非常に基本的かつ重要な概念であり、今回の直角三角形の表示例は、その理解を深めるための良い練習問題となります。
各コード例を実際に動かしてみることで、for文の動作やループの使い方を体験的に学ぶことができるでしょう。デバッグやエラー処理のポイントも押さえながら、より複雑なパターンへの応用を試みることで、プログラミングのスキルアップに繋がります。
ぜひ、今回の内容を参考にして、さまざまなパターンの表示や他のアルゴリズムへの応用にも挑戦してみてください。