課題:JavaアプリケーションとC言語のオリジナル問題作成と解答例。制御文と配列を用いてオリジナルのJavaアプリケーションによる初級問題(なる べく短い行数で)を作成し、模範解答例を示せ。併せて、同様な動作を行うC言語 のソースコードを示せ。
1.次のjavaプログラムの下線部1〜3に当てはまる変数名を書け。
なお、このプログラムは、相手が出したカードを入力し、そのカードより数が大きいカードを全て出力するプログラムである。しかし,A(エース)は出されれば1番弱いが、K(キング)が出された時にだけAは1番強くなるようにする。
1-1.プログラム
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
import java.io.*;
class report2 {
public static void main(String arg[]) throws Exception{
BufferedReader sc = new BufferedReader(new InputStreamReader(System.in));
String card = "A 2 3 4 5 6 7 8 9 0 J Q K ";
int i;
System.out.println("使用カード {A,2,3,4,5,6,7,8,9,0(10),J,Q,K}");
System.out.print("出たカード >> ");
String a = ___1___.readLine(); //値を読み込む
System.out.print("出すカード >> ");
int n = card.indexOf(___2___); //()内を検索する
String m = card.substring(n+2);
System.out.print(___3___);
if(n == 'K')
System.out.println("A");
else System.out.println("");
}
}
|
1-2.実行結果
[kanoutakeshi-no-ibook-g4:~] j06020% java report2
使用カード {A,2,3,4,5,6,7,8,9,0(10),J,Q,K}
出たカード >> A
出すカード >> 2 3 4 5 6 7 8 9 0 J Q K
[kanoutakeshi-no-ibook-g4:~] j06020% java report2
使用カード {A,2,3,4,5,6,7,8,9,0(10),J,Q,K}
出たカード >> 3
出すカード >> 4 5 6 7 8 9 0 J Q K
[kanoutakeshi-no-ibook-g4:~] j06020% java report2
使用カード {A,2,3,4,5,6,7,8,9,0(10),J,Q,K}
出たカード >> 9
出すカード >> 0 J Q K
[kanoutakeshi-no-ibook-g4:~] j06020% java report2
使用カード {A,2,3,4,5,6,7,8,9,0(10),J,Q,K}
出たカード >> Q
出すカード >> K
[kanoutakeshi-no-ibook-g4:~] j06020% java report2
使用カード {A,2,3,4,5,6,7,8,9,0(10),J,Q,K}
出たカード >> K
出すカード >> A
|
1-3.解答
(___1___) sc
6行目のBufferedReaderクラスからのreadLineメソッドである。よってscが入ることが分かる。
(___2___) a
readLineで読み込んだ値を検索するので、その変数のaが入る。
(___3___) m
検索した値から文の最後までを表示するので、mが当てはまる。
1-4.考察
6行目は文字を読み込むためにBufferedReaderクラスを作っている。
8行目でAからKまでの文字列を作る。
14行目でコマンドから値を読み込む。
18行目のindexOfはオブジェクトから特定の文字列を探すインスタンスメソッド。文字列が見つかればその位置を返す。
19行目の(n+2)は次の文字を表示させるために+2をしている。
23行目は題意より、入力された値がKならばAを表示させるために入れている。
2. 同様な動作を行うC言語のソースコードを示せ。
2-1.プログラム
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#include
#include
char card[13] = {'A','2','3','4','5','6','7','8','9','0','J','Q','K'};
char sc,*a;
int i;
int main (){
printf("使用するカード {A,2,3,4,5,6,7,8,9,0(10),J,Q,K}\n");
printf("出されたカード >> ");
scanf("%c",&sc);
printf("出せるカード >> ");
a = memchr(card, sc, 13);
for(i=1; i<13; i++){
if(&a[i] < &card[13])
printf("%c ", a[i]);
}
if(sc == 'K')
printf("A\n");
else printf("\n");
return(0);
}
|
2-2.実行結果
[kanoutakeshi-no-ibook-g4:~] j06020% ./report2
使用するカード {A,2,3,4,5,6,7,8,9,0(10),J,Q,K}
出されたカード >> A
出せるカード >> 2 3 4 5 6 7 8 9 0 J Q K
[kanoutakeshi-no-ibook-g4:~] j06020% ./report2
使用するカード {A,2,3,4,5,6,7,8,9,0(10),J,Q,K}
出されたカード >> 5
出せるカード >> 6 7 8 9 0 J Q K
[kanoutakeshi-no-ibook-g4:~] j06020% ./report2
使用するカード {A,2,3,4,5,6,7,8,9,0(10),J,Q,K}
出されたカード >> 0
出せるカード >> J Q K
[kanoutakeshi-no-ibook-g4:~] j06020% ./report2
使用するカード {A,2,3,4,5,6,7,8,9,0(10),J,Q,K}
出されたカード >> K
出せるカード >> A
|
2-3.考察
4行目で必要な値を配列で準備する。
11行目scanfで取り込んだ値をscのアドレスに取り込む。
15行目memchrはcardの配列からscの値を13バイト分検索するソースである。これを使って取り込んだ値を探す。
17~20行目はfor文を使って文字を出力している。取り込んだ値からcardの最後に来るまで文字を出力する。
21~23行目は取り込んだ値がKならばAを表示させ、それ以外ならば改行を出力する.
|