H31年 春期 表計算 マクロ
マクロファージさん
(No.1)
またしてもタイトルの表計算マクロの質問です。問題文マクロの説明の(3)にて昇順に整列すると書いてあり、解説を見たところマクロの3つ目の繰り返しと対応しているとのことです。ここでjという変数が出てきますが、これは何のためのものでしょうか。-1されているのは何の意味があるのでしょうか。変数iは最終的には会員数になるまで繰り返すためのカウンタですよね?jから-iということは繰り返すたびに-1されるということだと思いますがそれは結局どういう意味なのでしょうか。
また、解説では「「商品販売額の降順に、商品販売額が等しいときは商品最終販売日の昇順に整列する」条件式を実行します。eには行の入れ替えを実行するか否かを判定するための条件式が入ります。」と比較する式に焦点を当てていますが、問題を解くには空欄eの後の繰り返し処理がわからないと解けないのではと思いました。こちらで何をしているのかも教えていただけたらと思います。
わかりづらかったらすいません。。
また、解説では「「商品販売額の降順に、商品販売額が等しいときは商品最終販売日の昇順に整列する」条件式を実行します。eには行の入れ替えを実行するか否かを判定するための条件式が入ります。」と比較する式に焦点を当てていますが、問題を解くには空欄eの後の繰り返し処理がわからないと解けないのではと思いました。こちらで何をしているのかも教えていただけたらと思います。
わかりづらかったらすいません。。
2021.02.27 18:51
アメフラさん
(No.2)
このアルゴリズムは基本交換法、つまりバブルソートをやっています。
こういう順序を組み替えるアルゴリズムが出てきた際は、かんたんで少ない配列を用意してみて、トレースすると理解することができます。以下に書きますが、面倒臭いのでカギカッコ等は使いません。
ではまず、どういう仕組みで繰り返しが続くのかを説明します。
例えば、1:600,2:700,3:400,4:600,5:900,6:800という配列があったとします。
その上で、アルゴリズムを見てみます。
iは、会員数、つまり上の配列で言えば1~6まで繰り返します。
次に、jの繰り返しを見てみます。これは、-iされているので、一回目の繰り返しでは1~5までやるということになります。とりあえず処理の中の解説は置いといて、降順に整列されるんだということにしてください。
そうすると、一回目の繰り返しで、1と2,2と3、3と4、4と5、5と6が比較されます。なぜjは5までなのに6まで比較できるのかは、条件判定の空欄eを見ればわかります。
過程は飛ばして、比べて整列した結果を以下に書きます。
1:700,2:600,3;600,4:900,5:800,6;400
となります。
見ればわかりますが、降順にはなっていません。ですが、一番小さい数字が、配列の一番最後に据えることができています。
では、次の繰り返しで、降順に並べたいと思って、且つ無駄がないアルゴリズムを作るとすればどうすればよいかといえば、次の繰り返しでは、jは1~4までの繰り返しをさせるだけで良いようにしなくてはなりません。
そこで、一番最初のiが出てきます。次、iの値は+1されます。つまり、j-2になり、繰り返しを1~4までで止めさせることができるようになるわけです。
ここまではわかりますか?
こういう順序を組み替えるアルゴリズムが出てきた際は、かんたんで少ない配列を用意してみて、トレースすると理解することができます。以下に書きますが、面倒臭いのでカギカッコ等は使いません。
ではまず、どういう仕組みで繰り返しが続くのかを説明します。
例えば、1:600,2:700,3:400,4:600,5:900,6:800という配列があったとします。
その上で、アルゴリズムを見てみます。
iは、会員数、つまり上の配列で言えば1~6まで繰り返します。
次に、jの繰り返しを見てみます。これは、-iされているので、一回目の繰り返しでは1~5までやるということになります。とりあえず処理の中の解説は置いといて、降順に整列されるんだということにしてください。
そうすると、一回目の繰り返しで、1と2,2と3、3と4、4と5、5と6が比較されます。なぜjは5までなのに6まで比較できるのかは、条件判定の空欄eを見ればわかります。
過程は飛ばして、比べて整列した結果を以下に書きます。
1:700,2:600,3;600,4:900,5:800,6;400
となります。
見ればわかりますが、降順にはなっていません。ですが、一番小さい数字が、配列の一番最後に据えることができています。
では、次の繰り返しで、降順に並べたいと思って、且つ無駄がないアルゴリズムを作るとすればどうすればよいかといえば、次の繰り返しでは、jは1~4までの繰り返しをさせるだけで良いようにしなくてはなりません。
そこで、一番最初のiが出てきます。次、iの値は+1されます。つまり、j-2になり、繰り返しを1~4までで止めさせることができるようになるわけです。
ここまではわかりますか?
2021.02.28 12:58
マクロファージさん
(No.3)
アメフラさん 返信遅くなり申し訳ありません。また、丁寧な解説をいただきありがとうございます。後日時直しをしいただいた解説を参照したところ解決できました!ありがとうございました!
2021.03.02 14:23
広告
返信投稿用フォーム
スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。
広告