平成29年 春期 基本情報技術者 午後 問11
問11 Java次の Java プログラムの説明及びプログラムを読んで,設問1,2に答えよ。 〔プログラムの説明〕 電気料金プラン(以下,プランという)を比較するためのプログラムである。 電気料金は,基本料金,及び電気の使用量(以下,電力量という)から算出される電力量料金から成る。 電力量の単位は,キロワット時(kWh)である。電力量料金を算出するための1 kwh 当たりの 料金(以下,料金単価という)は,電力量に応じて段階的に変わる。 プラン A 及びプラン B の料金表を表1に示す。
例えば,プラン A で,使用した電力量が 200.5 kWh のとき,120 kWh 分に対して 19.62 円/kWh, 残りの 80.5 kWh に対して 26.10 円/ kWh の料金単価が適用される。 (1) 抽象クラス TierTable は,段階的に変化する値のペアをテーブルとして表現する。 値は,型 double で与えられる。 A 抽象メソッド map は,引数で与えられた数値を別の数値に変換して返す。 (2) クラス TieredRateTable は,料金単価のテーブルを表す。 A メソッド map は,引数で与えられた電力量から電力量料金を計算し,その値を返す。 A メソッド getName は,プラン名を返す。 B メソッド getPrice は,引数で与えられた電力量から電力量料金を計算し, その値と基本料金の合計を型 int の数値で返す。このとき,小数点以下は切り捨てられる。
〔プログラム1〕 a class TierTable { final double[][] pairs; TierTable(double.... tiers) { if (tiers.length % 2 == 1) { throw new IllegalArgumentException("不正な長さ:" + tiers.length); } double[][] a = new double[tiers.length / 2][]; for (int i = Ø, i < tiers.length: i += 2) { a[ b ] = new double[] { tiers[i], tiers[i + 1] }; } this. pairs = a; } abstract double map(double amount); } 〔プログラム2〕 class TieredRateTable extends TierTable { TieredRateTable(double... tiers) { super(tiers); } double map(double amount) { double charge = Ø; for (int i = Ø; i < pairs.length; i++) { if (i + 1 < pairs.length && amount > pairs[i + 1][Ø]) { charge += (pairs c - pairs d ) * pairs[i][1]; } else { charge += (amount - pairs[i][Ø]) * pairs[i][1]; break; } } return charge; } } 〔プログラム3〕 class RatePlan { private final String name; private final doulte basicCharge; private final TierTable pricingTiers; RatePlan(String name, double basicCharge, TierTable pricingTiers) { this.name = name; this.basicCharge = basicCharge; this.pricingTiers = pricingTiers; } String getName() { return name; } int getPrice(double amount) { return (int) (basicCharge + pricingTiers.map(amount)); } } 〔プログラム4〕 public class Main { public static void main(String[] args) { RatePlan planA = new RatePlan("プランA", 1123.3Ø, new TieredRateTable(Ø, 19.62, 12Ø, 26.1Ø, 3ØØ, 3Ø.12)): RatePlan planB = new RatePlan("プランB", 1Ø4Ø.1Ø, new TieredRateTable(Ø, 18.17, 12Ø, 24.17, 3ØØ, 27.77)), double amount = 543.Ø; int d = planA.getPrice(amount) - planB.getPrice(amount); if (d < Ø) { System.out.printf("%sが%d円安い\n", planA.getName(), -d); } else if (d > Ø) { System.out.printf("%sが%d円安い\n", planB.getName(), d); } else { System.out.println("両プランで同額"); } } } 設問1 プログラム中の に入れる正しい答えを, 解答群の中から選べ。 a に関する解答群 エ protected オ public カ static b に関する解答群 エ i / 2 オ i / 2 + 1 カ i + 1 c,d に関する解答群 エ [i][Ø] オ [i][1] カ [i][i + 1]
プログラム5は,割引率を求めるためのクラス DiscountTable である。メソッド map は, 引数で与えられた電気料金から割引率を求め,その値を返す。ここで, 割引率は小数で与えるものとする。例えば,1%は 0.01 である。 〔プログラム5〕 class DiscountTable extends TierTable { DiscountTable(double... tiers) { super(tiers): } double map(double amount) { for (int i = pairs.length - 1; i >= Ø; i--) { if (amount >= pairs[i][Ø]) { return pairs[i][1]; } } throw new IllegalArgumentException("amount = " + amount); } } プログラム6は,割引プランを表すためのクラス DiscountPlan である。 DiscountPlan は,クラス RatePlan を拡張し,上位クラスである RatePlan の メソッド getPrice で求めた電気料金から割引率を求め, 割引を適用した金額を電気料金として計算する。 プログラム中の に入れる正しい答えを,解答群の中から選べ。 〔プログラム6〕 class DiscountPlan e RatePlan { private final TierTable discountTiers; DiscountPlan(String name, double basicCharge, TierTable pricingTiers, TierTable discountTiers) { super(name, basicCharge, pricingTiers); this.discountTiers = discountTiers; } int getPrice(double amount) { int price = f .getPrice(amount); return (int) (price * g ); } } e に関する解答群 エ public オ throws f に関する解答群 エ this オ TieredRateTable カ TierTable g に関する解答群 イ (1.Ø - discountTiers map(basicCharge)) ウ (1.Ø - discountTiers.map(price)) エ discountTiers map(amount) オ discountTiers.map(basicCharge) カ discountTiers nap(price)
[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]
©2004-2024 情報処理試験.jp
|
プライバシーポリシー・著作権・リンク
|
お問合わせ
| |||