プログラミング基礎I(再) 山元進.

Slides:



Advertisements
Similar presentations
山元進.  今日 総合的な演習  来週  中間試験  期末と中間両方受けて初めて成績が付く  どちらかを欠席したら 成績表は X  期末試験:適切な理由があれば追試が受けられる  適切な理由であるかの判定のため、診断書などを持参せ よ  対外試合に参加、などの理由は基本的に認めない.
Advertisements

山元進.  for 文  while 文  do ~ while 文  文のネスト  break 文  continue 文.
7章 情報の表現と基礎理論. 数の表現(書き方) 「数」と「数の書き方」をわけて考える 「数の書き方」と,「数そのものの性質」は別のもの 例:13 は素数・・・”13”という書き方とは無関係 ここでは書き方(表現方法)について考える 567.
プログラミング実習 1 ・ 2 ク ラス 第 2 週目 担当教員 : 渡邊 直樹. 課題 2 ● 2 × 2型行列の固有値, 固有ベクトルを求め る EigMatrix.java というプログラムを作成せ よ。 ● 行列の各要素はコマンド・プロンプトから入力 ● 計算した結果もコマンド・プロンプトに表示.
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
応用理工学情報処理 第1回(2015年10月 5日) 月曜日担当 前島展也 Manaba
プログラミング基礎I(再) 山元進.
プログラミング基礎I(再) 山元進.
Java I 第2回 (4/18)
1.1 C/C++言語 Hello.ccを作りコンパイルしてa.outを作り出し実行する
プログラミング基礎I(再) 山元進.
プログラミング基礎I(再) 山元進.
数値計算及び実習 第3回 プログラミングの基礎(1).
情報工学基礎(改訂版) 岡崎裕之.
アルゴリズムとプログラミング (Algorithms and Programming)
基礎プログラミングおよび演習 第9回
第5回 ディジタル回路内の数値表現 瀬戸 ディジタル回路内部で,数を表現する方法(2進数)を学ぶ 10進数⇔2進数⇔16進数の変換ができる
プログラミング演習Ⅱ 第12回 文字列とポインタ(1)
プログラミング基礎I(再) 山元進.
C言語 第2講 生物機能制御学講座 濱田 農学部7号館209室.
プログラミング入門2 第1回 導入 情報工学科 篠埜 功.
プログラミング基礎I(再) 山元進.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
String - 文字列 2009年10月9日 7ADD2116 佐藤洋輔.
プログラミング演習II 2004年10月19日(第1回) 理学部数学科・木村巌.
プログラミング実習 1・2 クラス 第 1 週目 担当教員:  渡邊 直樹.
プログラミングIII演習 第1回目.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
初年次セミナー 第2回 文字の出力.
トキのカタチ2016 電子工作(Arduino)講習
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
【プログラミング応用】 必修2単位 通年 30週 授業形態:演習.
プログラミング言語入門 手続き型言語としてのJava
JAVA入門.
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
第二回 VB講座 電卓を作ろう.
プログラミング応用 printfと変数.
独習XML 第2章 XML文書の構成要素 2.1 XMLの文字と文字列 2.2 コメント
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング演習I 2003年5月7日(第4回) 木村巌.
第1回 プログラムの基本 他人が読めるプログラムを書く.
地域情報学 C言語プログラミング 第1回 導入、変数、型変換、printf関数 2016年11月11日
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
2013年度 プログラミングⅡ ~ 計算してみよう ~.
2015年度 プログラミングⅡ ~ 計算してみよう ~.
情報処理Ⅱ 第2回:2003年10月14日(火).
プログラミング演習I 2004年5月19日(第5回) 理学部数学科・木村巌.
C言語 はじめに 2016年 吉田研究室.
オブジェクト プログラミング 第2回 プログラムの基本.
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング演習I 2003年4月30日(第3回) 木村巌.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
計算機プログラミングI 第3回 プリミティブ値 クラスメソッド クラス変数 式と演算 変数の利用
基本情報技術概論(第13回) 埼玉大学 理工学研究科 堀山 貴史
情報処理Ⅱ 第2回 2005年10月14日(金).
情報処理Ⅱ 第2回 2006年10月13日(金).
標準入出力、変数、演算子、エスケープシーケンス
Visual Studio 2013 の起動と プロジェクトの新規作成 (C プログラミング演習,Visual Studio 2019 対応) 金子邦彦.
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
プログラミング 4 文字列.
プログラミング演習I 数値計算における計算精度と誤差
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
情報処理Ⅱ 第2回 2004年10月12日(火).
情報処理Ⅱ 2005年11月25日(金).
プログラミング入門2 第5回 配列 変数宣言、初期化について
printf・scanf・変数・四則演算
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
第1章 文字の表示と計算 printfと演算子をやります.
Presentation transcript:

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

注意事項 1度は講義を受けたことを念頭に置いて講義 遠慮なく質問せよ 4限座学+5限演習 出席をとる(前期同様のシステム) 中間試験を行う。 質問で授業を止めたくないならば、TA の人を呼んで質問すると良い 前期講義の欠席者は、特に注意せよ。 4限座学+5限演習 出席をとる(前期同様のシステム) 中間試験を行う。 期末試験の範囲は教科書 1-8 章

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

コンピュータ中のデータと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 ケタ

高級言語 コンピュータへの指令も2進数のデータとして記録されている → 機械語 機械語は、人間がコンピュータにさせたいことを記述するには不向き 数字の羅列は覚えにくい! 人間の言語体系になるべく近いように作られた言語 : 高級言語

データ型 データは全て2進数で表されているが、そのデータを文字と解釈するか、数値と解釈するか、あるいはもっと複雑なデータと解釈するか → データの型 数値として解釈するなら数値型 文字として解釈するなら文字型 …

10進数→2進数 問: 2010 を2進数で表せ … 210 = 1024, 211 = 2048 (10進数) 2048-32-4-2 (2進数) 100000000000 – 100110 (32+4+2) = 11111011010

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 は値が全く違うので注意!!

文字→2進数 (or 16進数) 文字と数との対応表を事前に決めておく 文字を表すデータを文字型、char 型 ASCII コード アルファベット、数字、記号 → 1バイト ユニコード 2バイトで1単位、1 or 2単位で1文字 文字を表すデータを文字型、char 型

数値→2進数 (整数) 正の整数はそのまま扱う 負の数は2の補数表示を使う (符号なしの整数もある) ただし、ケタ数は決めておく 31 ビット分 負の数は2の補数表示を使う -1 を 0xffffffff であらわす +1 するとケタがあふれて 0x0 になるのでこう選ぶ 一般の数 x は2の補数表示: x を2進表示 → 0/1 反転 → 1 を足す (符号なしの整数もある)

数値→2進数(整数以外) 実数は全部を取り扱うのは困難 倍精度実数 : double 型 単精度実数 : float 型 √2=1.41421356…. 桁数に限りがない→必要メモリも限りない 仮数部 × 指数部 分かりやすいよう 10 進表示すると 123.456 → 1.23456 × 102 倍精度実数 : double 型 1つのデータで8バイト 単精度実数 : float 型 1つのデータで4バイト

メモリとアドレス メモリ = データを記憶する場所 記憶場所管理のため番号の番号 = アドレス 1 byte = 2 ケタの 16 進数 記憶場所管理のため番号の番号 = アドレス 通常、8 ビット (8 ケタの 2 進数) = 1 バイト ごと 1 byte = 2 ケタの 16 進数 0x00 = メモリの 1 バイト分 0 2進数表記なら 00000000 (8ケタ)

変数と定数 変数 定数 通常、変数や定数には、ラベル(名前)が付く プログラム実行中に変更され得るデータ 通常、メモリの特定の場所と対応している 定数 プログラム実行中に変更されないデータ 通常、変数や定数には、ラベル(名前)が付く 例: int k; // k という名前の整数(int) 型変数

ここからは Java の話

Java 高級言語のひとつ 中間コード利用 Java のプログラム実行まで kasu 仮想マシン(インタプリタ)で実行 Sample1.java 中間コード Sample1.class 実行結果 コンパイル javac Sample1.java 実行 java Sample1 仮想マシン上

プログラムを書いてみる 後でどこにサンプルを置いたかわかりやすいよう、Kiso1-1 などとディレクトリを作り、その中で作業するとよい。 mkdir Kiso1-1; cd Kiso1-1 Sample1.java を作成して編集する emacs Sample1.java 文字コードに注意(左下に U と出ているか?) 書き終わったら save して終了

Sample1.java class Sample1 { public static void main(String args[]) System.out.println("ようこそJavaへ!"); System.out.println("Javaを始めましょう!"); }

プログラムを書く際の注意 {} の入れ子構造を字下げで表す。 対応する { と } が、同じケタに来るように。 class Sample1 { public static void main(String args[]) {                  System.out.println( "ようこそJavaへ!");System.out.println("Javaを始めましょう!"); } 上のような書き方は、Javaの文法上許されるが、私は許さない! 提出課題などでこんなの見つけたら減点する

コメントを記述する プログラム中にコメント(註釈)を書ける 1 行の中で, // の右はコメント /* と */ とに囲まれた部分はコメント /* と */ とに囲まれた部分はコメント コメントに何を書いても実行結果に影響なし コメントは、コードを読む人のために書く

コメントの例 class Sample1 // クラスの宣言 クラス名は Sample1 { // クラス Sample1 本体の開始 // 次行から main()メソッド(実行開始場所)の宣言 public static void main(String args[]) { // main() メソッド本体の開始 System.out.println("ようこそJavaへ!"); System.out.println("Javaを始めましょう!"); } // main() メソッド定義の終了 } // クラス定義の終了 // メソッド、クラスの宣言とも、続く{}の中身が本体である // メソッドの宣言が、クラスの宣言の中に入れ子になっている // クラスの概念の詳細は、後の回の講義で行う

Sample1.java の説明 ファイル名(拡張子を除く)と同じにすること! class Sample1 // クラスの宣言 { // コメント (人間が読むときのための註) public static void main(String args[]) { // main メソッドの宣言 (仮想マシンの実行開始場所) System.out.println("ようこそJavaへ!"); System.out.println("Javaを始めましょう!"); } // メソッド、クラスの宣言とも、続く{}の中身が本体である // メソッドの宣言が、クラスの宣言の中に入れ子になっている // クラスの概念の詳細は、後の回の講義で行う 文末のセミコロン必須(次行も同様) カッコの対応関係には意味あり。 開いたら、必ず正しい位置で閉じること (次行も同様) "(ダブルクォーテイション) は、開くときも閉じるときも同じ記号。対応関係に注意。 "と"で囲まれた部分は文字列データで、全角OK。それ以外では全角不可 特に、全角スペースが文字列データ以外の部分に混じらないように!!

重要なポイント Java のコードは1つ以上のクラスからなりたつ main()メソッドからプログラムの処理がはじまる 文は原則として先頭から順番に実行される 文の最後にはセミコロンをつける コメントは人間がコードを理解しやすくするために書く (実行動作には関係しない) インデントや改行を使ってコードを読みやすく

プログラムのコンパイル→実行 コンパイル 実行 プログラムの書き間違い、手順違い javac Sample1.java エラーなし → Sample1.class できる (ls で確認) 実行 java Sample1 Sample1.class が仮想マシンで実行される Sample1 の後に .class をつけるな!! プログラムの書き間違い、手順違い →エラー出力 読めば何を間違えたか参考になる

リテラル literal → 通常は形容詞で、「文字どおりの」 プログラムで値を表す文字列 名詞としては、文字どおりの解釈・意味 Sample1.Java 中では "ようこそJavaへ!" "Javaを始めましょう!" の2つが文字列リテラル。データの内容は ようこそJavaへ! Javaを始めましょう!

文字リテラル,文字列リテラル 文字リテラルの例 文字列リテラルの例 ' と " の使い分けに注意 'A', 'B' "ようこそJavaへ!" ' は1文字を囲む " は文字列を囲む

数値リテラル 数値リテラルの例 System.out.println(0x398); 920 と表示される (整数はデフォルトで10進表記) System.out.println(3.14159265e2); 3.14159265e2 は浮動小数点(数)リテラル 314.159265 と表示される (3.1415926 × 102)

Sample3.java class Sample3 { public static void main(String args[]) System.out.println('A'); // 文字リテラル System.out.println("ようこそJavaへ!"); System.out.println(123); // 整数リテラル }

画面への出力 次のようなメソッドを使う System.out.println() System.out.print() 問 : 両者の違いはなにか?次のページのSample2.java をコンパイルして動かしてみよ

Sample2.java class Sample2 { public static void main(String args[]) System.out.print("ようこそJavaへ!"); System.out.print("Javaを始めましょう!"); } // Sample1 と Sample2 の違いは何か? // 見比べて考え、実行して確かめてみよ。

エスケープシーケンス 複数の文字で1文字を表す規則 画面の出力を制御する、特殊な文字など Java プログラム中で特別な意味のある文字 普通の文字で表せない そこで、 \文字 などで表す規則になっている タブ → 印字位置を前もって決めた場所へ移動 復帰→ 印字位置を行の先頭に移動 Java プログラム中で特別な意味のある文字 \ → \\ ' → \' " →\" など System.out.println("\\100"); // 例 文字コードで文字を表すのにも使える 教科書 表2-1を参照せよ

Sample4.java class Sample4 { public static void main(String args[]) System.out.println("円記号を出力します。:\\"); System.out.println("アポストロフィを出力します。:\'"); } // エスケープシーケンスを使うと、特殊な文字をあらわすことができる。

Sample5.java class Sample5 { public static void main(String args[]) System.out.println("8進数101の文字は\101です。"); System.out.println("16進数0061の文字は\u0061です。 "); } // 文字コードを指定して 文字を出力することができる

Sample6.java class 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によって印字位置が移動する場所) // はどこに設定されているか考えよ。ヒント:半角文字換算

課題 1.自分の名前を出力するプログラムを作成せよ。 2.「タブ」記号を表すエスケープシーケンス(¥t)を使用し、以下例のように氏名、学籍番号、学部を出力するプログラムを記述せよ。 氏名 山元進 学籍番号 c0110999 学部 コンピュータサイエンス学部 文字列の開始位置 \t でそろえること!!

課題提出の注意 提出は 課題2 のみ 課題2 の class 名は Report2 とせよ 時間内にTA の許可を受けること 必然的に、ファイル名も決まる 時間内にTA の許可を受けること 許可のない提出は未提出と同じ扱い