高度情報システム科 ブログ
高度情報システム科のブログ一覧 (全197件中 151件目~153件目を表示)
-
2018.12.27
冬休み、中高生向けプログラミング講座として、AKITA デジタルユース キャンプ 2018(地域ICTクラブ)が行われています。
本校では、情報システム科と高度職業実践科の学生1名ずつが、メンターとして講師のサポートをしています!!
4日間のうち、今日は2日目。
ちょっとずつ指導も慣れてきているようでした。
内容は秋田の魅力を発信するWebサイトの作成。
WordPressを使っています。
メンターも事前に内容指導してもらっているわけでなく、一緒に勉強しながらです。
他のメンターの秋大や県立大の学生らとも仲良くなっていました。
嬉しいですね。
今後も秋コアは、地域と連動した取り組みを行っていきます!!
-
2018.12.26
Javaプログラミングコンテスト最優秀賞者のプログラムを見てみよう、第3弾です。
残っている処理は、与えられた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回に分けて紹介しました!
-
2018.12.19
これまでの記事
2か月ほど続けてきたプロジェクト開発演習もいよいよ大詰め。
今週はテスト工程を実施しています。
作成しておいたテスト仕様書に沿ってテストを行います。重要な作業です。
今回は2チームに分かれて開発を行ってきました。
チームMASHは、GR-LYCHEE(ライチ)を使用し、定点観測のようなシステムを開発してきました。時間とともに変わるもの(工事現場の進捗状況や植物の生育状況)を撮影し続けるような場面を考えています。
時刻設定してカメラの撮影、うまくできているでしょうか?
どうやら大丈夫そうです。
ある程度作りながら試しているので、大体はうまく動きます。
ただ、しっかりテストをしていくと、やはり不具合に遭遇します。
自分たちで解決できるのが一番ですが、どうしても企業の方に頼ってしまいます・・・。
丁寧に教えてもらっている様子。
一通りテストは終了しましたが、その後お互いのチームのテストも実施してみました。
第三者の目から評価を行うと、たとえば意図していなかった操作に気づいたりします。
どうやって品質を上げていくか、演習を通じて学べたでしょうか。
今回はやり残したこともあるので、今後の課題としてまた取り組んでいきます!