変数トップへ|手順1|手順2手順3
変数(手順−1)


最初に作成するフォームは、左図です。
「え!」という声が聞こえそうです。先ほどのゲームとは大違いですね。
でも、ご安心ください。あなたのセンスでいくらでもよくなりますから・・

ここでは、フォームの作成より、長いイベントをいまから作成するのですから、力は、イベントの方にいれましょう

下記を参照に、実際に作成し、動かして見てください。


まず、フォームは?
  • ラベル(3個)
    使用目的・・単に器の容量のメモです

  • テキスト(3個)
    それぞれの器に入っている現在量を格納します

  • コマンドボタン(6個)
    「どちらから、どちらへ」の移動方向案内と、イベント(kev)ファイル実行用です

フォームに配置する、オブジェクト名
オブジェクト名 標題 ソース その他(備考)
ラベル a器8 器(8)
a器5 器(5)
a器3 器(3)
テキスト t大量 &大量
t中量 &中量
t小量 &小量
コマンドボタン b中大 ボタン名は、中身の動きです。
例:「b小大」・・・・
  「小の容器から大の容器へ移動」の、意味です

また、コマンドボタンの機能とパラメータは、今回は使用しません。
今回は、イベントの「マウス左ダウン」を使用しています。
左記6個の、「マウス左ダウン」に、チェックしてください」
b大中
b小大
b大小
b小中
b中小
○背景や大きさは自由に設定下さい。


次は、イベントです
  • 名札 メイン
      変数宣言 整数{&大器,&中器,&小器,&大量,&中量,&小量,&移量}
      &大器=8,&中器=5,&小器=3
      &大量=8,&中量=0,&小量=0


変数は、3個+3個+1個=7個です

どんな変数が必要か考えてみますと、まずそれぞれの容器の大きさを格納する変数ですね。そして、それぞれの容器にいま現在どれくらいの量が入ってるかを表す変数が必要ということがわかりますね。

  • &大器,&中器,&小器
    それぞれの最大容量を入れてます。定数です。定数の変数の場合の書き方は他に、「定数宣言」と、いうのもあります
    また、上記では変数宣言後「&大器=8,&中器=5,&小器=3」のように記載してますが、変数宣言時に、そのまま、変数に値を代入する方法もあります。

  • 上記が、固定に対して、次の「&大量,&中量,&小量」は本当の変数です。「名札 メイン」で、起動時に値を代入します。
    (0の代入・・・0とわかってる変数は、事前に「0」を、代入しておきましょう。計算式によっては、未定義では出来ない場合もあります

  • +1の変数「&移動」
    次の手続きで説明します。仮の値を代入します。計算の結果上記の変数では処理できない場合が発生します
    しかし、最初からこの変数が必要とわかっていたわけではありません。必要があって、のちほど追加した変数です

手続き作成
  • 今回は、コマンドボタンの、「マウス左ダウン」を使用しています。従って、機能名・パラメータリストは使用しません
    手続きは、上記6個作成します。「大中・中大・大小・小大・小中・中小」です。
    手続き名は、中身の流れる方向をそのまま利用します(今回は、容量によって「大・中・小」の名前を利用しています)

  • では、手続きの考え方・・・同じものを、「大・中・小」の名前を変えて6個作成します

    手続き定義開始 b中大::マウス左ダウン(長整数 ・・・・・・ &処理中止)
    手続き定義終了

    手続き定義開始 b大中::マウス左ダウン(長整数 ・・・・・・ &処理中止)
    手続き定義終了

    手続き定義開始 b小大::マウス左ダウン(長整数 ・・・・・・ &処理中止)
    手続き定義終了

    手続き定義開始 b大小::マウス左ダウン(長整数 ・・・・・・ &処理中止)
    手続き定義終了

    手続き定義開始 b小中::マウス左ダウン(長整数 ・・・・・・ &処理中止)
    手続き定義終了

    手続き定義開始 b中小::マウス左ダウン(長整数 ・・・・・・ &処理中止)
    手続き定義終了


  • 仮に、「小の容器から大の容器へ移す場合の例」・・・手続き定義開始 b小大::マウス左ダウン(・・・・・・

    プログラムの意味 桐のイベント 内容
    手続き名を決める 手続き定義開始 b小大::マウス左ダウン(長整数 &マウス位置[2],長整数 &明細番号,長整数 &フラグ,参照 長整数 &処理中止) フォームのオブジェクトのイベントクリックで、自動作成されます
    いろいろなケースが有るため「if文」を使用する
    最初の比較 if(&小量=0) 小の容量が0の場合
    なにもしない
    大の容器残量と、小容器に入ってる量の比較 else if(&大器-&大量>=&小量) 大の容器の総量と現在入っている量の差、つまりあと入る量と、小の量を比較して、大の容器の方が同じか多い場合。この式が成立すれば
    &大量=&大量+&小量
    &小量=0
    小の量を全部、大量に加える・・・注:@
    全部移せたので、小量を「0」にする
    そうでなかったら else 残り全部に当てはまります・・・注:A
    &移量=&大器-&大量
    &大量=&大量+&移量
    &小量=&小量-&移量
    大の容器と大の現在量の差、つまりあと入る量をもとめる
    ここで、移動出来る量を「&移量」に入れています
    その量を、大の容器に移す
    小の量をその分引いておく
    if文終わり end
    フォームの変数を更新 メソッド呼び出し @フォーム.変数変更() メソッド呼び出しの利用で、新しく変更された変数に値を変更しておきます
    この手続きを終了 手続き定義終了
    同じような内容で、それぞれの方向へ「6個」作成します。

    注@・・
     桐(殆どのプログラム言語)では、「2+3=5」のような式は、「5=2+3」のように、左辺が答えになるように書きます。
     また、「a=a+b」は、普通の算数ではでてきませんが、「=」の前の「a」は、答えが入った「a」・「=」の後ろの「a」は、その前まで利用していた「a」という意味です。

    例:a=3・b=2の時「a=a+b」は、「=」の前の「a」は、「5」で、・「=」の後ろの「a」は「3」です。
      式の意味もご理解下さい


    注A・・
     if文の書きの詳細はヘルプを参照下さい。ここでは、簡単に説明しておきます、

    最初の「if(・・・・・・・)」に、当てはまれば、その中の式を実行します
    次に「else if」を実行します。最初の対象に当てはまらなければ、その次の計算式を判定します。
    次々に、判定を行ったあと、どこにも当てはまらなければ、最後の式を実行します。

    最後まで「else if文」で、そのどれでもで無い場合は、結果的になにも実行せず、このプログラムから抜けだして、「if文」とペアになる、endの次の行へいきます。今回の最後は、「else if」でなく「else」ですから、どこにも当てはまらなければ、ここが実行されます

    「if文」で、判定させる順序は、わかりやすいものからきめればいいですね。ただし、郵送料みたいな計算式があって「25g」まで80円、「50g」まで、90円とか、なってる場合に、先に「0g以上80円」「25g以上90円」と書いた場合、総て、最初の条件に当てはまります。
    「すべて80円」になってしまいますので、このような場合は、大きい方から条件を書いていくとか、「○○g以下」のように、計算式は書きます。気を付けましょう

    if(else)文と変数値の変更、また計算式の意味を確認し、ここまでは完全にご理解下さい

  • 上記式を書き換えてみると、下記のように(参考程度に)書くこともできます。if文の順序が異なるだけです。

    if(&大器-&大量>=&小量 .and &小量>0)
      &大量=&大量+&小量
      &小量=0
    else if(&小量>0)
      &移量=&大器-&大量
      &大量=&大量+&移量
      &小量=&小量-&移量
    end

  • 6個の式は

    手続き定義開始 b小大::マウス左ダウン(長整数 ・・・・中略・・・)・・・@
    if(&小量=0)
    else if(&大器-&大量>=&小量)
      &大量=&大量+&小量
      &小量=0
    else
      &移量=&大器-&大量
      &大量=&大量+&移量
      &小量=&小量-&移量
    end
    メソッド呼び出し @フォーム.変数変更()
    手続き定義終了・・・@

    @の行は、ボタンオブジェクトをクリックすると、自動作成されます。
    あとは、「小・大」の部分を、名前と同じように書き換えます


    上記を「手続き定義開始 b中小::マウス左ダウン(長・・・・・」ように修正する場合
    >if(&中量=0)
    >else if(&小器-&小量>=&中量)
    >  &小量=&小量+&中量
    >  &中量=0

    まず、@の行だけ自動作成し、あとは複写・修正しながら作成下さい

なお、ここまでの、サンプルを「変数基本」に入れてあります
top