View
6
Download
0
Category
Preview:
Citation preview
ソフトウェア基礎Ⅱ
【レポート1】
提出日:12 月 24 日(月)
所属:工学部情報工学科
学籍番号:075713G
氏名:神山朗
1. 次の排他的論理和に関する恒等式を、真理表を用いて証明せよ。
A xor B = A•notB + notA•B {①} = (A + B)(notA + notB) {②}
真理表
A B notA notB A•notB B•notA ① A + B notA+notB ② A xor B
0
0
1
1
0
1
0
1
1
1
0
0
1
0
1
0
0
0
1
0
0
1
0
0
0
1
1
0
0
1
1
1
1
1
1
0
0
1
1
0
0
1
1
0
∴ ① = ② = A xor B {よって 上の恒等式は証明された。
2. 半加算機(HA)と全加算機(FA)を真理表と回路を用いて説明し、
下記の 4ビットの演算を HA と FA で実現せよ。
HA 真理表
入力 出力
a b c s
0
0
1
1
0
1
0
1
0
0
0
1
0
1
1
0
FA 真理表
入力 出力
Ck Ak Bk Ck+1 Sk
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
0
0
1
0
1
1
1
0
1
1
0
1
0
0
1
a3 a2 a1 a0
+ b3 b2 b1 b0
--------------
c4 c3 c2 c1 c0
右の回路図で上の 4bit の計算を実現できる。
3. 固定小数点と浮動小数点について説明せよ。
固定小数点 ・・・ コンピュータにおける実数の近似値の表現方式。
固定小数点では整数部分に用いるビット数と小数部分に用いる
ビット数をあらかじめ固定して表現する。
同じく実数を近似表現する方式で小数点の位置が可変である
浮動小数点に対してこう呼ぶ。
コンピュータで用いられる整数型は、小数部分に用いるビット数を
ゼロとした固定小数点数としてもとらえることもできる。
浮動小数点 ・・・ コンピュータにおける実数の近似値の表現方式。
固定小数点数と比較するとさまざまな誤差が発生しやすいが、
大きな値や、逆に小さな値を表現するのに向いている。
そのため、誤差の概念がはっきりしている分野や
極端な数を扱う分野(科学計算など)で多く用いられている。
また、プログラミング言語のほとんどが対応しているということもあり、
小数の表現方法としては最も普及している。
4. MIPS と MFLOPS について説明せよ。
MIPS ・・・ コンピュータの処理速度をあらわす単位。
1MIPS のコンピュータは、1秒間に 100 万回の命令を処理できる。
MIPS は主にマイクロプロセッサの性能を反映するが、
現在では、コンピュータの性能は、より複雑なベンチマークテストによる
総合的な性能尺度によって測られることが多くなっている。
MFLOPS ・・・ コンピュータの処理速度をあらわす単位の一つで、
1 秒間に 100 万回の浮動小数点数演算(実数計算)を実行できることを意味する。
FLOPS は「Floating point number Operations Per Second」の略で
1 秒間に 1回の計算ができる処理速度をあらわし、
M(メガ)は 100 万(10 の 6乗)を意味する接頭辞。
スーパーコンピュータなど大規模なコンピュータシステムの
性能指標として用いられることが多い。
5. 補助単位についてまとめよ。
補助単位 ・・・ 基本となる単位の分量・倍量単位のこと。
k (キロ) M (メガ) G (ギガ) T (テラ) P (ペタ) E (エクサ)
10^3 10^6 10^9 10^12 10^15 10^18
m (ミリ) μ (マイクロ) n (ナノ) p (ピコ) f (フェムト) a (アト)
10^-3 10^-6 10^-9 10^-12 10^-15 10^-18
6. 2 の補数表現について 16 ビットの数値を用いて 2進数、10 進数、16 進数で
説明せよ。
2 の補数表現 ・・・ 2 の補数とは、通常は 2進法における 2の補数のことである。
2 進デジタルコンピュータの内部で負の値を表すためによく使われる。
与えられた 2 進数値(n ビット)に対して、そのビット数より 1 桁多く、
最上位ビットが1、残りがすべて0であるような数値(n=8なら 100000000 )
から、元の数を引いて、1を加えた数が 2の補数である。
計算後は、最上位ビット(n+1 ビット目)は無視してよい。
例 0100110000111101‥①の 2の補数を求める。
10000000000000000 (16+1 桁)
- 0100110000111101‥① (16 桁)
------------------
1011001111000010 → 1 を加える → ∴ 1011001111000011 これが①の 2の補数
①を 10進数表記は、
1 + 4 + 8 + 16 + 32 + 2048 + 4096 + 32768 = ∴ 38973 である。
①の 2の補数を 10進数表記は、
131072 - 38973 + 1 = ∴ 92100 である。
①の 16進数表記は、
0100 = 8, 1100 = c, 0011 = 3, 1101 = d → ∴ 8c3d である。
①の 2の補数を 16進数表記は、
1011 = d, 0011 = 3, 1100 = c, 0011 = 3 → ∴ d3c3 である。
7. 論理シフトと算術シフトについてまとめよ。
算術シフト・・・このシフトではあふれたビットは単に消える。
左シフトでは右の空いたビットに 0が入り、
右シフトでは符号ビットと同じ内容が入る。
ここでいう符号ビットとは最上位ビット(一番左のビット)のことである。
(1なら負の数、0なら正の数)
算術シフトは 2の補数表現の符号付き二進数を扱うのに適している。
【例】最上位ビットを符号ビットとし、それぞれの算術シフトをやってみる。
0101 (=10 進数で 5) を右シフト
0101 ー右シフト→ 0010 (=10 進数で 2)
0101 (=10 進数で 5) を左シフト
0101 ー左シフト→ 1010 (=10 進数で 10)
1011 (=10 進数で-5) を右シフト
1011 ー右シフト→ 1101 (=10 進数で-3)
論理シフト・・・右シフトのときに常に空いたビットをゼロにして、符号拡張をしない。
論理シフトは符号無しの二進数を扱うのに適している。
論理シフトでは負の数を扱わないので例は省く。
8. 3 種類の探索方法について論ぜよ。(図と具体例を示すように)
線形探索法・・・配列の最初のデータから1つずつ順番に比較して探索していく方法。
順次探索とも言う。
この方法では、探索データをあらかじめ配列の最後に配置しておく。
それによりデータが見つからない場合でも探索終了の判定ができる。
データ件数が N件の時
平均探索回数 = (N+1) / 2 回
最大探索回数 = N 回 となる。
フローチャート&例
2分探索法・・・配列のデータを次々に2等分して探索範囲を狭めていく方法。
この方法を行う配列データは、降順または昇順に整列されてなければならない。
データ件数が N件の時
平均探索回数 = log2N 回
最大探索回数 = log2N+1 回 となる。
フローチャート&例
ハッシュ法・・・高速探索法の1つ。始めから探索しやすいように、データを格納するときに
格納位置をハッシュ関数という計算式を使って決める。
文字の場合は文字コードを使い、ハッシュ関数で計算して格納位置を決める。
フローチャート&例
9. ソートについて論ぜよ。
(フローチャートで最低8個の数値を用いてソートのアルゴリズムを示すように)
バブルソート・・・基本交換法。隣り合うデータを比較し、大小関係が逆の場合に
それらのデータを並び替えるという作業を繰り返し行う方法。
整列の比較回数は
(n-1) +(n-2) +‥‥ +2 +1 = n(n-1)/2 回 となる。
フローチャート
選択ソート・・・基本選択法。データの中で最小値(または最大値)を選び出し、
最後のデータと入れ替えるという作業を繰り返し行う方法。
整列の比較回数は
n(n-1)/2 回となる。
フローチャート
挿入ソート・・・基本挿入法。配列データに置いて、挿入データより
手前までのデータが整列済みであるという前提で行う方法である。
挿入データの手前のデータから順次にデータを比較し、
適当な場所にそのデータを挿入するという作業を繰り返し行う方法。
整列の比較回数は
n(n-1)/2 回となる。
フローチャート
ヒープソート・・・基本選択法の応用。配列をヒープに変換し、
ルートの値と各ノードの値を比較して整列を行う方法。
ヒープとはルートの最大値が入る(親ノード≧子ノード)であるか、
ルートの最小値が入る(親ノード≦子ノード)であるという条件を
満たした完全2分木のことを言う。
左右の子ノードに大小関係はない。
ルートから最大値(または最小値)を取り出して配列の末尾に配置し、
新たなヒープを作るという作業を繰り返す。
フローチャート
ソート手順
シェルソート・・・基本挿入法の応用。ある一定の間隔ごとのデータ列に分け、
挿入法で整列させ、その間隔を順次狭くしていく方法。
間隔は通常、データ件数の 1/2,1/4,1/8,……とする。
最後の間隔が1になったときに基本挿入法となる。
フローチャート ソート手順
クイックソート・・・全データから基準値を選び出し、その値より大きいデータと小さいデータに
振り分けるといった作業を繰り返し行う方法。
基準値は通常、中央のデータを使い、整列処理速度は速くなる。
フローチャート ソート手順
マージソート・・・配列のデータを2組になるまで2分割し、その後各々をソートする。
次に2つのソートされたデータ列をマージ(併合)する。
そしてマージされた列をまたソートするという作業を
繰り返し並び替えを実現する方法。
フローチャート ソート手順
10. 講義で゙解けなかった問題を解け。
P32 並列処理
[見ないで解いたものが正解していた。]
設問
a システムXは1つのプロセッサしかないので演算性能は200MFLOPSである。
200MFLOPS = 200000000FLOPS
このプログラムは画像データの1行を単位として扱い、
1行に40万回の浮動小数点に相当する実行時間が必要ということなので、
それが600行あるということは、
600 × 400000 = 2400000000
②240000000 / 200000000 = 1.2秒 = 1200㍉秒
①画像データ読み込み部 = 40㍉秒
②1行についての計算部 = 1200㍉秒
③結果出力部 = 120㍉秒
∴ ①+②+③ = 1360㍉秒 となる。
b システムYは4つプロセッサがあるので
200MFLOPS × 4 = 800MFLOPS
②240000000 / 800000000 = 0.3秒 = 300㍉秒
データを配る時間 = 150㍉秒
データを集めるのにかかる時間 = 150㍉秒
① = 40㍉秒
② = 300㍉秒
③ = 120㍉秒
∴ 300+①+②+③ = 760㍉秒となる。
c これは不等式を作って解答する。
600 * 10^4X / 200MFLOPS + 160 < 600 * 10^X / 800MFLOPS + 460
上の式でシステムXがシステムYで実行した方より速い場合の
X万回の浮動小数点計算に相当する実行時間が求められる。
30 * X㍉秒 + 160 = 7.5 * X㍉秒 + 460
22.5 * X = 300
∴ X = 13.333‥‥ = 13万回の浮動小数点計算に相当する時間で可能。
P50 手続き呼び出し
図1 原始プログラム1 図2 原始プログラム2
図3 手続きBが呼び出される直前のスタックの内容
上位アドレス
スタックポインタ→
下位アドレス
図4 手続きCが呼び出される直前のスタックの内容
: アドレス
r a
r-1
戻り番地 r-2
r-3 b
r-4
戻り番地 r-5
: :
Exterminal Int S
Proc B(Int X2)
Int X1
S =2
X1=X2
X2=200
Call C(X1) ←β
:
End B
Proc C(Int X2)
S =3
:
End C
Int S
Exterminal ProcB
:
Proc A()
Int X1
:
S =1
X1 =100
Call B(X1) ←α
:
End A
:
X1
X1のアドレス
戻り番地
:
設問1
[間違い解答含む。]
aの空欄を
100
r
bの空欄を
100
r-3
と、解答したが aの空欄 の方は間違っていた。
スタックは手続きを呼び出す際に上から順に埋まっていく。
下段は、スタックのアドレスが入るので図3の通りにアドレスを
当てはめればOKである。
当たった方の bの空欄 から考える。
bの空欄にはCall C 実行直前のスタックの状態が入る。
図1の Call B(X1) で図2の Proc B(X2) に移るが、
X1は実引数なので値が変わらず、X1 = 100となる。
∴よって bの空欄 はうえのように埋まる。
間違った aの空欄 を改めて考える。
間違った理由は図2の「X1=X2」を考慮しなかったことがあげられる。
Proc AのX1 と Proc BのX2 が対応しているので、
Proc B で X2 = 200 と代入すると、空欄aの上段は 200 に変化する。
∴よって aの空欄は、
200
r
となる。
設問2
[見ないで解いたものが正解していた。]
ア、手続きAにおける手続きBの参照
Bは外部参照の為、リンク時に解決される。○
イ、手続きAにおける変数X1の参照
X1は局所変数なのでコンパイル時に解決される。×
ウ、手続きBにおける手続きCの参照
Cは内部参照の為、コンパイル時に解決される。×
エ、手続きBにおける変数Sの参照
Sは大域変数の為、リンク時に解決される。○
オ、手続きBにおける変数X1の参照
カ、手続きBにおける変数X2の参照
X1,X2は局所変数の為、コンパイル時に解決される。×
キ、手続きCにおける変数Sの参照
Sは大域変数の為、リンク時に解決される。○
p116 文字列編集
設問1
[間違い解答含む。]
a Sp < Ep と解答したがこれは間違い。ループ脱出を考慮していなかった。
Sp > Ep になった時にループを抜けないといけないので、
∴正答は Sp ≦ Ep となる。
b Text[Ep] ≠ "." and [b] となっている。
意味は「ピリオドではなく、かつ[b]である。」である。
ピリオド以外でループを脱出する方法以外に考えうる方法は
「最大文字数を超える」ということなので最大文字数にならない条件を選べば良い。
∴よって Ep < (Sp + Moji -1) となる。
設問2
[間違い解答含む。]
c Moji/2 と解答したがこれは間違い。ただの早合点だ。
2文字分だけ段の間を空けるので
∴正答は (Moji-2)/2 となる。
d このときは空白を考慮して解いた。
この空白には1段目に入る余白数が入るので、
∴よって Mp ← Yohaku + 1 となる。
e dを考慮して考えると2段目の余白数は、
∴ Mp ← Yohaku + dan + 1 となる。
f ここでは1段目の出力を考える。
Gp と解答したがこれは間違い。考慮してない部分があった。
Gp は 上の「Gp ← Gp + 1」で実際より 1 多いので
∴Gp - 1 となる。
g Dp = 1 が偽だった場合、ここの行が実行される。
結局、1段目の全てを出力したいので、
∴Gyo となる。(1ページの最大文字数)
p126 決定表
設問1
[見ないで解いたものが正解していた。]
a 動作部からみて決める。
左列の動作部では日当1000円支給と宿泊費10000円支給が実行されているので、
片道20km以上かつ120km未満の場合 と 宿泊費が出される場合 の条件を探せば良い。
よって左列は
Y
N
N
Y
になる。
∴解答群を見ると ウ しかない。
b 条件部が左2列が
Y Y
N N
Y Y
Y N
となっているので、
それに動作部をあてはめると、左の方が
日当1000円支給 食事代補助500円支給 宿泊費10000円支給 となっている。
また右の方は上の3行は左と同じなので、
日当1000円支給 食事代補助500円支給 となる。
よって左2列は
X X
- -
X X
になる。
∴解答群をみると イ があてはまる。
設問 2
[見ないで解いたものが正解していた。]
解答群を1つ1つチェックすれば解ける。
ア 条件部に「食事代補助 1000 円支給」の条件があるので動作部に行を追加する。○
イ 日当の条件が増えてないので変更無し。○
ウ 宿泊費支給の条件も増えてないので変更無し。○
エ (3)の改定後と(2)の記述で条件がかぶるところがある。
かぶりは動作指定部にあり、「食事代支給」の動作部は変更しないとダメ。← エが正解
オ 条件部は変更する必要はない。 ○
p133 配列とリスト
設問 1
[見ないで解いたものが正解していた。]
計算量に関係してくる副プログラムはこの場合、
DELETE() と INSERT(x) なので、残った2つは計算量を一定に保つことができる。
(というか残りの 2つは計算量は変化しない。)
∴よって イ エ となる。
設問 2
[間違い解答含む。]
上と同様に副プログラム GET()、LAST()が正解だと思った。
以下に改めた解答を記述する。
LAST()は上の場合と違い、最後の行の行番号がどこにあるかわからないので、
リストの最初から最後までを参照しないといけない。
よって計算量は一定じゃない。
GET()は上と同様、計算量は変化しない。
DELETE()は行を消して、前のポインタと後ろのポインタをつなげるだけなので
その計算量は変化しない。
INSERT()は DELETE()と似ていて、新しい行のポインタをつなげるだけなので
その計算量は変化しない。
∴よって ア イ ウ となる。
設問 3
[見ないで解いたものが正解していた。]
まず DELETE()で要素番号の 8の行が消えるので、
ポインタが指す場所が変わる。そこに注意!!
a 「PREV[9]」は「L2」の「NEXT」とつながるので「2」となる。
b 「NEXT[2]」は「L4」の「PREV」とつながるので「9」となる。
c 「NEXT[8]」は EMPTY[3]とあるのでそこを指す。「3」となる。
∴よって a ウ b キ c エ となる。
【感想】
今年最後のレポートとなるこのレポート。
膨大な量でした。
2 日かけてオムニグラファーでシコシコ作った図。
とても疲れました。
あとはゆっくり休みたいです。
【参考文献】
Wikipedia URL[ http://ja.wikipedia.org/wiki/メインページ ]
IT 用語辞典 e-word URL[ http://e-words.jp/ ]
基本情報技術者【午後】問題集 [日本経済出版社]
Recommended