DVIOUT-exer

Similar documents
1.1 (1) (2) (3) (4) 2

class IntCell { private int value ; int getvalue() {return value; private IntCell next; IntCell next() {return next; IntCell(int value) {this.value =

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

基本情報STEP UP演習Java対策

Javaプログラムの実行手順

class IntCell { private int value ; int getvalue() {return value; private IntCell next; IntCell next() {return next; IntCell(int value) {this.value =

Microsoft PowerPoint ppt

extends (*) (*) extend extends 2

Prog1_6th

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

JAVA入門

Prog1_10th

デジタル表現論・第4回

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

PowerPoint プレゼンテーション

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

2004/11/23 オブジェクト指向プログラミング - モデル図とシーケンス図の表現方法 - オブジェクト指向プログラミング (OOP:ObjectOrientedPrograming) オブジェクト指向プログラミング言語 (OOPL) Java,C++,Delphi(Pascal),Visual

デジタル表現論・第6回

IT プロジェクト

Microsoft PowerPoint - prog03.ppt

JavaプログラミングⅠ

問 次の Fortran プログラムの説明及びプログラムを読んで、設問に答えよ。

Java講座

JavaプログラミングⅠ

Microsoft PowerPoint - chap10_OOP.ppt

プログラミング基礎I(再)

PowerPoint プレゼンテーション

Prog2_9th

JAVA とテンプレート

(Microsoft PowerPoint - \223\306\217KJAVA\221\346\202R\224\ ppt)

Prog1_15th

JavaプログラミングⅠ

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

JavaプログラミングⅠ

PowerPoint プレゼンテーション

2

JavaプログラミングⅠ

プログラミングA

スライド 1

メディプロ1 Javaプログラミング補足資料.ppt

Javaの作成の前に

JavaプログラミングⅠ

12.1 インターネットアドレス インターネットアドレス インターネットアドレス 32 ビットの長さを持つインターネットに接続されたマシンを識別するのに使う インターネットアドレスは ピリオドで区切られたトークンの並びで表現されることもある インターネットアドレス

プログラミング入門1

GEC-Java

JavaプログラミングⅠ

GEC-Java

Microsoft PowerPoint - prog04.ppt

第 3 回 Java 講座 今回の内容 今週の Java 講座はコレクション 拡張 for 文, ガベージコレクションについて扱う. 今週の Java 講座は一番内容が薄いも のになるだろう. コレクション コレクションとは大きさが決まっていない配列だと考えればよい. コレクションには List 先

オブジェクト指向プログラミング・同演習 5月21日演習課題

問題 01 以下は コンソールより年齢を入力させ その年齢にあった料金を表示するプログラムである 年齢ごとの金額は以下の通りである 年齢の範囲金額 0 歳以上 6 歳以下 120 円 7 歳以上 65 歳未満 200 円 65 歳以上無料 package j1.exam02; import java

PowerPoint プレゼンテーション

プログラミング入門1

人工知能入門

Java言語 第1回

2

Microsoft PowerPoint - lec06 [互換モード]

memo

情報実習Ⅱ

問題1 以下に示すプログラムは、次の処理をするプログラムである

問 次の Fortran プログラムの説明及びプログラムを読んで、設問に答えよ。

メソッドのまとめ

Prog2_12th

プログラミング入門1

Microsoft Word - NonGenList.doc

Prog1_3rd

Microsoft PowerPoint - prog09.ppt

基礎計算機演習 実習課題No6

Microsoft PowerPoint - prog09.ppt

Prog2_10th

文字列操作と正規表現

JavaプログラミングⅠ

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

Javaセキュアコーディングセミナー東京 第3回 入出力(File, Stream)と例外時の動作 演習解説

解答上の注意 1 解答は 解答 紙の問題番号に対応した解答欄にマークしなさい 2 選択肢は 問ごとに 意されています 問 1の選択肢は 問 2で使 しません 3 選択肢は量が多いため 探しやすさの観点よりグループ分けされています グループ分けに合わせて解答欄が区切られていますが 横 1 列で問題 1

問題1 以下に示すプログラムは、次の処理をするプログラムである

Microsoft Word - Javacc.docx

ガイダンス

プログラミング入門1

メソッドのまとめ

目的 泡立ち法を例に Comparableインターフェイスの実装 抽象クラスの利用 型パラメタの利用 比較 入替 の回数を計測

Javaセキュアコーディングセミナー東京 第2回 数値データの取扱いと入力値の検証 演習解説

ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする ) ためには 同期処理を用いるこ とが必要になる 同期処理は 予約語 synchronized で行うことができる ここでは sy


Microsoft Word - NonGenTree.doc

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

Microsoft Word - CompA-Ex doc

オートマトン 形式言語及び演習 1. 有限オートマトンとは 酒井正彦 形式言語 言語とは : 文字列の集合例 : 偶数個の 1 の後に 0 を持つ列からなる集合 {0, 110, 11110,

DVIOUT-oolin

Microsoft PowerPoint ppt

できるプログラマーを本気で育てる Java 超 Webプログラマーへの第 歩 第 2 回オブジェクト指向 テクノロジックアート 瀬 嘉秀

2

Method(C 言語では関数と呼ぶ ) メソッドを使うと 処理を纏めて管理することができる 処理 ( メソッド ) の再実行 ( 再利用 ) が簡単にできる y 元々はC 言語の関数であり 入力値に対する値を 定義するもの 数学では F(x) = 2x + 1 など F(x)=2x+1 入力値 (

Prog2_9th

第二回独習 Java ゼミ 第二章クラスとメソッド 2.1 メソッドの構造 2.2 静的メソッドと静的変数の概要 2.3 インスタンスメソッドとインスタンス変数の概要 2.4 Integerクラス 2006/04/19 神津健太

Microsoft PowerPoint - OOP.pptx

Microsoft PowerPoint - 09.pptx

今回の内容 グラフとオブジェクト指向プログラミング Java を使う理由 Java の基本 Javaのライブラリ 開発 実行 クラスの再利用 クラス継承 抽象クラス 開発の要点

1

Prog1_2nd

Transcription:

プログラム理論と言語 : 期末試験用問題集 Part2 (2009) 演習問題 2-0 オブジェクト指向言語, とりわけ Java に関する用語の設問をもうける. 重要な語句については復習をしておくこと. 1

演習問題 2-1( レジメ記載の問題を具体化した問題 ) 下記は, 整数 (int) を要素とする線形リストのプログラムである. class IntCell { private int value ; int getvalue() {return value; private IntCell next; IntCell next() {return next; IntCell(int value) {this.value = value; IntCell(int value, IntCell cell) { this.value = value; next = cell; void showvalue() {System.out.print(value+" "); class IntList { private int length = 0; private IntCell firstcell = null; void tail() { System.out.println("* first cell ("+firstcell.getvalue()+") is removed."); firstcell = firstcell.next(); length--; void cons(int x) { if (length == 0) firstcell = new IntCell(x); else { IntCell nextfirstcell = new IntCell(x,firstCell); firstcell = nextfirstcell; ; length++; void show() { IntCell presentcell = firstcell; for (int i=0;i<length;i++) { presentcell.showvalue(); presentcell = presentcell.next(); ; System.out.println("#end_of_list"); public static void main(string[] args) { IntList list = new IntList(); for (int i=0;i<args.length;i++) list.cons(integer.parseint(args[i])); // parseint は, 文字列を整数に変換する Integer クラスの静的メソッド. list.show(); list.tail(); list.show(); 2

2-1-1 IntList の main を, 整数を表す文字列の配列を渡して実行すると, 標準出力 System.out には逆順で表示される. 実行例 D:\home\lecture\pl\resume>java IntList 1 2 3 4 4 3 2 1 #end_of_list * first cell (4) is removed. 3 2 1 #end_of_list 注 : main の引数 String[] args は文字列配列で, コマンドラインからこれをもらう. 上記の例の場合は,args[0] = "1", args[1] = "2",... なる文字列配列 プログラムの動作を説明することにより, なぜ逆順になるかを示せ. 2-1-2 双方向リストのプログラムに拡張するために,IntCell に, 新たなフィールド を追加したとする. private IntCell back 2-1-2-1. 双方向リストとはいかなるリストかを述べよ 2-1-2-2. back フィールドに IntCell へのポインタを定めるためには, コンストラクタ IntCell(int,IntCell) に 1 文を追加すれば十分である. 理由も添えてその 1 文を示しなさい. ヒント : コンスタラクタにおける this はコンスタラクタで生成するオブジェクトを参照する変数.this =... なる 直接代入 による参照の再定義は不可だが, 生成途中のオブジェクトを参照するために使うのは全く問題ない. 3

演習問題 2-2 ( レジメ記載の問題を少し変えている ) 2 次元実平面上の点のクラス Point, ベクトルのクラス Vector および,3 角形のクラス Triangle を定める下記のプログラムを考える. class Point { private double x, y; Point(double x, double y) {this.x = x; this.y = y; // 座標が (x,y) の点を生成を返すコンストラクタ double getx() {return x; // X 座標取得メソッド double gety() {return y; // Y 座標取得メソッド double length() {// 原点との距離を返すメソッド return Math.sqrt(Math.pow(x,2)+Math.pow(y,2)); // sqrt は平方根,pow(x,y) は x の y 乗を返す Math クラスの静的メソッド Vector makevector(point q) {// this を始点に,q を終点にしたベクトルを返す... ( 設問 A) class Vector extends Point {// 点だが, 原点を基準にしてベクトルとみなす Vector(double x, double y) {super(x,y); // 親クラスのコンストラクタを適用 double innerproduct(vector anothervector) {// 内積 return this.getx()*anothervector.getx() + this.gety()*anothervector.gety(); class Triangle { private Point p1, p2, p3; Triangle(Point p1, Point p2, Point p3) {this.p1=p1;this.p2=p2;this.p3=p3; double area() {// 内積を用いた 3 角形の面積計算 Vector v1 = p1.makevector(p2); Vector v2 = p1.makevector(p3);... ( 設問 B) 2-2-1. ベクトルの長さを求めるために,Point クラスの double length() を継承して用いてよいか? 問題なければその理由を述べよ. 継承して利用する方法に問題があれば, その理由を述べた上で,Vector クラスに適正なメソッドを定めよ. 2-2-2. 設問 (A), 設問 (B) を実際のコードで埋めよ. ただし,(B) の面積計算はベクトルの内積を用いること. 注意 :java のユーティリティとして,Vector クラスが定義されているが, 上記のプログラムでは import していないので, クラス名 Vector を使っても構わない.java.util.Vector を import する場合は, 別クラス名にする. 4

演習問題 2-3( レジメ記載の問題と同じ ) 右図は受理機械としての有限オートマトン F A の例である ただし q0 を初期状態 q2 を受理状態とする 受理する言語は {(01) n n 1 1. FA には {0, 1 の入力記号系列が与えられる 2. 各状態で 入力系列 σ 0 σ 1...σ n 1 (n は 入力系列長 ) を受け取る 挙動は : (1) 先頭記号 σ 0 により次の状態 q next を決め (2) q next に残りの入力系列 σ 1...σ n 1 を渡し以後の処理を委ねる 3. 入力系列が空列 ( 記号が残っていない n =0) のときは 最終状態なら 受理 それ以外の場合は 非受理 のメッセージを出力し 全体の処理が終了 課題 : FA の動作を模倣するプログラム ( クラス State) を書くとして 必要なフィールドとメソッドを与え その型ならびにその挙動を説明せよ メソッド中で 別のオブジェクトに対するメソッド呼び出しを行う場合はそのことも明記すること 5

演習問題 2-4 ( レジメ記載の問題を詳細化したもの ) 授業科目には 通常の座学の講義を行う科目と 実験 演習科目に大別でき それらの成績集計方法は異なる 通常の座学の科目は 履修者名簿と期末試験の素点データを保持し 一方 実験 演習科目は 履修者毎に全部で 12 回のレポートの評点データを保持していると仮定する. 次頁のプログラムでは, 学生毎の, 座学および演習科目の成績を, それぞれ異なるクラス StudentRecordForLecture, StudentRecordForExercise として持たせている. 対応する, 座学および演習のクラス Lecture, Exercise は, それぞれ,StudentRecordForLecture の配列と StudentRecordForExercise の配列を, 内部フィールドとして保持する. 2-4-1. 受講学生は履修している科目毎に異なる. この事実は下記のプログラムのコードにおいて, どの箇所で表現されているかを答えよ. また, その理由も述べること. なお, 該当箇所は行番号を用いて指示せよ. 2-4-2. 科目のクラス Item は抽象クラスにした. この場合,(A1) 抽象クラスでなければならない,(A2) 抽象クラスにしてはいけない, あるいは,(A3) 抽象クラスにしても良い, のいずれであるかを答えよ. その際, 抽象クラスの定義や特徴に触れながら説明すること. 2-4-3. 設問 (A).double avg() は何の計算を行うメソッドかを述べよ 2-4-4. 設問 (B).Exercise クラスのコンストラクタ Exercise(String, StudentRecordForExercise[]) の定義を完成させよ. また, 自分が書いたコードの正当性も必ず述べること. 2-4-5. 演習, 座学を区別せずに, 全ての科目平均点の平均を求めるコードを与えよ. 新規のクラスを定義しても良いし, 次頁のクラスにメソッドを追加する形で与えてもよい 6

1. abstract class StudentRecord { 2. private String name; 3. abstract double score(); 4. StudentRecord(String name) {this.name=name; 5. 6. class StudentRecordForLecture extends StudentRecord{ 7. private int score; 8. double score() {return score; 9. StudentRecordForLecture(String name, int score) { 10. super(name); this.score = score; 11. 12. 13. class StudentRecordForExercise extends StudentRecord{ 14. private static final int noftimes = 12; 15. private int[] scores; 16. StudentRecordForExercise(String name, int[] rs) { 17. super(name); scores = rs; // rs.length == 12 等のチェックが必要だが 18. // 簡単のため省略 19. double score() { 20. double sum = 0.0; 21. for (int i=0;i<noftimes;i++) sum += scores[i]; 22. return sum/noftimes; 23. 24. 25. abstract class Item { 26. private String name; 27. private StudentRecord[] records; 28. Item(String name, StudentRecord[] records) { 29. this.name = name; this.records = records; 30. 31. double avg() { // 設問 (A) 32. double sum = 0.0; 33. for (int i=0; i<records.length;i++) sum += records[i].score(); 34. return sum/records.length; 35. 36. 37. class Lecture extends Item { 38. Lecture(String name, StudentRecordForLecture[] records) { 39. super(name, records); 40. 41. 42. class Exercise extends Item{ 43. Exercise(String name, StudentRecordForExercise[] records) { 44.... 設問 (B) 45. 46. 7