# 変数を使って繰り返す

「繰り返す」命令

> 今まで、プログラムの中で、命令を繰り返し使いたい時は、「回」命令を使っていました。ここでは、繰り返し命令でも、「回」よりも、もう少し小回りのきく「繰り返す」命令を覚えましょう！

「回」命令の欠点

> 何度も同じ命令を繰り返すのに、今までは、「回」命令を使っていました。そして、繰り返しの回数を参照したいときは、変数「回数」を参照しました。（→何回も繰り返す）
> しかし、回数は、必ず、１からカウントされるので、０からカウントさせたいときや、１０から始めたいときには、変数を使ったりして工夫が必要でした。しかも、繰り返しの中で、繰り返しを使った時など、『回数』は、内側の繰り返し回数しか参照が出来ません。（もちろん、回数を参照する場所によって区別することは出来ますが。）

> ３から、７までの、数を足したい時
> 足す数は、3 答えは、0 4回( 答え=答え+足す数。 足す数=足す数+1 )。 「答えは、｛答え｝です。」と、表示。

> ↑の方法で、答えは得られますが、直感的に、３から、７までの数を足しているということが分かりにくいです。

> 「回数」を参照する
> 3回( 5回( 回数を、表示。 ) )。

> ↑実行してみると、内側の「回数」では、内側の回数しか表示されません。
> ちなみに、外側の回数を得るには、以下のように、別の変数へ、回数を退避させておく必要があります。

> 3回( 外側回数＝回数 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月=『日,事柄,金額 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) )。 )。 支出合計を、通貨形式に変換。 支出合計は、それ。 食費合計を、通貨形式に変換。 食費合計は、それ。 「支出の合計は、｛支出合計｝円」を、表示。 「食費の合計は、｛食費合計｝円」を、表示。`

> ↑の、ポイントは、「もし」です。
> 「繰り返す命令」のなかで、「もし」を使って、事柄が、食費かどうか判断しています。

目次へ戻る／次へ