大滝みや子先生のトレーニングブックより(2)

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
まきさん  
(No.1)
P122マージソート編

マージソートの解説を読み自分トレースしたら
要素番号  1 2 3 4 5  6  7
list      2 4 6 6 10 11 15となり
配列  slist2 の25おろか17さえも格納されないと思いますが・・・
解説お願い致します。
2023.07.09 17:24
mzcisskさん 
(No.2)
21行目から25行目までの処理(3つ目のwhile文の処理)はされていますか?
一つ目のwhile文の処理を抜けた時点でjが3になっているので、この処理で17がlistに入るはずです。
2023.07.10 06:53
まきさん  
(No.3)
> 一つ目のwhile文の処理を抜けた時点でjが3になっているので、この処理で17がlistに入るはずです。
6から9行目
i j k slist1[5]< slist2[3]
5 3 7    15       17
15が格納された
i←i+1
6  5+1
i=6の時
i>num1なので繰り返し終了してしまい比較ができないのですが・・・
num2はslist2[3]=17はどこにもlist[k]入らない?
2023.07.10 10:52
wrinklyさん 
(No.4)
この投稿は投稿者により削除されました。(2023.07.10 15:03)
2023.07.10 15:03
wrinklyさん 
(No.5)
この投稿は投稿者により削除されました。(2023.07.10 15:09)
2023.07.10 15:09
まきさん  
(No.6)
文字化けするのですが・・・・
2023.07.10 15:11
wrinklyさん 
(No.7)
>?i > num1なので繰り返し終了してしまい比較ができないのですが・・・
mzcissk?さんの書かれている通り、3つ目の?while文(←β)の処理で
17が?list?に入ります。

最初の?while?文の終了後、終了せずに、次の?while?文(←α)?を実行します。
while文の条件式(i=6?>?num1=5?)が偽なので、一度も処理が実行されず、
すぐに次のwhile?文(←β)?を実行します。
while文の条件式(j=3?<?num2=4)が真なので、
list[8]?←?slist2[3]?(list[8]?←?17)
j?←?j?+?1?(j?←?3?+?1)
k?←?k?+?1?(k?←?8?+?1)
が実行されます。
次、条件式(j=4?<?num2=4)が真となるべきところ、誤りで偽となるため、
slist2[4]の?25?が、list[9]?に格納されません。
2023.07.10 15:14
wrinklyさん 
(No.8)
すみません。
プレビューでは文字化けしてないのですが、なぜか投稿すると文字化けしてしまいます。(??)
? を無視していただければ、意味は通じるかと思います。
不明な点は問合せください。
2023.07.10 15:23
wrinklyさん 
(No.9)
文字化けしてたらすみません。
最初のwhile 文を抜けるのは、slist1 か slist2 のどちらかの配列の要素が
全て list に格納された場合です。
後は、まだ list に格納されていない配列の要素を list に格納する必要があります。
それが、次の while 文の処理です。
αのwhile 文は、slist1 の要素が、全て list に格納されていない場合、
βのwhile 文は、slist2 の要素が、全て list に格納されていない場合、
(例題では、slist2[3]、slist2[4] がまだ格納されていない。)
なので、slist2[3]=17,slist2[4]=25 を list に格納する必要があります。
2023.07.10 15:59
まきさん  
(No.10)
>
i > num1なので繰り返し終了してしまい比較ができないのですが・・・
mzcisskさんの書かれている通り、3つ目のwhile文(←β)の処理で
17がlistに入ります。

最初のwhile文の終了後、終了せずに、次のwhile文(←α)を実行します。
while文の条件式(i=6>num1=5)が偽なので、一度も処理が実行されず、
すぐに次のwhile文(←β)を実行します。
while文の条件式(j=3<num2=4)が真なので、
list[8]←slist2[3]
(list[8]←17)
j←j+1(j←3+1)
k←k+1(k←8+1) が実行されます。

次、条件式(j=4<num2=4)が真となるべきところ、誤りで偽となるため、
slist2[4]の25が、list[9]に格納されません。 

本にはiが6の時に繰り返し終了って書いてあってここで終わるかと思っていました。でも17格納されないのかとふと思って・・・・・

比較してどっちか小さい方を格納するのはわかりますが・・・
解説を聞いてその時にβが実行されることすら分かってなかったです。

リストの要素番号は1から9まである。
要素番号  1  2  3  4   5   6   7   8   9
list      2  4  6  6  10  11  15  17        となり

slist2[4]の25が、list[9]に格納されません。 

本ではここまでをしっかりと書いて欲しいと思います
解説ありがとうございました。
2023.07.10 16:07
電タックさん 
FE ブロンズマイスター
(No.11)
その書籍を持っていないのでフォローは出来ないのですが
マージソートの問題が過去問にも有ったので試しにチャレンジしてみるとより理解が深まるかもしれません。

内容はザ・マージソートの問題という感じの基本をしっかりなぞった物になってます。
設問2は呼び出し順序が問われているのでこの辺まで抑えられたらかなり実力がついてると考えていいと思います。
https://www.fe-siken.com/kakomon/22_haru/pm08.html
2023.07.10 16:23
mzcisskさん 
(No.12)
p.126のiが6の時に終了というのは一つ目のwhile文が終了したという意味ですね。
同じページの一番上の方に一つ目のwhile文で次の処理が…と書いてはありますが、それで二つ目・三つ目のwhile文の説明を続けないのは確かに「あれ?」とは思いますし、勘違いは起こりえるかと思います。
まあ、大滝先生にしてみれば既にp.125で解説してあるというのでしょうが、普通に文の構成として問題がありますね。

この問題に限らず、大滝先生の解説はまず問題の主題や考え方を述べて、その主題から解釈していくという姿勢が基本ですが、受験者としてはむしろどうやったらその主題や考え方にたどり着くかが最重要なわけです。
どうしても疑問に感じる点はありますね。
2023.07.10 19:25
まきさん  
(No.13)
参考書に絶対なんてないので、また分からないことがありましたら聞きます。宜しくお願い致します
2023.07.10 21:45

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop