第6講 For文以外の繰り返し処理

第2話 While文を利用した簡単なソフトの作成
第1話問題解答例
@
Public Class Form1

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     '変数の宣言
     Dim i As Integer, w As Integer

     '和の計算
     w = 0
     i = 1
     While i <= 100
       w = w + i
       i = i + 1
    End While

    '和の表示
    Label1.Text = w.ToString

  End Sub
End Class
実行画面
入門

A
Public Class Form1

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     '変数の宣言
     Dim i As Integer, w As Integer

     '和の計算
     w = 0
     i = 2
     While i <= 100
       w = w + i
       i = i + 2
    End While

    '和の表示
    Label1.Text = w.ToString

  End Sub
End Class
実行画面
入門

B
Public Class Form1

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     '変数の宣言
     Dim i As Integer, w As Integer

     '和の計算
     w = 0
     i = 2
     While i <= 100
       w = w + i
       i = i + 3
    End While

    '和の表示
    Label1.Text = w.ToString

  End Sub
End Class
実行画面
入門

一般にプログラム言語では、条件式(上例では、i <= 100)は条件式自体が0または1の値をもっています。
条件式が偽すなわち間違っている場合、条件式は0の値を
条件式が真すなわち正しい場合、条件式は1の値をもちます。
例えば、i = 200のときは、i <= 100は200 <= 100で間違っているので0の値を
i = 2のときはi <= 100は2 <= 100で正しいので1の値をもちます。
この点に注意するとBの解答例は次のように変更することもできます。
Public Class Form1

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     '変数の宣言
     Dim i As Integer, w As Integer

     '和の計算
     w = 0
     i = 2
     While 1
       w = w + i
       i = i + 3
       If i > 100 Then Exit While
    End While

    '和の表示
    Label1.Text = w.ToString

  End Sub
End Class
Exit Whileは、強制的にループ処理を抜けるときに使う命令です。
Exit は、For文でも使えます。この場合はExit Forです。
While文で気をつけなければならないことは、永久ループにならないよう注意することです。
たとえば、今のコーティングでうっかりIf i > 100 Then Exit Whileを忘れてしまうと
Public Class Form1

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     '変数の宣言
     Dim i As Integer, w As Integer

     '和の計算
     w = 0
     i = 2
     While 1
       w = w + i
       i = i + 3
     End While

    '和の表示
    Label1.Text = w.ToString

  End Sub
End Class
永久ループになってしまいます。While 1 ですから永久に続けてしまうわけです。
ループを抜け出す条件を忘れると、永久ループになってしまいます。
また、ループを抜け出す条件が不適切な場合にも永久ループなってしまう場合があります。
実行して10秒も20秒も結果がでなければ永久ループになっている可能性を疑わなければなりません。
今作っているソフトは、ほとんどが0.001秒もかからず結果の出るものばかりだからです。
これを超えたのは、円周率πの計算ぐらいでしょう。
永久ループになると、コンピュータは無限に計算を続けます。
つまり、ソフトは永久に稼働してしまいます。
このような状態になったときは、強制的にソフトを閉じてください。
強制的にソフトを終了させる方法は、
入門
画面の一番下の矢印のあたりを右クリックしてください。
すると、サブメニュー入門が開きます。
それのタスクマネージャの起動をクリックします。
入門パフォーマンスタブをクリックして
CPU使用率が画面のように25%を超えていれば、永久ループになっている可能性が濃厚です。
25%を指標にするのは、コンピュータがCPUを4つ積んでいる場合です。
少なくともCPUひとつ分がフル稼働しているということは、コンピュータが永久ループの計算を永遠と計算している可能性を示しています。
アイドリング状態では、CPU使用率は高々数%です。
永久ループに陥ってしまった場合は、タスクマネージャーのアプリケーションタブをクリックします。
入門応答なしとなっているソフトを選びタスクの終了をクリックします。
すると、プログラムの終了入門がでてきますので、
すぐに終了をクリックしてください。
永久ループになったソフトを終了することができます。
ループを抜け出す条件は、忘れたり不適切であることが結構ありますので慎重にしなければなりません。

さて、先のタイピングは次のようにすることも可能です。
Public Class Form1

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     '変数の宣言
     Dim i As Integer, w As Integer

     '和の計算
     w = 0
     i = 2
     Dim a as Integer
     a = 1
     While a
       w = w + i
       i = i + 3
       If i > 100 Then a = 0
     End While

     '和の表示
     Label1.Text = w.ToString

  End Sub
End Class
If i > 100 Then a = 0がループを抜け出す条件です。
While文は条件式の値が1の間だけ繰り返しますので、
0なれば終了するわけです。


今回作ったソフトだといちいちプログラムソースをいじらなければなりません。
そこで、プログラムソースをいちいちいじらなくてもソフト上から条件を入力できるように改造しましょう。
例えば、次のようにForm1を改造して、実行できるようにコードをタイピングして下さい。
入門
ここで1乗の和、2乗の和等とは、上図の実行画面例の場合それぞれ
入門
入門等を表すことにします。
ソース例は、例によって30行下。
ただし、wは4乗の和などがかなり大きくなりますので、
long w;
と宣言しておくことにしましょう。

































コード例
Public Class Form1

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     '変数の宣言
     Dim a As Integer, b As Integer, c As Integer, i As Integer, w As Integer

     '値の取得
     a = TextBox1.Text
     b = TextBox2.Text
     c = TextBox3.Text

     '1乗の和の計算
     w = 0
     i = a
     While i <= b
       w = w + i
       i = i + c
     End While
     TextBox4.Text = w.ToString

     '2乗の和の計算
     w = 0
     i = a
     While i <= b
       w = w + i * i
       i = i + c
     End While
     TextBox5.Text = w.ToString

     '3乗の和の計算
     w = 0
     i = a
     While i <= b
       w = w + i * i * i
       i = i + c
     End While
     TextBox6.Text = w.ToString

     '4乗の和の計算
     w = 0
     i = a
     While i <= b
       w = w + i * i * i * i
       i = i + c
     End While
     TextBox7.Text = w.ToString

   End Sub
End Class



では、課題を出してこの話を閉めましょう。
それぞれの和について、合計の上限値を超えない範囲まで合計を続けるように変更させるにはどうしたらよいでしょうか。
つまり、例えば
1+2+3+4+・・・の和の合計が100を超えない範囲で合計を続けさせるということです。
入門
Bの別解である
Public Class Form1

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     '変数の宣言
     Dim i As Integer, w As Integer

     '和の計算
     w = 0
     i = 2
     While 1
       w = w + i
       i = i + 3
       If i > 100 Then Exit While
    End While

    '和の表示
    Label1.Text = w.ToString

  End Sub
End Class
または、
Public Class Form1

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     '変数の宣言
     Dim i As Integer, w As Integer

     '和の計算
     w = 0
     i = 2
     Dim a as Integer
     a = 1
     While a
       w = w + i
       i = i + 3
       If i > 100 Then a = 0
     End While

     '和の表示
     Label1.Text = w.ToString

  End Sub
End Class
を参考にして下さい。


第1話へ 第3話へ

006

VC++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座

数学研究室に戻る