【Go言語】for文を使った直角三角形の表示
目次
はじめに
Go言語はシンプルでありながら非常に表現力のあるプログラミング言語です。特に、Go言語には唯一のループ構文として「for文」が用意されており、様々なパターン生成や反復処理を実現するために活用されます。
本記事では、for文を利用して直角三角形を表示する方法について、基本的な文法から具体的な実装例、さらに応用例に至るまで詳しく解説します。初心者の方にも分かりやすいように、コード例を多く掲載しているので、ぜひ参考にしてください。
Go言語のfor文の基本
Go言語には、while文やdo-while文のような他のループ構文は存在せず、繰り返し処理はすべてfor文で実装します。for文の基本的な構文は以下の通りです。
for 初期化; 条件; 後処理 {
// 繰り返し処理する文
}
この形では、初期化部分でループ変数の宣言や初期値の設定を行い、条件がtrueである限りループ内の処理が実行され、後処理部分でループ変数の更新などを行います。例えば、0から9までの数字を表示する例は以下のようになります。
for i := 0; i < 10; i++ {
fmt.Println(i)
}
また、初期化部や後処理部を省略することも可能です。たとえば、while文のような使い方をする場合は次のように記述します。
i := 0
for i < 10 {
fmt.Println(i)
i++
}
この柔軟性のおかげで、for文はさまざまなシチュエーションで利用することができます。
直角三角形の描画アルゴリズム
直角三角形を表示するための基本的なアルゴリズムは、行ごとに出力する文字数を増やしていく方法です。具体的には、直角三角形の高さを n
とすると、1行目に1個、2行目に2個、…、n行目にn個の特定の文字(ここではアスタリスク「*」を例とします)を表示します。
この処理を実現するためには、外側のfor文で行数(1~n)を制御し、内側のfor文で各行に出力する文字数を管理します。こうすることで、各行ごとに必要な数の文字を動的に生成することが可能になります。
サンプルコードとその解説
ここでは、基本的な直角三角形を表示するサンプルコードをいくつか紹介します。
基本的な直角三角形の表示
package main
import "fmt"
func main() {
// 直角三角形の高さを設定
height := 5
// 各行ごとにアスタリスクを出力
for i := 1; i <= height; i++ {
for j := 1; j <= i; j++ {
fmt.Print("*")
}
fmt.Println()
}
}
このコードでは、外側のfor文が1からheightまでの行数をループし、内側のfor文が各行に出力するアスタリスクの数を制御しています。行番号 i
に応じて、1からiまでアスタリスクが出力されるため、直角三角形の形状が形成されます。
strings.Repeatを利用したシンプルな実装
package main
import (
"fmt"
"strings"
)
func main() {
height := 5
for i := 1; i <= height; i++ {
// strings.Repeatを使用して、i個のアスタリスクの文字列を生成
line := strings.Repeat("*", i)
fmt.Println(line)
}
}
この例では、内側のfor文の代わりに標準ライブラリの strings.Repeat
関数を利用しています。これにより、指定した回数だけ文字を繰り返した文字列を簡潔に生成することができます。
ユーザー入力を利用した直角三角形の表示
package main
import (
"fmt"
)
func main() {
var height int
fmt.Print("直角三角形の高さを入力してください: ")
fmt.Scan(&height)
for i := 1; i <= height; i++ {
for j := 1; j <= i; j++ {
fmt.Print("*")
}
fmt.Println()
}
}
このコードでは、ユーザーから直角三角形の高さを入力してもらい、その値に基づいて三角形を生成します。実際のアプリケーションでは、入力値の検証やエラーチェックを追加することが推奨されますが、ここでは基本的な仕組みの理解に重点を置いています。
応用例
基本的な直角三角形の表示方法を理解したら、さまざまな応用が可能になります。ここでは、いくつかの応用例を紹介します。
異なる文字を用いたパターンの生成
package main
import "fmt"
func main() {
height := 5
for i := 1; i <= height; i++ {
for j := 1; j <= i; j++ {
// 数字を順に出力する例
fmt.Print(j)
}
fmt.Println()
}
}
このコードは、各行に1からその行数までの数字を表示します。数字を表示することで、アスタリスク以外の文字パターンでも直角三角形の形状を作ることができます。
右詰めの直角三角形
package main
import "fmt"
func main() {
height := 5
for i := 1; i <= height; i++ {
// 行の先頭に必要な空白を出力して右詰めにする
for j := 1; j <= height-i; j++ {
fmt.Print(" ")
}
for k := 1; k <= i; k++ {
fmt.Print("*")
}
fmt.Println()
}
}
この例では、各行の先頭に height - i
個の空白を出力することで、三角形全体を右側に寄せています。出力される三角形は右詰めの形状となり、視覚的に異なるパターンを楽しむことができます。
文字列の連結による実装
package main
import "fmt"
func main() {
height := 5
for i := 1; i <= height; i++ {
var line string
for j := 1; j <= i; j++ {
line += "*"
}
fmt.Println(line)
}
}
この方法では、内側のループで一行分の文字列を変数に連結していき、最終的にその文字列を出力しています。文字列の操作に慣れている場合は、この手法も可読性が高く有用です。
まとめ
本記事では、Go言語のfor文を使って直角三角形を表示する方法について、基本的な文法やアルゴリズム、複数の実装例を通して詳しく解説しました。Go言語特有のシンプルなループ構文は、初心者から上級者まで幅広い用途に対応しており、パターン生成やアルゴリズム実装の基礎として非常に重要です。
ここで紹介したサンプルコードを参考に、ぜひ自分自身のアイディアを加えたパターン生成に挑戦してみてください。for文の柔軟な使い方をマスターすることで、より複雑なプログラムの構築にも大いに役立つことでしょう。