電験三種 H29年 機械 問18 問題と解説

 問 題     

図のフローチャートで表されるアルゴリズムについて、次の(a)及び(b)の問に答えよ。変数は全て整数型とする。

このアルゴリズム実行時の読込み処理において、n=5とし、a[1]=2、a[2]=3、a[3]=8、a[4]=6、a[5]=5とする。

(a) 図のフローチャートで表されるアルゴリズムの機能を考えて、出力されるa[5]の値を求めよ。その値として正しいものを次の(1)~(5)のうちから一つ選べ。

  1. 2
  2. 3
  3. 5
  4. 6
  5. 8

(b) フローチャート中のXで示される部分の処理は何回行われるか、正しいものを次の(1)~(5)のうちから一つ選べ。

  1. 3
  2. 4
  3. 5
  4. 8
  5. 10

 

 

 

 

 

正解 (a)-(5), (b)-(1)

 解 説    

フローチャートの問題では、ランダムに並んでいる複数の数字を大きい順に並べるor小さい順に並べるというのが、頻出問題です。今回はまさにこのパターンで、小さい順に並べるプログラムが組まれています。

このことに気づければ問題を解く上では考えやすい(フローを追わなくても答えが出せる)と思いますが、特に気づかなくてもフローをひとつずつたどっていけばよいので、特に問題はありません。

(a)、(b)ともに、必要に応じて下図を参照しながら解説を読んでください。

フローチャートを上から見ていくと、最初に「START」があって、次に配列が全部でn(問題文よりn=5)であることが示され、その5つの数値を読み込みます。問題文にあるように、5つの配列の内容はa[1]=2、a[2]=3、a[3]=8、a[4]=6、a[5]=5となっています。

このあとの「1→i」というのは、iに1を入れる、つまり「i=1」ということです。同様に、「i+1→j」は、「j=i+1」です。

ここで、ひし形で表される「判断」で、2つの数字の大小を比較します。最初の場合は、a[1]とa[2]の比較なので、2>3が正しいかどうかが問われています。その答えがYESなら下のXの部分に進み、NOならXをショートカットします。

Xの部分は「処理」が3つ連続であります。

  • 1つ目は「a[i]→m」なので、「mにa[i]を入れるのでm=a[i]になる」と読み替えることができます。
  • 2つ目は「a[j]→a[i]」なので、「a[i]にa[j]を入れるのでa[i]=a[j]になる」と読み取れます。
  • 3つ目は「m→a[j]」なので、「a[j]にmを入れるのでa[j]=mになる」という意味です。

結局、ここまでの3つの処理でやっているのは、a[i]とa[j]の値を交換しているということです。2つの値を直接入れ替えることはできないので、mを間にはさむことで数値の入れ替えをしています。

つまり、Xの直前に2つの大小を比べ、若い番号の配列(a[1]とa[2]ならa[1]のほう)の値が大きければ、Xにおいて2つの配列の中身の数値を入れ替えるという操作を行っています。一方、若い番号の配列の値が小さいなら、そのままにしておきます。

続いて、jを+1して、その値がn(=5)よりも大きいかどうか判断します。NOなら矢印に従って前に戻り(ただしjが+1されているため、戻ったあとの判断の結果は変わってきます)、YESなら下へと進みます。

ここでの意味合いは、5つの配列a[1]、a[2]、a[3]、a[4]、a[5]のうち、a[1]を固定して、a[2]との大小を比較、それが終わったらa[3]との比較、その次はa[4]との比較、最後にa[5]との比較…というような感じです。

a[i]は変えずにa[j]のjを1つずつ上げて、jは5が上限なので、そうなったら下に進んで今度はiを1つ上げます。

iを+1されたら、今度はiがn-1(=4)よりも大きいかどうかを判断します。つまり、a[2]に対して、今度はそれとa[3]と比較、a[4]と比較、a[5]と比較…というような感じです。

そうしてiが上限の4(jの上限が5なのでiの上限は4)を超えたら、下へと進んで出力をします。

以上をまとめると、このフローチャートでは、2つの数値を比較して、左側のほうが右側よりも大きければ順序を入れ替えるという操作を、合計で以下の10回行っています。その結果、最終的に5つの配列は値の小さい順に並ぶことになります。

ちなみに、10回という根拠は、5種類の数値を2つずつ比較するため、5C2=10からわかります。

  •  ① a[1]とa[2]の比較
  •  ② a[1]とa[3]の比較
  •  ③ a[1]とa[4]の比較
  •  ④ a[1]とa[5]の比較
  •  ⑤ a[2]とa[3]の比較
  •  ⑥ a[2]とa[4]の比較
  •  ⑦ a[2]とa[5]の比較
  •  ⑧ a[3]とa[4]の比較
  •  ⑨ a[3]とa[5]の比較
  •  ⑩ a[4]とa[5]の比較

合わせて、①~⑩を書き込んである上図も参照してください。

(a)

上記を踏まえると、最初(=入力)は2,3,8,6,5というランダムだった数値の並び順が、最終的(=出力)には小さい順に2,3,5,6,8となります。

よって、出力されるa[5]は最も大きな8なので、正解は(5)です。

(b)

Xを行った回数は、上図の通り、⑧、⑨、⑩の3回です。よって正解は(1)となります。

コメント