平成21年秋期午後問8  c,dについて

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
くにおさん  
(No.1)
https://www.fe-siken.com/kakomon/21_aki/pm08.html

f = anxn+an-1xn-1+…+a1x+a0
d = bn-1xn-1+bn-2xn-2+…+b1x+b0

f ←  a[n] × x  +  a[n-1] 
d ←  □□□□□□□□□□
■k:n-2 , k>=0 , -1
| f ←  f × x + a[K]
| d ←  d × x + □□□□□□□□□


cは、
anxn+an-1xn-1  →  a[n] × x  +  a[n-1] に対して
bn-1xn-1+bn-2xn-2    →  b[n-1] × x  +  b[n-2] の選択肢、カが
dは、
f ←  f × x + a[K]
d ←  d × x + b[k-1]  の選択肢、アが

が入るように思えるのですがなぜ違うのでしょうか?
2022.08.17 13:45
nsさん 
FE シルバーマイスター
(No.2)
この問題は1行上の式を見て同じ様な式を入れればOK、という問題ではありません。
きちんとトレースすれば違うことが分かるはずです。

簡単にするために二次方程式(n=2)として考えましょう。
配列a = {a0, a1, a2}
配列b = {(a1 * 1), (a2 * 2)}
となります。
最終的に
f = a2 * x^2 + a1 * x + a0
d = a2 * 2 * x + a1 * 1
となる必要があります。

13行目
f <- a[n] * x + a[n-1]ですから、この時点で f = a2 * x + a1 です。

14行目
正答の場合
d <- b[n-1]ですから、この時点で d = a2 * 2 です。
誤答の場合
d <- b[n-1] * x + b[n-2]ですから、この時点で d = a2 * 2 * x + a1 * 1 です。

ループ
k = n-2 = 0から始まり、継続条件がk >= 0ですから、k = 0として1周のみ実行されます。

16行目
f <- f * x + a[k]ですから、
f = (a2 * x + a1) * x + a0
  = a2 * x^2 + a1 * x + a0
となります。

17行目
正答の場合
d <- d * x + b[k]ですから、
d = (a2 * 2) * x + a1 * 1
  = a2 * 2 * x + a1 * 1
となります。
誤答の場合
d <- d * x + b[k-1]ですから、
d = (a2 * 2 * x + a1 * 1) * x + b[-1]
※b[-1]となってしまうため計算できません

直接答えに結び付くわけではありませんが、ループに「k:n-2 , k>=0 , -1」と記載がある以上、k=0で処理が実行されるはずです。
これが頭にあれば、ループ内にb[k-1]という表記が出てくるはずがない(すなわち、空欄dは"ア"ではない)、と気付くことができます。



余計なお世話ですが、多項式の記載はもう少し工夫しないと読めません。今回は問題文の書き写しなので何とかなりましたが。
f = anxn+an-1xn-1+…+a1x+a0
d = bn-1xn-1+bn-2xn-2+…+b1x+b0
これがどういう式なのかすぐに判別できますか?
2022.08.17 18:49
くにおさん  
(No.3)
ご回答ありがとうございます
記載の件、ご指摘のとおりだと思います

わかりやすい解説でやっと理解できました。
ところで、再度お聞きしたいのですが、

>配列a = {a0, a1, a2}
>配列b = {(a1 * 1), (a2 * 2)}

配列bについてですが、
配列b = {(a0 * 0), (a1 * 1), (a2 * 2)}

配列b = {(a1 * 1), (a2 * 2)}
という認識でいいのでしょうか?

また、
>最終的に
>f = a2 * x^2 + a1 * x + a0
>d = a2 * 2 * x + a1 * 1
>となる必要があります。


b1 = a2 * 2
b0 = a1 * 1のため

d = b1 * x + b0
としてから、設問のc,dを考えても
問題ないのでしょうか?
2022.08.18 12:22
nsさん 
FE シルバーマイスター
(No.4)
> 配列bについてですが、
> 配列b = {(a0 * 0), (a1 * 1), (a2 * 2)}
> ↓
> 配列b = {(a1 * 1), (a2 * 2)}
> という認識でいいのでしょうか?
質問の意味がよく分からないです。
なんとなく認識を間違えていそうな感じはしますが・・・

> d = b1 * x + b0
> としてから、設問のc,dを考えても
> 問題ないのでしょうか?
問題の有り無しで言えば問題ありません。
なぜなら、〔アルゴリズム2の説明〕(3)②にあるように、そもそもの定義が
d = b(n-1) * x^(n-1) + b(n-2) * x^(n-2) + ... + b1 * x + b0となっているからです。
2022.08.19 22:43
くにおさん  
(No.5)
この投稿は投稿者により削除されました。(2022.08.20 12:08)
2022.08.20 12:08
くにおさん  
(No.6)
nsさん返答ありがとうございます。
どうやら認識が間違っているみたいですね。再度お聞きします。

>質問の意味がよく分からないです。
>なんとなく認識を間違えていそうな感じはしますが・・・

2次方程式(n=2)で考えるため、
配列a = { an , an-1 , an-2 }

配列a = { a2 , a(2-1), a(2-2) }

配列a = { a2 , a1 , a0 }



配列b = {(( an ) * ( n )), (( an-1) * ( n-1 )), (( an-2) * ( n-2 ))}

配列b = {(( a2 ) * ( 2 )), (( a(2-1)) * ( 2-1 )), (( a(2-2)) * ( 2-2 ))}

配列b = {( a2 * 2 ), ( a1 * 1 ), ( a0 * 0 )}

配列b = {(a2 * 2),(a1 * 1)}
ということかと思ったのですが、

>配列a = {a0, a1, a2}
>配列b = {(a1 * 1), (a2 * 2)}

こちらのほうはどのように出されたのでしょうか?
2022.08.20 12:09
boyonboyonさん 
FE ブロンズマイスター
(No.7)
スレを拝見していて、スレ主さんは、配列と係数を混同されているような気がしたので
書き込みをさせていただきます。

f(x)=a2*x^2+a1*x+a0     配列 a は  {a0,a1,a2} 
f'(x)=2*a2*x+a1  になり 係数を b を使って表すと  f'(x)=b1*x+b0
配列 b は  {b0,b1} なので、これを 係数の a を使って表せば  {a1,2*a2}

配列を要素ごとに書くと
a[0]=a0 a[1]=a1 a[2]=a2
b[0]=b0=a1 b[1]=b1=2*a2
a1,a2,a3,b0,b1 は、方程式の係数です。

こんな説明で如何でしょうか。的外れだったらご容赦ください。

下付の数字を使えないので、掲示板で表現するのは難しいですね。

スレ主さんの最初の疑問は、
2つの式の後ろを揃えて書くと

((a3*x+a2)*x+a1)*x+a0
((     b2)*x+b1)*x+b0

なので、初期値が  f←a3*x+a2  d←b2 になります。
ループの中は、一緒ですね。
2022.08.20 18:35
くにおさん  
(No.8)
boyonboyonさん
返答ありがとうございます。

配列と係数はもちろん別ものとして考えております。

再度、No.6とまったく同じ質問になっちゃいますが、2次元配列で考えると

>配列a = {a0, a1, a2}
>配列b = {(a1 * 1), (a2 * 2)}

配列a,bの値がなぜこのような値になるのか?

No.3やNo.6のように単純に二次元配列として当てはめるだけでは、間違っているということをNo.4で指摘を受けましたので再度どの出すのかが知りたいです。

重ね重ねになりますがよろしくおねがいします
2022.08.23 16:41
nsさん 
FE シルバーマイスター
(No.9)
> 配列a,bの値がなぜこのような値になるのか?
これについてはboyonboyonさんの以下の記述が全てです。
> f(x)=a2*x^2+a1*x+a0     配列 a は  {a0,a1,a2} 
> f'(x)=2*a2*x+a1  になり 係数を b を使って表すと  f'(x)=b1*x+b0
> 配列 b は  {b0,b1} なので、これを 係数の a を使って表せば  {a1,2*a2}

No6の投稿を見て感じたことですが、係数の順番と配列への格納順を混同していませんか?
問題文の図2にあるように、配列への格納順と多項式の係数の順番は逆になっています。
boyonboyonさんの「配列と係数の混同」というのもこれを指しているような気がします。

また、No8に二次元配列という言葉が何度か見られますが、aやbは二次元配列ではないですよ。
二次元配列というのは以下のようなものを指します。
0 1 2
3 4 5
6 7 8
a[0][1](= 1)、a[2][1](= 3)のように添え字を二つ使用してアクセスします。
2022.08.23 18:37
くにおさん  
(No.10)
ご返答ありがとうございます

>これについてはboyonboyonさんの以下の記述が全てです。
> f(x)=a2*x^2+a1*x+a0     配列 a は  {a0,a1,a2} 
> f'(x)=2*a2*x+a1  になり 係数を b を使って表すと  f'(x)=b1*x+b0
> 配列 b は  {b0,b1} なので、これを 係数の a を使って表せば  {a1,2*a2}

この記述がすべてでしたらダラダラ違うことも書くのではなくて端的にわかりやすくこの部分を書いていただかないとわけがわかりません



>配列への格納順と多項式の係数の順番は逆になっています。
>boyonboyonさんの「配列と係数の混同」というのもこれを指しているような気がします。


さすがに、順番が逆なのと、配列と係数がゴチャゴチャになっているのとでは全然意味が違いますし、さすがにそれを指しているのではないと思います。同じ意味なら誰にも伝わらないと思います。



また、No8に二次元配列という言葉が何度か見られますが、aやbは二次元配列ではないですよ。
>二次元配列というのは以下のようなものを指します。

0 1 2
3 4 5
6 7 8

これは、何ですか?二次元配列ですか?(笑)


あとは、わからないみたいなので自分で調べることにします。ありがとうございました
2022.08.25 15:16

返信投稿用フォーム

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

その他のスレッド


Pagetop