「繰り返す」命令
今まで、プログラムの中で、命令を繰り返し使いたい時は、「回」命令を使っていました。ここでは、繰り返し命令でも、「回」よりも、もう少し小回りのきく「繰り返す」命令を覚えましょう!
「回」命令の欠点
何度も同じ命令を繰り返すのに、今までは、「回」命令を使っていました。そして、繰り返しの回数を参照したいときは、変数「回数」を参照しました。(→何回も繰り返す)
しかし、回数は、必ず、1からカウントされるので、0からカウントさせたいときや、10から始めたいときには、変数を使ったりして工夫が必要でした。しかも、繰り返しの中で、繰り返しを使った時など、『回数』は、内側の繰り返し回数しか参照が出来ません。(もちろん、回数を参照する場所によって区別することは出来ますが。)
↑の方法で、答えは得られますが、直感的に、3から、7までの数を足しているということが分かりにくいです。
3から、7までの、数を足したい時 足す数は、3
答えは、0
4回(
答え=答え+足す数。
足す数=足す数+1
)。
「答えは、{答え}です。」と、表示。
↑実行してみると、内側の「回数」では、内側の回数しか表示されません。
「回数」を参照する 3回(
5回(
回数を、表示。
)
)。
ちなみに、外側の回数を得るには、以下のように、別の変数へ、回数を退避させておく必要があります。
3回(
外側回数=回数
5回(
「{外側回数}の{回数}」を、表示。
)
)。
「繰り返す」命令を使う
そこで、「繰り返し」命令を使って、上の問題を解決してみましょう。
「繰り返し命令」は、以下のように使います。
[変数名]を、[始める数]から、[終わりの数]まで、繰り返す( [繰り返す内容] )。
「回」命令の時は、( )を省略して、日本語らしく記述することができましたが、この、繰り返すは、実用主義的な命令ですので、( )を使って、繰り返す範囲を、しっかり、ここから、ここまでと、明示しなければなりません。
ですから、以下の例のように、一見すると、日本語としては、おかしい文法になってしまいます。
しかし、この「繰り返す」命令を使うと、「あぁ、3から、7まで、カッコの中を繰り返しているのだなぁ・・・」と、「回」命令を使ったときより、プログラムがシンプルになります。
カウンターを、3から、7まで、繰り返す カウンターを、3から、7まで、繰り返す(
カウンターを、表示。
)。
では、前項で作ったプログラムを、「繰り返す」命令を使って、書き直してみましょう。
3から、7までの数を足す 答えは、0
カウンターを、3から、7まで、繰り返す(
答え=答え+カウンター
)。
「答えは、{答え}です。」と、表示。
次に、繰り返しの中で、繰り返しを使った例です。
多重構造の繰り返しで、繰り返し回数を得る 外側カウンタを、1から、3まで、繰り返す(
内側カウンタを、1から、5まで、繰り返す(
「外側は、{外側カウンタ}。内側は、{内側カウンタ}。」と、表示。
)。
)。
「繰り返す」で一気に計算しよう!
さてさて、私たちの身の回りには、たくさんの計算をしなければならない機会がたくさんあります。身近なところで言えば、家計簿です。いったい、月にいくら使ったのか。そのうち食費はいくらだったのか。また、一年間コツコツと家計簿をつけたとして、そのうちから、一年間に雑誌をいくらぶん使ったのか・・・。
普通、こんな家計簿をつけるときは、家計簿専用のソフトか、エクセルなどを使いますが、『人の作ったものでは面白くない!』や、『もっとこんな機能が欲しいのに!』なんて、思ったら、ひまわりの出番です。自分だけのオリジナル家計簿を作りましょう!!
さて、いきなり難しいものを作るのは、いくらなんでも、無理ですので、まずは、簡単なものから作って、それを発展させながら作っていくと、そこそこ良いものが作れます。
そこで、まずは、一月分の家計簿データから、月の合計金額を求めるプログラムを作ってみましょう。
補足:
家計簿7月=『日,事柄,金額
1, 食費, 5800
3, 雑誌, 2400
10, 食費, 4200
10, CD, 3100
16, 食費, 5000
20, 書籍, 900
29, 食費, 8000』
'支出合計を求める
支出合計=0
項目最後=要素数(家計簿7月) - 1。’---(*1)
カウンタを、1から、項目最後まで、繰り返す(
支出合計=支出合計+(家計簿7月#2#カウンタ)
)
支出合計を、通貨形式に変換。’---(*2)
「合計は、{それ}円」を、表示。
(*1) 2次元配列や、配列変数の、要素の数を求めます。ここでは、家計簿7月の、項目最後の番号を得ます。
(*2)「通貨形式に変換」命令は、3桁ごとにカンマを入れた通貨形式を、それに返します。
この、プログラムでは、まず、7月分の家計簿を、『家計簿7月』という変数に代入しています。これは、CSV形式で書いたデータです。(→CSV形式を忘れた人は、こちら)
ところで、ただ単に、金額を合計するだけなら、「繰り返す」命令を使わなくても、「表合計」命令を使えば事足りてしまいます。しかし、もし、食費だけを計算したい場合、この「表合計」では、計算できません。(単純に全ての金額を足してしまいますからね。)
そこで、繰り返す命令を使おう!というわけです。
↑の、ポイントは、「もし」です。
家計簿7月=『日,事柄,金額
1, 食費, 5800
3, 雑誌, 2400
10, 食費, 4200
10, CD, 3100
16, 食費, 5000
20, 書籍, 900
29, 食費, 8000』
'支出合計を求める
支出合計=0
食費合計=0
項目最後=要素数(家計簿7月) - 1
Iを、1から、項目最後まで、繰り返す(
支出合計=支出合計+(家計簿7月#2#I)
もし、(家計簿7月#1#I)が、「食費」ならば(
食費合計=食費合計+(家計簿7月#2#I)
)。
)。
支出合計を、通貨形式に変換。
支出合計は、それ。
食費合計を、通貨形式に変換。
食費合計は、それ。
「支出の合計は、{支出合計}円」を、表示。
「食費の合計は、{食費合計}円」を、表示。
「繰り返す命令」のなかで、「もし」を使って、事柄が、食費かどうか判断しています。