東北大学全学教育科目 情報基礎 B 1 セメスター金曜 2 講時工学部 15, 16 組 JAVA 言語初級プログラム ( 基本 ) 建築 社会環境工学科
プログラミング コンピュータの言語は 0 と 1 で書かれる. 例えば 1 + sin 50 =??? + や sin, 50 を 0 と 1 で命令しなければならない このような命令文を ソフトウェア あるいは プログラム と呼ぶ 高級言語人がわかる言語 ( プログラム言語 ) 低級言語 機械がわかる言語 ( 0 と 1 の数字列 ) プログラム言語 (Java 言語や FORTRAN 言語など ) を用いて, 人がわかり易い表現で命令文を作り, それを機械語へ変換してプログラムを作っている. 情報基礎 B 2
機械語への変換 普通の人は 高級言語 でしかプログラミングができない. だから, それを機械語に 変換 する必要がある. ニーモニック言語 : アセンブルする Java や FORTRAN や C: BASIC: 高級言語 人がわかる言語 ( プログラム言語 ) コンパイルする インタープリットする 変換 低級言語 機械語 機械がわかる言語 ( 0 と 1 の数字列 ) 情報基礎 B 3
プログラミング 目的 : 計算のフロー制御や判断を正確にコンピュータに命令するプログラムを作るための基礎を学ぶ. この授業では Java 言語を用いるが, これは単なるプログラム言語の一例としてである. 多分将来は C や FORTRAN を使うことになる. Java のシステムはインターネットでダウンロードできるので, 自宅の PC にインストールして利用したい場合は, 例えば http://www.smg.co.jp/seminar/java/ のサイトなどを利用すると便利である. 情報基礎 B 4
UNIX コマンドの復習 コンソールを立ち上げて, プログラムファイルを作成する. 操作時の位置 情報基礎 B 5
UNIX コマンドの復習 コンソールを立ち上げて, プログラムファイルを作成する. ディレクトリ直下のファイル情報の表示 情報基礎 B 6
UNIX コマンドの復習 コンソールを立ち上げて, プログラムファイルを作成する. ディレクトリの新規作成 Java のプログラムを作るディレクトリを別に作っておこう. 情報基礎 B 7
UNIX コマンドの復習 コンソールを立ち上げて, プログラムファイルを作成する. 子ディレクトリへ移動 情報基礎 B 8
UNIX コマンドの復習 コンソールを立ち上げて, プログラムファイルを作成する. Kwrite の実行必ずバックグラウンドで実行そうでないとコンパイルができなくなる 情報基礎 B 9
プログラムの実行方法 ( 練習 ) 以前ダウンロードした 3ple.html より, 最初の簡単なプログラムをコピー ペーストを用いてテキストエディタ (Kwrite) に貼り付ける. 2. ファイル名を joho.java で保存する. 情報基礎 B 10
プログラムの実行方法 ( 練習 ) Java のプログラムファイルは, 拡張子を.java にする. 以前ダウンロードした 3ple.html より, 最初の簡単なプログラムをコピー ペーストを用いてテキストエディタ (Kwrite) に貼り付ける. 2. ファイル名を joho.java で保存する. 情報基礎 B 11
プログラムの実行方法 ソースファイルをコンパイルする. ソースファイル : プログラム言語 (Java 言語など ) でテキストエディタを使って作ったプログラムファイル. コンパイル : 人が理解できる言語からコンピュータが理解できる言語へ変換すること. クラスファイル : ソースファイルをコンパイルして作られた, コンピュータが理解できる言語ファイル. 情報基礎 B 12
プログラムの実行方法 ソースファイルをコンパイルする. javac joho.java と入力しエンターを押す. コンパイル対象のソースファイル コンパイルをするためのコマンド 情報基礎 B 13
プログラムの実行方法 ソースファイルをコンパイルする. クラスファイルができる. コンパイル完了!! 情報基礎 B 14
プログラムの実行方法 プログラムを実行する. java joho と入力しエンターを押す. クラスファイルのファイル名 ( 注意 ;.class は抜かす ) クラスファイルを読み, プログラムを実行するコマンド 情報基礎 B 15
プログラムの実行方法 プログラムを実行する. プログラムが実行され, ここでは Hello Java World! と表示された. サンプルはちょっと違って Hi, I am OK! となると思うが 情報基礎 B 16
ソースファイルの基本形 情報基礎 B 17
ソースファイルの基本形 たった一行だが, プログラム本体 情報基礎 B 18
ソースファイルの基本形 本体以外の部分は決まり文句!! Point:Java では で始まり で終わる!! 情報基礎 B 19
ソースファイルの基本形 本体以外の部分は決まり文句!! クラス名 Point: クラス名とファイル名は同じでなければならない!! 情報基礎 B 20
練習 プログラムを変更して, 別の一文を表示させてみよう. 1) 出力する文字を変更したら, ファイル保存をし 2) コンパイルし直し,(javac joho.java) 3) 実行する.(java joho) 自分が指定した一文が表示されるかどうか確認する!! 情報基礎 B 21
エラー わざとファイル名とクラス名を違うものにすると 情報基礎 B 22
エラー わざとファイル名とクラス名を違うものにすると コンパイルができず, 警告文が出る. 情報基礎 B 23
四則演算 public class joho public static void main(string args[]) throws IOException int a,b,c,d,e,f,g; a=7; b=3; c=a+b; d=a-b; e=a*b; f=a/b; g=a%b; System.out.println(c); System.out.println(d); System.out.println(e); System.out.println(f); System.out.println(g); 注意 大文字と小文字は異なる文字として区別される. 英数字は全角でなく, 半角で入力する. 空白も半角だよ!!!! 情報基礎 B 24
四則演算 public class joho public static void main(string args[]) throws IOException int a,b,c,d,e,f,g; a=7; b=3; c=a+b; d=a-b; e=a*b; f=a/b; g=a%b; System.out.println(c); System.out.println(d); System.out.println(e); System.out.println(f); System.out.println(g); 整数変数の宣言 a,b,c,d,e,f, g を整数の変数として定義 情報基礎 B 25
四則演算 public class joho public static void main(string args[]) throws IOException int a,b,c,d,e,f,g; a=7; b=3; c=a+b; d=a-b; e=a*b; f=a/b; g=a%b; System.out.println(c); System.out.println(d); System.out.println(e); System.out.println(f); System.out.println(g); a=7,b=3 と定義 情報基礎 B 26
四則演算 public class joho public static void main(string args[]) throws IOException int a,b,c,d,e,f,g; a=7; b=3; c=a+b; d=a-b; e=a*b; f=a/b; g=a%b; System.out.println(c); System.out.println(d); System.out.println(e); System.out.println(f); System.out.println(g); 四則演算の実施 + x+y x と y の加算 - x-y x と y の除算 * x y x と y の乗算 / x y x と y の除算 % x%y y で割った余り 情報基礎 B 27
四則演算 public class joho public static void main(string args[]) throws IOException int a,b,c,d,e,f,g; a=7; b=3; c=a+b; d=a-b; e=a*b; f=a/b; g=a%b; System.out.println(c); System.out.println(d); System.out.println(e); System.out.println(f); System.out.println(g); a,b,c,d,e,f, g をディスプレイ表示 情報基礎 B 28
四則演算 public class joho public static void main(string args[]) throws IOException int a,b,c,d,e,f,g; a=7; b=3; c=a+b; d=a-b; e=a*b; f=a/b; g=a%b; System.out.println(c); System.out.println(d); System.out.println(e); System.out.println(f); System.out.println(g); 注意 : 一つ一つのコマンドの終わりにはセミコロン ; が付く! 情報基礎 B 29
四則演算 public class joho public static void main(string args[]) throws IOException int a,b,c,d,e,f,g; a=7; b=3; c=a+b; d=a-b; e=a*b; f=a/b; g=a%b; System.out.println(c); System.out.println(d); System.out.println(e); System.out.println(f); System.out.println(g); 注意 : スペース ( 半角!) や改行はプログラムの内容へは影響しない. 見やすさ 間違いの見つけやすさ のために, 適宜スペース ( 半角 ) や改行をする. 情報基礎 B 30
四則演算 : 実行すると public class joho public static void main(string args[]) throws IOException int a,b,c,d,e,f,g; a=7; b=3; c=a+b; d=a-b; e=a*b; f=a/b; g=a%b; System.out.println(c); System.out.println(d); System.out.println(e); System.out.println(f); System.out.println(g); 割り算注意 : あとで説明 情報基礎 B 31
変数の宣言 public class joho public static void main(string args[]) throws IOException double a,b,c; a=10.0; b=3.0; c=a/b; System.out.println(c); 実数変数の宣言 a,b,c を実数の変数として定義 情報基礎 B 32
変数の宣言 public class joho public static void main(string args[]) throws IOException double a,b,c; a=10.0; b=3.0; c=a/b; System.out.println(c); 実数変数の宣言 a,b,c を実数の変数として定義 今度は小数点以下も覚えてくれる 情報基礎 B 33
変数の宣言 public class joho public static void main(string args[]) throws IOException double kyori,zikann,sokudo; kyori=10.0; zikann=3.0; sokudo=a/b; System.out.println(sokudo); 宣言する変数は一文字でなくても大丈夫! 情報基礎 B 34
変数の宣言 public class joho public static void main(string args[]) throws IOException int a,b,c; a=10; b=3; c=a/b; System.out.println(c); 整数変数とすると 情報基礎 B 35
変数の宣言 public class joho public static void main(string args[]) throws IOException int a,b,c; a=10; b=3; c=a/b; System.out.println(c); 整数変数とすると a,b,c は整数として扱われ, 小数点以下は捨てられてしまう. さっきと同じ! わざとそうしたい場合でなければ, 大きな間違いになる可能性がある!! 情報基礎 B 36
変数の宣言 public class joho public static void main(string args[]) throws IOException int a,b,c; a=10; b=3; c=a/b; String d; d="a/b"; System.out.println(d); System.out.println(c); 文字列の宣言 情報基礎 B 37
変数の宣言 public class joho public static void main(string args[]) throws IOException int a,b,c; a=10; b=3; c=a/b; String d; d="a/b"; System.out.println(d); System.out.println(c); 文字情報は " で挟む. 情報基礎 B 38
変数の宣言 public class joho public static void main(string args[]) throws IOException int a,b,c; a=10; b=3; c=a/b; String d; d="a/b"; System.out.println(d); System.out.println(c); 情報基礎 B 39
変数の宣言 public class joho public static void main(string args[]) throws IOException double a=10.0; double b=2.0; double c=a/b/b; System.out.println(c); c=c/b; System.out.println(c); 変数の宣言と他の命令を一文でまとめて行っても良い. 情報基礎 B 40
変数の宣言と算術代入文 public class joho public static void main(string args[]) throws IOException double a=10.0; double b=2.0; double c=a/b/b; System.out.println(c); c=c/b; System.out.println(c); 同じ変数を何度使っても良い 同じ変数を再定義することもできる. 代入文は最初は難しいよ! 情報基礎 B 41
変数の宣言 : 実行すると public class joho public static void main(string args[]) throws IOException double a=10.0; double b=2.0; double c=a/b/b; System.out.println(c); c=c/b; System.out.println(c); 代入文は最初は難しいよ! 情報基礎 B 42
算術代入文 : 大学生最初の挫折 public class dainyu public static void main(string args[]) throws IOException int a; a=1; ここと! a=a+2; System.out.println(a); a=a*5; System.out.println(a); ここ! 果たして? 表示される a の値は? 情報基礎 B 43
算術代入文 : 最初の挫折 public class dainyu public static void main(string args[]) throws IOException int a; a=1; a=a+2; System.out.println(a); a=a*5; System.out.println(a); つまり! ある変数の最後の値がメモリの中に 保持されている ことと, 右辺の結果が左辺の変数に 代入されるだけ ということを理解すること! = は という意味と考えればいい. 情報基礎 B 44
もう一度! 代入文の不思議 右辺にも a があり, 左辺にも a がある. これは一体????? 右辺の結果は CPU のレジスタに一時的に置かれるそれがメモリの a の値に重ね書きされるまでは a の値は不変! 代入文とは a のメモリにレジスタの結果を書き込むこと! 挫折せずに, ともかくも, 習うより慣れろ! 情報基礎 B 45
演算の優先順位 乗除が加減より優先 : 特に割り算に注意! 情報基礎 B 46
算術演算子 ( 関数 ) public class joho public static void main(string args[]) throws IOException double a=-10.0; double b=5.0; a double c=math.pow(a,b); e a System.out.println(c); ln(a) System.out.println(Math.sqrt(b)); a b a Math.abs(a) Math.exp(a) Math.log(a) Math.pow(a,b) Math.sqrt(a) 情報基礎 B 47
算術演算子 ( 関数 ) public class joho public static void main(string args[]) throws IOException double a=-10.0; double b=5.0; double c=math.pow(a,b); System.out.println(c); System.out.println(Math.sqrt(b)); ディスプレイ表示の命令文中でも計算可能 情報基礎 B 48
算術演算子 ( 関数 ) public class joho public static void main(string args[]) throws IOException double a=-10.0; double b=5.0; double c=math.pow(a,b); System.out.println(c); System.out.println(Math.sqrt(b)); ディスプレイ表示の命令文中でも計算可能 情報基礎 B 49
キーボード入力 public class joho2 public static void main(string args[])throws IOException double a,b,c; String strx,stry; // Object making for input BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("a/c ="); System.out.println("a="); strx = br.readline(); a= Double.parseDouble(strx); System.out.print("b="); stry = br.readline(); b= Double.parseDouble(stry); c=a/b; System.out.println("a/b=" + c); 情報基礎 B 50
キーボード入力 public class joho2 public static void main(string args[])throws IOException double a,b,c; String strx,stry; // Object making for input BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("a/c ="); System.out.println("a="); strx = br.readline(); a= Double.parseDouble(strx); System.out.print("b="); stry = br.readline(); b= Double.parseDouble(stry); c=a/b; System.out.println("a/b=" + c); キーボードから入力された情報を一時的に蓄える br というバッファ( 一時保管庫 ) を作っておく キーボード入力を使うときのおまじない 情報基礎 B 51
キーボード入力 public class joho2 public static void main(string args[])throws IOException double a,b,c; String strx,stry; // Object making for input BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("a/c ="); System.out.println("a="); strx = br.readline(); a= Double.parseDouble(strx); System.out.print("b="); stry = br.readline(); b= Double.parseDouble(stry); 字を読み込むコマンド. c=a/b; System.out.println("a/b=" + c); キーボードからバッファに入力された文 一度読み込むと, 次にキーボードから入力するまでバッファは空になる. 情報基礎 B 52
キーボード入力 public class joho2 public static void main(string args[])throws IOException double a,b,c; String strx,stry; // Object making for input BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("a/c ="); System.out.println("a="); strx = br.readline(); a= Double.parseDouble(strx); System.out.print("b="); stry = br.readline(); b= Double.parseDouble(stry); c=a/b; System.out.println("a/b=" + c); キーボード入力された情報は文字列として扱わなければならない. 情報基礎 B 53
キーボード入力 public class joho2 public static void main(string args[])throws IOException double a,b,c; String strx,stry; // Object making for input BufferedReader br = 整数への変換 :Integer.parseInt(***) new BufferedReader(new InputStreamReader(System.in)); System.out.println("a/c ="); System.out.println("a="); strx = br.readline(); a= Double.parseDouble(strx); System.out.print("b="); stry = br.readline(); b= Double.parseDouble(stry); c=a/b; System.out.println("a/b=" + c); 実数への変換 :Double.parseDouble(***) そして, その文字列を実数へ変換して計算に使う ちと面倒かな 情報基礎 B 54
キーボード入力間違った方法 public class joho2 キーボード入力された情報を実数型として扱うと public static void main(string args[])throws IOException double a,b,c; // Object making for input BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("a/c ="); System.out.println("a="); a = br.readline(); System.out.print("b="); b = br.readline(); c=a/b; System.out.println("a/b=" + c); 情報基礎 B 55
キーボード入力間違った方法 public class joho2 public static void main(string args[])throws IOException double a,b,c; // Object making for input BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("a/c is calculated"); System.out.println("a="); a = br.readline(); System.out.print("b="); b = br.readline(); c=a/b; System.out.println("a/b=" + c); キーボード入力された情報を実数型として扱うと コンパイル時に, エラーとなる!! 情報基礎 B 56
コンソールへの出力 ( 表示 ) public class joho2 public static void main(string args[])throws IOException System.out.println; 一行の表示で改行される. System.out.print; 一行の表示で改行されない. double a,b,c; String strx,stry; // Object making for input BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("a/c ="); System.out.println("a="); strx = br.readline(); a= Double.parseDouble(strx); System.out.print("b="); stry = br.readline(); b= Double.parseDouble(stry); c=a/b; System.out.println("a/b=" + c); 情報基礎 B 57
プログラム中のコメント ( メモ書き ) public class joho2 public static void main(string args[])throws IOException double a,b,c; String strx,stry; // Object making for input BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("a/c ="); System.out.println("a="); strx = br.readline(); a= Double.parseDouble(strx); System.out.print("b="); stry = br.readline(); b= Double.parseDouble(stry); c=a/b; System.out.println("a/b=" + c); //~~ とすると~~は無視される. プログラムを分かりやすくするために用いるメモ書き. 情報基礎 B 58
練習 キーボードから二つの整数を読み込んで, 四則計算と余り (a = b % c は b を c で割った余りが a に記憶される ) の計算をして, その結果を表示するプログラムを作成せよ. ダウンロードした 3ple.html のテンプレートから必要な箇所をコピーして自分のファイルに貼り付けて, Calculate.java というファイルに保存し, 引き算などを追加した上でコンパイルして実行し, 正しい結果がでることを確認せよ. 情報基礎 B 59
練習 最初に a=0 にして,1 から 10 まで足していくプログラムを作り, 結果が 55 になることを確認せよ. public class dainyu public static void main(string args[]) throws IOException int a; a=0; a=a+1; a=a+2; a=a+3; などなど続ける. 泥臭く 10 行のプログラムにしていい. もっとカッコいい方法はあと学習するので System.out.println(a); 情報基礎 B 60