C言語 for文で*ピラミッドを作る【初心者用】

プログラミング

 

今回は、for文でおなじみの「*でピラミッド」を作る方法を解説していきます。ただのピラミッドではなく、ユーザーが自分でピラミッドの段数を指定できるようにします。

 

*で作るピラミッドは、for文の確認問題としてもかなり定番中の定番で、C言語では必ずと言っていいほど練習として出題される問題です。

 

やり方は、今まで使ったfor文を使った少し複雑なループ文ですが、一度理解してしまえば簡単です。それでは見ていきましょう。

 

基本的な考え方

 

ここでは、ピラミッドのプログラムを作るにあたっての構成、つまり「どういう規則性で動いているか」を自分で見つけていきます。

 

まさかピラミッドをすべてprintfで書いていくわけにはいかないので、この「ピラミッドをつくる」のような問題を与えられた場合は、基本的にまず規則性の発見を行います。

 

具合例から考える

 

これはプログラムを書く時の常とう手段ですが、「いくつかの具体例を見てそこから規則性を見つける」ということを私はよくします。

 

いきなり変数や文字を使って一般的な式を考えるのではなく、具体例をから攻めた方が頭に入ってきやすいですしね。

 

それではまず、実際に絵にかいてみましょう。今回書くのは2段と3段のピラミッドです。

 

とりあえず具体例は書きましたが、まだどういう規則性なのかはこの時点ではよくわかりません。しかし、全体を見ると一つだけわかることが出てきます。

 

余白と*で構成されている

 

それは「各段、左から順番に空白(□)を置いてから*を置くことで構成されている」という点です。

では具体的に、先程のピラミッドを空白を□で表現することで書いてみると、

このように、各段が左から順番に空白を置いてから*を置くことで構成されていることが分かります。

 

「そんなことは言われなくてもわかる!」という方はすいません。しかしこれが分かることは、今回のピラミッドの規則性を発見するための大きな一歩になるんです。

 

各段の規則性(1段目、2段目、3段目…)

 

各段の規則性を見てみましょう。まずは、各段の空白と*の増え方に注目します。

 

上の図では、4段ピラミッドにおいての1段目から4段目の空白と*の増え方を表にしたものです。ボーとみていると、空白は「3→2→1→0」と個数が1つずつ減少していますが、*は「1→3→5→7」と2づつ増加しているいることが分かります。

 

これは等差数列です。各段において「空白は1づつ減る」「*は2づつ増える」という規則性が等差数列としてあらわれています。

 

これをピラミッドの全段数をdanとすれば

空白の個数は、1段目はdan-1個、2段目はdan-2個、3段目はdan-3個、…、dan段目は0個、となります。(一段目がdan-1になることに注意)なので、今いるのがi段目とすると、dan-i個の空白があることになります。

*の個数は、全dan段のピラミッドの中でi段目とすると、等差数列の公式を用いて「初項を1、交差を2」とすれば

(2×i)-1(個)となります。

 

プログラムを書く際はこれをfor文であらわします。

プログラム作成

 

以上を踏まえたうえで、プログラムを書いてみると

 

実行結果は

OKですね。

 

先ほども言ったようにピラミッドを作るプログラムは、定番中の定番です。初心者にとっては簡単とは言えないかもしれませんが、これをしっかりと理解できるとfor文による多重ループも一緒に理解できます。

 

また、この「*ピラミッドを作る」とは別に「逆さピラミッドを作る」というプログラムも頻出です。規則的には先ほど書いたものとほぼ一緒なので、ぜひ挑戦してみてください。

 

コメント