情報教育論 第9回 仮定文の仕組み 政策・メディア研究科 岡田 健
新しい言霊環境を ダウンロードしてください http://www.crew.sfc.keio.ac.jp/~turkey/ Kotodama_Install20041213.exe Mac環境の方は http://www.crew.sfc.keio.ac.jp/~turkey/dama.jar 前回の環境をアンインストールした後に、今回の環境をインストールしてください
本日の学習目標 仮定文を見て,処理の流れを説明することが出来る 真偽値が取りうる値を説明できる 比較式や論理式を見て,それを真偽値に変換することが出来る 目的に応じて仮定条件を記述できる ある目的が与えられたときに,適切に仮定文を用いてプログラムが書ける
仮定文はどんな時に使う? 入力により 処理を変えたい 入力 処理 出力
仮定文はどんな時に使う? ユーザの入力により、処理内容を変えたい場合 ※-------------------- ※挨拶するプログラム 変数を定義して、名前を入力とする。 ※時間を尋ねる 「現在の時間を入力してください。」を出力する。 「1:朝 2:昼 3:夜」を出力する。 入力を整数で受け取り、入力に書き込む。 ※挨拶する もし入力が1ならば{ 「おはよう」を出力する。 }をして、入力が2ならば{ 「こんにちは。」を出力する。 }をして、入力が3ならば{ 「こんばんは。」を出力する。 }をする。 ユーザの入力により、処理内容を変えたい場合
ユーザ入力を受け付けるには? 以下のように書く 記法は以下の通り。 入力を型として受け取り、変数に書き込む。 入力を整数として受け取り、入力に書き込む。 入力を文字列として受け取り、名前に書き込む。 入力を型として受け取り、変数に書き込む。 型 は「整数」か「文字列」が入ります。
処理の分岐を書くには 以下のように書く 記法は以下の通り もし入力が1ならば{ ・・・ }をする。 もし条件 ならば{ 処理 }をする。 ・・・ }をする。 もし条件 ならば{ 処理 }をする。 「もし」の部分は「もしも」と書いても良いし、省略してもいい。 「ならば」の部分は「なら」と書いても良い。
処理の分岐の流れ 条件が成立したら、処理を実行する 条件 成立 不成立 処理
不成立の時の処理を書くには 以下のように書く 記法は以下の通り もし入力が1ならば{ ・・・ }をして、そうでないならば{ }をする。 ・・・ }をして、そうでないならば{ }をする。 もし条件 ならば{ 処理 }をして、そうでないならば{ }をする。
処理の分岐の流れ 条件が成立したら、処理を実行する 条件 不成立 成立 処理 処理
さらに複雑な分岐を書くには 以下のように書く もし入力が1ならば{ ・・・ }をして、もし入力が2ならば{ }をして、そうでないならば{ ・・・ }をして、もし入力が2ならば{ }をして、そうでないならば{ }をする。
処理の分岐の流れ 条件 条件が成立したら、処理を実行する 不成立 成立 条件 処理 不成立 成立 処理 処理
条件をどうやって表現する? 条件は真偽値として記述する 以下は全て真偽値を表している 真 偽 A=0 A≠B A<D A≧E A<C A≦F A>0かつA>B A>0あるいはA>B
真偽値をどうやって記述する? 真偽値は以下の3通りで記述できる 真偽値定数 比較式 論理式
条件を比較式として書くには? 以下のように書く 記法は以下の通り 時間=1 距離>10 角度≦90 値>値 値<値 値≧値 値≦値 値=値 値≠値 大なり 小なり 大なり等号 小なり等号 等号 不等号 >(全角) >(半角) <(全角) <(半角) ≧(全角) >=(半角)>=(全角) ≦(全角) <=(半角)<=(全角) =(全角) ==(全角)=(半角)==(半角) ≠(全角) !=(半角)!=(全角) 記法 使用できる記号
条件を文として書くには? 以下のように書く 記法は以下の通り 時間=1でない ※時間≠1である、と同じ意味 距離>10である 時間=1でない ※時間≠1である、と同じ意味 距離>10である 角度≦90でない ※角度>90である、と同じ意味 比較式である 比較式でない 肯定 否定 記法
条件式を使ったプログラム (西暦和暦変換) 変数を定義して、名前を「西暦」とする。 ※西暦を入力する 「和暦を求めます。」を出力する。 「西暦を入力してください。」を出力する。 入力を整数で受け取り、西暦に書き込む。 ※和暦を求める 西暦>1988であるならば{ 「今年は平成」を改行無しで出力する。 西暦-1988を改行無しで出力する。 「年です。」を出力する。 }をする。 変数名 値 西暦 2004 西暦>1988である ↓ 2004>1988である ↓ 真
試しに条件式を出力してみよう 1>0を出力する。 3=1を出力する。 1≠3を出力する。 4≦4を出力する。 4<4を出力する。 変数を定義して、名前を「西暦」とする。 西暦に2000を書き込む。 西暦>1988を出力する。
論理式を書くには? 以下のように書く 記法は以下の通り x>0、かつx<100 x>0である、あるいはy>100 比較式かつ比較式 比較式あるいは比較式 論理積 論理和 記法 比較式を文として書く場合、活用しても良い x>0であり、かつ・・・ x>0で、かつ・・・
論理式を使ったプログラム例 (金と銀の斧) 変数を定義して、名前を選択肢Aとする。 変数を定義して、名前を選択肢Bとする。 「金のオノと銀のオノがあります。」を出力する。 「この金のオノは,あなたのものですか? はい→1 いいえ→2」を出力する。 入力を整数で受け取り、選択肢Aに書き込む。 「この銀のオノは,あなたのものですか? はい→1 いいえ→2」を出力する。 入力を整数で受け取り、選択肢Bに書き込む。 選択肢Aが1でかつ選択肢Bが1ならば{ 「あなたはウソツキですね」を出力する。 }をする。
課題1 課題2 和暦西暦変換のプログラムを、明治・大正・昭和にも対応させてください 金の斧銀の斧のプログラムを、正直者に対する処理も追加して完成させてください
課題3 発展課題 相性判断のプログラム(前回HCPで設計してもらいました)を、プログラムで書いてください 肉屋のレシートのプログラム(前回HCPで設計してもらいました)を、プログラムで書いてください
課題提出について 課題1~3及び発展課題を、出来るところまでやってみてください。 宛先は 2004infoedu@crew.sfc.keio.ac.jp サブジェクトは半角で「report09」です。 〆切は12月17日(金)23時59分まで。 課題をやってみてどんなことを考えたかを考察して、メール本文に付けてください。