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

35
プププププププププ I( プ ) プププ

Upload: patia

Post on 09-Jan-2016

29 views

Category:

Documents


1 download

DESCRIPTION

プログラミング基礎 I( 再 ). 山元進. 注意事項. 1度は講義を受けたことを念頭に置いて講義 遠慮なく質問せよ 質問で授業を止めたくないならば、 TA の人を呼んで質問すると良い 前期講義の欠席者は、特に注意せよ。 4 限 座学 +5 限演習 出席をとる ( 前期同様のシステム ) 中間試験を行う。 期末試験の範囲は教科書 1-8 章. はじめに. しばらく、 Java に限らないことを話す. コンピュータ中のデータ と 2 進数. コンピュータ中のデータ = ON/OFF で表現 ON/OFF → 1/0 とすると 2 進数 - PowerPoint PPT Presentation

TRANSCRIPT

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

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

山元進

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

注意事項 1度は講義を受けたことを念頭に置いて

講義 遠慮なく質問せよ

質問で授業を止めたくないならば、 TA の人を呼んで質問すると良い

前期講義の欠席者は、特に注意せよ。 4 限座学 +5 限演習 出席をとる ( 前期同様のシステム ) 中間試験を行う。 期末試験の範囲は教科書 1-8 章

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

はじめに しばらく、 Java に限らないことを話す

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

コンピュータ中のデータと 2 進数 コンピュータ中のデータ = ON/OFF で表

現 ON/OFF → 1/0 とすると 2 進数 データはすべて2進数として表される 2 で繰り上がるのが 2 進数

10 で繰り上がるのが 10 進数 2 進数はケタ多い → 16 進数もよく使う

0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F 16 進数 1 ケタ = 2 進数 4 ケタ

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

高級言語 コンピュータへの指令も 2 進数のデータ

として記録されている → 機械語 機械語は、人間がコンピュータにさせた

いことを記述するには不向き 数字の羅列は覚えにくい!

人間の言語体系になるべく近いように作られた言語 : 高級言語

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

データ型 データは全て2進数で表されているが、

そのデータを文字と解釈するか、数値と解釈するか、あるいはもっと複雑なデータと解釈するか → データの型 数値として解釈するなら数値型 文字として解釈するなら文字型 …

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

10 進数→ 2 進数 問 : 2010 を 2 進数で表せ

… 210 = 1024, 211 = 2048 (10 進数 ) 2048-32-4-2 (2 進数 ) 100000000000

– 100110 (32+4+2)= 11111011010

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

2 進数→ 16 進数 問 : 2 進表記された数 1110011000 を

16 進表記に直せ 11 1001 1000 (4 ケタずつ切る ) 398

ただ文字を並べても、位取りの意味が不明瞭 Java では、 16 進数の先頭に 0x 付加

0x398 → 10 進数なら (3×16+9)×16+8=920 16 進数 hexadecimal

類似物に 8 進数あり。先頭に 0 付加 0123 と 123 は値が全く違うので注意 !!

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

文字→ 2 進数 (or 16 進数 ) 文字と数との対応表を事前に決めておく

ASCII コード アルファベット、数字、記号 → 1 バイト

ユニコード 2 バイトで 1 単位、 1   or   2 単位で 1 文字

文字を表すデータを文字型、 char 型

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

数値→ 2 進数 ( 整数 ) 正の整数はそのまま扱う

ただし、ケタ数は決めておく 31 ビット分 負の数は2の補数表示を使う

-1 を 0xffffffff であらわす +1 するとケタがあふれて 0x0 になるので

こう選ぶ 一般の数 x は2の補数表示:

x を2進表示 → 0/1 反転 → 1 を足す ( 符号なしの整数もある )

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

数値→ 2 進数 ( 整数以外 ) 実数は全部を取り扱うのは困難

√2=1.41421356…. 桁数に限りがない→必要メモリも限りない

仮数部 × 指数部 分かりやすいよう 10 進表示すると

123.456 → 1.23456 × 102

倍精度実数 : double 型 1 つのデータで8バイト

単精度実数 : float 型 1 つのデータで 4 バイト

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

メモリとアドレス メモリ = データを記憶する場所 記憶場所管理のため番号の番号  = アド

レス 通常、 8 ビット (8 ケタの 2 進数 ) = 1 バ

イト ごと 1 byte = 2 ケタの 16 進数

0x00 = メモリの 1 バイト分 02進数表記なら 00000000 (8 ケタ )

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

変数と定数 変数

プログラム実行中に変更され得るデータ 通常、メモリの特定の場所と対応している

定数 プログラム実行中に変更されないデータ

通常、変数や定数には、ラベル(名前)が付く 例: int k; // k という名前の整数 (int) 型変数

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

ここからは Java の話

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

Java 高級言語のひとつ 中間コード利用

仮想マシン ( インタプリタ ) で実行 Java のプログラム実行まで

kasuJava 言語で書かれたプログラムSample1.java

中間コードSample1.clas

s

実行結果

コンパイルjavac

Sample1.java

実行java

Sample1

仮想マシン上

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

プログラムを書いてみる 後でどこにサンプルを置いたかわかりや

すいよう、 Kiso1-1 などとディレクトリを作り、その中で作業するとよい。mkdir Kiso1-1; cd Kiso1-1

Sample1.java を作成して編集するemacs Sample1.java 文字コードに注意 (左下に U と出ている

か? ) 書き終わったら save して終了

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

Sample1.javaclass Sample1{public static void main(String args[]){

System.out.println(" ようこそ Javaへ !");

System.out.println("Java を始めましょう !");}

}

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

プログラムを書く際の注意 {} の入れ子構造を字下げで表す。 対応する { と } が、同じケタに来るように。class Sample1{ public static void main(String args[])

{                  System.out.println(

" ようこそ Java へ !");System.out.println("Javaを始めましょう !");

} }

上のような書き方は、 Java の文法上許されるが、私は許さない ! 提出課題などでこんなの見つけたら減点する

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

コメントを記述する プログラム中にコメント(註釈)を書け

る 1 行の中で , // の右はコメント /* と */ とに囲まれた部分はコメント コメントに何を書いても実行結果に影響な

し コメントは、コードを読む人のために書

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

コメントの例class Sample1 // クラスの宣言 クラス名は Sample1{ // クラス Sample1 本体の開始// 次行から main() メソッド ( 実行開始場所 ) の宣言public static void main(String args[]){ // main() メソッド本体の開始

System.out.println(" ようこそ Java へ !");System.out.println("Java を始めましょう !");

} // main() メソッド定義の終了} // クラス定義の終了// メソッド、クラスの宣言とも、続く {} の中身が本体である// メソッドの宣言が、クラスの宣言の中に入れ子になってい

る// クラスの概念の詳細は、後の回の講義で行う

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

Sample1.java  の説明class Sample1 // クラスの宣言{ // コメント (人間が読むときのための註)public static void main(String args[]){ // main メソッドの宣言 ( 仮想マシンの実行開始場所 )

System.out.println(" ようこそ Java へ !");System.out.println("Java を始めましょう !");

}}// メソッド、クラスの宣言とも、続く {} の中身が本体である// メソッドの宣言が、クラスの宣言の中に入れ子になっている// クラスの概念の詳細は、後の回の講義で行う

ファイル名 (拡張子を除く ) と同じにすること!

文末のセミコロン必須 (次行も同様 )

カッコの対応関係には意味あり。開いたら、必ず正しい位置で閉じる

こと(次行も同様 )

"(ダブルクォーテイション ) は、開くときも閉じるときも同じ記号。対応関係に注意。

" と " で囲まれた部分は文字列データで、全角 OK 。それ以外では全角不可

特に、全角スペースが文字列データ以外の部分に混じらないように!!

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

重要なポイント Java のコードは1つ以上のクラスからなりたつ main() メソッドからプログラムの処理がはじま

る 文は原則として先頭から順番に実行される 文の最後にはセミコロンをつける

コメントは人間がコードを理解しやすくするために書く ( 実行動作には関係しない )

インデントや改行を使ってコードを読みやすく

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

プログラムのコンパイル→実行 コンパイル

javac Sample1.javaエラーなし → Sample1.class できる (ls で確認 )

実行java Sample1 Sample1.class が仮想マシンで実行される Sample1 の後に .class をつけるな!!

プログラムの書き間違い、手順違い→エラー出力 読めば何を間違えたか参考になる

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

リテラル literal → 通常は形容詞で、「文字どおり

の」 名詞としては、文字どおりの解釈・意味

プログラムで値を表す文字列 Sample1.Java 中では

" ようこそ Java へ !" "Java を始めましょう !"

の2つが文字列リテラル。データの内容は ようこそ Java へ ! Java を始めましょう !

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

文字リテラル,文字列リテラル 文字リテラルの例

'A', 'B' 文字列リテラルの例

" ようこそ Java へ !" ' と " の使い分けに注意

' は 1 文字を囲む " は文字列を囲む

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

数値リテラル 数値リテラルの例

System.out.println(0x398); 0x398 は数値リテラル ( 整数リテラル ) 920 と表示される ( 整数はデフォルトで 10 進表

記 ) System.out.println(3.14159265e2);

3.14159265e2 は浮動小数点 ( 数 ) リテラル 314.159265 と表示される (3.1415926 × 102)

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

Sample3.javaclass Sample3{public static void main(String args[]){

System.out.println('A'); // 文字リテラルSystem.out.println(" ようこそ Java へ !");System.out.println(123); // 整数リテラル

}}

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

画面への出力次のようなメソッドを使う

System.out.println() System.out.print() 問 : 両者の違いはなにか?次のページの

Sample2.java をコンパイルして動かしてみよ

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

Sample2.javaclass Sample2{public static void main(String args[]){

System.out.print(" ようこそ Java へ !");System.out.print("Java を始めましょ

う !");}

}// Sample1 と Sample2 の違いは何か?// 見比べて考え、実行して確かめてみよ。

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

エスケープシーケンス 複数の文字で 1 文字を表す規則 画面の出力を制御する、特殊な文字など

普通の文字で表せない そこで、 \ 文字 などで表す規則になっている タブ → 印字位置を前もって決めた場所へ移動 復帰→ 印字位置を行の先頭に移動

Java プログラム中で特別な意味のある文字 \ → \\ ' → \' " →\" など System.out.println("\\100"); // 例

文字コードで文字を表すのにも使える 教科書 表 2-1 を参照せよ

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

Sample4.javaclass Sample4{

public static void main(String args[]){

System.out.println("円記号を出力します。 :\\");System.out.println(" アポストロフィを出力しま

す。 :\'");}

}// エスケープシーケンスを使うと、特殊な文字をあらわすことができる。

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

Sample5.javaclass Sample5{ public static void main(String args[]) { System.out.println("8 進数 101 の文字は \101 です。 "); System.out.println("16 進数 0061 の文字は \u0061 です。

"); }}// 文字コードを指定して 文字を出力することができる

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

Sample6.javaclass Sample6{ public static void main(String args[]) { System.out.println("品物 \t\t 単価 \t 数量 \t金額 ");

System.out.println(" えんぴつ \t10\t2\t20"); System.out.println("消しゴム \t100\t1\t100"); }}// エスケープシーケンスを使って、画面の出力を制御できる// タブストップ( \t によって印字位置が移動する場所)// はどこに設定されているか考えよ。ヒント:半角文字換算

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

課題 1.自分の名前を出力するプログラムを作成せ

よ。 2.「タブ」記号を表すエスケープシーケンス

(¥t) を使用し、以下例のように氏名、学籍番号、学部を出力するプログラムを記述せよ。氏名 山元進学籍番号 c0110999学部 コンピュータサイエンス学部

文字列の開始位置 \t でそろえること!!

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

課題提出の注意提出は 課題 2 のみ課題 2 の class 名は Report2 とせよ

必然的に、ファイル名も決まる時間内に TA の許可を受けること

許可のない提出は未提出と同じ扱い