1)課題
左側の数値2つ(A, B)ごとに割り算(A÷B)を行い、その剰余(あまり)を右側へ運んで下さい。実際に割り算をする必要はありません。割り算の意味を改めて考えてみましょう。
この課題ではマイナス値は出ません。また、2つ目の数字に0が来る事はありません。
2)解説
入社20年目で掛け算をしました. A×Bを計算するために, 0から始めて, AをB回加えました. この課題ではA÷Bを行い, 余りを求めます. 考え方としては, 掛け算と逆にAからBを引き続ければ答えに近づけそうです. まず, 例として8÷3を考えてみます.
「A」に8, 「B」に3を配置し, 「A」から「B」を引いた結果を「A」に配置していきます.
A B8 35 32 3―1 3
4行目で「A」が負の数となりました. 8÷3の余りは2ですから, 4行目の一つ上にある3行目の「A」の値2が求める答えです. プログラムでは, 「Aがマイナスになる一つ手前」とは言えません. 代わりに, 「AがマイナスになったらBを加え, その結果が求める余り」とします.
問題文にあるように, 負の数や「B」が0となることはありませんので, これ以上, 考える必要は無さそうです. この考えに従いプログラムを作ります.
1行目から4行目で, 左のコンベアから取ったパネルをカーペットに配置しています. 5行目と6行目で「A-B」を計算し, 結果がマイナスになったか判定しています. マイナスの場合, 10行目にジャンプし, 「B」の値を加えて右のコンベアに運びます. マイナスでない場合, 8行目で引き算した結果を「A」にコピーして, 6行目に戻ります. このプログラムを実行すると課題をクリアーできます.
サイズ目標, スピード目標共に達成できました. プログラムを最適化すると, これらの目標を下回ることができます.
0 件のコメント:
コメントを投稿