Javaによるプログラミング演習
2003/10〜2004/02

末広ページへ このコーナーの目次へ
最新情報へ


講師:

斎藤末広

目標:

 Java言語を得意な言語にする。

授業の進め方

 個別学習・実習が基本。プログラムが得意になりたければ,授業以外でも勉強すること。週に数時間の勉強ではプロにはなれない。

メーリングリストを利用します。

参考資料

 Javaメールマガジン JavaScript&Javaで目指そう!基本情報処理技術者試験


期末テスト

 レポートおよび,課題提出。


授業詳細

第8回目から

 メーリングリストで連絡

第7回目(2003/11/19)

 

*
ソフトウェア開発技術者平成15年問1

 8 ビットの 2 進数の各けたを,下位けたから順に,配列 BIT の要素 1〜8 に
格納してある。次の流れ図は配列 BIT 内の 2 進数の 2 の補数を求める方法を
表したものである。ここで用いる方法は,下位けたから調べていき,最初に表れ
る 1 までは何もしないで,次のけたから 0 と 1 を反転させるものである。例
えば,2 進数 10101000 は 01011000 に変換されることになる。a の内容として
適切なものはどれか。

  _______
 (  開 始  )
   ̄ ̄ ̄│ ̄ ̄ ̄
 ┌───┴───┐
 │  0 →SW  │
 └───┬───┘
   ──┴──
  / 変 換 \
 │ i:1,1,8(注) │
 └───┬───┘
     │
    / \
   /   \ ≠
  /BIT[i]:1 \─────────────┐
  \     /             │
   \   /              │
    \ /               │
     │=               │
     │                │
    / \ ≠            / \ ≠
   /SW:0 \─────┐      /SW:0 \──────┐
   \   /     │      \   /      │
    \ /      │       \ /       │
     │=      │        │=       │
 ┌───┴──┐┌───┴───┐┌───┴───┐┌───┴───┐
 │ 1 →SW  ││  0→BIT[i] ││ 【 a 】 ││  1→BIT[i] │
 └───┬──┘└───┬───┘└───┬───┘└───┬───┘
     │←──────┴────────┴────────┘
 ┌───┴───┐
 │       │
  \ 変 換 /
   ──┬──
  ───┴───
 (  終 了  )

*

Javaプログラム その1その2

*
  1: public class drvTwosComplement {
  2: 
  3:     private static void TwosComplement(int[] BIT) {
  4:         int SW = 0;
  5:         for(int i=0; i<8; i++){
  6:             if(BIT[i]==1){
  7:                 if(SW==0){
  8:                     SW = 1;
  9:                 }else{
 10:                     BIT[i] = 0;
 11:                 }
 12:             }else{
 13:                 if(SW != 0){
 14:                     BIT[i] = 1;
 15:                 }
 16:             }
 17:         }   
 18:     }
 19: 
 20:     public static void main(String[] args) {
 21: 
 22:         int BIT[] = new int[8];
 23:         
 24:         // 1010 1000 を代入
 25:         BIT[0] = 0;
 26:         BIT[1] = 0;
 27:         BIT[2] = 0;
 28:         BIT[3] = 1;
 29:         BIT[4] = 0;
 30:         BIT[5] = 1;
 31:         BIT[6] = 0;
 32:         BIT[7] = 1;
 33:        
 34:         for(int i=7; i>=0; i--){
 35:             System.out.print(BIT[i]);
 36:         }   
 37: 
 38:         System.out.println("");
 39: 
 40:         TwosComplement(BIT);
 41:         
 42:         for(int i=7; i>=0; i--){
 43:             System.out.print(BIT[i]);
 44:         }   
 45:        
 46:     }
 47: }

*
*
  1: class KeisanTaro { // 関数をクラスにかこむ
  2:     void TwosComplement(int[] BIT) {
  3:         int SW = 0;
  4:         for(int i=0; i<8; i++){
  5:             if(BIT[i]==1){
  6:                 if(SW==0){
  7:                     SW = 1;
  8:                 }else{
  9:                     BIT[i] = 0;
 10:                 }
 11:             }else{
 12:                 if(SW != 0){
 13:                     BIT[i] = 1;
 14:                 }
 15:             }
 16:         }
 17:     }
 18: }
 19: 
 20: public class drvTwosComplement01 {
 21: 
 22:     public static void main(String[] args) {
 23: 
 24:         KeisanTaro taroBunshin = new KeisanTaro(); 
             // クラスからインスタンスを作成
 25:                                                     
 26:         int BIT[] = new int[8];
 27: 
 28:         // 1010 1000 を代入
 29:         BIT[0] = 0;
 30:         BIT[1] = 0;
 31:         BIT[2] = 0;
 32:         BIT[3] = 1;
 33:         BIT[4] = 0;
 34:         BIT[5] = 1;
 35:         BIT[6] = 0;
 36:         BIT[7] = 1;
 37: 
 38:         for(int i=7; i>=0; i--){
 39:             System.out.print(BIT[i]);
 40:         }
 41: 
 42:         System.out.println("");
 43: 
 44:         taroBunshin.TwosComplement(BIT);
             // インスタンス(分身)が関数を実行
 45: 
 46:         for(int i=7; i>=0; i--){
 47:             System.out.print(BIT[i]);
 48:         }
 49: 
 50:     }
 51: }

*

第6回目(2003/11/12)

 基本情報技術者午後平成13年秋問2 を Java でプログラミングしたものを解説する。

 各自挑戦してくること。

 Javaプログラム例

第5回目(2003/11/5)

 課題(基本情報午前平成15年秋問15)を Java のプログラムで実現する。

*
基本情報技術者午前平成15年秋問15

 次の流れ図は,2 数 A,B の最大公約数を求めるユークリッドの互除法を,引
き算の繰返しによって計算するものである。A が 876,B が 204 のとき,何回
の比較で処理は終了するか。

      _______
     (  開 始  )
       ̄ ̄ ̄│ ̄ ̄ ̄
     ┌───┴───┐
     │  A → L  │
     │  B → S  │
     └───┬───┘
         │
   ┌────→│←────┐
   │     │     │
   │     │     │
┌──┴──┐  │  ┌──┴──┐
│L →S →L │  │  │S →L →S │
└──┬──┘  │  └──┬──┘
   │     │     │
   │  > / \ <  │
   └───/ L:S \───┘
       \   /
        \ /
         │=
     ┌───┴───┐
     │  A, B, L  │
     │  の出力  │
     └───┬───┘
      ───┴───
     (  終 了  )
       ̄ ̄ ̄ ̄ ̄ ̄ ̄

 ア 4

 イ 9

 ウ 10

 エ 11
*

Java プログラム例

第4回目 スタック解説

 課題に挑戦してから参加すること。Javaで実装(実際に動作させること)して下さい。

疑似言語で書かれたスタックのアルゴリズムをJavaで実装したものを解説します。

*
1: public class drvCalc {
  2: 
  3:     static int Max = 20;
  4:     static double[] Stack = new double[Max];
  5:     static int Sp=0;
  6: 
  7:     private static double Calc(char Ex[], int Lp) {
  8:         int Cp;
  9:         double Ret, X, Y, T;
 10:         boolean NumF, NegF;
 11: 
 12:         Cp = 0;
 13:         T = 0.0;
 14:         NumF = false;
 15:         NegF = false;
 16: 
 17:         while(Cp <= Lp){
 18: 
 19:             if(('0'<=Ex[Cp])&&(Ex[Cp]<='9')){
 20:                 T = T * 10 + (Ex[Cp]-48) ; // 文字'1'- 48 は,数値 1
 21:                 NumF = true;
 22:             }
 23: 
 24:             if(NumF){   // 空欄 a
 25:                 if(NegF==true){
 26:                     T = -T;
 27:                     NegF = false;
 28:                 }
 29:                 Push(T);
 30:                 T =0.0; // 空欄 b
 31:                 NumF = false;
 32:             }
 33: 
 34:             if(Ex[Cp]=='+'){
 35:                 Y = Pop();
 36:                 X = Pop();
 37:                 T = X + Y;
 38:                 Push(T);
 39:                 T = 0.0;
 40:             }
 41: 
 42:             if(Ex[Cp]=='-'){
 43:                 if((Cp!=Lp) && (('0'<=Ex[Cp+1])&&(Ex[Cp+1]<='9'))){
 44:                     NegF = true; // 空欄 c
 45:                 }else{
 46:                     Y = Pop();
 47:                     X = Pop();
 48:                     T = X - Y;
 49:                     Push(T);
 50:                     T = 0.0;
 51:                 }
 52:             }
 53: 
 54: 
 55:             if(Ex[Cp]=='*'){
 56:                 Y = Pop();
 57:                 X = Pop();
 58:                 T = X * Y;
 59:                 Push(T);
 60:                 T = 0.0;
 61:             }
 62: 
 63:             if(Ex[Cp]=='/'){
 64:                 Y = Pop();
 65:                 X = Pop();
 66:                 if(Y==0){
 67:                     System.out.println("ゼロ割エラー");
 68:                 }else{
 69:                     T = X / Y;
 70:                 }
 71:                 Push(T);
 72:                 T = 0.0;
 73:             }
 74:             Cp = Cp + 1;
 75:         }
 76:         Ret = Pop();
 77:         return Ret;
 78:     }
 79: 
 80:     private static void Push(double T){
 81:         if(Sp<=Max){
 82:             Stack[Sp] = T;  //空欄
 83:             Sp = Sp + 1;    //  d
 84:         }else{
 85:             System.out.println("Stackオーバーエラー");
 86:         }
 87:     }
 88: 
 89:     private static double Pop(){
 90:         double T = 0.0;
 91:         if(Sp>0){
 92:             Sp = Sp -1;     //空欄
 93:             T = Stack[Sp];  // e
 94:         }else{
 95:             System.out.println("Stack空エラー");
 96:         }
 97:         return T;
 98:     }
 99: 
100:     public static void main(String[] args) {
101:         int N = 10;
102:         char[] Ex = new char[N];
103: 
104:         Ex[0] = '1';
105:         Ex[1] = ' ';
106:         Ex[2] = '2';
107:         Ex[3] = '+';
108:         Ex[4] = ' ';
109:         Ex[5] = '3';
110:         Ex[6] = ' ';
111:         Ex[7] = '4';
112:         Ex[8] = '-';
113:         Ex[9] = '*';
114: 
115:         System.out.print("与えられた逆ポーランド表記:");
116:         System.out.println(Ex);
117:         System.out.println("答え:"+ Calc(Ex,9));
118:     }
119: }
120: 
*

第3回目 スタックサンプル作成&Java質問会

 課題を解説予定でしたが,私もまだ,作成できていません。授業中にみんなで作成しましょう。次回解説をします。

第2回目 QuickSort解説

課題に挑戦してから参加すること。

疑似言語で書かれたQuickSortのアルゴリズムを実装したものを解説します。

第1回目 授業の説明&コンパイル可能にする。

学校のコンピュータでコンパイル&実行をできるようにする。

 コンパイルの動作テストは,xHello.java(Jマガ2号収録) を使用すること.。以下のプログラムをコピー&貼り付けをして利用すること。

public class xHello {
    public static void main(String [] xargs){
        System.out.println("Hello");
    }
}


spage@yscon.co.jp

末広ページへ このコーナーの目次へ