プロが教える店舗&オフィスのセキュリティ対策術

私は現在基本情報技術者試験を受けるために勉強しています。

勉強の一貫として、過去の試験問題を解いているのですが、
平成18年度午後の問6の問題(↓)が、どうしてもわかりません。
ネットで解説など探したところ、発見はしましたが
どうしてこの答になるのかといったことは結局わかりませんでした。

というのも、この下記の解説は、問題を理解している人が見ればわかるかもしれませんが、
私のように正答を導き出してすらいない者ではついていけないと感じたからです。


もっと詳しい解説がないものかと探したのですが、今のところ見当たりません。


そこで、どなたかこの問題の解説を詳しくしていただける方がいないものかと今回質問をさせていただきました。


どなたかこの問題の解説をしていただけないでしょうか。

問題
http://www.rs.kagu.tus.ac.jp/infoserv/j-siken/H1 …

解説
http://www5f.biglobe.ne.jp/~pafu/kihonweb/kaic/c …

ご回答よろしくお願いいたします。

A 回答 (5件)

失礼ながら、逆に教えてください。


「この解説のどこが判らないのでしょうか?」
・ある条件(a)のときに、単純に直線を描画している。 問題文の中に重要なヒントが有る。
・式(b)は解説以上の説明は出来ません。
・問2も問題文の中に重要なヒントが有る。「中央の線分を一辺とする正三角形を始点から終点に向かって左側に作り」
    • good
    • 0

見たことある問題だと思ったらちょうど私が受けたときの問題でした。


平成18年度春ですね。
細かいところですが年度を書くなら一緒に春か秋か書いときましょう。(年2回なのはご存知ですよね?)

ところで、#1の方と同じ補足ですが、どこが分からないのでしょうか?
解説のとおり特に引っ掛けの類もなく素直な問題です。提示されている解説にも特に不適切な箇所は見当たりません。

出題の意味するところが分からないということでしょうか?
(ちょうど私があなたの質問に抱く疑問のように)
幸い問題文は適切です。まずは解説文は置いておいて、問題文を良く読んでください。音読しても良いですし、分からない用語は調べてください。

どこが分からないのかすら分からないとしたら、やはり基礎を一通り勉強しなおすしかないです。あせらずに基礎から積み上げることが大切です。

この回答への補足

1の方、2の方、ご指摘ありがとうございます。
今度からは春期か秋期か書き忘れないように気をつけます。

どこがわからないのかということですが、2の方が仰るとおり、
どこがわからないのかもよくわかっていないような気がします。

お二方のお言葉で、問題文をよく理解できるまで読み込むことからもっとやっていかなければと思いました。

ありがとうございます。

補足日時:2008/09/19 20:15
    • good
    • 0

ではまず[解説の解説]から。



>[a]の条件が真であれば、一回で処理を終えている。
プログラムの8~10行のこと。
9行目の[DrawLine( x1, y1, x2, y2 );]は問題文(2)にあるとおり線を引く関数ですから、[a]が真なら★(x1,y1)~(x2,y2)まで線を引いて★この関数は終了します。

>偽であれば処理はさらに分かれていくのだが
>よくみると呼ばれている関数は自分自身である。
プログラムの11~20行のこと。
呼ばれている関数云々は17~20行目です。このKochCurve(・・・)というメソッドはどこかというとプログラムの5~22行目のまさに自分自身に他なりません。

>そのことから[a]の条件で、真であれば処理が終了ということは
>「dim」が繰返し回数が0であることがわかる。
これがちょっと飛躍しているかなと思いました。
解説とは違うのですが、まず回答群にはdimの式しかありません。
dimって何?と問題文を見ていくと問題文(3)に、
dimは[(1) の説明での繰返し回数]と書いてあり、さらに
[0 のとき図1の (1) が描画される。]
とあります。
上の[図1の (1) が描画される。]は
(x1,y1)~(x2,y2)まで線を引く・・・
つまり上で★印で囲んだ処理です。dimが0のとき★印で囲んだ処理を行って終わる。ということからdimが0の時真になる条件が[a]になりそうです。
ただしこの時点ではdimが0の時真になる条件は、ア・イ・オの3つあり絞れません。
次に問題文(4)の[このプログラムを実行すると,図1の (2) に示すような図形が描画される。]に注目します。[このプログラムを実行する]というのはmain関数を実行するのと一緒ですから、プログラム25行目の
KochCurve( 0, 180, 180, 180, 1 );
を実行すると[図1の (2) に示すような図形が描画される。]ということになります。
プログラム5行目を見ると上記はdim=1ですね。
また25行目を
KochCurve( 0, 180, 180, 180, 2 );
に変えると[(3) に示すような図形が描画される]ともあります。このときdim=2です。

さて、材料がそろいました。
dim=0 -> 図1の(1) -> 条件[a]が真
dim=1 -> 図1の(2) -> 条件[a]が偽
dim=2 -> 図1の(3) -> 条件[a]が偽
これを満たす条件[a]はアしかないのです。
イはdim=1の時、真になってしまい、
オはdim=2の時、真になってしまいます。

とりあえず設問1について解説しました。
どうでしょうか?
このほうがわかりやすければまた書きます。

あと参考URLの脱出条件というのを理解すれば、もっと簡単になります。

参考URL:http://ja.wikipedia.org/wiki/%E5%86%8D%E5%B8%B0
    • good
    • 0
この回答へのお礼

設問1だけで、こんなに詳しく解説してくださってありがとうございます。

私がわからないと言った解説は、説明が短すぎて理解ができなかったのではと思います。

できればぜひ次の設問の解説ももお願いしたいと考えております。
よろしくお願いいたします。

脱出条件というものも、勉強してみます。

お礼日時:2008/09/19 20:26

では設問1[b]を。

提示された解説とは違うのですが。

bはプログラム11行目から20行目の処理が何であるのかがわかれば自然に出てきます。

前回の設問1[a]で、dim=0の場合は[a]が真になり、9行目が実行されて終了してしまうことが分かりました。では[a]が偽の時、dim=1について考えます。

前回も書きましたが、問題文(4)からdim=1の時、[図1の (2) に示すような図形が描画される]とあります。
そこで図1の(2)を見てみると、ご丁寧に(x1,y1)~(x5,y5)の5つの点が書かれています。
もう一度プログラムを見ると・・・
11~12行目で(x3,y3)を
13~14行目で(x5,y5)を
15~16行目で(x4,y4)を求めているのがおわかりになると思います。
さらに17行目から20行目で4つのコッホ曲線を描いている。

その4つの曲線とはKochCurve(・・・)の最初の4つの引数から、それぞれ
(x1,y1)-(x3,x3)
(x3,y3)-(x4,x4)
(x4,y4)-(x5,x5)
(x5,y5)-(x2,x2)
つまり図1の(2)の線を左から右へ描いているのがおわかりになりますでしょうか。

では[b]は何になるでしょうか?

図1の(2)では上記の4つの線は直線です。
直線を引いて終わるdimは?そう[a]でやったdim<=0の時です。
これによってdimが1の時、[b]が0以下(b<=0)ということになり、
アかイに絞られます。(ここは提示された解説と同じですね)

アとイの違いは両方とも同じ値(dim-1)を返すが、アは返してからdimにdim-1を代入しているということです。つまり最初がdim=1で仮に[b]がアだとすると17行目(0),18行目(-1),19行目(-2),20行目(-3)となります。
では代入する必要があるのか、ないのか?ということになります。

これは図1の(2)と(3)を見ればわかります。4つのコッホ曲線はおなじ繰り返し回数で描けば良いことは一目瞭然です。特にアでは図1の(3)が描けません。

したがってイが正解となります。
    • good
    • 0

設問2です。



>よく見ると図2の図形は、図1の(3)の組み合わせであることがわかるだろう。
図2の図形は図1の(3)を4つあわせたものだと気がついたでしょうか。
解答群にもKochCurve(・・・)が4行のものが並んでいますのですぐわかったと思います。

dimは変化がないので、純粋に書き順の問題となります。

先ほどの回答の中で[図1の(2)の線を左から右へ描いている。]と書きました。その時上側に三角が出来ています。
これを問題文中では#1さんの出されているようなヒントで表現しています。

「左から右へ引いたときに上側に三角」「始点から終点へ向かって左側に三角」

と見ていけば4つのコッホ曲線にそれぞれどんな(x1,y1)-(x2,y2)を与えれば良いのかわかると思います。

以上3つの回答を、いささか冗長のような気もしますが、よりイメージしやすい、より処理を追いやすいかと思い、どちらかというと再帰に触れずに書きました。

再帰処理のイメージをつかむと、提示された解説のような導き方もできると思います。
    • good
    • 0
この回答へのお礼

お返事がおそくなりすみません。
まだまだ問題の読み込みが足りなかったようで、詳しい解説本当にありがとうございました。

お礼日時:2009/01/21 21:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!