FC2ブログ

Excelじゆうちょう

Excelのお絵描きツール『りっぷ2(りっぷつぅ)』のサポートページ、まずは「はじめに」をご覧ください。 [NewEntry] [Admin]

記事更新カレンダー

09 « 2018-10 « 11
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -

やたらに多いカテゴリ

比較的新しい記事

新しいコメント

ありがたいブログ拍手

拍手コメント一覧(拍手はしない)

さみしいトラックバック

申し訳ないプロフィール

申し訳ない

管理人  [ 申し訳ない ]

pxivもやってます
リンクの一番上からのぞきに来てください
※閲覧にはユーザー登録が必要です

RSSってなんぞ?

広告は消せないらしい

FC2Ad

        --------       スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

        2010-05-28       基本情報(平21秋)午後問11

お久しぶりです、基本情報技術者試験の午後問を解説します。
この前終了しました宣言をしたのですが、おめおめと帰ってまいりました。
今更ながらJavaの問題を解説したいと思います。

↓平成21年秋季基本情報技術者試験午後問題問11↓
基本情報(平21秋)午後 49
基本情報(平21秋)午後 50
基本情報(平21秋)午後 51
基本情報(平21秋)午後 52
基本情報(平21秋)午後 53
基本情報(平21秋)午後 54
基本情報(平21秋)午後 55

【設問1】
プログラムには流れがあります。
そして、Javaのプログラムはいくつものクラスにカプセル化されており、必要なところでそれぞれのクラスが呼び出されます。
よって、プログラムの流れは上から順番にではなく、あちこちのクラスを行ったり来たりします。
本解説では、[a]~[f]の順番にとらわれずプログラムの流れに沿って埋めていきます。

プログラムの始まりは、CellPhonePlannerクラス[プログラム6]のmainメソッドです。
まず、int型変数のtestData配列に値を代入しています。
これは表3にあるテスト用の利用状況の値ですね、この4パターンについておすすめの利用プランを導き出します。
次に、CellPhonePlanクラス型変数のrecommendedに何かしらを代入して、printfで書式化して結果を表示しています。
どうやら、このrecommendedにすべての結果が詰まっているようです。

それではこのrecommendedはというと、20行くらい上のgetRecommendedPlanメソッドの戻り値になります。
…と、その前に確認しておかなければならないことがあります。

クラス変数recommendedに代入していますが、CellPhonePlanクラスをNewしてませんよね?
その訳はクラスのフィールド部分にありました。
このクラスにはStatic変数として、CallingPlanクラス型変数の配列とPacketPlanクラス型変数の配列、そしてCellPhonePlanクラス型変数の配列がインスタンス化されています。
これらはクラス変数であり、CellPhonePlannnerクラスが初めてインスタンス化された時に生成されます。
つまり、mainメソッドが呼び出された時点ですでに用意されていたのです。

順番が入れ替わってしまいましたが、これらの配列変数について確認しておきましょう。

CallingPlanクラス型変数の配列には、その引数からして、通話料金の料金プランAとBのオブジェクトが格納されています。
(プラン名, 基本料金, 無料通話分, 1分あたりの通話料金)

PacketPlanクラス型変数の配列には、その変数からして、パケット料金の割引サービスが格納されています。
Measuredは(100パケットあたりのパケット料金)
Tieredは(サービス名, サービス料金, 無料パケット数, 100パケットあたりのパケット料金)

CellPhonePlanクラス型変数の配列には、その引数からして、通話料金を計算するオブジェクトとパケット料金を計算するオブジェクトが格納されています。
(CallingPlanクラス型変数, PacketPlanクラス型変)

それぞれのクラスについて見ていきます。

CallingPlanクラス[プログラム2]は、本文の解説にもあるように、通話料金を計算するクラスです。
この中で通話料金(整数型)の戻り値をもつものは、calculateChargeメソッドです。
基本料金であるbasicChargeと通話料金であるcallingChargeを足し合わせて、最終的に請求される通話料金を返します。
[b]の下の行で、通話料金が0になっています。
これは、実質の通話料金が無料通話分に収まったことを意味します。
余った無料通話分は還元されないんですね。
よって[a]は実質の通話料金、[b]は無料通話分より[a]が安いかどうかを判定しています。

■a、イ
■b、ア

[c]について考えます。

こんなところにくっつくのはextendsかimplementsくらいしかありません、選択肢でもそうなってます。
しかも、本文には親切にも「インタフェースPacketPlanは、パケット料金を計算するインタフェースである」と記載されています。

■c、エ

ちなみに、インタフェースをインタフェースにextendsすることはできるんですけどね。

Tieredクラス[プログラム5]は、パケット料金の割引サービスを利用した場合の料金を計算するクラスです。
インタフェースから実装したCalculateChargeメソッドでパケット料金を返します。
if (packets > allowance)で使用したパケットが無料パケット分より多いかどうかを判定し、[d]の行で差分を加算しています。
ここで出てくるallowanceは無料パケット分にあたりますので、その分を差し引いて、さらに100パケット単位に切り上げるために99を加えます。
int型ですからね、切り捨てられてしまうんです。

■d、エ

さて、これでようやく通話料金とパケット料金が計算できるようになりました。
話は[プログラム6]にあるCellPhonePlanクラス型変数の配列に戻るのですが、ここでは単に両者を足しているだけで空欄もありませんので、説明は割愛します。
話はさらにさかのぼって、getRecommendedPlanメソッドに戻ります。
ここでは、通話時間とパケット数を引数にしてもっともおすすめのプランを返します。
このメソッド中の拡張forループ(VBAでいうところの、For Each文)で、CellPhonePlanクラス型変数の配列を総当たりして一番安いものを判定します。
そのためには、[e]で最高値を設定し、[f]で各ループ中により安いプランがあればそれをおすすめとして設定します。

■e、ウ
■f、エ

【設問2】
いわゆる、ダブル定額を計算するクラスを追加します。
[g]はやはりextendsかimplementsなのですが、ここではPacketPlanインタフェースを実装できません。
インタフェースを実装するには、インタフェースで定義されたメソッドをすべて実装する必要があります。
ですが、TieredBoundedクラス[プログラム7]ではgetNameメソッドが実装されていません。
よって、この場合はクラスの拡張になります。
ダブル定額といえば、無料パケットありのプランに上限金額がくっついたものですよね?

■g、イ

[プログラム7]では、割引サービスを拡張して上限料金を設定しています。
そのために、calculateChargeメソッドをオーバライドしています。
その中で、利用料金が上限料金を超えていた時に補正をかけています。
よって、[h]ではスーパークラスのcalculateChargeメソッドを呼び出して通常の割引サービスの利用料金を算出しています。
そして、その値と[i]とを比較して補正をかけるかどうかを判定しています。

■h、カ
■i、オ



長々とした説明でしたが、最後までお付き合いいただきおつかれさまでした。
一応私はJavaを選択して合格したのですが、その頃は雰囲気で答えていました。
(この頃は、まだ表計算がなかったんです!)

それにしても、なんか簡単じゃない?

噂じゃ表計算は簡単だって聞くのに、この回の問だけなら表計算の方がずっと難しいです。
携帯電話の料金プランなんて、わかりやすいテーマも大きな助けになっています。
やっぱり、回によって当たり外れがあるようです。
できることなら2種類くらい挑めるようにして、やりやすそうなのを選びたいものですね。
スポンサーサイト

        2010-03-03       基本情報(平21秋)午後問13+α

長らくの間おつかれさまでした。
平成21年秋季基本情報技術者試験の午後問の解説は終了いたしました。

私が受けた頃とは大きく様変わりしていて驚きました。
時間を計って取り組んだわけではありませんので何とも言えませんが、問題量が増えていたように感じます。(選択問題が増えたからかも?)
それでも、全問選択式になっていて難易度は格段に下がっています。
いいなあ、私も今受けていればあんまし勉強しなくて済んだのに。(あ、でも落ちてはいませんよ)

今春の試験は4/18(日)、例年通り第3日曜日です。
まだ時間はあります、コツコツ勉強すればきっと合格できます!



【おまけ】
問13のワークシートをExcelで作ってみました。(画像が大きいため、リンクにしています)

勤怠管理
勤務可能調査
出勤割当表
出勤割当表(評価値)

ちなみに、数式が見やすくなるように数式表示([Ctrl+Shift+@(アットマーク)キー])とR1C1参照形式([ツール(T)]→[オプション(O)]→[全般]タブ)で示しています。

ついでに、 表計算ソフトの機能・用語の関数 を、Excel仕様に変換してみました。
さあ、気になる関数を[F1]キーでヘルプしましょう!

[元の関数]:[Excel関数]
合計   :SUM
平均   :AVERAGE
平方根  :SQRT
標準偏差 :STDEVP
最大   :MAX
最小   :MIN
個数   :COUNTA
条件付個数:COUNTIF
整数部  :INT
剰余   :MOD
論理積  :AND
論理和  :OR
否定   :NOT

        2010-03-02       基本情報(平21秋)午後問13

お待たせしました、基本情報技術者試験の午後問を解説します。
以下が問題です、長くて申し訳ないです。(これでもけっこう縮小したんです)

↓平成21年秋季基本情報技術者試験午後問題問13↓
基本情報(平21秋)午後 59
基本情報(平21秋)午後 60
基本情報(平21秋)午後 61
基本情報(平21秋)午後 62
基本情報(平21秋)午後 63
基本情報(平21秋)午後 64
基本情報(平21秋)午後 65
表計算ソフトの機能・用語、その1
表計算ソフトの機能・用語、その2
表計算ソフトの機能・用語、その3

ようやっとここまで、表計算の問題です。
関数名が日本語になっているものの、引数の並びを見ても、列番号が英字表示となっているところやセルの参照形式など、明らかにExcelを意識した問題です。

【設問1】
■a、オ
■b、イ
ペナルティの値を判定します、フローにするとこんな感じです。

正当な理由がある┬(真)→0
        └(偽)→欠勤がある┬(真)→3
                 └(偽)→遅刻または早退がある┬(真)→1
                               └(偽)→0(所定の勤務扱い)

これをIF関数の入れ子で表現します。

IF(正当な理由がある, 0, IF(欠勤がある, 3, IF(遅刻または早退がある, 1, 0)))

正当な理由があるは、F列の勤怠理由に1が入力されていれば真となります。
欠勤があるは、B列の出社予定に1が入力されていて、かつ、出社時刻が空白なら真となります。
遅刻または早退があるは、B列の出社予定に1が入力されていて、かつ、出社時刻が10:00より遅いまたは退社時刻が17:00より早ければ真となります。

■c、イ
12:00~13:00までは昼休みということに注意します。
その計算方法として、12:00までの勤務時間と13:00以降の勤務時間を足し合わせるようにします。
つまり、便宜的に12:00でいったん退社して13:00に出社したようして計算します。
そうしておけば、出勤が午前だけや午後だけになってもひとつの式だけで計算できるようになります。

最小(D4, 12 / 24) - 最小(C4, 12 / 24) + 最大(D4, 13 / 24) - 最大(C4, 13 / 24)
┗━午前の退社━┛ ┗━午前の出社━┛  ┗━午後の退社━┛ ┗━午後の出社━┛
└─────午前の勤務時間─────┘ └─────午後の勤務時間─────┘

【設問2】
[ワークシート:出勤管理票]の(4)にある、評価値を算出します。
経験順位、先々月のペナルティ、先々月のペナルティ順位を、ひとつの値に統合して順位を付けられるようにします。

■d、ウ
7桁の評価値の最上位が出社の可否です。
値が小さいほど出勤の優先度が高くなりますが、そのままだと勤務可能の方が値が大きくなってしまいますので(1 - 勤務可能調査!B3)の部分でビットを反転させています。
その次の[d]には、2番目に優先順位の高いペナルティ順位が入ります。

■e、イ
ペナルティ順位に次いで優先されるのは、前日までの割り当て日数です。
しかし、月初には前日自体がありませんので、3行目に関してのみこれを考慮しません。
よって、[e]には経験順位が入ります。

■f、キ
[f]の式は、2日目以降の計算になりますので、先ほど考慮しなかった前日までの割り当て日数を加えます。

■g、イ
■h、キ(順不同)
出勤者となる条件は以下の通りです。

(1)、その日に出勤可能である
(2)、その日の評価順位が小さい方から5番目以下である

(1)は、出勤可能調査シートの該当セルが1になっていれば真となります。
(2)は、出勤割当表シートのAB~AP列を参照して順位を付ければわかります。

        2010-02-24       基本情報(平21秋)午後問8

お待たせしました、基本情報技術者試験の午後問を解説します。
以下が問題です、長くて申し訳ないです。(これでもけっこう縮小したんです)

はい、問6をとばしています。
解説すると言っておきながら、この問題はうまく説明できる自信がありません、だからとばします。
ごめんなさい、解説は本屋さんで立ち読みしてください。

↓平成21年秋季基本情報技術者試験午後問題問8↓
基本情報(平21秋)午後 33
基本情報(平21秋)午後 34
基本情報(平21秋)午後 35
基本情報(平21秋)午後 36
基本情報(平21秋)午後 37
基本情報(平21秋)午後 38

三次方程式の解のひとつを求める方法について、そのアルゴリズムに関する問題です。
三次方程式とは、以下のグラフのような実数解が最大で3個求まる方程式です。

↓三次方程式↓
三次方程式

三次方程式とはこれまたずいぶん難しいテーマです、一気に解く気が失せてしまいそうです。
ですが、これはアルゴリズムの問題です。
公式の計算方法が示してあり、それをプログラムに置き換えてあげればいいだけです。
公式なんて知らなくても大丈夫、三次方程式だって知らなくても大丈夫です。
極論を言えば「木を見て森を見ず」、設問で問われている部分だけを考えていればこれが何をするアルゴリズムかなんて関係ありません。

【設問1】
■a、イ
x - f / dを次のxにするとあります。
x6の行のdとfをd6とf6と表すと、x6とx7はこうなります。

x7 = x6 - f6 / d6
  = x6 - 7.35277369(-9) / 8.000000
  = x6 - 0.00000000735277369 / 8.000000
  = x6 - ほぼ0

xの値は有効桁6桁を印字しますので、見た目は同じ3.000000でも実際の値は等しくありません。

■b、イ
[アルゴリズムの説明]の(2)をプログラムに起こします。

bn-1 = n * an、bn-2 = (n - 1) * an-1…b1 = 2 * a2、b0 = 1 * a1

[プログラム2の一部]では、上のnをkに置き換えて、kをnから1まで1ずつ減らしながら繰り返し処理をしています。
anはa[n]、bnはb[n]ですので、b[k - 1] ← k * a[k]となります。

■c、エ
[アルゴリズムの説明]の(3)、①と②をプログラムに起こします。
①のfについては行番号13と16に示されていますので、これを参考にしながらdについて考えます。
fとdを比較すると、

f = an * x ^ n + an-1 * (x ^ (n-1)) + an-2 * (x ^ (n-2)) + … + a1 * x + a0
d =        bn-1 * (x ^ (n-1)) + bn-2 * (x ^ (n-2)) + … + b1 * x + b0

fはnから0まで-1ずつ繰り返し、dはn-1から0まで-1ずつ繰り返しとなり、nの開始位置以外は同じ形の式だとわかります。
よって、dはfの式のaをbに置き換えて、an * x ^ nの部分を取り除けばいいわけです。
以上を13行目に適応すると、14行目は・d ← b[n - 1]。
同様に16行目に適応すると、17行目は・d ← d * x + b[k]。

■e、エ
とにかく問題文が非常に難解です、次数が4に増えてしまいました。
まずは、文章の内容を確認しましょう。

前提として、x ^ 4 - 8 * (x ^ 3) + 24 * (x ^ 2) - 32 * x + 16 = 0の解は2の4重解であることがわかっています。
この方程式にプログラム2を適応したところ、解の近似値を求めることができませんでした。
そして、その原因はfの値を計算した際に誤差が発生していたためでした。
では、その誤差とはどういった誤差なのでしょうか?

問題を考える前に、解答群を見てみましょう。

ア けたあふれ
オーバーフローのことです。
例えば、8桁の計算機で億単位の計算ができないように、扱える桁以上の値が発生した時に起こります。

ウ、指数以下けたあふれ
浮動小数点数で起こりうるけたあふれです。
浮動小数点数には仮数部と指数部とがあり、仮数部は桁あふれすることがありません。
というのも、有効数字が4桁で浮動小数点数を問題文と同じ表記をすれば、1234なら1.234(+3)、0.01234なら1.234(-2)、123456なら1.235(+5)といった具合に、値の大小を指数部が吸収して仮数部の桁数は常に一定になっているからです。
ですが、指数部はそうはいきません。
あまりに桁数が大きすぎると、指数部の方でオーバーフローしてしまいます。

エ、丸め誤差
切り捨て、切り上げ、四捨五入のことです。
指数以下けたあふれの例で、123456なら1.235(+5)としましたが、よく見ると下2桁がなくなっています。
仮数部の桁数を一定にするために四捨五入されたのです。

イ、けた落ち
浮動小数点数の計算で、仮数部の計算結果が0に近くなる時に発生します。
例えば、1.235(+5) - 1.234(+5)を計算すると、0.001(+5)は1.000(+2)となります。
これだけなら誤差はありません、問題なのは丸め誤差を含んでいる場合です。
もし、1.235(+5)が123456、1.234(+5)が123412だとすれば、123456 - 123406 = 50が正確な値のはずです。
しかし、丸め誤差のある計算では1.000(+2)は100となり、実に50もの誤差が生じてしまいます。

もうお分かりですね、けた落ちとペアになる誤差は丸め誤差です。
めんどくさいからしませんが、問題の(A)を順番に計算していくと仮数部をはみ出して四捨五入されるところが何ヶ所か見られます。

        2010-02-18       基本情報(平21秋)午後問7

お待たせしました、基本情報技術者試験の午後問を解説します。
以下が問題です、長くて申し訳ないです。(これでもけっこう縮小したんです)

はい、問6をとばしています。
解説すると言っておきながら、この問題はうまく説明できる自信がありません、だからとばします。
ごめんなさい、解説は本屋さんで立ち読みしてください。

↓平成21年秋季基本情報技術者試験午後問題問7↓
基本情報(平21秋)午後 29
基本情報(平21秋)午後 30
基本情報(平21秋)午後 31
基本情報(平21秋)午後 32

問7は、説明の長ったるいただの計算問題です。
途中で眠くなってしまいそうですが、問題文をしっかりと読んでおけばどの値を使って計算するのかがおのずと見えてきます。
回答欄も多めですが、めんどくさがらずがんばりましょう。

【設問1】
■a、ア
資材調達システムを導入した後、いつ元が取れるのかを求めます。
元が取れるとはこうですね。
システムによって得をした額 > システムへの投資額

効果は得をした額、開発費は投資額、運用費も投資額です。
効果 > 開発費 + 運用費

■b、ア
実際に計算してみます。

効果(1年あたり) = 資材調達費(1年あたり) * 2%
        = 2000 * 0.02
        = 40(百万円)
開発費(一定額) = 30(百万円)
運用費(1年あたり) = 2(百万円)
効果 * X(年) > 開発費 + 運用費 * X(年)
40X > 30 + 2X
38X > 30
X > 30 / 38
1年目にして元が取れてしまいます、すばらしいシステムですね。

【設問2】
■c、ア
営業支援システムを導入すると、いくらくらい得をするかを考えます。
このシステムによって、製品の売れる個数が3%増加します。
ですが、製品の原価や価格はそのままですので、もうかる額は売れた個数に比例します。

導入前のもうかり = 売上高 - 売上原価
         = 4000 - 3000
         = 1000(百万円)
導入後のもうかり = 導入前のもうかり * 103%
         = 1000 * 1.03
         = 1030(百万円)
導入に伴うもうかり差分 = 導入後のもうかり - 導入前のもうかり
            = 1030 - 1000
            = 30(百万円)

効果は得をした額から投資額を差し引いた値でしたね、本文より投資額は販管費の12百万円です。

効果 = 30 - 12
   = 18(百万円)

■d、ア
資材調達費は、売上原価に影響します。

■e、ウ
労務費は売上原価ではありません、販管費にあたります。
表2の説明にもあるように、販管費は資材の調達や製品製造以外での費用です。
これが5百万円削減されましたので、得をした額は5百万円になります。
そして、投資額は減価償却費と運用費の合計ですので、2百万円です。

効果 = 5 - 2
   = 3(百万円)

■f、イ
資材調達システムは売上原価を減少させますが、だからといって製品を安く売ったりはしません。
この見積もりでは、販売量は変わらない、売上高はそのままとして考えます。
つまり売上高に占める売上原価の割合が減少します、要するにもうかるようになります。

■g、イ
営業支援システムの導入で、製品が多く販売できるようになります。
資材調達システムの導入で、製品を安く製造できるようになります。
安く造ってたくさん売る、相乗効果が大いに期待できます。

ほんっとに素晴らしすぎるシステムですね。

古い記事  | HOME | 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。