基本情報技術者試験の過去問と解説
[TOP] [午前分野別] [午後分野別] [キーワード索引] [令和元年秋午前] [令和元年秋午後]

平成14年 秋期 基本情報技術者 午後 問08
問08   Java

〔プログラムの説明〕

 ディジタル論理回路シミュレータを作成するためのクラスとテスト用クラスである。

(1) ゲートを表す抽象クラス Gate のサブクラスとして, NOT ゲートを表すクラス NotGate 及び AND ゲートを表すクラス AndGate を定義する。

(2) Gate のすべてのサブクラスは,メソッド connectOutputTo,getInput 及び getOutput を継承し,メソッド tick を実装する。

(3) メソッド connectOutputTo は,ゲートの出力信号線を, 指定されたゲートの入力信号線に接続する。

(4) メソッド getInput 及び getOutput は,ゲートの入力信号線及び出力信号線を それぞれ返す。

(5) メソッド tick は,各ゲート固有の演算を実行し,出力信号線に true 又は falseのいずれかの値を出力する。

(6) クラス Wire は,入力信号線又は出力信号線を表す。

(7) 各ゲートの出力信号線は,1本とする。

(8) テスト用クラス LogicCircuitTest で作成する回路及び動作の例を,次に示す。 メソッド main は,演算結果の値を標準出力に表示する。


     図 LogicCircuitTest で作成する回路及び動作の例

〔プログラム〕

class Wire { 
    private boolean value; 
    public boolean getValue() { return value; }
    public void setValue(boolean value) { this.value = value; }
}
abstract class Gate {
    protected Wire[] input;
    protected Wire output;
    public Gate(int nInputs) {
        input = ;
        for (int i = 0; i < nInputs; i++) { input[i] = new Wire(); }
        output = new Wire();
    }
    public void connectOutputTo(Gate otherGate, int nthInput) {
        try { 
            ;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public Wire getInput(int n) { return input[n]; }
    public Wire getOutput() { return output; }
    abstract public void tick();
}
class NotGate extends Gate {
    public NotGate() { super(1); }
    public void tick() { output.setValue(); }
} 
class AndGate extends Gate {
    public AndGate() { super(2); }
    public void tick() { output.setValue(); } 
}
public class LogicCircuitTest {
    public static void main(String[] args) {
        Gate not = new NotGate();
        Gate and = new AndGate();
        not.connectOutputTo(and, 0);
        not.getInput(0).setValue(false);
        and.getInput(1).setValue(true);
        not.tick();
        and.tick();
        System.out.println(and.getOutput().getValue());
    }
}

基本情報技術者試験


設問  プログラム中の に入れる正しい答えを, 解答群の中から選べ。

a に関する解答群

ア new Wire(nInputs)    イ new Wire[nInputs]

ウ new Wire()       エ new Wire[] {new Wire()}

b に関する解答群

ア input[nthInput].setValue(otherGate.output.getValue())

イ input[nthInput] = otherGate.output

ウ otherGate.input[nthInput].setValue(output.getValue())

エ otherGate.input[nthInput] = output

c,d に関する解答群

ア input[0].getValue() || input[1].getValue()

イ !input[0].getValue() || !input[1].getValue()

ウ input[0].getValue() && input[1].getValue()

エ !input[0].getValue() && !input[1].getValue()

オ input[0].getValue() != input[1].getValue()

カ input[0].getValue()

キ !input[0].getValue()

ク 1 - input[0].getValue()

解答 a ←クリックすると正解が表示されます

解答 b ←クリックすると正解が表示されます

解答 c ←クリックすると正解が表示されます

解答 d ←クリックすると正解が表示されます

[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]