第三種電気主任技術者の過去問
平成29年度(2017年)
機械 問63

このページは閲覧用ページです。
履歴を残すには、 「新しく出題する(ここをクリック)」 をご利用ください。

問題

第三種 電気主任技術者試験 平成29年度(2017年) 機械 問63 (訂正依頼・報告はこちら)

図のフローチャートで表されるアルゴリズムについて、次の問に答えよ。変数は全て整数型とする。
このアルゴリズム実行時の読込み処理において、n = 5とし、a[1]= 2、a[2]= 3、a[3]= 8、a[4]= 6、a[5]= 5とする。

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

次の問題へ

正解!素晴らしいです

残念...

この過去問の解説 (2件)

01

解答
アルゴリズムは上から始まり下で終わります。なので、上から順に見ていきます。
1.START : 始め
2.n=5を読み込み
3.a[n]=a[5] ・・・・・a[?]という箱を5個用意するイメージです。
4.a[1]=2、a[2]=3、a[3]=8、a[4]=6、a[5]=5 ・・・・・例えばa[1]という名前の箱に2個なにかが入っているような状態です。
5.i=1 ・・・・・iに1を代入します。
6.i+1=j → 1+1=2 ・・・・・jに2を代入します。
7.a[i]>a[j] → a[1]>a[2] → 2>3 ・・・・・a[1]とa[2]に入っている数値を比較します。この場合、「NO」に進みます。
8.j+1=j → 2+1=3 ・・・・・jに3を代入します。
9.j>n → 3>5 ・・・・・「NO」に進みます。
10. a[i]>a[j] → a[1]>a[3] → 2>8 ・・・・・a[1]とa[3]に入っている数値を比較します。この場合、「NO」に進みます。
11.j+1=j → 3+1=4 ・・・・・jに4を代入します。
12.j>n → 4>5 ・・・・・「NO」に進みます。
13. a[i]>a[j] → a[1]>a[4] → 2>6 ・・・・・a[1]とa[4]に入っている数値を比較します。この場合、「NO」に進みます。
14.j+1=j → 4+1=5 ・・・・・jに5を代入します。
15.j>n → 5>5 ・・・・・「NO」に進みます。
16. a[i]>a[j] → a[1]>a[5] → 2>5 ・・・・・a[1]とa[5]に入っている数値を比較します。この場合、「NO」に進みます。
17.j+1=j → 5+1=6 ・・・・・jに6を代入します。
18.j>n → 6>5 ・・・・・この場合「YES」に進みます。この処理は1つの箱基準に全ての箱と照合させるための処理となります。
19.i+1=i → 1+1=2 ・・・・・iに2を代入します。
20.i>n-1 → 2>5-1 ・・・・・「NO」に進みます。
21.i+1=j → 2+1=3 ・・・・・jに3を代入します。
22. a[i]>a[j] → a[2]>a[3] → 3>8 ・・・・・a[2]とa[3]に入っている数値を比較します。この場合、「NO」に進みます。
23.j+1=j → 3+1=4 ・・・・・jに4を代入します。
24.j>n → 4>5 ・・・・・「NO」に進みます。
25. a[i]>a[j] → a[2]>a[4] → 3>6 ・・・・・a[2]とa[3]に入っている数値を比較します。この場合、「NO」に進みます。
26.j+1=j → 4+1=5 ・・・・・jに5を代入します。
27.j>n → 5>5 ・・・・・「NO」に進みます。
28. a[i]>a[j] → a[2]>a[5] → 3>5 ・・・・・a[2]とa[5]に入っている数値を比較します。この場合、「NO」に進みます。
29.j+1=j → 5+1=6 ・・・・・jに6を代入します。
30.j>n → 6>5 ・・・・・「YES」に進みます。
31.i+1=i → 2+1=3 ・・・・・iに3を代入します。
32.i>n-1 → 3>5-1 ・・・・・「NO」に進みます。
33.i+1=j → 3+1=4 ・・・・・jに4を代入します。
34. a[i]>a[j] → a[3]>a[4] → 8>6 ・・・・・a[3]とa[4]に入っている数値を比較します。この場合、「YES」に進みます。
35.a[i]=m → a[3]=m ・・・・・mに8を代入します。
36.a[j]=a[i] → a[4]=a[3] ・・・・・a[3]にa[4]の値を代入します。a[3]には6が入ります。
37.m=a[j] → 8=a[4] ・・・・・a[4]にmの値を代入します。a[4]には8が入ります。
38.j+1=j → 4+1=5 ・・・・・jに5を代入します。
39.j>n → 5>5 ・・・・・「NO」に進みます。
40. a[i]>a[j] → a[3]>a[5] → 6>5 ・・・・・a[3]とa[5]に入っている数値を比較します。この場合、「YEs」に進みます。
41.a[i]=m → a[3]=m ・・・・・mに6を代入します。
42.a[j]=a[i] → a[5]=a[3] ・・・・・a[3]にa[4]の値を代入します。a[3]には5が入ります。
43.m=a[j] → 6=a[4] ・・・・・a[4]にmの値を代入します。a[4]には6が入ります。
44.j+1=j → 5+1=6 ・・・・・jに6を代入します。
45.j>n → 6>5 ・・・・・「YES」に進みます。
46. i+1=i → 3+1=4 ・・・・・iに4を代入します。
47.i>n-1 → 4>5-1 ・・・・・「NO」に進みます。
48.i+1=j → 4+1=5 ・・・・・jに5を代入します。
49. a[i]>a[j] → a[4]>a[5] → 8>6 ・・・・・a[4]とa[5]に入っている数値を比較します。この場合、「YES」に進みます。
50.a[i]=m → a[4]=m ・・・・・mに8を代入します。
51.a[j]=a[i] → a[5]=a[4] ・・・・・a[4]にa[5]の値を代入します。a[4]には6が入ります。
52.m=a[j] → 8=a[5] ・・・・・a[5]にmの値を代入します。a[5]には8が入ります。
53.j+1=j → 5+1=6 ・・・・・jに6を代入します。
54.j>n → 6>5 ・・・・・「YES」に進みます。
55. i+1=i → 4+1=5 ・・・・・iに5を代入します。
56.i>n-1 → 5>5-1 ・・・・・「YES」に進みます。
57.a[1]=2、a[2]=3、a[3]=5、a[4]=6、a[5]=8を出力します。
58.終了

よって答えは5番の8となります。

今回のプログラムは読み込まれた数値は小さい順に並び替えるプログラムでした。
慣れると一巡して終了条件を理解するとどういったプログラムかわかるようになるそうです。

参考になった数3

02

フローチャートのアルゴリズムで処理されていくステップを順番に説明します。

1ステップ:START

2ステップ:nを読み込む
・n=5 を読込む

3ステップ:a[n]のnに2段目で読み込んだn=5を代入
・a[n]はa[5]となり、a[1]からa[5]まで5つの箱を準備する

4ステップ:a[1]~a[n]を読込む
・a[1]~a[5]までの箱に、それぞれの値を読込み格納する

・a[1]~a[5]は、問題文で与えられている
→ a[1]=2、a[2]=3、a[3]=8、a[4]=6、a[5]=5

5ステップ:iを1にする
・i=1にする

6ステップ:jをi+1にする
・i=1なので、j=2になる

7ステップ:a[i]がa[j]を比較

a[i]がa[j]より大きければ YESへ進む
a[i]がa[j]より小さければ NOへ進む

・i=1,j=2なので、a[1]とa[2]を比較する
・a[1]=2,a[2]=3なのでa[1]がa[2]より小さい
→ Noへ進む

8ステップ:jをj+1にする
・j=2が+1されて、j=3になる

9ステップ:jとnを比較

jがnより大きければ、YESへ進む
jがnより大きくなければ、NOへ進む

・j=2、n=5なので、jはnより大きくない
→ NOへ進む

10ステップ:a[i]とa[j]を比較
・i=1、j=3なので、a[1]とa[3]を比較する
・a[1]=2,a[3]=8なので、a[1]がa[3]より小さい
→ NOへ進む

11ステップ:jをj+1にする
・j=3が+1されて、j=4になる

12ステップ:jとnを比較
・j=4,n=5となっており、jはnより大きくない
→ NOへ進む

13ステップ:a[i]とa[j]を比較する
・i=1,j=4なので、a[1]とa[4]を比較する
・a[1]=2,a[4]=6なので、a[1]がa[4]より小さい
→ NOへ進む

14ステップ:jをj+1にする
・j=4が+1されて、j=5になる

15ステップ:jとnを比較
・j=5、n=5なので、jはnより大きくない
→ Noへ進む

16ステップ:a[i]とa[j]を比較
・i=1、j=5なので、a[1]とa[5]を比較する
・a[1]=2,a[5]=5なので、a[1]がa[5]より小さい
→ Noへ進む。

17ステップ:jをj+1にする
・j=5が+1されて、j=6になる

18ステップ:jとnを比較する
・j=6,n=5なので、jはnより大きい
→ YESへ進む

19ステップ:iをi+1にする
・i=1が+1されて、i=2になる

20ステップ:iとn-1を比較
・iがn-1より大きければ、YESへ進む
・iがn-1より大きくなければ、NOへ進む
・i=2,n=5なので、iはn-1より小さい
→ NOへ進む

21ステップ:jをi+1にする
・i=2なので、j=3となる。

22ステップ:a[i]とa[j]を比較する
・i=2,j=3なので、a[2]とa[3]を比較する。
・a[2]=3,a[3]=8なので、a[2]がa[3]より小さい
→ NOへ進む

23ステップ:jをj+1にする
・j=3が+1されて、j=4となる

24ステップ:jとnを比較する
・j=4,n=5なので、jはnより大きくない
→ NOへ進む

25ステップ:a[i]とa[j]を比較
・i=2,j=4なので、a[2]とa[4]を比較する
・a[2]=3,a[4]=6なので、a[2]がa[4]より小さい
→ NOへ進む

26ステップ:jをj+1にする
・j=4が+1されて、j=5になる

27ステップ:jとnを比較
・j=5,n=5なので、jはnより大きくない
→ NOへ進む

28ステップ:a[i]とa[j]を比較
・i=2,j=5なので、a[2]とa[5]を比較する
・a[2]=3,a[5]=6なので、a[2]がa[5]より小さい
→ NOへ進む

29ステップ:jをj+1にする
・j=5が+1されて、j=6になる

30ステップ:jとnを比較する
・j=6,n=5なので、jはnより大きい
→ YESへ進む

31ステップ:iをi+1にする
・i=2に1が足されて、i=3になる

32ステップ:iとn-1を比較する、
・i=3,n=5なので、iはn-1より小さい
→ NOへ進む

33ステップ:jにi+1を代入する
・i=3なので、j=4となる

34ステップ:a[i]とa[j]を比較
・i=3,j=4なので、a[3]とa[4]を比較する
・a[3]=8,a[4]=6なので、a[3]がa[4]より大きい
→ YESへ進む

35ステップ:a[i]をmに代入する
・a[3]=8なので、m=8となる

36ステップ:a[j]をa[i]に代入する
・a[4]=6なので、a[3]=6となる

37ステップ:mをa[j]に代入する
・m=8なので、a[4]=8となる

38ステップ:jをj+1にする
・j=4に1が足されて、j=5になる

39ステップ:jとnを比較する
・j=5,n=5なので、jはnより小さい
→ NOへ進む

40ステップ:a[i]とa[j]を比較する
・i=3,j=5なので、a[3]とa[5]を比較する
・a[3]=6で、a[5]=5なので、a[3]がa[5]より大きい
→ YESへ進む

41ステップ:a[i]をmに代入する
・a[3]=6なので、m=6となる

42ステップ:a[j]をa[i]に代入する
・a[5]=5なので、a[3]=5となる

43ステップ:mをa[j]に代入する
・m=6なので、a[5]=6となる

44ステップ:jをj+1にする
・j=5が+1されて、j=6になる

45ステップ:jとnを比較する
・j=6,n=5なので、jはnより大きい
→ YESへ進む

46ステップ:iをi+1にする
・i=3が+1されて、i=4になる

47ステップ:iとn-1を比較する、
・i=4,n=5なので、iはn-1より小さい
→ NOへ進む

48ステップ:jにi+1を代入する
・i=4なので、j=5となる

49ステップ:a[i]とa[j]を比較する
・i=4,j=5なので、a[4]とa[5]を比較する
・a[4]=8,a[5]=6なので、a[4]がa[5]より大きい
→ YESへ進む

50ステップ:a[i]をmに代入する
・a[4]=8なので、m=8となる

51ステップ:a[j]をa[i]に代入する
・a[5]=6なので、a[4]=6となる

52ステップ:mをa[j]に代入する
・m=8なので、a[5]=8となる

53ステップ:jをj+1にする
・j=5が+1されて、j=6になる

54ステップ:jとnを比較する
・j=6,n=5なので、jはnより大きい
→ YESへ進む

55ステップ:iをi+1にする
・i=4が+1されて、i=5になる

56ステップ:iとn-1を比較する
・i=5,n=5なので、iはn-1より大きい
→ YESへ進む

57ステップ:a[1]~a[n]を出力する
・アルゴリズムを実行することで、a[1]~a[5]の値は、   
 a[1]=2、a[2]=3、a[3]=5、a[4]=6、a[5]=8 となる

58ステップ:END


出力される a[5]の値は、"8"となる。
よって、正しいものは「5」となる。

参考になった数0