平成30年秋期午後問8
トマさん
(No.1)
https://www.fe-siken.com/kakomon/30_aki/pm08.html
変数priorityが計算の優先度を示す配列だというのをどこで気づけるのでしょうか?
解説だとpriorityの意味が優先度を表す英単語だからと説明されていますが、priorityの意味がわからなかった場合、トレースするしかないのでしょうか?変数の役割一つ調べるためだけにトレースするのは時間がもったいないと思ったのですが他の方法はあるのでしょうか?
変数priorityが計算の優先度を示す配列だというのをどこで気づけるのでしょうか?
解説だとpriorityの意味が優先度を表す英単語だからと説明されていますが、priorityの意味がわからなかった場合、トレースするしかないのでしょうか?変数の役割一つ調べるためだけにトレースするのは時間がもったいないと思ったのですが他の方法はあるのでしょうか?
2022.11.05 16:28
nsさん
★FE シルバーマイスター
(No.2)
Priorityの値の変化に関わる部分だけ見ていけば、真面目にトレースしなくても分かりそうかな、と思いました。
①、②の部分では、足し算か引き算ならnest+1の値が入る、掛け算か割り算ならnest+2の値が入ることが分かります。勘が良ければこの時点で「先に計算する部分でpriorityの値が高くなるのでは?」と気付くかもしれません。
また、nestの値について考えると、③、④の部分で、()の中に入ると10増え、外に出ると10減ることが分かります。
足し算・引き算:+1
掛け算・割り算:+2
()の中:+10
ということが見え、算数の計算順序を知っていれば、「priorityの値が高い部分から先に計算する」ということが見えてくるかと思います。
①、②の部分では、足し算か引き算ならnest+1の値が入る、掛け算か割り算ならnest+2の値が入ることが分かります。勘が良ければこの時点で「先に計算する部分でpriorityの値が高くなるのでは?」と気付くかもしれません。
また、nestの値について考えると、③、④の部分で、()の中に入ると10増え、外に出ると10減ることが分かります。
足し算・引き算:+1
掛け算・割り算:+2
()の中:+10
ということが見え、算数の計算順序を知っていれば、「priorityの値が高い部分から先に計算する」ということが見えてくるかと思います。
2022.11.05 19:51
boyonboyonさん
★FE シルバーマイスター
(No.3)
問題文を読みながらの自分の思考を述べます。
を見て、(思考)この計算をやらせるには、計算の順序(優先度)を考えなければならないな。
と思い、問題を読み進めると、
とありますので、(思考)計算に必要な情報→数値、演算子、計算の順序(優先度)、これを配列か変数に設定するんだな。
と思い、さらに読み進めると
とあり、さらに図1を見て、
(思考)Priority[] ってのが、計算の順序(優先度)を表しているな。
みたいな感じで考えます。ようするに、
計算の順序(優先度)を考えなければならないのは、式を見て思いつきます。
それをアルゴリズムでどうやって表現するのかなと考えながら読みます。
>例1: 2×(34-(5+67)÷8)
を見て、(思考)この計算をやらせるには、計算の順序(優先度)を考えなければならないな。
と思い、問題を読み進めると、
>受け取った整数式を解析し,計算に必要な情報を配列及び変数に設定する。
とありますので、(思考)計算に必要な情報→数値、演算子、計算の順序(優先度)、これを配列か変数に設定するんだな。
と思い、さらに読み進めると
>計算に必要な情報を配列 Operator[ ],Priority[ ],Value[ ] 及び変数 OpCnt に設定する。
とあり、さらに図1を見て、
(思考)Priority[] ってのが、計算の順序(優先度)を表しているな。
みたいな感じで考えます。ようするに、
計算の順序(優先度)を考えなければならないのは、式を見て思いつきます。
それをアルゴリズムでどうやって表現するのかなと考えながら読みます。
2022.11.05 20:21
jjon-comさん
★FE ゴールドマイスター
(No.4)
> 変数の役割一つ調べるためだけにトレースするのは
> 時間がもったいないと思ったのですが他の方法はあるのでしょうか?
その「他の方法」のうち、もっとも基本的かつもっとも効果的なのが「英単語の意味がわかる」ことなのですから、質問自体が本末転倒だと思いました。
今回の問題文に登場する次のような変数名・関数名は、
compute(), expression, operator, priority, value, nest,
ExpLen, OpCnt, priLow, priHigh,
chr, i, ip, int()
コンピュータにとっては、そう命名することに意味はなく、
次の変数名・関数名に置き換えてもまったく同じに正常実行できます。
xxxxxxx(), xxxxxxxxxx, xxxxxxxxx, xxxxxxxx, xxxxx, xxxx,
xxxXxx, xxXxx, xxxxxx, xxxxxxx,
xxx, x, xx, xxx()
純粋にアルゴリズムの読解力を判定したいのであれば
後者のような変数名・関数名でコーディングしてもよいところを、
出題者はそうしていないのですから、
・受験者は、変数名・関数名をヒントとして活用してかまわない
・受験者は、変数名・関数名をヒントにできるだけの知識を持つべき
だという意思の表れでしょう。
質問者がこれまでの試験勉強において、英語の意味をイメージできないまま過去のアルゴリズム問題に挑戦し続けてきたのであれば、
先に英語の意味を調べて、その知識を基にプログラムコードを読むように、勉強方法を変えるとよいでしょう。
そうすることで、過去問題の理解も早まり、より多くの過去問題に挑戦できるでしょう。そのような訓練を経ることで、回答No.2・No.3のようなアルゴリズムの読解力も養われるように考えます。
2022.11.06 00:12
トマさん
(No.5)
解答ありがとうございます!
一応試験日まで、英単語も勉強しておきます。
また、nsさんのような考え方で導く方法も参考にしたいと思います。
一応試験日まで、英単語も勉強しておきます。
また、nsさんのような考え方で導く方法も参考にしたいと思います。
2022.11.06 15:32
まきさん
(No.6)
ただ設問を見るとが分からなくなるんですよね。特にここのabは
どうやって求めるのって分からなくなって・・・・・・悔しいばかりです。
投げ出したくもなります。慣れなのでしょうか?
どうやって求めるのって分からなくなって・・・・・・悔しいばかりです。
投げ出したくもなります。慣れなのでしょうか?
2022.11.07 22:43
広告
返信投稿用フォーム
スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。
広告