プログラミング入門 - soi.wide.ad.jp · プログラミング入門B...
Transcript of プログラミング入門 - soi.wide.ad.jp · プログラミング入門B...
プログラミング入門 B第2回「データと型」
講師:斉藤賢爾[email protected]
∆ 棟 N206
2003 年度秋学期
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.1/72
http://www.soi.wide.ad.jp/授業マテリアルをダウンロードしてください
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.2/72
今日のメニューはじめに
先週のおさらい
課題レビュー
課題の出題
練習問題: やみくもに打ってみよう
練習問題: 今日は何日? 明日は? パート 1
コンピュータって何だろう
練習問題: 今日は何日? 明日は? パート 2
物理モデルで考える
練習問題: 今月の日付一覧
実習
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.3/72
はじめにみなさんのコメントから
今週のテーマ
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.4/72
みなさんのコメントからその 1
SOIではじめに入学手続きをして、確認メールも届いたのに、履修申告をしようとすると、「こんな学生はいません」とエラー表示がされて、大変だった
⇒ ご迷惑をおかけしました多くのみなさんに使っていただくことで、ソフトウェアは成長しますこれからもよろしくお願いします
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.5/72
みなさんのコメントからその 2
できれば授業の当日にビデオがアップされるとありがたいのですが
難しいことは想像できますが、なるべく早くアップされると学外で受講している人たちには都合がよいのではないかと思います
⇒ 当日はとても厳しいですが、課題レポートの提出までに十分な間を作れるように努力します
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.6/72
みなさんのコメントからその 3
1回目から難しかった
もう少しゆっくり解説してもらえたら初心者の私でも理解しやすかったように思いました
⇒ 大学生なので、多少、頭の体操になるような授業にはしたいですが、「簡単、ゆっくり」を心がけたいと思います自分でビデオをチェックしましたが、やはり早口だったと思いますゆっくり喋りますので、早かったら注意してください
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.7/72
みなさんのコメントからその 4
履修の前に、いつごろどれくらいの課題がある見込みかわかるシステムになっているとうれしいです
⇒ 課題は毎回ありますシラバスには書きましたこの授業の場合、「プログラミング入門 B」共通のシラバスもあるので分かりにくかったかも知れません
授業の日 (火曜日)に出題します次の授業の前の日曜日深夜が〆切です授業中に課題に取り組む時間があります
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.8/72
©p 今週のテーマ「デジタル」デジタルって何だろう?
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.9/72
©p 今週のテーマ「デジタル」デジタルって何だろう?デジタルは、情報を数値で表すこと
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.9/72
©p 今週のテーマ「デジタル」デジタルって何だろう?デジタルは、情報を数値で表すことデータには型があるデータはメモリに置きますメモリに置いてあるデータをプログラムから使うために「変数」を用いますメモリに置いただけだと、何でも数なので混乱するので、「型」で種類を区別します
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.9/72
©p 今週のテーマ「デジタル」デジタルって何だろう?デジタルは、情報を数値で表すことデータには型があるデータはメモリに置きますメモリに置いてあるデータをプログラムから使うために「変数」を用いますメモリに置いただけだと、何でも数なので混乱するので、「型」で種類を区別します数を使いこなす地味ですけど、大切な基礎です
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.9/72
今日のメニューはじめに
先週のおさらい
課題レビュー
課題の出題
練習問題: やみくもに打ってみよう
練習問題: 今日は何日? 明日は? パート 1
コンピュータって何だろう
練習問題: 今日は何日? 明日は? パート 2
物理モデルで考える
練習問題: 今月の日付一覧
実習
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.10/72
先週のおさらいクラスとプログラム
コンパイラとインタプリタ
コンパイルと実行
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.11/72
©j クラスとプログラム©o (おさらい)
クラスはプログラムの部品の単位Java 言語では、プログラムをクラスという単位で記述します
ひとつのソースファイル (ソースコードが書かれたファイル)毎に、ひとつの“public class XXXX” を用いてクラスを書きます
クラス名を “XXXX”とした場合、ファイル名は “XXXX.java” とします
そのファイルをコンパイルすると、“XXXX.class”というファイルが作られます
クラス名とファイル名は一致するというわけで、もしクラス名を変えたら、ファイル名も変えないといけませんし、ファイル名を変えたら、クラス名も変えなければならないのです
クラスとは一体何か、その正体は、多分、来週説明します
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.12/72
©p コンパイラと©o インタプリタ (おさらい)
プログラミング言語には大きく分けて 2種類ありますコンパイラ (compiler) を使うソースコードを機械語や中間コードにいったん翻訳しますそれから、翻訳後のコードを実行します
インタプリタ (interpreter) を使うソースコードを機械語や中間コードに通訳しながら実行します
Javaはコンパイラを使う言語ですjavacという名前のコンパイラが、Java言語で書かれたソースコードを中間コードにコンパイル (翻訳)します
javaという名前のプログラムが中間コードを実行します
というわけで、Java言語で書かれたソースコードを直したときは、javacでコンパイルしてから javaで実行しなければ、直した内容は反映されません
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.13/72
©j コンパイルと実行 (おさらい)
コンパイルのコマンド(ソースファイルの拡張子は .java)
z:> javacファイル名<Enter>
実行のコマンドクラスファイル (.class)の実行
z:> javaクラス名<Enter>
jarファイル (.jar)の実行
z:> java -jarファイル名<Enter>
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.14/72
今日のメニューはじめに
先週のおさらい
課題レビュー
課題の出題
練習問題: やみくもに打ってみよう
練習問題: 今日は何日? 明日は? パート 1
コンピュータって何だろう
練習問題: 今日は何日? 明日は? パート 2
物理モデルで考える
練習問題: 今月の日付一覧
実習
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.15/72
課題レビュー課題をおさらいする
提出状況と傾向
感想とお願い
今週の表彰台
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.16/72
課題1. 答えは 10
1. 答えが 10となるような計算式を 3つ表示するプログラムを作ってください。例:
4 + 6 = 10
10 - 0 = 10
5× 2 = 10
計算は Javaにさせましょう。別々の演算子 (+や -のこと)を使ってください。ソースコードと実行結果を提出してください。
2. この授業で学ぶことを通して、将来、どんなプログラムを作ってみたいですか? 簡単にまとめてください。
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.17/72
提出状況と傾向 (1)
42人中 32名提出 (10/7現在)履修者は SOI学生を含んでいるので、教室の人数を超えています
レポートを出していない人は、忘れずに出しましょう
問 1. の傾向×や ÷の代わりに *や /を表示している 15 名
例題に似ているか、そのもの 6 名
字下げがないか、一貫していない 6 名
テキストを貼り付けて提出している 6 名
提出用にソースコードに何かつけている 1 名
実行結果がない 1 名
ソースコードが別物 1 名
他人に読みやすくすることを心がけましょう実行結果が読みやすいソースコードが読みやすい
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.18/72
提出状況と傾向 (2)
問 2. の傾向答え方に問題があった人
答案を「授業の進め方や SOIに対する意見、コメントなど」に書いた 3 名
答えていない 4 名
内容は . . .
ゲーム 10 名 テレビ局の放送関連 1 名
エンターティンメント 3 名 楽器の音の解析 1 名
Webサイト 3 名 実用的なプログラム 1 名
自分らしいもの 2 名 ネットワーク監視ツール 1 名
経済分析 2 名 入力装置 1 名
まだ想像もできない 2 名 授業で使える小品 1 名
ゲームが多いですけど . . .
他にもいろいろな可能性があります自分の夢は何なのか、見つけて、追求できるとよいですね
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.19/72
感想とお願い
途中まで見て気づきましたが、レポートに名前を書いていない人が多い!名前は是非、書いてください成績をつける時に間違えにくくなります
誤字脱字に気をつけましょうコンパイラも、誤字脱字にはうるさいですよねこの授業では誤字脱字も極力、注意していきます
自分で進んでいける人がいますhttp://java.sun.com/docs/books/tutorial/などで自習して、どんどん進んでいくことを勧めます
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.20/72
今週の表彰台
名前 評価 その理由
海田美香さん ○よくできました 工夫がある
石川高行さん ○よくできました とてもよく工夫している
戸塚隆史さん ○よくできました 人間のために表示している
石田彩佳さん ○よくできました 工夫がある (脱字あり)
高間康弘さん △おしい! 工夫があるけど、表示に誤り
非の打ちどころがないとき、評価は◎になります
最初から完璧を目指さなくても OK、でも誤りには気づけるようになろう
表彰台は成績の目安にはなりますが、成績がよい人とは限りません
いろんな理由で、みなさんに見てもらいたいレポートを表彰します
成績は後で (〆切 2 週間後を目処)レポート毎につけます
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.21/72
©j 解答例[ソースコード]
public class AnswerIsTen {public static void main(String[] aosArguments) {
System.out.println(”4 + 6 = ” + (4 + 6));
System.out.println(”10 - 0 = ” + (10 - 0));
System.out.println(”5× 2 = ” + (5 * 2));
}}
[実行例]
% java AnswerIsTen
4 + 6 = 10
10 - 0 = 10
5× 2 = 10
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.22/72
今日のメニューはじめに
先週のおさらい
課題レビュー
課題の出題
練習問題: やみくもに打ってみよう
練習問題: 今日は何日? 明日は? パート 1
コンピュータって何だろう
練習問題: 今日は何日? 明日は? パート 2
物理モデルで考える
練習問題: 今月の日付一覧
実習
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.23/72
課題の出題今回は、最初に課題を出して、それをゴールに進めていきます
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.24/72
課題2. 答えは 100
答えが 100となるような、ふたつの正の整数の足し算をすべて表示するプログラムを作ってください。表示例:
1 + 99 = 100
2 + 98 = 100
3 + 97 = 100
: (この後延々と式がつづく)
1 + 99と 99 + 1は別の式と見なしますソースコードと実行結果を提出してください。
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.25/72
提出方法
SOIのレポートシステムを用いて提出してくださいhttp://www.soi.wide.ad.jp/report/レポートをテキストファイルにまとめて、アップロードしてください
〆切2003/10/12 23:59 JST
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.26/72
今日のメニューはじめに
先週のおさらい
課題レビュー
課題の出題
練習問題: やみくもに打ってみよう
練習問題: 今日は何日? 明日は? パート 1
コンピュータって何だろう
練習問題: 今日は何日? 明日は? パート 2
物理モデルで考える
練習問題: 今月の日付一覧
実習
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.27/72
練習問題:やみくもに打ってみよう
嫌な予感がするかも知れませんが . . .
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.28/72
簡単な問題に直して始めよう
まずは、この問題から始めましょう
答えが 10となるような、ふたつの正の整数の足し算をすべて表示する
プログラムを作ってください。
やみくもに打ってみよう
こんな風に表示されるプログラムです
1 + 9 = 10
2 + 8 = 10
3 + 7 = 10
4 + 6 = 10
5 + 5 = 10
6 + 4 = 10
7 + 3 = 10
8 + 2 = 10
9 + 1 = 10
先週のおさらいと、タイピングの練習です
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.29/72
©j 2行以上を表示する (おさらい)
public class MyFirstJava {public static void main(String[] unused) {
System.out.println(”Hello, world.”);
System.out.println(”Hello, SFC.”);
}}
System.out.println() を続けて書くことで 2 行以上を表示することができます
この練習では、数と文字列を混合して足し算する方法で書いてみましょう
数のところは数で (計算式でなくてよいです)、
文字列のところは文字列で、書いてみましょう
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.30/72
©p どうすれば簡単に©o 書けるだろう?
この調子で答えが 100になる足し算をすべて書き出すのは大変ですね
どうすれば簡単に書けるでしょうか
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.31/72
©p どうすれば簡単に©o 書けるだろう?
この調子で答えが 100になる足し算をすべて書き出すのは大変ですね
どうすれば簡単に書けるでしょうか繰り返しが書けると簡単
System.out.println()の行をひとつだけ書いて、プログラムに繰り返してもらう
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.31/72
©p どうすれば簡単に©o 書けるだろう?
この調子で答えが 100になる足し算をすべて書き出すのは大変ですね
どうすれば簡単に書けるでしょうか繰り返しが書けると簡単
System.out.println()の行をひとつだけ書いて、プログラムに繰り返してもらうそのためには、どんなことが必要?変わるところ、変わらないところは何?
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.31/72
©p どうすれば簡単に©o 書けるだろう?
この調子で答えが 100になる足し算をすべて書き出すのは大変ですね
どうすれば簡単に書けるでしょうか繰り返しが書けると簡単
System.out.println()の行をひとつだけ書いて、プログラムに繰り返してもらうそのためには、どんなことが必要?変わるところ、変わらないところは何?· 7 + 7 = 10←変わらない· 箱の中身が変わっていく· 中身が変わっていける箱のことを変数と呼びます
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.31/72
©p 繰り返しで書くことを©o 前提にして . . .
答えが 10になる足し算をすべて書き出すのと、
答えが 100になる足し算をすべて書き出すのはどっちが難しい?
答えが 100の足し算を書き出す方がすごく難しいと思う人少し難しいと思う人同じだと思う人やさしいと思う人
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.32/72
©p 繰り返しで書くことを©o 前提にして . . .
答えが 10になる足し算をすべて書き出すのと、
答えが 100になる足し算をすべて書き出すのはどっちが難しい?
答えが 100の足し算を書き出す方がすごく難しいと思う人少し難しいと思う人同じだと思う人やさしいと思う人
少なくともソースコードの行数は同じです
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.32/72
©p 繰り返しで書くことを©o 前提にして . . .
答えが 10になる足し算をすべて書き出すのと、
答えが 100になる足し算をすべて書き出すのはどっちが難しい?
答えが 100の足し算を書き出す方がすごく難しいと思う人少し難しいと思う人同じだと思う人やさしいと思う人
少なくともソースコードの行数は同じですそれがデジタルのパワーのひとつの現れです
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.32/72
今日のメニューはじめに
先週のおさらい
課題レビュー
課題の出題
練習問題: やみくもに打ってみよう
練習問題: 今日は何日? 明日は? パート 1
コンピュータって何だろう
練習問題: 今日は何日? 明日は? パート 2
物理モデルで考える
練習問題: 今月の日付一覧
実習
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.33/72
練習問題:今日は何日? 明日は?
パート 1型、リテラル、変数
書いてみよう ∼ Today.java
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.34/72
型、リテラル、変数データの種類のことを、型と呼びます
リテラルは文字通りのデータの値
みなさんがこれまで使ってきた文字列や数はリテラル
変数はデータが置かれている場所
変数は宣言して、代入して、使います
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.35/72
©p データには型がある型 (type)とは、データの種類
型は、データに対して何ができるかを決めます整数型のデータは、足し算や引き算などができるどの整数の具体例 (0とか 4とか)をとっても、足し算できます文字列型のデータは、文字列の長さ (何文字あるか)を求めることなどができる文字列の足し算は、整数の足し算と違う意味
ある型に属する具体的な値を書いたものをリテラル(literal)といいます
42 (整数リテラル)、"foo" (文字列リテラル)
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.36/72
©j Javaにおける型の種類
プリミティヴ (primitive)型Java言語に元々備わっている基本的な型整数、実数、文字、論理値1つの数で表せます
リファレンス (reference)型とりあえずはプリミティヴでない型だと思ってください配列 (データの並び)や文字列など
今週は、プリミティヴ型を主に勉強します
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.37/72
©p bitと byte (おさらいかな?)
bitって何?
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.38/72
©p bitと byte (おさらいかな?)
bitって何?1か 0何かを区別するときの最小単位 (左右、真偽、など)
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.38/72
©p bitと byte (おさらいかな?)
bitって何?1か 0何かを区別するときの最小単位 (左右、真偽、など)
1byteは 8bit幾つまで数えられる?何種類の数を区別できる?
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.38/72
©p bitと byte (おさらいかな?)
bitって何?1か 0何かを区別するときの最小単位 (左右、真偽、など)
1byteは 8bit幾つまで数えられる? ⇒ 255まで何種類の数を区別できる?
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.38/72
©p bitと byte (おさらいかな?)
bitって何?1か 0何かを区別するときの最小単位 (左右、真偽、など)
1byteは 8bit幾つまで数えられる? ⇒ 255まで何種類の数を区別できる? ⇒ 256種類(0があるから)
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.38/72
©p bitと byte (おさらいかな?)
bitって何?1か 0何かを区別するときの最小単位 (左右、真偽、など)
1byteは 8bit幾つまで数えられる? ⇒ 255まで何種類の数を区別できる? ⇒ 256種類(0があるから)
9bitあったら?
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.38/72
©p bitと byte (おさらいかな?)
bitって何?1か 0何かを区別するときの最小単位 (左右、真偽、など)
1byteは 8bit幾つまで数えられる? ⇒ 255まで何種類の数を区別できる? ⇒ 256種類(0があるから)
9bitあったら?9bit目が 0のときの 256種類+ 1のときの 256種類1bit増えると、区別できる数は 2倍
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.38/72
©j プリミティヴ型型の名前 型の意味 リテラルの例byte 8bitで表せる整数 103short 16bitで表せる整数 103int 32bitで表せる整数 103long 64bitで表せる整数 35439346L
char 文字 (16bit Unicode) ’c’boolean 論理値 (真か偽) true, false
intは integer の略、charは character の略
実数は省略しました
どれも 1 つの数で表せます
とりあえず、int, char, boolean だけ覚えればよいです
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.39/72
©j 変数はデータをしまう©o 場所
メモリ�(RAM)1マスが1バイト
int�型
の変
数
リフ
ァレ
ンス
型の
変数
リファレンス型のデータ
データが置いてある番地が入っている
・変数に名前を付けて、 番地を気にせずにアクセスできる
データそのものを出し入れできる参照
代入
値
15
15
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.40/72
©j 変数を宣言する// int 型の変数 iを宣言します。//からその行の終わりまでは注釈です。
int i;
// int 型の変数 iを宣言して、その値を 0に初期化します。
int i = 0;
型の名前に続けて変数の名前を書くと、変数の宣言になります
メモリに専用の場所が割り当てられると思ってください
変数は、宣言しなければ使えません
メモリに場所を割り当てなければならないためです
プログラマが分かって使っているか確かめる意味もあります
宣言時に、変数の最初の値を決めることができます (推奨)
そうしないと、メモリにはどんな値が入っているのか分からないので、いきなり値を読み出したら変なことになるかも知れません
その可能性があったら、コンパイラはエラーメッセージを出します
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.41/72
©j 書いてみよう©o ∼ Today.java
public class Today {public static void main(String[] unused) {
int i = 7;
System.out.println(”今日は” + i + ”日です。”);
System.out.println(”明日は” + (i + 1) + ”日です。”);
}}
何故、i + 1が括弧で囲まれているか、もうお分かりですね
変数 iを宣言しなかったり、最初の値を決めなかったら、コンパイルする時、何が起こるでしょうか
iの最初の値を、数以外にしたら?
最初の値を ’7’にしたら?これについては C 言語の名残りがあるようです
最初の値を "7"にしたら? ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.42/72
©j iは変わったか
public class Today {public static void main(String[] unused) {
int i = 7;
System.out.println(”今日は” + i + ”日です。”);
System.out.println(”明日は” + (i + 1) + ”日です。”);
System.out.println(”今日は” + i + ”日です。”);
}}
もう 1 回、iを表示させて確かめてみます
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.43/72
今日のメニューはじめに
先週のおさらい
課題レビュー
課題の出題
練習問題: やみくもに打ってみよう
練習問題: 今日は何日? 明日は? パート 1
コンピュータって何だろう
練習問題: 今日は何日? 明日は? パート 2
物理モデルで考える
練習問題: 今月の日付一覧
実習
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.44/72
コンピュータって何だろうもう 1度考えてみよう
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.45/72
コンピュータは、万能モノマネ機械
ワープロは、原稿用紙と筆記用具の真似をしてくれる
天気は、大気の動きの真似をすることで予報できる
コンピュータは、他のコンピュータを真似できるJavaでは、いろいろなコンピュータが Java仮想マシンの真似をしてくれるので同じプログラムがどこでも動きます
私たちが、いろいろな職業に就けるように、コンピュータもいろいろなモノを真似できるその意味では、脳がしなやかなように、コンピュータもしなやかです
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.46/72
アナログコンピュータとデジタルコンピュータ
アナログコンピュータ物事を、その度合で計算する例: 計算尺
デジタルコンピュータ物事を数と見なして計算する例: 私たちが目にするほとんどのコンピュータ
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.47/72
デジタルコンピュータは何でも数で表す
文字も、音も、写真も、動画も、すべて数で表す
だから効率よく扱うことができる数学のマジックを使った圧縮や暗号化簡単な暗号の例: シーザー暗号
1つのメディア (媒体)に何でも載せられる(マルチメディア)何でも DVDに載る何でもインターネットで伝えられる
物理世界にあるモノを数で表せるのだから、コンピュータの数の世界のことは、物理世界のモノで考えることができる
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.48/72
©p メモリと変数メモリ�(RAM) 1マスが1バイト
¦¦8ビット
16ビットの文字
32ビットの整数
・プログラミング言語は、幾つかのマスから成る場所に名前を付けて、 番地を気にせずにアクセスできるようにしてくれる�(=変数)
・各々のマスには番号�(番地=アドレス)�が 付いている
・マスを何個か使って データを格納する
01
23
45
67
89
1011
1213
......
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.49/72
©p メモリと変数と型の©o 物理モデル
・変数は引き出し�(ただし�1つの物しか入らない)
・色々な大きさの引き出しがある
・ラベル�(=名前)�を付けて、人間がどこに何をしまったか覚えていられる
・入っているのは数だから、変な物が入れられても分からない
→だから、どんな種類�(=型)�かも書いておいて、 出し入れするときにチェックする
ラベル:�夏物種類:�衣類
ラベル:�ペン種類:�筆記用具
ラベル:�お気に入り種類:�CD
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.50/72
今日のメニューはじめに
先週のおさらい
課題レビュー
課題の出題
練習問題: やみくもに打ってみよう
練習問題: 今日は何日? 明日は? パート 1
コンピュータって何だろう
練習問題: 今日は何日? 明日は? パート 2
物理モデルで考える
練習問題: 今月の日付一覧
実習
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.51/72
練習問題:今日は何日? 明日は?
パート 2変数への代入
iは変わる
代入と比較
変数名の決め方
式と文ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.52/72
©j 変数への代入//宣言する時に代入できます。それを初期化と呼びます。
int i = 0;
// ’=’の左辺に変数名を書くと、代入できます。i = 16;
i = i + 1; // iの値を 1増やします
int�型
の変
数�
i
15
i�の値
代入
i�+�1�の値
+1
16
i = i + 1 ? 何それ?左辺の iは場所右辺の iは値
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.53/72
©j iは変わる
public class Today {public static void main(String[] unused) {
int i = 7;
System.out.println(”今日は” + i + ”日です。”);
i = i + 1;
System.out.println(”明日は” + i + ”日です。”);
}}
もう 1 回、iを表示させて確かめてみます
代入演算子 =の左辺に変数を書くことではじめて値が変わります
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.54/72
©j 代入と比較//比較は次の式で書きます。i == 0 // iは 0と等しいか (値は trueか false)
i != 0 // iは 0と異なるか (値は trueか false)
i > 0 // iは 0より大きいか (値は trueか false)
i < 0 // iは 0より小さいか (値は trueか false)
//つまり、こんな文が登場します。boolean b = i == 0;
// iが 0と等しいかどうかを bに代入する。
ややこしい!
何でこんなことに?
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.55/72
©j 出てくる頻度が高い©o ものほど短く書ける
C言語の文法を決める時、こう考えられました:代入と等号の記号を区別しなければならない代入と比較、どちらが頻繁にプログラム中に現れるか代入⇒打ちやすいように代入の記号の方を短くしよう
Java言語は、C言語のこのような面を多く受け継いでいます
コンピュータへの入力のコストが高かった時代の名残りです
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.56/72
©p でも長く書ける©o ところは長く書こう
現在は、略さない方向に向かっていると言えます
長くなってもよいから分かりやすく変数名やクラス名など、自分で決められる名前は、分かりやすさを優先し、省略名はできるだけ使わないようにしましょうハンガリアン記法 (とってもお薦め!)変数名の最初の数文字を使って、データの型を表します例: sFirstName, iZipCode, isVisible宣言文まで戻って読まなくても型が分かり、どう使われているかが分かりやすくなります
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.57/72
©j 変数名の決まり変数名は、英字あるいは ‘_’で始まります変数名は小文字で始めるのが Java言語での習慣ですクラス名は大文字で始めるのが Java言語での習慣です
予約語 (publicや classなど)と重ならないようにします
‘{’と ‘}’の間 (ブロック)では、他の変数名と重ならないようにしますブロックの外ではその変数は無効になります
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.58/72
©j 式と文式には値があります、どんどん組み合わせていけます計算式の式と一緒です例: i + 5, i == 0例: i = 0· 代入も実は式で、代入された値が式の値です例: System.out.println(i)· 手続きの呼び出しも実は式です
式を使って一度に書ける処理が文です代入文例: i = 0;
手続きの呼び出し文例: System.out.println(i);
ここでは、文は最後が ;で終わると覚えましょう
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.59/72
今日のメニューはじめに
先週のおさらい
課題レビュー
課題の出題
練習問題: やみくもに打ってみよう
練習問題: 今日は何日? 明日は? パート 1
コンピュータって何だろう
練習問題: 今日は何日? 明日は? パート 2
物理モデルで考える
練習問題: 今月の日付一覧
実習
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.60/72
物理モデルで考えるリテラル
型チェック
ハンガリアン記法
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.61/72
©p 物理モデルで考える©o ∼リテラル
・リテラルは引き出しの中身のソースコード上での表現
ラベル:�お気に入り種類:�CD
リテラル種類:�CD
代入できる
本当はやっぱりメモリの中にある(ROM�かも知れない)
種類:�CD
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.62/72
©p 物理モデルで考える©o ∼型チェック
・型が違うと代入できず、コンパイラに怒られる
ラベル:�夏物種類:�衣類
ラベル:�お気に入り種類:�CD
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.63/72
©p 物理モデルで考える©o ∼ハンガリアン記法
・普段は名前で扱っているので、名前に種類が入っていると誤解しにくい
ラベル:�お気に入り種類:�CD
ラベル:�お気に入りCD種類:�CD
↓ハンガリアン記法
お気に入り?お気に入り衣類を入れる引き出しだっけ?
お気に入りのCDを入れる引き出しだね!
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.64/72
今日のメニューはじめに
先週のおさらい
課題レビュー
課題の出題
練習問題: やみくもに打ってみよう
練習問題: 今日は何日? 明日は? パート 1
コンピュータって何だろう
練習問題: 今日は何日? 明日は? パート 2
物理モデルで考える
練習問題: 今月の日付一覧
実習
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.65/72
練習問題: 今月の日付一覧繰り返しを書くためには?
繰り返しを書いてみよう
足したら 10の式を表示してみる
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.66/72
©p 繰り返しを書くため©o には?
今月の日付 (10月 1日、10月 2日、. . .)の一覧を表示するとします
それを繰り返しで表現するとしたら . . .
今日は何日かを変数 iで表すとしたら、どんなことを決めなければならない?
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.67/72
©p 繰り返しを書くため©o には?
今月の日付 (10月 1日、10月 2日、. . .)の一覧を表示するとします
それを繰り返しで表現するとしたら . . .
今日は何日かを変数 iで表すとしたら、どんなことを決めなければならない?
iの最初の値iの最後の値iは、いくつずつ増えるかその間、何をするか
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.67/72
©j 繰り返しを書いて©o みよう
public class October {public static void main(String[] unused) {
for (int i = 1; i <= 31; i = i + 1) {System.out.println(”10 月” + i + ”日”);
}}
}
<=は ≤を意味する比較演算子です上の for 文 (for (. . .) {. . .})の意味は次のようになります
iが 1から 31まで、ひとつずつ増やしながら 10 月 i日を表示する
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.68/72
©j for文
for (初期化式; ©1 条件式; ©3 増減式) {©2 反復する一連の処理
}
実行の順序は
1. 初期化式を実行します
2. ©1 , ©2 , ©3 の順で繰り返します©1 が偽だったら、©2 も©3 もそれ以上実行せずに ‘}’の下に抜けます
反復の条件に関わる式をまとめて書きます
コンパクトで分かりやすくなります
初期化式で宣言された変数は for 文の中だけで有効
変数の誤用を避けられます
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.69/72
©p 足したら 10の式を©o 表示してみる
7 + 7 = 10
変数はふたつ必要?ふたつ使ってもよいけど、ひとつでも書けますひとつだったら、今月の日付を書き出す書き方を使って書けますi + j = 10だとすると、jは 10と iを使って表現できますね
さぁ、足したら 10の式をすべて表示してみましょうそれが出来たら、課題 2. は出来たも同然です
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.70/72
今日のメニューはじめに
先週のおさらい
課題レビュー
課題の出題
練習問題: やみくもに打ってみよう
練習問題: 今日は何日? 明日は? パート 1
コンピュータって何だろう
練習問題: 今日は何日? 明日は? パート 2
物理モデルで考える
練習問題: 今月の日付一覧
実習
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.71/72
実習残り時間を使って課題に挑戦しましょう
ip2003f02.tex –プログラミング入門 B –講師:斉藤賢爾 – 7/10/2003 – 4:42 – p.72/72