情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

学生でも社会人でも分かる!!初めてのプログラミング入門 第10回 変数と繰り返しと分岐の組み合わせ

第9回

↑ ↑ ↑

前々回は変数と繰り返しを組み合わせる方法について解説し、前回は変数と分岐を組み合わせる方法について解説しましたが、今回は変数と繰り返しと分岐の全部を組み合わせる方法について解説したいと思います。

カウント変数の利用

前々回の記事でカウント変数とカウント変数の値自体を別の計算に使用するプログラミングパターンを紹介しましたが、カウント変数を利用するプログラミングパターンとしてはカウント変数の値に応じて実行する命令を変化させるというものもあります。

まずはこのプログラミングパターンについて解説します。

カウント変数の値に応じて実行する命令を変化させるにはカウント変数と分岐命令を組み合わせます

カウント変数自体を場合分け命令のデータとして指定するか、カウント変数を使った計算の結果を場合分け命令のデータとして指定します。

たとえば、下のようにします。

プログラムの一部

    ・・・    

#count = 0
変数count0を格納する。

<r 100>
繰り返しを開始する。100回繰り返す。

#count = #count + 1
変数countに格納されている値を1増加させる。

    ・・・    

<Switch #count>
分岐を開始する。

<Case 1>
変数countに格納されているデータが1である場合に次の命令から次の場合分け命令の前までの命令を順番に実行する。

    ・・・    

<Case 10>
変数countに格納されているデータが10である場合に次の命令から次のデフォルト命令の前までの命令を順番に実行する。

    ・・・    

<Default>
変数countに格納されているデータが1でも10でもない場合に次の命令から分岐終了命令の前までの命令を順番に実行する。

    ・・・    

</Switch>
分岐を終了する。

    ・・・    

</r>
繰り返しが完了していない場合には繰り返しの最初の命令に戻る。完了した場合には次の命令に進む。

    ・・・    

このプログラミングパターンを用いた簡単なプログラムの例としてはFizzBuzz問題というものがあります。

FizzBuzz問題とは下のような問題です。

  • 1から100までの数を順番に表示するプログラムを書け。ただし、数が3の倍数の場合には数の代わりにFizzを表示し、5の倍数の場合にはBuzzを表示し、3と5両方の倍数の場合にはFizzBuzzを表示せよ。

実は、この問題は最低限のプログラミング能力の有無を確認するのによく使われる問題です。

なので、この問題を自力で解くことができた方は最低限のプログラミング能力は会得できたと自負して良いかと思います。

さて、このプログラムはどのように書けば良いでしょうか?

最初から完全なプログラムを書くのは難しいかもしれませんので、簡単ではあるものの不完全なプログラムを書くことから始めて、それを少しずつ完成に近付けていくことにしましょう。

まず、FizzBuzz問題は大きく前半部分と後半部分に分けられます。

  • 1から100までの数を順番に表示するプログラムを書け。
  • ただし、数が3の倍数の場合には数の代わりにFizzを表示し、5の倍数の場合にはBuzzを表示し、3と5両方の倍数の場合にはFizzBuzzを表示せよ。

後半部分は前半部分に修正を加えています。基本的には前半部分で書かれている動作をするプログラムを作れば良いのですが、後半部分で挙げられている特殊な場合には特殊な動作をさせなければなりません。

ですから、まずは前半部分で書かれている動作をするプログラムを作成し、後で後半部分で書かれている動作を付け加えていけば最終的には完全なプログラムを作成することができそうです。

ですから、取り敢えず前半部分で書かれている動作をするプログラムを作成しましょう。

  • 1から100までの数を順番に表示するプログラムを書け。

このプログラムを作成するためには数を順番に表示していかなければなりません。

それぞれの数を表示するにはメッセージボックスを使用しても良いのですが、そうすると1回プログラムを動かすとそれぞれ1から100までの数が書かれた100個のメッセージボックスが表示されるということになり、100回メッセージボックスの「OK」ボタンをクリックしなければプログラムが終了しないということになってしまいます。

それではあまりにプログラムを実行するのが面倒ですので、今回は数を「メモ帳」に記入していくことにしましょう。

それでは、「メモ帳」に数を記入するにはどうすれば良いのでしょうか?

これを行うには「メモ帳」に記入したい数をまずクリップボードに記憶し、「メモ帳」でCtrl+Vキーを押すことによってクリップボードに記憶した数を「メモ帳」のテキストとして貼り付けるという手順が必要となります。

Ctrl+Vキーを押す操作についてはこれまで何度となく登場しているキーボードを操作する命令を使えば実現できます。

しかし、クリップボードへの記憶を行う操作は今まで出てきたことがありませんでした。

これには新しい命令を使用する必要があります。

それはCopyという命令です。

命令

Copy データ
データをクリップボードに記憶する。

この命令を使用すればどんなデータでもクリップボードに記憶することが可能となります。

ですから、この命令を使って1から100までの数を順番にクリップボードに記憶してやれば良いのです。

ただし、クリップボードへの記憶を行ったらすぐにCtrl+Vキーを押す操作を行い、記憶した数を「メモ帳」に貼り付けるようにします。

さて、それでは、1から100までの数はプログラムの中でどのように作り出せば良いのでしょうか?

もうお分かりかもしれませんが、こういう時こそカウント変数の出番です。

100回の繰り返しにおいてカウント変数を使うようにすれば毎回の繰り返しの中で1から100までの数を順番に得ることができます。繰り返しの1回目ではカウント変数の値は1となり、100回目では100となります。これは正に今私たちが欲しいと思っていたものに他なりません。

ですから、「1から100までの数を順番に表示するプログラム」は下のように書けます。

プログラム17(作成中1)

1
#count = 0
変数count0を格納する。

2
<r 100>
繰り返しを開始する。100回繰り返す。

3
#count = #count + 1
変数countに格納されている値を1増加させる。

4
Copy #count
変数countに格納されているデータをクリップボードに記憶する。

5
LCtrl Down
Ctrlキーを押したままでいることにする。

6
V
Vキーを押したことにする。

7
LCtrl Up
Ctrlキーを離したことにする。

8
Enter
Enterキーを押したことにする。

9
</r>
繰り返しが完了していない場合には繰り返しの最初の命令に戻る。完了した場合には次の命令に進む。

4行目のCopy #countで変数countに格納されているデータをクリップボードに記憶しています。

変数countに格納されているデータは繰り返し毎に123、・・・となっていきますので、4行目により繰り返し毎に123、・・・がクリップボードに記憶されるということになります。

8行目でEnter命令を使用しているのは「メモ帳」では1行に1つずつ数を記入していきたいからです。

毎回数字を入力し終わった直後にEnterキーを押す操作を行うことで改行を行います。

「メモ帳」を起動した状態でこのプログラムを実行すると、「メモ帳」に1から100までの数が順番に記入されていきます。

メモ帳

ここまでのところは正しいプログラムが作成できていることが分かります。

さて、次は後半部分です。

  • ただし、数が3の倍数の場合には数の代わりにFizzを表示し、5の倍数の場合にはBuzzを表示し、3と5両方の倍数の場合にはFizzBuzzを表示せよ。

後半部分は更に3つの部分に分割することができます。

  • 数が3の倍数の場合には数の代わりにFizzを表示せよ。
  • 数が5の倍数の場合には数の代わりにBuzzを表示せよ。
  • 数が3と5両方の倍数の場合には数の代わりにFizzBuzzを表示せよ。

これを1つずつ攻略していきましょう。

まず、1つ目、「数が3の倍数の場合には数の代わりにFizzを表示せよ」ですが、これは数が3の倍数の場合には通常の場合とは別の命令を実行しなければならないということです。今回の場合は、数を表示する代わりにFizzという文字列を表示しなければなりません。

ですから、このためには分岐命令を使わなければならないということです。数が3の倍数の場合とそうでない場合とで異なる命令を実行する分岐を行うということです。

そして、算数の時間で習ったように、数が3の倍数であるかを判断するには数を3で割った余りが0かどうかを調べれば良いはずです。余りが0なら3の倍数ですし、0でないなら3の倍数ではありません。

そして、第7回の記事で紹介したように余りの計算を行うには計算内容1 Mod 計算内容2という計算を使います。この計算は計算内容1計算内容2で割った余りを結果とする計算でした。

という訳で、上のプログラムを修正すると下のようになります。

プログラム17(作成中2)

    ・・・    

3
#count = #count + 1
変数countに格納されている値を1増加させる。

4
#r1 = #count Mod 3
変数r1に計算結果を格納する。

5
#s = 0
変数s0を格納する。

6
<Switch #s>
分岐を開始する。

7
<Case #r1>
変数sに格納されているデータが変数r1に格納されているデータである場合に次の命令から次のデフォルト命令の前までの命令を順番に実行する。

8
Copy Fizz
Fizzをクリップボードに記憶する。

9
<Default>
変数sに格納されているデータが変数r1に格納されているデータでない場合に次の命令から分岐終了命令の前までの命令を順番に実行する。

10
Copy #count
変数countに格納されているデータをクリップボードに記憶する。

11
</Switch>
分岐を終了する。

12
LCtrl Down
Ctrlキーを押したままでいることにする。

    ・・・    

4行目で数を3で割った余りを計算しています。

そして、若干理解しにくいかもしれませんが、5行目で変数s0を格納し、この変数を6行目から11行目までの分岐で分岐の基準として使用しています。つまり、変数sに格納されている0を分岐の基準として使用しています。

これは0と数を3で割った余りを比較するためです。

そして、7行目で数を3で割った余りを場合分け命令のデータとして使用しています。

これにより、数を3で割った余りが0である場合にはFizzという文字列をクリップボードに記憶し、0でない場合には数そのものを記憶するようにしています。

「メモ帳」を起動した状態でこのプログラムを実行すると、「メモ帳」に数やFizzという文字列が記入されていきます。

メモ帳

ここまでのところは正しいプログラムが作成できていることが分かるかと思います。

次に、2つ目、「数が5の倍数の場合には数の代わりにBuzzを表示せよ」ですが、これは数が5の倍数の場合には通常の場合とは別の命令を実行しなければならないということです。今回の場合は、数を表示する代わりにBuzzという文字列を表示しなければなりません。

ですから、このためには分岐命令を使わなければならないということです。しかし、上のプログラムでは既に分岐命令を使っており、数が3の倍数であるかどうかに基づいて分岐が行われていたのでした。

ですから、完全に新しい分岐を作るのではなく、既にある分岐に新しい分岐を追加するということになります。そして、その分岐というのは数が5の倍数の場合にそれ以外の場合とは別の異なる命令を実行する分岐ということになります。

結局この分岐は

  • 数が3の倍数か
  • 数が5の倍数か
  • 数が3の倍数でも5の倍数でもないか

という3つの場合に分かれる分岐になります。

そして、数が5の倍数であるかを判断するには上の場合と同様に数を5で割った余りが0かどうかを調べれば良いはずです。余りが0なら5の倍数ですし、0でないなら5の倍数ではありません。

ですから、上のプログラムを修正すると下のようになります。

プログラム17(作成中3)

    ・・・    

3
#count = #count + 1
変数countに格納されている値を1増加させる。

4
#r1 = #count Mod 3
変数r1に計算結果を格納する。

5
#r2 = #count Mod 5
変数r2に計算結果を格納する。

6
#s = 0
変数s0を格納する。

7
<Switch #s>
分岐を開始する。

8
<Case #r1>
変数sに格納されているデータが変数r1に格納されているデータである場合に次の命令から次の場合分け命令の前までの命令を順番に実行する。

9
Copy Fizz
Fizzをクリップボードに記憶する。

10
<Case #r2>
変数sに格納されているデータが変数r2に格納されているデータである場合に次の命令から次のデフォルト命令の前までの命令を順番に実行する。

11
Copy Buzz
Buzzをクリップボードに記憶する。

12
<Default>
変数sに格納されているデータが変数r1に格納されているデータでも変数r2に格納されているデータでもない場合に次の命令から分岐終了命令の前までの命令を順番に実行する。

13
Copy #count
変数countに格納されているデータをクリップボードに記憶する。

14
</Switch>
分岐を終了する。

15
LCtrl Down
Ctrlキーを押したままでいることにする。

    ・・・    

5行目で数を5で割った余りを計算しています。

そして、10行目で数を5で割った余りを場合分け命令のデータとして使用しています。

これにより、数を3で割った余りが0である場合にはFizzという文字列をクリップボードに記憶し、数を5で割った余りが0である場合にはBuzzという文字列をクリップボードに記憶し、数を3で割った余りも5で割った余りも0でない場合には数そのものを記憶するようにしています。

「メモ帳」を起動した状態でこのプログラムを実行すると、「メモ帳」に数やFizzBuzzという文字列が記入されていきます。

メモ帳

ここまでのところは正しいプログラムが作成できていることが分かるかと思います。

最後に、3つ目、「数が3と5両方の倍数の場合には数の代わりにFizzBuzzを表示せよ」ですが、これは数が3の倍数であり、しかも、5の倍数でもある場合には通常の場合とは別の命令を実行しなければならないということです。今回の場合は、数を表示する代わりにFizzBuzzという文字列を表示しなければなりません。

ですから、このためには分岐命令を使わなければならないということです。しかし、上のプログラムでは既に分岐命令を使っており、数が3の倍数であるかどうかや5の倍数であるかどうかに基づいて分岐が行われていたのでした。

ですから、完全に新しい分岐を作るのではなく、既にある分岐に新しい分岐を追加するということになります。そして、その分岐というのは数が3と5両方の倍数である場合にそれ以外の場合とは別の異なる命令を実行する分岐ということになります。

結局この分岐は

  • 数が3と5両方の倍数か
  • 数が3の倍数か
  • 数が5の倍数か
  • 数が3の倍数でも5の倍数でもないか

という4つの場合に分かれる分岐になります。

ここで重要なのは分岐を行う順番です。数が3と5両方の倍数である場合の分岐は必ず最初に行わなければなりません。

これは何故でしょうか?

これは数が3と5両方の倍数である場合というのは当然数が3の倍数である場合にも当て嵌まるし、数が5の倍数である場合にも当て嵌まるからです。両方とも当て嵌まる場合が正に数が3と5両方の倍数である場合なのですから当然です。

ですから、たとえば、数が3の倍数である場合の分岐を最初に持ってきてしまうと、たとえ数が3と5両方の倍数である場合であっても最初の分岐である数が3の倍数である場合の分岐に進んでしまい、数が3と5両方の倍数である場合の分岐には進まないということになってしまいます。

数が5の倍数である場合の分岐を最初に持ってきてしまった場合も同様なことになります。

ですから、数が3と5両方の倍数である場合の分岐は必ず最初に持ってこなければならないのです。

それから、数が3と5両方の倍数であるかを判断するにはどうすれば良いでしょうか?

これには主に2つの方法があります。

1つは数が15の倍数であるかを調べる方法です。算数の時間に習ったかもしれませんが、実は、3と5両方の倍数というのは必ず15の倍数となります。また、15の倍数というのは必ず3と5両方の倍数となります。

ですから、数が15の倍数であるかを判断することは数が3と5両方の倍数であるかを判断することと全く同じことなのです。

もう1つは数を3で割った余りと5で割った余りを足し合わせたものが0かどうかを調べる方法です。

数が3と5両方の倍数である場合というのは数を3で割った余りと5で割った余りが両方とも0である場合ということです。ということは、この2つの余りを足し合わせても0とならなければなりません。

そして、逆に、数を3で割った余りと5で割った余りの少なくとも一方が0でない場合にはこの2つの余りを足し合わせても0となることはあり得ません。

ですから、数が15の倍数であるかを判断することは数を3で割った余りと5で割った余りを足し合わせたものが0かどうかを判断することと全く同じことなのです。

このように、数が3と5両方の倍数であるかを判断するには主に2つの方法があるのですが、今回は後者の方法を使ってみたいと思います。

という訳で、上のプログラムを修正すると下のようになります。

プログラム17(作成中4)

    ・・・    

3
#count = #count + 1
変数countに格納されている値を1増加させる。

4
#r1 = #count Mod 3
変数r1に計算結果を格納する。

5
#r2 = #count Mod 5
変数r2に計算結果を格納する。

6
#r3 = #r1 + #r2
変数r3に計算結果を格納する。

7
#s = 0
変数s0を格納する。

8
<Switch #s>
分岐を開始する。

9
<Case #r3>
変数sに格納されているデータが変数r3に格納されているデータである場合に次の命令から次の場合分け命令の前までの命令を順番に実行する。

10
Copy FizzBuzz
FizzBuzzをクリップボードに記憶する。

11
#r1 = 0
変数r10を格納する。

12
#r2 = 0
変数r20を格納する。

13
<Case #r1>
変数sに格納されているデータが変数r1に格納されているデータである場合に次の命令から次の場合分け命令の前までの命令を順番に実行する。

14
Copy Fizz
Fizzをクリップボードに記憶する。

15
<Case #r2>
変数sに格納されているデータが変数r2に格納されているデータである場合に次の命令から次のデフォルト命令の前までの命令を順番に実行する。

16
Copy Buzz
Buzzをクリップボードに記憶する。

17
<Default>
変数sに格納されているデータが変数r1に格納されているデータでも変数r2に格納されているデータでも変数r3に格納されているデータでもない場合に次の命令から分岐終了命令の前までの命令を順番に実行する。

18
Copy #count
変数countに格納されているデータをクリップボードに記憶する。

19
</Switch>
分岐を終了する。

20
LCtrl Down
Ctrlキーを押したままでいることにする。

    ・・・    

6行目で数を3で割った余りと5で割った余りを足し合わせたものを計算しています。

そして、9行目でこの結果を場合分け命令のデータとして使用しています。

これにより、数を3で割った余りと5で割った余りの両方が0である場合にはFizzBuzzという文字列をクリップボードに記憶し、数を3で割った余りが0である場合にはFizzという文字列をクリップボードに記憶し、数を5で割った余りが0である場合にはBuzzという文字列をクリップボードに記憶し、数を3で割った余りも5で割った余りも0でない場合には数そのものを記憶するようにしています。

それから、11行目と12行目で一応変数r1r2の値を関係のない値にしておくようにしました。

これは1つ目の分岐を抜けた後に別の分岐に入ってしまわないようにするためです(本来そのようなことはあるはずがないのですが、HiMacroExのバージョン2.4.7(この記事の執筆時点での最新バージョン)で動作確認してみたところそのような現象が発生しました。恐らくHiMacroExのバグではないかと思います)。

これで、FizzBuzz問題の全ての部分をプログラム化することができました。

完成したプログラムは下のようになりました。

プログラム17(完成)

1
#count = 0
変数count0を格納する。

2
<r 100>
繰り返しを開始する。100回繰り返す。

3
#count = #count + 1
変数countに格納されている値を1増加させる。

4
#r1 = #count Mod 3
変数r1に計算結果を格納する。

5
#r2 = #count Mod 5
変数r2に計算結果を格納する。

6
#r3 = #r1 + #r2
変数r3に計算結果を格納する。

7
#s = 0
変数s0を格納する。

8
<Switch #s>
分岐を開始する。

9
<Case #r3>
変数sに格納されているデータが変数r3に格納されているデータである場合に次の命令から次の場合分け命令の前までの命令を順番に実行する。

10
Copy FizzBuzz
FizzBuzzをクリップボードに記憶する。

11
#r1 = 0
変数r10を格納する。

12
#r2 = 0
変数r20を格納する。

13
<Case #r1>
変数sに格納されているデータが変数r1に格納されているデータである場合に次の命令から次の場合分け命令の前までの命令を順番に実行する。

14
Copy Fizz
Fizzをクリップボードに記憶する。

15
<Case #r2>
変数sに格納されているデータが変数r2に格納されているデータである場合に次の命令から次のデフォルト命令の前までの命令を順番に実行する。

16
Copy Buzz
Buzzをクリップボードに記憶する。

17
<Default>
変数sに格納されているデータが変数r1に格納されているデータでも変数r2に格納されているデータでも変数r3に格納されているデータでもない場合に次の命令から分岐終了命令の前までの命令を順番に実行する。

18
Copy #count
変数countに格納されているデータをクリップボードに記憶する。

19
</Switch>
分岐を終了する。

20
LCtrl Down
Ctrlキーを押したままでいることにする。

21
V
Vキーを押したことにする。

22
LCtrl Up
Ctrlキーを離したことにする。

23
Enter
Enterキーを押したことにする。

24
</r>
繰り返しが完了していない場合には繰り返しの最初の命令に戻る。完了した場合には次の命令に進む。

「メモ帳」を起動した状態でこのプログラムを実行すると、「メモ帳」に数やFizzBuzzFizzBuzzという文字列が記入されていきます。

メモ帳

正しいプログラムを完成させることができました!

繰り返し回数が決まっていない繰り返し

さて、このプログラミングパターンが変数と別の機能を組み合わせたプログラミングパターンとしてこの連載記事で紹介するものとしては最後になります。

「繰り返し回数が決まっていない繰り返し」です。

第5回の記事で繰り返しについて説明してから今まで繰り返しはこの連載記事の様々なプログラムで活用してきましたが、繰り返しというものは繰り返し回数が決まっているものでした。

繰り返し開始命令には繰り返し回数を指定しなければなりませんでした。

実は、残念ながらと言うべきか、HiMacroExでは繰り返し命令を記述する場合には必ず繰り返し回数を指定しなければなりません。省略することもできませんし、繰り返し回数以外の基準で繰り返しを行うこともできません。

しかし、それでは絶対に繰り返し回数が決まっていない繰り返し(繰り返し回数以外の基準で行う繰り返し)を行うことができないかというと、少し考え方を変えることで似たようなことは実現することができます。

今回は最後に、これを行うプログラミングパターンを紹介したいと思います。

では、どうすれば繰り返し回数以外の基準で繰り返しを行うことができるかと言いますと、単刀直入に言いますと、この考え方は「繰り返しをしている間に何もしなければ繰り返しをしていないのと同じ」というものです。

厳密な意味では繰り返しを行っているのですが、繰り返しの間に何もしないのなら繰り返しを行っていないのと同然ではないかということです。

たとえば、100回の繰り返しがプログラムの中に記述されているとしても、繰り返しの間に何の命令も記述されていないなら、つまり、繰り返しの間が空っぽになっているなら、それは繰り返しがないのとほぼ同じです。

同様に、100回の繰り返しがプログラムの中に記述されているとしても、繰り返しの間である状況が成り立っている間だけは何らかの命令を実行し、それ以外の状況になったら何も命令を実行しないようになっているのだとしたら、それは最早ある状況が成り立っている間だけ行われる繰り返しとほぼ同じです。

ですから、このような考え方をすれば本来HiMacroExでは出来ないはずの繰り返し回数が決まっていない繰り返しというのも疑似的に実現することができるのです。

しかし、それでは、どうすればこのプログラミングパターンをHiMacroExの命令を使って記述することができるのでしょうか。

まず、繰り返しを行うのですから繰り返し命令が必要になるのは明らかです。

そして、ある状況が成り立っている間だけ何らかの命令を実行しなければならないのですから、これは分岐です。繰り返しの中で分岐を行い、特定の分岐の場合にだけ何らかの命令を実行するようにすれば良いのです。

ですから、繰り返しと分岐を組み合わせるということになります。

そして、分岐自体には何らかの変数が関わってくるということになります。

これにより、変数によって表されるある状況が成り立っている間だけ何らかの命令を実行するということが実現できます。

それでは、早速簡単な例を見てみましょう。

このプログラミングパターンが必要なプログラムの例としては下のようなものが考えられます。

  • 「あなたはプログラマですか?」という質問をし、ユーザにy(はい)かn(いいえ)で答えてもらう。
  • ただし、ユーザがyと答えるまでプログラムは終了せず、何回でも繰り返し同じ質問を行う。

このようなプログラムはどのように記述することができるでしょうか?

たとえば、下のようにして書くことができます。

プログラム18

1
MsgBox あなたはプログラマですか?
メッセージボックスを表示する。

2
#answer = n
変数answernを格納する。

3
<r 100000>
繰り返しを開始する。100000回繰り返す。

4
<Switch #answer>
分岐を開始する。

5
<Case y>
変数answerに格納されているデータがyである場合に次の命令から次のデフォルト命令の前までの命令を順番に実行する。

6
<Default>
変数answerに格納されているデータがyでない場合に次の命令から分岐終了命令の前までの命令を順番に実行する。

7
#answer = InputBox
ユーザにデータを入力させるためのダイアログボックスを開き、そこでユーザが実際に入力したデータを変数answerに格納する。

8
</Switch>
分岐を終了する。

9
</r>
繰り返しが完了していない場合には繰り返しの最初の命令に戻る。完了した場合には次の命令に進む。

このプログラムのポイントはまず3行目で繰り返し回数を100000回にしている点です。

今回のプログラムにおいては100000回というのはほぼ無限に近い繰り返し回数です。そのような回数を実際の繰り返し回数として指定することでほぼ無限に繰り返しを行うようにしています。

そして、5行目で変数answeryが格納されているかどうかで分岐を行っていますが、分岐した後に実行する命令は空になっており、6行目にはすぐ変数answery以外が格納されていた場合の分岐が記述されています。

これにより、変数answeryが格納されている場合には何も行わないようにしています。

そして、逆に、変数answery以外が格納されている場合には7行目でユーザに質問の答えを入力してもらうためのダイアログボックスを開くようにしており、ユーザがyと答えるまでほぼ永遠に繰り返しダイアログボックスが表示されるようにしています。

このプログラムを実行すると、最初に下のようなメッセージボックスが表示されます。

メッセージボックス

「OK」ボタンをクリックすると、下のようなダイアログボックスが表示されます。y以外の文字列を入力して「OK」ボタンをクリックした場合には再び同じダイアログボックスが表示され、yと入力して「OK」ボタンをクリックするまで何度でも繰り返されます。

ダイアログボックス

ダイアログボックス

ダイアログボックス

yと入力して「OK」ボタンをクリックするとプログラムが終了します。

ただし、もしかしたら何もしない100000回の繰り返しを行うのに時間が掛かってプログラムが中々終了しないかもしれません。

そのような場合にはPauseキーを押すとプログラムを途中で強制終了することができます。

このようにして繰り返し回数が決まっていない繰り返しを実現することができます。

おわり

今回は変数と繰り返しと分岐を組み合わせる方法について解説しました。

前回、前々回と、そして、今回と、変数と様々な機能を組み合わせる方法について解説して変数に関してはかなり様々なプログラムで使いこなせるようになってきたのではないかと思います。

そして、今回でこの連載記事は終わりです。

最後まで読んでくださった方、ありがとうございます。

この連載記事はどうでしたでしょうか?

HiMacroExというキーボードやマウス操作を自動化するためのソフトを通してプログラミングの基礎の基礎について解説することで、プログラミングを始めたばかりの人にも取っ付きやすい記事となったのではないかと思います。

この連載記事の内容をマスターされた方で、これからもプログラミングを続けていきたいという方はHiMacroExを使って色々なプログラムを自分で作ってみるのも良いでしょう。

あるいは、より一般的なプログラミング言語の勉強をしてみるのも良いかもしれません。

今後このサイトでもこの連載記事とはまた別の観点からのプログラミング初心者向け記事やこの連載記事の次のステップとして相応しいような連載記事も執筆予定です。

それでは、また。

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-プログラミング, 講座