次は、イベントです |
- 名札 メイン
変数宣言 整数{&大器,&中器,&小器,&大量,&中量,&小量,&移量}
&大器=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 |