HK13

Similar documents
JavaプログラミングⅠ

プログラミング入門1

Java講座

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

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 条件判断文 3 switch 文 switch 文式が case の値と一致した場合 そこから直後の break; までを処理し どれにも一致しない場合 default; から直後の break; までを処理する 但し 式や値 1

ガイダンス

break 文 switch ブロック内の実行中の処理を強制的に終了し ブロックから抜けます switch(i) 強制終了 ソースコード例ソースファイル名 :Sample7_1.java // 入力値の判定 import java.io.*; class Sample7_1 public stati

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

スライド 1

Prog1_3rd

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

JavaプログラミングⅠ

Microsoft PowerPoint - prog03.ppt

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

メソッドのまとめ

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

Prog2_9th

Javaプログラムの実行手順

デジタル表現論・第4回

プログラミングA

Prog1_2nd

JavaプログラミングⅠ

人工知能入門

プログラミング入門1

プログラミングA

デジタル表現論・第6回

PowerPoint Presentation

Microsoft Word - VBA基礎(3).docx

プログラミング入門1

2

Microsoft PowerPoint - prog04.ppt

PowerPoint プレゼンテーション

2

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

Prog1_6th

Week 1 理解度確認クイズ解答 解説 問題 1 (4 2 点 =8 点 ) 以下の各問いに答えよ 問題 bit 版の Windows8.1 に Java をインストールする時 必要なパッケージはどれか 但し Java のコンパイルができる環境をインストールするものとする 1. jdk

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

PowerPoint プレゼンテーション

プログラミング基礎

PowerPoint プレゼンテーション

プログラミングA

Prog1_10th

JavaプログラミングⅠ

計算機プログラミング

JavaプログラミングⅠ

Microsoft PowerPoint - chap10_OOP.ppt

PowerPoint プレゼンテーション

Microsoft PowerPoint - C4(反復for).ppt

Microsoft PowerPoint - ruby_instruction.ppt

スライド 1

プログラミング入門1

pp2018-pp9base

Microsoft PowerPoint - CproNt02.ppt [互換モード]

kantan_C_1_iro3.indd

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

Java知識テスト問題

スライド 1

ToDo: 今回のタイトル

Prog1_10th

GEC-Java

プログラムの基本構成

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

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

Microsoft PowerPoint - prog09.ppt

JavaプログラミングⅠ

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

情報実習Ⅱ

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

Microsoft Word - no11.docx

「不動産リスト」を解く

Java プログラミング Ⅰ 3 回目変 数 今日の講義講義で学ぶ内容 変数とは 変数の使い方 キーボード入力の仕方 変 数 変 数 一時的に値を記憶させておく機能 変数は 型 ( データ型 ) と識別子をもちます 2 型 ( データ型 ) 変数に記憶する値の種類変数の型は 記憶できる値の種類と範囲

Microsoft PowerPoint - prog09.ppt

プログラミング入門1

メソッドのまとめ

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

Javaの作成の前に

ガイダンス

PowerPoint プレゼンテーション


プログラミング入門1

プログラミング実習I

JavaプログラミングⅠ

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

1. if~ 1.1. 確認を促す まずは簡単な分岐プログラムを作ってみましょう 以下はそのフローチャートです 開始 charc よろしいですか? (y/n) 変数 c の値が 'y' と等しいかどうか c c='y' Yes よろしいですね No 終了 1: 2: 3: 4: 5: 6: 7: 8

ガイダンス

ガイダンス

4-4 while 文 for 文と同様 ある処理を繰り返し実行するためのものだが for 文と違うのは while 文で指定するのは 継続条件のみであるということ for 文で書かれた左のプログラムを while 文で書き換えると右のようになる /* 読込んだ正の整数値までカウントアップ (for

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

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

C 言語第 3 回 2 a と b? 関係演算子 a と b の関係 関係演算子 等しい a==b 等しくない a!=b より大きい a>b 以上 a>=b より小さい a<b 以下 a<=b 状態 真偽 値 条件が満たされた場合 TRUE( 真 ) 1(0 以外 ) 条件が満たされなかった場合 F

プログラミング基礎

プログラミング入門1

Microsoft Word - 3new.doc

スライド 1

Program Design (プログラム設計)

試験問題に記載されている会社名又は製品名は, それぞれ各社の商標又は登録商標です なお, 試験問題では, 及び TM を明記していません

Microsoft PowerPoint - 3.pptx

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String

PowerPoint プレゼンテーション

Microsoft PowerPoint - lec06 [互換モード]

Transcription:

コンピュータプログラミング A 補助教材 (13) 授業第 14 回 2016.10 学ぶ上の心構え中間試験は一つの区切りでした. 初期の頃は与えられたものを打ち込んで所定のものが出れば満足としていましたが, これはゲームのルールを学ぶことに相当しました. 皆さんは基本ルールは完全にマスターしたことでしょう. 段々その中身が問題になって来ます. 最近は穴埋め形式の演習が増えていますが, 形だけでなく内容をしっかり理解していないと解けないことが分ったと思います. 試験は正にそうでしたね. 一定の範囲内ならプログラムは驚くほど自由に作ることができ, 意図通りちゃんと動いてくれます. 自分の意図通りのプログラムを自由自在に作るのが最終目標なのです. 課題を解くに当たって変数名や振る舞い ( メソッド ) 名など自分で工夫していますか. プログラム作りを少しまじめに勉強すると. 結構面白いことが分ってきます. 工夫をこらし, 楽しいプログラムや役に立つプログラムを自発的に作っていきましょう. 自分で創意工夫することは世の中的にもとても大切です. そのような力は若いうちに鍛えておけばどんどん伸びます. 今この若さで伸ばしてください. プログラムは自分の創造性を豊かにするにも格好の道具なのです. ふと思いついたことをプログラムにしようとするといろいろな限界にぶつかると思います. それを学習の原動力にするといいのです. ぜひそうしてください. 中間試験講評問題 1( クラス図からプログラムの機械的導出 ) DrawFrame main( args : String [ ] ) : void getlastdigit ( n : int ) : int getstring ( s : String, n : int ) : String 解答例 DrawFrame.java 1 //16JKxxx 2 public class DrawFrame{ 3 public static void main(string[] args){ 4 13-1

5 6 public static int getlastdigit(int n){ 7 return 0; 8 9 public static String getstring(string s, int n){ 10 return ""; 11 12 コメント機械的導出は基本中の基本です. 今後毎回のように出てくるのできちんとできないと差し支えがあります. この授業では特に指示がなくともプログラムを作るには機械的導出を経て行うようにしましょう. 今回の試験でこれができなかった人は今日の演習課題 3 を必ず行うようにしてください. 機械的導出時の返却値について ( 復習 ) 返却値が void の場合 return なし返却値が int の場合 return 0; 返却値が String の場合 return ; 適当なものを入れてもコンパイルが通る ( エラーが出ない ) こともありますが, 試験のときはルール通りでないと減点されます. またクラス図にないものを入れるのも厳禁です. 問題 2 変数 n に代入した数の下一桁を求め, その数の大きさの絵文字を表示するプログラム. API 仕様および実行例を参考にプログラムを完成. API 仕様 n = 15 の場合にプログラムを実行すると, 以下の表示を行います. main getlastdigit lastdigit:5 * *** ***** ******* ********* 引数 n で受け取った数の, 下一桁を返却します. ( 例 )getlastdigit(15) の場合は,5 を返却します. ( ヒント ) 13-2

n を 10 で割った余りが下一桁になります. 余りは % で求まります. int a = 123 % 10; a には 3 が入ります. 一番目の引数 s で受け取った文字列を, 二番目の引数 n で受け取った個数, 連結し getstring て返却します. ( 例 )getstring("*", 5) の場合 "*****" を返却します. 解答例 Draw.java 1 //16JKxxx 2 public class Draw{ 3 public static void main(string[] args){ 4 int n = 123; 5 int lastdigit = getlastdigit(n); 6 System.out.println("lastDigit:" + lastdigit); 7 for(int i = 0; i < lastdigit; i++){ 8 String s1 = getstring(" ", lastdigit - 1 - i); 9 String s2 = getstring("*", i * 2 + 1); 10 System.out.println(s1 + s2); 11 12 13 public static int getlastdigit(int n){ 14 return n % 10; 15 16 public static String getstring(string s, int n){ 17 String str = ""; 18 for(int i = 0; i < n; i++){ 19 str = str + s; 20 21 return str; 22 13-3

23 コメント前問とクラス名が異なるだけでクラス図は事実上同じなので前問でできたプログラムをコピーしてファイル名とクラス名を書き換えればプログラムの骨子ができます. 一見難しい印象があるかも知れないですがAPI 仕様を個別に満たすようにすれば全体として解けるようになっています. mainは記載されているのをそのまま打ち込みます. getlastdigitはapi 仕様にあるヒントを参考にすればできます. 問題の指示 (API 仕様 ) に素直に従わず実行例と同じものが出るようにと奮闘し失敗している人もいます. API 仕様を満たすプログラムが求められているのであって実行例と表示が合うプログラムを作るのは直接の目標ではありません. もちろん表示は合わなくてはいけないのですが. ちなみに今日の授業で学ぶif 文のプログラムでは例題のプログラムの中身はそれぞれ違いますが表示はほとんど毎回同じです. 表示は実行例を満たさなくてはなりませんが, 実行例を満たすプログラムなら何でもよい訳ではないことを胸にきざみましょう. getlastdigitの別解 : public static int getlastdigit(int n){ int x; x = n % 10; return x; わざわざ変数 x を定義して, x に答を入れた上 return 文で返していますが, 解答例の方が簡潔です. return 文には式を入れてよいのです. getstring は同じ問題を演習 (6.11 演習 6-3) で行いました. また補助教材 (12) で解説しています. 資料を参照するのは構わないのでそれを丸写ししても正解を得ることが可能でした. 17 String str = ""; の変数名は便宜的なものなので変数として可能なものなら何でもよいです. 文字列をつなぎ合わせていくときのデータを保存する場所を定義しご破算に相当する = "" とします. 18 20 行目はおなじみです. 15 return str; で結果を返却します. 試験時の機械的導出と完成版プログラムについて 13-4

以下は試験問題の DrawFrame.java と Draw.java を例にして, 手順に従って機械的導出後指示に従って作業し, 完成したプログラムを提出する場合を想定した説明です. 最初の問題で与えられたクラス図から機械的に導出したものを DrawFrame.java という名前で保存します. それをコンパイルしてエラーなしならひとまず完成です ( エラーが出たら, 出なくなるまで修正します ). 次の問題はクラス名は別ですがクラス図は事実上最初の問題と同じです ( そのようにわざわざ出題しています ). それに回答するにはゼロから作ってもよいのですが, 以下の方が簡単です. DrawFrame.java をコピーし Draw.java という名前で保存します. それを開き, クラス名を Draw とします. そのファイルを API 仕様および実行例を参考にして書き直します. 下では API 仕様および実行例を参考にして書き直すときの変更のありなしを注釈で入れます Draw.java 1 //16JKxxx 電大太郎 2 public class Draw { // DrawFrameを書き換える 3 public static void main(string[] args){ 4 // ここに指示通りのものを入れる 5 6 public static int getlastdigit(int n){ 8 return ""; // 書き直す 7 8 public static String jointwords(string s1, String s2){ 9 // ここにAPI 仕様を満たすように書き足す 10 return ""; // 書き直す 11 12 以上のように修正したら, 同じファイル名でそのまま ( 上書き ) 保存します. 当然ですが, 最初の機械的導出されたものの骨子 ( クラス図に表されているもの ) は変わらない状態となります. これをコンパイルします. エラーが出たら修正します. ただし, 機械的導出で得た骨子の部分は確認済なので変更は必要ないはずで, 新たに修正した部分だけが対象です. エラーが出なくなったら, クラス図, API 仕様および実行例を反映したプログラムができたことになります. これを提出することになります. もし, 機械的導出だけ終わってその後を行う時間がなくなったときはそのまま提出します. それでもいくらかは点をもらえます. 機械的導出ではエラーが 13-5

出なくなり, その後の作業の途中で終わった ( エラーが取れないなど ) ときはそのままの状態を 保存して提出します. 骨子の部分を変えてしまったりしていなければ, それなりの点はもらえ ます. またエラーが出ていても途中までそれなりにできていれば点をもらえます. 結果を入れるための変数 for 文で合計を求める場合や文字列をつなぎ合わせていくときは, 結果を入れるための変数を定義して初期化することが必要です. 合計の例 int sum = 0; 文字列の例 String message = ""; 仮の変数を自分で定義するのを嫌ってか振る舞いに与えられた引数の変数や振る舞い名を仮の結果を入れるための変数として流用する人がときどきいますがあまりよい習慣とは言えません. その場合奇妙な結果を招くことがあります. 必要なときは遠慮なく変数を定義しましょう. 変数名について変数名は文法上許されている範囲では何でもよいですが, 案外悩みがちです. 1 文字の変数名はfor 文のカウンタとしてよく使われます. 整数型でi, j, k, l, m, nなど. カウンタ以外にはごく短いプログラムを除き1 文字だけの変数は意味が分りにくいので避けるべきです. 合計ならsum, 平均値ならaverage, メッセージを意味する場合はmessage, 文字列としてstr など意味が分りやすい変数名を付けるように心がけましょう. averagetemperatureなど長くしてもよいのです. その場合変数名の先頭は小文字にし, 単語の区切りは大文字にする慣例です. 振る舞い名も同じ規則です. 英語を使うなら綴り字を正しくしましょう. またクラス名は先頭が大文字のほかは同じ慣例です. 変数名が慣例からあまり外れると見ずらくなります ( 例 int 型にmessage, String 型にi, sumなど ). 当面オンラインドキュメントなどの例をまねしましょう. 条件分岐条件分岐 1 if( 条件式 ){ 条件式が真 (true) の場合, 実行するソースコード public static void printweatherinformation(int temperature){ String message = " 真冬日ではありません "; if(temperature < 0){ 13-6

message = " 真冬日です (0 未満 )"; System.out.println(message); 条件分岐 2 if( 条件式 ){ 条件式が真 (true) の場合, 実行するソースコード else { 条件式が偽 (false) の場合, 実行するソースコード public static void printweatherinformation(int temperature){ String message = ""; if(temperature < 0){ message = " 真冬日です (0 未満 )"; else { message = " 真冬日ではありません "; System.out.println(message); if 文でもブロックの考えは重要です. 復習になりますが { で囲まれた範囲がブロックです. プログラムは原則上から下に1 行 (1 文 ) づつ動いて行きます. ブロックは外から見たら1 文と同じです. ブロックに入ったら同じ原理で動いて行きます. ブロックの中にまたブロックがあっても同じです. なのでいくら複雑そうに見えても基本原理は同じです. 上から下に1 文づつ動く, ブロックは1 文と同じと覚えておけばいいのです. if() のかっこ内を条件式といいます. 条件分岐 1では条件式が真 (true) のとき ( 成立という言い方もあります ) その後のブロックが実行されます. ブロックの中はたった1 行でもよいし何行もあってもよいのです. もし条件式が偽 (false) の場合 ( 成立しないとき ), 何もしません. 条件分岐 2では条件式が真のとき直後のブロックをそうでないとき ( 偽のとき ), else 以後のブロックを実行します. 代表的な論理演算子 13-7

優先順位 演算子 説明 1 () 式をまとめる 2! 論理値の否定 3 < より小さい 3 > より大きい 3 <= 以下 3 >= 以上 4 == 等しい 4!= 等しくない 5 && 論理値のAND 6 論理値のOR == や && を間違えて = や & とした場合, 文法的には間違いとならずコンパイルエラーが発 生しない場合があります ( もちろんプログラムとしては間違い ). 何度やり直してもプログラム が意図通りに動いてくれないときこの可能性があります. 13-8