memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

情報処理試験問題を見てみた

昨日、試験が開催されたようです。受験した学生さんが報告してくれました。「先生、COBOLって何?」確かに。。。授業でさらっと話しただけ。もちろんプログラミングする機会はありません。(選択問題ですから知らなくても実害はないのですけどね)

ちょっと気になり問題が公開されているとのことでしたのでさーっと見てみました。

Link: 情報処理試験(問題・解答)

午前の問題は。。。授業を受けていれば問題ないでしょう。ただストラテジ系は多少自分で訓練が必要かと思います。問題は午後かな?選択問題の6番。ソフトウェア品質工学に関する問題です。これは担当科目でやっておかなければならない内容です。こういう形式の授業はしていませんでした。品質管理の回がありますので今年から対応したいと思います。

あとはJavaの問11。解いていませんがC言語の問題の方がシンプルですね。。。言語間による差はないのかな?一番目につくのはEnum型。こういう使い方は、私もやったことがありません。ソースを見れば動作は想像がつきますけどね。。。コマをひっくり返すのに再帰も出てきます。かっこいいけど、ちょっと怖い。ただ、設問自体は簡単で、こういう言語仕様をあまり知らなくても解けそうな感じはします。

せっかくなので、例題を真似してEnum型を使ってみました。知らなかった学生さんはついでに遊んでみましょう。

class Jouhou
{
  static enum Direction {
    N(-1, 0), NE(-1, 1), E(0, 1), SE(1, 1), 
    S( 1, 0), SW(1, -1), W(0, -1), NW(-1, -1);
    final int r, c;
    Direction(int r, int c){ 
      this.r = r;
      this.c = c;
    }   
  }
  
  public static void main(String [] args){
    for (Direction d : Jouhou.Direction.values()){
      System.out.println(d);
    }   
  }
}

実行結果は以下のようになります。2つ以上のパラメータを渡したEnum型を作るのにこのテクニックは便利ですね。values()は列挙子(NやNEなど)の配列を返してくれるメソッドです。列挙子の配列から拡張for文により順番に取り出して表示しています。取り出した列挙子をprintlnするとtoString()メソッドが呼ばれ列挙子の名前(NやNEなど)が表示できるようです。

N
NE
E
SE
S
SW
W
NW

では、ついでにtoSring()メソッドをオーバーライドしてみます。

class Jouhou
{
  static enum Direction {
    N(-1, 0), NE(-1, 1), E(0, 1), SE(1, 1), 
    S( 1, 0), SW(1, -1), W(0, -1), NW(-1, -1);
    final int r, c;
    Direction(int r, int c){ 
      this.r = r;
      this.c = c;
    }
    public String toString(){
      return "("+r+","+c+")";
    }      
  }
  
  public static void main(String [] args){
    for (Direction d : Jouhou.Direction.values()){
      System.out.println(d);
    }   
  }
}

たしかに以下のような感じになりました。いつか使おうか。。。?

(-1,0)
(-1,1)
(0,1)
(1,1)
(1,0)
(1,-1)
(0,-1)
(-1,-1)