明星大学 情報学科 2012年度 後期 情報技術Ⅱ 第8回 中間試験の解説 @ DENGINEER 本日 の メニュー 1.中間試験の結果報告 2.問題についての解説 1.木構造の応用(1) 四則演算式の解析 (4+2)×(3-1) × + 4 - 2 3 1 2.解説(問題1 1-1)(1) 問題1 C言語 1-1 unsigned char moji_1;・・・文字型 struct Kouzou { unsigned char code; ・・・文字型 unsigned char str[10];・・文字型配列 }; struct Kouzou mk[3]; ・・・構造体配列 構造体 2.解説(問題1 1-1)(2) 問題1 C言語 1-1 unsigned char moji_1; struct Kouzou { unsigned char code; unsigned char str[10]; }; struct Kouzou mk[3]; 11 11 1 11 1 1 2 11 3 4 5 6 7 8 9 10 2.解説(問題1 1-2) 問題1 C言語 1-2 int main( void ) { struct Kouzou (1) *pk pk = malloc( (2) (3) ; //構造体 Kouzouのポインタ pkを宣言 ); //動的にメモリを確保し、pkに割り当てる //pkのcodeに168を入れる sizeof( struct Kouzou ) = 168; pk -> code printf( “pkのcodeその1 = %02x\n” , (3)と同じもの ); printf( “pkのcodeその2 = %02X\n” , (3)と同じもの ); free( (4) return ( 0 ); } pk ); //pkを解放する // pkのcodeを表示する // pkのcodeを表示する 2.解説(問題1 1-3) 問題1 C言語 1-3 printf( “pkのcode その1 = %02x\n” , (3)と同じもの ); // pkのcodeを表示する printf( “pkのcode その2 = %02X\n” , (3)と同じもの ); // pkのcodeを表示する pk の code には 、10進表記の 168 が入っている 16進に変換すると A8 となる 2.解説(問題2 2-1) 問題2 逆ポーランド記法 2-1 (1) 2+3-5×8 (2) 2+(3-5)×8 - + + 2 5 × 8 - 3 23+58×- × 2 × 3 (3) (2+3-5)×8 - 8 5 235-8×+ + 2 8 5 3 23+5-8× 2.解説(問題2 2-2) 問題2 逆ポーランド記法 2-2 (1) 20_12_×_11_-_29_+ (2) 1_2_3_4_+_×_- 4 73 12 11 29 240 229 258 20 14 2 × - + -13 1 (3) 10_2_3_+_÷_73_× + × - 3 73 2 5 146 10 2 + ÷ × 2.解説(問題2 2-3) 問題2 逆ポーランド記法 2-3 4826++× (1) (2) × 4 6 + 8 82 + 16 8 4 8 2 6 64 4 + + × 2.解説(問題3 3-1) 問題3 スタックとキュー 3-1 LINK リングバッファ LIFO PUSH FILA 先入れ後出し FIFA PULL 待ち行列 FILE FIFO LOLI ドーナツバッファ FILO 先入れ先出し (1)stack LIFO , PUSH , 先入れ後出し , FILO リングバッファ , 待ち行列 , FIFO , 先入れ先出し (2)queue 2.解説(問題3 3-2)(1) 問題3 スタックとキュー 3-2 (1)速度差を吸収する ・・・入れた順番どおりに取り出す必要がある 先入れ先出し(FIFO) キュー(queue) (2)読み出し不能の間は、バッファから取り出して再生するだけ バッファが空になるまでは、連続して再生できる (音飛びしない) バッファサイズが、何秒分の再生データか 計算すればよい 256,000(byte) 176,400(byte/sec) ≒ 1.4512(sec) 2.解説(問題3 3-2)(2) (3)3通りの考え方で解説 ・ ・ ・ その1 256kbyte 読み出しにかかる時間は 256,000(byte) 4×176,400(byte/sec) 読み出し 再生 ≒ 0.3628(sec) この間に再生されている分は 176,400(byte/sec)×0.3628(sec) ≒ 64,000(byte) 0.3628秒 読み出した時点で、さらに64,000byte 使えることになる 64kbyte 読み出しにかかる時間は 64,000(byte) 4×176,400(byte/sec) ≒ 0.0907(sec) よって、 0.3628 + 0.0907 ≒ 0.4535(sec) ・ ・ ・ 2.解説(問題3 3-2)(3) (3) その2 読み出し時間をt(sec)と置くと、 読み出せるデータ量は (4×176,400) ×t(byte) ・ ・ ・ 読み出し 再生 この間に再生されるデータ量は、 176,400 ×t(byte) 読み出し部がバッファを1周してから、再生部に追いつくのは、 (4×176,400) ×t= 176,400 ×t+256,000 と、なるので、tについて解くと t ≒ 0.4837(sec) ・ ・ ・ 2.解説(問題3 3-2)(4) (3) その3 再生しながらなので、4倍速で読み出す間に 1倍速で再生される 再生された部分は、再利用可能 t秒で バッファに溜まる分は、 (4×176,400)×t - 176,400 ×t =(3×176,400)×t(byte) バッファサイズは、256kbyte なので、 (3×176,400)×t= 256,000 t ≒ 0.4837(sec) ・ ・ ・ 読み出し 再生 ・ ・ ・ 2.解説(問題4 4-1)(1) 問題4 木構造 4-1 ア (1)2分木 12 4 2 15 9 17 (2)2分探索木 ・・・・○ (3)完全2分木 ・・・・× (4)木構造 (5)ヒープ木 8 ・・・・・・○ ・・・・・・○ ・・・・ × 10 (6)ハフマン木 ・・・ × 2.解説(問題4 4-1)(2) 問題4 木構造 4-1 イ (1)2分木 13 5 1 9 8 12 ・・・・・・○ (2)2分探索木 ・・・・ × (3)完全2分木 ・・・・ ○ (4)木構造 (5)ヒープ木 (6)ハフマン木 ・・・・・・○ ・・・・ × ・・・ × 2.解説(問題4 4-1)(3) 問題4 木構造 4-1 (1)2分木 ウ 8 3 1 4 2 5 6 7 ・・・・・・ × (2)2分探索木 ・・・・ × (3)完全2分木 ・・・・× (4)木構造 (5)ヒープ木 (6)ハフマン木 ・・・・・・○ ・・・・ × ・・・ × 2.解説(問題4 4-1)(4) 問題4 木構造 4-1 エ (1)2分木 10 7 6 8 4 2 9 (2)2分探索木 ・・・・ × (3)完全2分木 ・・・・× (4)木構造 (5)ヒープ木 5 3 ・・・・・・ × ・・・・・・ × ・・・・ × 1 (6)ハフマン木 ・・・ × 2.解説(問題4 4-1)(5) 問題4 木構造 4-1 (1)2分木 オ ・・・・・・○ 15 13 12 10 8 6 (2)2分探索木 ・・・・○ (3)完全2分木 ・・・・ ○ (4)木構造 (5)ヒープ木 (6)ハフマン木 ・・・・・・○ ・・・・ × ・・・ × 2.解説(問題4 4-1)(6) 問題4 木構造 4-1 カ (1)2分木 12 5 2 11 4 8 (2)2分探索木 ・・・・ × (3)完全2分木 ・・・・ ○ (4)木構造 10 (5)ヒープ木 1 3 6 7 ・・・・・・○ ・・・・・・○ ・・・・ ○ 9 (6)ハフマン木 ・・・ × 2.解説(問題4 4-2) 問題4 木構造 4-2 1 , 2 , 5 , 8 , 13 , 18 , 21 8 2 1 18 5 13 21 2.解説(問題5 5-1) 問題5 線形リスト 5-1 1 ● ● 2 8 ② ① 5 ● ● 13 ● 18 ● 2.解説(問題5 5-2) 問題5 線形リスト 5-2 0x9000 1 0x0001 0x9004 ● 0x9008 ● 2 0x900C ● 8 0x0002 13 0x0008 0x9014 5 0x000D 0x9010 ● 18 0x0012 ● 0x0005 struct singly_list { short value; struct singly_list }; value *next; 1 *next ● 0x01 0x00 0x04 0x90 ● @
© Copyright 2025 ExpyDoc