変数を使って繰り返す


 「繰り返す」命令

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

「回」命令の欠点

 何度も同じ命令を繰り返すのに、今までは、「回」命令を使っていました。そして、繰り返しの回数を参照したいときは、変数「回数」を参照しました。(→何回も繰り返す

 しかし、回数は、必ず、1からカウントされるので、0からカウントさせたいときや、10から始めたいときには、変数を使ったりして工夫が必要でした。しかも、繰り返しの中で、繰り返しを使った時など、『回数』は、内側の繰り返し回数しか参照が出来ません。(もちろん、回数を参照する場所によって区別することは出来ますが。)

3から、7までの、数を足したい時
足す数は、3
答えは、0
4(
  答え=答え+足す数。
  足す数=足す数+1
)。
「答えは、{答え}です。」と、表示。
↑の方法で、答えは得られますが、直感的に、3から、7までの数を足しているということが分かりにくいです。

「回数」を参照する
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)
   )
)
支出合計を、通貨形式に変換。
支出合計は、それ。
食費合計を、通貨形式に変換。
食費合計は、それ。
「支出の合計は、{支出合計}円」を、表示。
「食費の合計は、{食費合計}円」を、表示。
↑の、ポイントは、「もし」です。
「繰り返す命令」のなかで、「もし」を使って、事柄が、食費かどうか判断しています。

目次へ戻る / 次へ