ソフトウェア基礎Ⅱ - ie-ryukyue075713/reports/software2-1.pdfソフトウェア基礎Ⅱ...

23
ソフトウェア基礎Ⅱ 【レポート1】 提出日:12 月 24 日(月) 所属:工学部情報工学科 学籍番号:075713G 氏名:神山朗

Upload: others

Post on 29-Dec-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ソフトウェア基礎Ⅱ - ie-ryukyue075713/reports/software2-1.pdfソフトウェア基礎Ⅱ 【レポート1】 提出日:12月24日(月) 所属:工学部情報工学科 学籍番号:075713G

ソフトウェア基礎Ⅱ

【レポート1】

提出日:12 月 24 日(月)

所属:工学部情報工学科

学籍番号:075713G

氏名:神山朗

Page 2: ソフトウェア基礎Ⅱ - ie-ryukyue075713/reports/software2-1.pdfソフトウェア基礎Ⅱ 【レポート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 の計算を実現できる。

Page 3: ソフトウェア基礎Ⅱ - ie-ryukyue075713/reports/software2-1.pdfソフトウェア基礎Ⅱ 【レポート1】 提出日:12月24日(月) 所属:工学部情報工学科 学籍番号:075713G

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

Page 4: ソフトウェア基礎Ⅱ - ie-ryukyue075713/reports/software2-1.pdfソフトウェア基礎Ⅱ 【レポート1】 提出日:12月24日(月) 所属:工学部情報工学科 学籍番号:075713G

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 である。

Page 5: ソフトウェア基礎Ⅱ - ie-ryukyue075713/reports/software2-1.pdfソフトウェア基礎Ⅱ 【レポート1】 提出日:12月24日(月) 所属:工学部情報工学科 学籍番号:075713G

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)

論理シフト・・・右シフトのときに常に空いたビットをゼロにして、符号拡張をしない。

論理シフトは符号無しの二進数を扱うのに適している。

論理シフトでは負の数を扱わないので例は省く。

Page 6: ソフトウェア基礎Ⅱ - ie-ryukyue075713/reports/software2-1.pdfソフトウェア基礎Ⅱ 【レポート1】 提出日:12月24日(月) 所属:工学部情報工学科 学籍番号:075713G

8. 3 種類の探索方法について論ぜよ。(図と具体例を示すように)

線形探索法・・・配列の最初のデータから1つずつ順番に比較して探索していく方法。

順次探索とも言う。

この方法では、探索データをあらかじめ配列の最後に配置しておく。

それによりデータが見つからない場合でも探索終了の判定ができる。

データ件数が N件の時

平均探索回数 = (N+1) / 2 回

最大探索回数 = N 回 となる。

フローチャート&例

Page 7: ソフトウェア基礎Ⅱ - ie-ryukyue075713/reports/software2-1.pdfソフトウェア基礎Ⅱ 【レポート1】 提出日:12月24日(月) 所属:工学部情報工学科 学籍番号:075713G

2分探索法・・・配列のデータを次々に2等分して探索範囲を狭めていく方法。

この方法を行う配列データは、降順または昇順に整列されてなければならない。

データ件数が N件の時

平均探索回数 = log2N 回

最大探索回数 = log2N+1 回 となる。

フローチャート&例

Page 8: ソフトウェア基礎Ⅱ - ie-ryukyue075713/reports/software2-1.pdfソフトウェア基礎Ⅱ 【レポート1】 提出日:12月24日(月) 所属:工学部情報工学科 学籍番号:075713G

ハッシュ法・・・高速探索法の1つ。始めから探索しやすいように、データを格納するときに

格納位置をハッシュ関数という計算式を使って決める。

文字の場合は文字コードを使い、ハッシュ関数で計算して格納位置を決める。

フローチャート&例

Page 9: ソフトウェア基礎Ⅱ - ie-ryukyue075713/reports/software2-1.pdfソフトウェア基礎Ⅱ 【レポート1】 提出日:12月24日(月) 所属:工学部情報工学科 学籍番号:075713G

9. ソートについて論ぜよ。

(フローチャートで最低8個の数値を用いてソートのアルゴリズムを示すように)

バブルソート・・・基本交換法。隣り合うデータを比較し、大小関係が逆の場合に

それらのデータを並び替えるという作業を繰り返し行う方法。

整列の比較回数は

(n-1) +(n-2) +‥‥ +2 +1 = n(n-1)/2 回 となる。

フローチャート

Page 10: ソフトウェア基礎Ⅱ - ie-ryukyue075713/reports/software2-1.pdfソフトウェア基礎Ⅱ 【レポート1】 提出日:12月24日(月) 所属:工学部情報工学科 学籍番号:075713G

選択ソート・・・基本選択法。データの中で最小値(または最大値)を選び出し、

最後のデータと入れ替えるという作業を繰り返し行う方法。

整列の比較回数は

n(n-1)/2 回となる。

フローチャート

Page 11: ソフトウェア基礎Ⅱ - ie-ryukyue075713/reports/software2-1.pdfソフトウェア基礎Ⅱ 【レポート1】 提出日:12月24日(月) 所属:工学部情報工学科 学籍番号:075713G

挿入ソート・・・基本挿入法。配列データに置いて、挿入データより

手前までのデータが整列済みであるという前提で行う方法である。

挿入データの手前のデータから順次にデータを比較し、

適当な場所にそのデータを挿入するという作業を繰り返し行う方法。

整列の比較回数は

n(n-1)/2 回となる。

フローチャート

Page 12: ソフトウェア基礎Ⅱ - ie-ryukyue075713/reports/software2-1.pdfソフトウェア基礎Ⅱ 【レポート1】 提出日:12月24日(月) 所属:工学部情報工学科 学籍番号:075713G

ヒープソート・・・基本選択法の応用。配列をヒープに変換し、

ルートの値と各ノードの値を比較して整列を行う方法。

ヒープとはルートの最大値が入る(親ノード≧子ノード)であるか、

ルートの最小値が入る(親ノード≦子ノード)であるという条件を

満たした完全2分木のことを言う。

左右の子ノードに大小関係はない。

ルートから最大値(または最小値)を取り出して配列の末尾に配置し、

新たなヒープを作るという作業を繰り返す。

フローチャート

Page 13: ソフトウェア基礎Ⅱ - ie-ryukyue075713/reports/software2-1.pdfソフトウェア基礎Ⅱ 【レポート1】 提出日:12月24日(月) 所属:工学部情報工学科 学籍番号:075713G

ソート手順

Page 14: ソフトウェア基礎Ⅱ - ie-ryukyue075713/reports/software2-1.pdfソフトウェア基礎Ⅱ 【レポート1】 提出日:12月24日(月) 所属:工学部情報工学科 学籍番号:075713G

シェルソート・・・基本挿入法の応用。ある一定の間隔ごとのデータ列に分け、

挿入法で整列させ、その間隔を順次狭くしていく方法。

間隔は通常、データ件数の 1/2,1/4,1/8,……とする。

最後の間隔が1になったときに基本挿入法となる。

フローチャート ソート手順

Page 15: ソフトウェア基礎Ⅱ - ie-ryukyue075713/reports/software2-1.pdfソフトウェア基礎Ⅱ 【レポート1】 提出日:12月24日(月) 所属:工学部情報工学科 学籍番号:075713G

クイックソート・・・全データから基準値を選び出し、その値より大きいデータと小さいデータに

振り分けるといった作業を繰り返し行う方法。

基準値は通常、中央のデータを使い、整列処理速度は速くなる。

フローチャート ソート手順

Page 16: ソフトウェア基礎Ⅱ - ie-ryukyue075713/reports/software2-1.pdfソフトウェア基礎Ⅱ 【レポート1】 提出日:12月24日(月) 所属:工学部情報工学科 学籍番号:075713G

マージソート・・・配列のデータを2組になるまで2分割し、その後各々をソートする。

次に2つのソートされたデータ列をマージ(併合)する。

そしてマージされた列をまたソートするという作業を

繰り返し並び替えを実現する方法。

フローチャート ソート手順

Page 17: ソフトウェア基礎Ⅱ - ie-ryukyue075713/reports/software2-1.pdfソフトウェア基礎Ⅱ 【レポート1】 提出日:12月24日(月) 所属:工学部情報工学科 学籍番号:075713G

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万回の浮動小数点計算に相当する時間で可能。

Page 18: ソフトウェア基礎Ⅱ - ie-ryukyue075713/reports/software2-1.pdfソフトウェア基礎Ⅱ 【レポート1】 提出日:12月24日(月) 所属:工学部情報工学科 学籍番号:075713G

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のアドレス

戻り番地

:

Page 19: ソフトウェア基礎Ⅱ - ie-ryukyue075713/reports/software2-1.pdfソフトウェア基礎Ⅱ 【レポート1】 提出日:12月24日(月) 所属:工学部情報工学科 学籍番号:075713G

設問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は大域変数の為、リンク時に解決される。○

Page 20: ソフトウェア基礎Ⅱ - ie-ryukyue075713/reports/software2-1.pdfソフトウェア基礎Ⅱ 【レポート1】 提出日:12月24日(月) 所属:工学部情報工学科 学籍番号:075713G

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ページの最大文字数)

Page 21: ソフトウェア基礎Ⅱ - ie-ryukyue075713/reports/software2-1.pdfソフトウェア基礎Ⅱ 【レポート1】 提出日:12月24日(月) 所属:工学部情報工学科 学籍番号:075713G

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)の記述で条件がかぶるところがある。

かぶりは動作指定部にあり、「食事代支給」の動作部は変更しないとダメ。← エが正解

オ 条件部は変更する必要はない。 ○

Page 22: ソフトウェア基礎Ⅱ - ie-ryukyue075713/reports/software2-1.pdfソフトウェア基礎Ⅱ 【レポート1】 提出日:12月24日(月) 所属:工学部情報工学科 学籍番号:075713G

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 エ となる。

Page 23: ソフトウェア基礎Ⅱ - ie-ryukyue075713/reports/software2-1.pdfソフトウェア基礎Ⅱ 【レポート1】 提出日:12月24日(月) 所属:工学部情報工学科 学籍番号:075713G

【感想】

今年最後のレポートとなるこのレポート。

膨大な量でした。

2 日かけてオムニグラファーでシコシコ作った図。

とても疲れました。

あとはゆっくり休みたいです。

【参考文献】

Wikipedia URL[ http://ja.wikipedia.org/wiki/メインページ ]

IT 用語辞典 e-word URL[ http://e-words.jp/ ]

基本情報技術者【午後】問題集 [日本経済出版社]