コンピュータサイエンス レポート課題回答例 2004年7月
=============================
1、2進数どうしの計算
1-1 ・11010 + 1111 =
=============================
答: 101001
(10進数に直して計算した場合は、 26+15=41となり、
41を2進数に変換して同じ答えとなる)
=============================
1-2 ・11010 - 1111 =
=============================
答: 1011
(10進数に直して計算した場合は、26-15=11となり、
11を2進数に変換して標記の答えになる)
=============================
1-3 ・1-2の答に1111を足し、11010になることを確認せよ。
=============================
1011 + 1111 = 11010 で確認できる。
(10進数に直して計算する場合は、
11 + 15 = 26となり、26を2進数に変換すると
11010となる)
=============================
2、2進数・10進数の変換
2-1 ・508(10進数)を2進数に変換せよ。
=============================
答: 111111100
(508 = 256 + 128 + 64 + 32 + 16 + 8 + 4と
分解できるため)
(別解: 508= 511 - 3であり、
2進数で書くと 111111111 - 11 となり、
結果として 111111100 となる)
============================
2-2 ・10101111(2進数) を10進数に変換せよ。
============================
答: 175
(128 + 0 + 32 + 0 + 8 + 4 + 2 + 1){
============================
3、情報エントロピー
3-1 あるさいころを投げたとき、必ずそのさいころは1の目が出るという。
さいころを一回投げたときに得られる平均情報量を求めよ。
============================
答:
平均情報量をHとおく。それぞれの事象に対応する確率をPとおくと、
H = - P1 log P1 - P2 log P2 - ..... - Pn log Pn
= - 1 log 1 = 0
(重要: log 1 = 0 となる。グラフを見直し、確認せよ)
============================
3-2 コインを投げたとき、表が出る確率が1/2、裏が出る確率が1/2のときの、
コインを一回投げたときに得られる平均情報量を求めよ。
============================
答:
平均情報量をHとおく。それぞれの事象に対応する確率をPとおくと、
H = - P1 log P1 - P2 log P2 - ..... - Pn log Pn
= - 1/2 log 1/2 - 1/2 log 1/2
= -1/2 (-1) - (1/2) (-1) = 1
(log 1/2 = log (2)^(-1) = -1 であるため)
============================
3-3 3-1,3-2で得られた情報量の単位は何か。
============================
答:bit (ビット)
============================
3、論理式
★この中での計算はすべて論理演算(ブール代数)を使って考えよ。
3-1
論理和、論理積、否定、のそれぞれの演算について、真理値表を作成せよ。
============================
答:A、B、を論理変数だとする
A B A+B(論理和) A・B(論理積)
-----------------------------------------
0 0 0 0
0 1 1 0
1 0 1 0
1 1 1 1
A not A(否定)
-------------------
0 1
1 0
============================
3-2
「+」「・」はそれぞれどの演算に対応するか延べよ。
============================
答: それぞれ、論理和・論理積を表す。
============================
3-3
・以下の自販機の動作についての真理値表をつくり、論理式に表し、
論理回路で表せ。
・100円を入れてボタン1を押すとジュースがでてくる。
・100円を入れてボタン2を押すとパンと20円のお釣りがでてくる。
============================
答1: (答えを2種類掲載します)
<真理値表1>
100円 ボタン1 ボタン2 ジュース パンと20円
A B C X Y
--------------------------------------------------------------
0 0 0 0 0
0 0 1 0 0
0 1 0 0 0
0 1 1 0 0
1 0 0 0 0
1 0 1 0 1
1 1 0 1 0
1 1 1 1 1
★ボタンを同時に二つ押すと、ジュースもパンとお釣りもでてくる
というのは自販機としては変ですが、ボタンを同時に押す人はいない
と仮定しています。あくまでも問題をときやすくするための方便として
答1 ではこうしています。
<論理式1>
X = A ・B・(not C) + A・B・C = A・B・(C + not C) = A・B
Y = A ・(not B) ・C + A・B・C = A・(B + not B)・ C = A・C
★not の論理記号をテキストでは書きにくいので、 not A という表記を
使っています。
<訂正版:論理回路1>
■B■----------------|-------|
| AND |------- X
|-------|------ |
■A■--------|
|-------|-------|
| AND |----------Y
C----------------|-------|
★論理記号の代わりに四角に AND・OR等の名前を入れたものを
使っています。正しい記号に読み直してください。
答2: (答えを2種類掲載します)
<真理値表2>
100円 ボタン1 ボタン2 ジュース パンと20円
A B C X Y
--------------------------------------------------------------
0 0 0 0 0
0 0 1 0 0
0 1 0 0 0
0 1 1 0 0
1 0 0 0 0
1 0 1 0 1
1 1 0 1 0
1 1 1 0 0
★ボタンを同時に二つ押すとなにもでないとしました。
<論理式2>
X = A ・B・(not C)
Y = A ・(not B) ・C
★not の論理記号をテキストでは書きにくいので、 not A という表記を
使っています。
<論理回路2>
A----------------|-------|
| AND |-------|
|-------|------ | |---|-----|
B--------| | AND |--- X
|-------| |---|-----|
C--------------- | NOT |-------|
|-------|
A----------------|-------|
| AND |-------|
|-------|------ | |---|-----|
C--------| | AND |--- Y
|-------| |---|-----|
B--------------- | NOT |-------|
|-------|
★論理記号の代わりに四角に AND・OR・NOT 等の名前を入れたものを
使っています。正しい記号に読み直してください。
この図では、Xについて、Yについてをわけて、二つの図にわけて書きましたが、
まとめて書いてもかまいません。
=================================
4、アルゴリズム
4-1 人の年齢から、
・自動車の免許をとることが出来るかどうか
・原動機付き自転車の免許をとることができるかどうか
を判断できるアルゴリズムを図に表せ。
=================================
回答例:
START(端子)
↓
N に年齢を入力(処理)
↓
N<16 (判断) -----|
↓ ↓ YES
↓NO ↓
|---- n >=18(判断) 原付の免許・自動車の免許
|YES ↓ の両方をとることができない(処理)
↓ ↓NO ↓
↓ 原付の免許はとれ ↓
↓ 自動車の免許は ↓
↓ とれない(処理) ↓
原付の免許も ↓ ↓
自動車の免許 ↓ ↓
も取れる(処理) ↓ ↓
↓ ↓ ↓
↓ ↓ ↓
-------------------------------
↓
END (端子)
★端子、判断、処理に関しては適切な記号で囲むこと。
★これは回答例である。回答は他に多くの可能性がある。
======================================
4-2 1から5を足すアルゴリズムを図に表せ。
======================================
回答例:
START(端子)
↓
↓
i ← 1
S ← 0 (処理)
↓
↓
→ i > 5 (判断) → |
↑ ↓ ↓ NO
↑ ↓YES ↓
↑ ↓ S← S+i
↑ ↓ i← i+1 (処理)
↑ ↓ ↓
-----------------------
↓
Sを出力(処理)
↓
END(端子)
★端子、判断、処理に関しては適切な記号で囲むこと。
★これは回答例である。回答は他に多くの可能性がある。
======================================
4、データ構造
待ち行列とスタックのデータ構造の特徴をそれぞれ書け。
======================================
回答例:
待ち行列:
1、入ってきたデータはそれ以前に発生したデータ列の最後に
付け加えられる。
2、データを取り出す際には、データ列の先頭から、
順に一つづつデータを取り出される。
という特徴があるデータ構造である。
FIFO(First-In First-Out)とも呼ばれる。
スタック:
1、発生したデータはをそれ以前に発生したデータの上に積み重ねて
保存される。
2、データを取り出す際は、積み重ねられたデータの一番上、
すなわち最後に保存されたデータが一番最初に取り出される。
という特徴があるデータ構造である。
LIFO(Last-In First-Out)とも呼ばれる。
(ここまで)
※連絡は、授業で配った吉野のメールアドレスまで。