ブログ

ブログ一覧 (全1358件中 994件目~996件目を表示)

  • 2018.12.26

    Javaプログラミングコンテスト最優秀賞者のプログラムを見てみよう、第3弾です。

    最優秀賞のプログラム精解!(その2)

    最優秀賞のプログラム精解!(その1)

     

    残っている処理は、与えられたIPアドレスのブロードキャストアドレスを求めることです。

    int型の変数ipには現在、IPアドレスが数値として入っています。またint型の変数zには、サブネットマスクのサフィックス値が入っています。

    たとえばIPアドレスが192.168.61.145/26であるとき、ブロードキャストアドレスは上位26ビットはそのまま、残りの6ビットはすべて1にしたものになります。

     

    では、最優秀者のコードを見ていきます。

    前回の処理で既に

    char[] ipc = Integer.toBinaryString(ip).toCharArray();
    

    を実行しています。char型の配列ipcには、ipを2進数にしたものを1桁ずつ区切って0か1を文字にしたものが格納されています。

     

    ネットワークアドレスのときは、

    for (int i = 31; i >= z; i--) ipc[i] = '0';
    

    としましたが、ブロードキャストアドレスのときは

    for (int i = 31; i >= z; i--) ipc[i] = '1';
    

    とします。

    あとは表示するだけですが、これもネットワークアドレスのときと一緒。

    a = b = c = d = 0;
    for (int i = 0; i < 8; i++) {
    	a += (ipc[i] - '0') << (7 - i);
    	b += (ipc[i + 8] - '0') << (7 - i);
    	c += (ipc[i + 16] - '0') << (7 - i);
    	d += (ipc[i + 24] - '0') << (7 - i);
    }
    System.out.println(a + "." + b + "." + c + "." + d);
    
    

    ちなみに、サブネットマスクとIPアドレスの論理積をとればネットワークアドレスが求まりますが、ブロードキャストアドレスの場合はサブネットマスクの0と1を反転したものとIPアドレスの論理和をとればよいです。

    しかし今回のコードでは、あまり難しく考えずにシンプルに処理されていますね。

     

    今回紹介したコードを繋げたものは以下のようになります。

    
    			String[] sp = str.split("[\\./]");
    			int a = Integer.parseInt(sp[0]);
    			int b = Integer.parseInt(sp[1]);
    			int c = Integer.parseInt(sp[2]);
    			int d = Integer.parseInt(sp[3]);
    			int z = Integer.parseInt(sp[4]);
    
    			int ip = (a << 24) + (b << 16) + (c << 8) + d;
    			char[] ipc = Integer.toBinaryString(ip).toCharArray();
    			
    			for (int i = 31; i >= z; i--) ipc[i] = '0';
    
    			a = b = c = d = 0;
    			for (int i = 0; i < 8; i++) {
    				a += (ipc[i] - '0') << (7 - i);
    				b += (ipc[i + 8] - '0') << (7 - i);
    				c += (ipc[i + 16] - '0') << (7 - i);
    				d += (ipc[i + 24] - '0') << (7 - i);
    			}
    			
    			System.out.println(a + "." + b + "." + c + "." + d);
    
    			for (int i = 31; i >= z; i--) ipc[i] = '1';
    
    			a = b = c = d = 0;
    			for (int i = 0; i < 8; i++) {
    				a += (ipc[i] - '0') << (7 - i);
    				b += (ipc[i + 8] - '0') << (7 - i);
    				c += (ipc[i + 16] - '0') << (7 - i);
    				d += (ipc[i + 24] - '0') << (7 - i);
    			}
    			
    			System.out.println(a + "." + b + "." + c + "." + d);
    

    とにかくコンテストの短い時間でここまで書けたのが驚きだったので、3回に分けて紹介しました!

  • ビジネスキャリア科2年担任の後条です。

    経理ビジネスコース1年は冬休み直前、企業会計原則の一般原則の

    学習を行いました。

    企業会計原則は、現在に至るまでの会計に携わってきた先人たちの

    知恵の結晶です。

    商法32条の2や会社法431条にある通り、会計処理の基本的な考え方は

    「公正なる会計“慣行”を斟酌すべし」

    「公正妥当と認められる企業会計の“慣行”に従う」

    といった“慣行”とされる、先人たちの知恵である経験則です。

    私自身、税理士試験の財務諸表論を勉強した際、企業会計原則に

    初めて触れましたが、それまで簿記で学習してきた処理で疑問に

    思っていたことが、どの様な考え方に裏付けされていたかを学習

    したことにより、会計に関しての理解が深まりました。

    ところで以前のブログ「帳簿記入と財務会計」でも触れましたが、

    会計理論は日々の学習の積み重ねが大切です。

    学生たちにはこれからも理論と計算の同時並行的な授業を提供して、

    簿記会計そして税務への理解をさらに深めてもらいたいと思います。

      

     

     

  • 2018.12.25

    12/21(金)、今年の出校最終日に1、2年合同で成果発表会を行いました。

    今回は、2年次学生が行っている卒業研究の中間報告です。

     

    卒業研究は1チーム5~10名で、全5チーム。

    それぞれ、3D、IoT、人工知能、Web、映像制作に取り組んでいます。

     

    まだまだ途中だったり、課題に直面していたりと、道半ばのようです。

    残り約2か月、ラストスパートで仕上げていきます!

     

1 330 331 332 333 334 453
↑