平成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-2025 情報処理試験.jp
|
プライバシーポリシー・著作権・リンク
|
お問合わせ
| |||
