Java言語を得意な言語にする。
個別学習・実習が基本。プログラムが得意になりたければ,授業以外でも勉強すること。週に数時間の勉強ではプロにはなれない。
メーリングリストを利用します。
Javaメールマガジン JavaScript&Javaで目指そう!基本情報処理技術者試験
レポートおよび,課題提出。
第8回目から
メーリングリストで連絡
* ソフトウェア開発技術者平成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] │ └───┬──┘└───┬───┘└───┬───┘└───┬───┘ │←──────┴────────┴────────┘ ┌───┴───┐ │ │ \ 変 換 / ──┬── ───┴─── ( 終 了 ) * |
*
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: }
* |
基本情報技術者午後平成13年秋問2 を Java でプログラミングしたものを解説する。
各自挑戦してくること。
課題(基本情報午前平成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で実装(実際に動作させること)して下さい。
疑似言語で書かれたスタックのアルゴリズムを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:
* |
課題を解説予定でしたが,私もまだ,作成できていません。授業中にみんなで作成しましょう。次回解説をします。
課題に挑戦してから参加すること。
疑似言語で書かれたQuickSortのアルゴリズムを実装したものを解説します。
学校のコンピュータでコンパイル&実行をできるようにする。
コンパイルの動作テストは,xHello.java(Jマガ2号収録) を使用すること.。以下のプログラムをコピー&貼り付けをして利用すること。
public class xHello {
public static void main(String [] xargs){
System.out.println("Hello");
}
}
|