13_期末学力考査

12/19日一限 期末試験:9:30-10:30

就職活動で期末試験をうけれない人は事前に必ず連絡すること

期末テスト: PC+LANケーブルを持参(有線アダプターを購入してください。)

範囲:全てJAVA、通信(TCP)プログラム、数値処理、文字列処理、オブジェクト指向、配列処理、Thread、インターフェース

形態:持ち込み可(紙、デジタル)、ネット利用可能、Google検索可、JavaDoc可能、授業資料や授業で作成したり自分で書いたソースコード持ち込み可

不可(不正行為):他人と通信、直接的間接的に共有すること:チャット、メール、共有ドライブ(Dropboxm,GoogleDrive)、SNS、LINE、SLACKなど、GITなどに答えをアップして他人と共有すること、ATOMの共有機能、Twitter、知恵袋への質問、Facebook、Mixi、

出ない範囲:webapi,gui,python

9:30に問題を公開します。

課題提出フォルダ/自分の学籍番号/13/Exam/

ファイル名少しぐらい間違えていても構わない。ただし必要な数は確認すること

配点15点x4問 (a,b,c,d)

持ち込み可、ネット検査可、過去の自分のプログラムや授業資料をみるのも可能です。終わったら、自分の最終課題に取り組んでください。

出力結果のみでJavaファイル無しは0点です。気をつけてください。.classファイルは必要ありません。

試験(a)配点15点

(a)3-10000の整数のうちから素数のみをコンソールに出力するプログラムをかけ。 ファイル名はPrimeMain.javaとし13回に提出フォルダExam/aを作成して提出すること。 ヒント:10000までの素数を判定する場合には2から100(√(10000))までの間で割り算のあまりを計算すればよい。なぜならxがp*qと素因数分解できるならp*qの内小さい方は必ず10000の平方根である100以下となる。 アルゴリズムは最適化しなくてよい。結果をA_Prime.txtにコピーアンドペースト等作成し、javaファイルと共に結果ファイルも提出すること。

余裕がある人はアルゴリズムを工夫してください。

提出フォルダ:

Exam/a/

提出ファイル:

PrimeMain.java

A_Prime.txt

(15点の配点)

試験(b)配点15点

(b)オブジェクト配列の問題である。TDU大学FI学科へは999名の学生が受験した。 各受験生の受験番号(1-999番)と数学、英語、国語の3科目の成績を受験生ごとに管理するクラスExamScoresクラスがある。 ファイル名はExamScores.javaとする。ExamScoresクラスには

set/getExamID、

set/getMathScore、

set/getEngScore、

set/getLangScore、

getAverageScoreのメッソッド(関数)ある。


ExamScoresクラス内部変数はint型とする。 ランダム関数(java.util.Random)を利用し0-100点の適当な点数を999名の学生にセットする。 その上で3科目平均点が85点以上は合格者とせよ。その合格者のIDと各科目の点数を見やすくコンソール出力するExamMaxAveMain.javaを作成せよ。

出力した合格者+各科目の点数一覧をB_Gokaku.txtファイルに保存すること。(自動保存でもコンソールをコピー&ペーストしてもよい)余裕がある人は成績の高い順にソートして出力するプログラムを作成してみてください。 13回に提出フォルダにExam/bを作成ししjavaファイルと結果ファイル。(15点の配点)

提出ファイル

Exam/b/

提出ファイル:

ExamMaxAveMain.java

ExamScores.java

B_Gokaku.txt

試験(c) 配点15点

(c) じゃんけんの"Guu","Choki","Pa"をクライアントからサーバの5002番ポートに送信すると、その度にサーバ上のランダムなじゃんけんの手を生成しその手と毎回比較して以下の(c-1)-(c-3)の返事を返してくるプログラムを作成しなさい。そのプログラムを13回のExam/c/というフォルダを作成し提出すること。

それぞれの達成度で各5点。途中まで(c-1)や(c-2)まででも良いので完成させること。

(c-1)"Server Win","Server Draw","Server Lose"の勝ち負け判定

(c-2)サーバのじゃんけんの手("Guu","Choki","Pa")

(c-3)現在のサーバの勝率 ※やや難

上記を満たす

JankenClientLoop.java,JankenServerRandom.javaプログラムを完成させよ。第13回フォルダに「Exam/c」というフォルダを作成しその中に必要なソースコードを入れること。 文字列を比較したい場合はStringクラスのequals()関数を利用。

出力例: Client is started

send Janken Command to Server 5002port:

>Choki

Response from Server: You Win. Server hand is Guu. (Win,Draw,Lose)=(39%,30%,31%)

send Janken Command to Server:

>Pa

Response from Server: Draw. Server hand is Pa. (Win,Draw,Lose)=(38%,31%,32%)

結果をC_Janken.txtというファイルにコピーアンドペーストしなさい。

提出フォルダ:Exam/c/

提出ファイル:

JankenClientLoop.java

JankenServerRandom.java

C_Janken.txt

(15点の配点)

試験(d) 配点15点

各文字列の最初の文字が小文字である場合 pen->Pen に変換するサーバクライアントプログラムについて考える。

ファイル名はPPAP_S.java(サーバ) とPPAP_C.java(クライアント)とせよ。

クライアントからサーバに"abc,def,reverse"と送信すると、サーバから 最初の2単語が"-"で連結され二つの文字列の順序の並びが逆になって"Def-Abc"と返信がくる。(※さかさ文字になるわけではない。単に単語の順序が逆になるだけ)。正し、各文字列の最初の文字が小文字である場合には最初の文字を大文字に変換する。大文字が文字列中にあった場合にはそのまま保持する。

"abc,def,sequence"をクライアントからサーバにおくると"Abc-Def"と最初の文字が大文字に変換された2単語がハイフンで連結され順序が維持された返信がくる。

同様に各文字列の最初の文字が小文字である場合には最初の文字が大文字に変換される。

大文字が文字列にあった場合にはそのまま保持する。 クライアントから"pen,apple,reverse"の返信をs1、 クライアントから"pen,pineapple,sequence"の返信をs2というString変数で保持し 再度文字列s1+","+s2+",reverse"をクライアントからサーバに送信すると"Pen-Pineapple-Apple-Pen"がサーバから返信されることを確認せよ。

提出フォルダはExam/d/とせよ。 ヒント:文字の大文字小文字変換の関数はJavaで用意されている関数を使うとよい。通信には授業中にやったPrintWrinterを使うとよい。ヒントsubstring関数で最初の一文字を切り出し、toUpperCase()などの関数で大文字変換すること。

出力結果を

D_PPTP.txtという名前で保存せよ。

提出フォルダ:

Exam/d/

提出ファイル:

PPAP_S.java(サーバ) 、PPAP_C.java(クライアント)

D_PPAP.txt (出力結果ファイル)

(15点の配点)

時間が余った人は12/17に行われた本年度のACM ICPCコンテストの問題をといてみましょう。

https://storage.googleapis.com/icpcsec/icpc2017-regional/problems.pdf