平成19年秋期基本情報技術者試験午後問4、疑似言語
- 2017/04/26
- 13:27
問題文、解答、解説の順で掲載しております。
無料から学べる講座
http://ai-light.com/itkeiei/
ニコニコチャンネル
http://ch.nicovideo.jp/ai-light
YouTubeチャンネル
https://www.youtube.com/user/ailightcom
Access・Excel倶楽部
http://ai-light.com/accessclub/
株式会社アイライト公式HP
http://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)
***********************************************************************************************************
次のプログラムの説明及びプログラムを読んで,設問1,2に答えよ。
〔プログラムの説明〕
スタックを使って,実数値を10進数字列(文字列)に変換する副プログラムFloatFormatである。
(1) FloatFormatは,実数Floatの値を10進数字列に変換し,その先頭の数字から順に1文字ずつ文字型配列Out[]に格納する。
(2) 小数点以下は,引数Num(Num≧1)で指定されたけた数までを格納する。
(3) FloatFormatの引数の仕様を表に示す。
表 FloatFormat の引数の仕様
引数 | データ型 | 入力/出力 | 意味 |
Float | 実数型 | 入力 | 変換対象の実数 |
Num | 整数型 | 入力 | 文字列に変換する際の小数点以下のけた数(Num≧ 1) 小数第 Num十1 位以下は切捨て |
Out[] | 文字型 | 出力 | 変換結果を格納する文字型の配列 |
Len | 整数型 | 出力 | 配列 Oul[] に格納された変換結果の文字数 |
(4) 実数Floatの値を10進数字列に変換する手順は,次のとおりである。
① Floatの値が負の場合は,負符号を表す"-"をOut[]に格納し,Floatの値を正数に変換する。
② 整数部を,1の位から上位に向かって,1けたずつ10進数字に変換し,スタックに積む。
③ スタックに積み終わったら,スタックに積んだ文字を順番に取り出してOut[]に格納することによって,整数部の10進数字を正しい順番に並べ替える。
④ 整数部が0の場合は "0"をOut[]に格納する。
⑤ 小数点を表す"."をOut[]に格納する。
⑥ 小数部を,小数第1位から第Num位まで,1けたずつ10進数字に変換し,Out[]に格納する。
(5) Push()はスタックに1文字を積む関数,Pop()はスタックから1文字を取り出す関数である。Int()は小数点以下を切り捨てる関数である。
(6) 配列の添字は0から始まり,文字型配列Out[]の要素数は十分に大きいものとする。また,プログラム中の各演算であふれは発生しないものとする。
(7) FloatFormatの変換例を図に示す。

図 FloatFormat の変換例
[プログラム]

設問1 プログラム中の

a に関する解答群
ア Fint - 10
イ Fint - Fint ÷ 10
ウ Fint - (Fint ÷ 10)× 10
エ Fint ÷ 10
オ (Fint ÷ 10)× 10
b に関する解答群
ア L = 0
イ L = 0 or Out[0] = "-"
ウ L = 0 or (L =1 and out[0] = "-")
エ L = 1
オ L = 1 and Out[0] ="-"
c,d に関する解答群
ア Fdec - Int(Fdec)
イ Fdec - Int(Fdec × 10)
ウ Fdec - Int(Fdec ÷ 10)
エ Fdec × 10
オ Fdec ÷ 10
設問2 次の記述中の

Float = -0.012,Num = 2 として FloatFormat を呼び出した場合,プログラム中のαの部分は


解答群
ア 0 イ 1 ウ 2 エ 3 オ 4
参考文献
番兵
https://ja.wikipedia.org/wiki/%E7%95%AA%E5%85%B5
***********************************************************************************************************
無料から学べる講座
http://ai-light.com/itkeiei/
ニコニコチャンネル
http://ch.nicovideo.jp/ai-light
YouTubeチャンネル
https://www.youtube.com/user/ailightcom
Access・Excel倶楽部
http://ai-light.com/accessclub/
株式会社アイライト公式HP
http://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)
***********************************************************************************************************
********************************************************************************
解答
設問1 答 aエ 答 bウ 答 cエ 答 dア 設問2 答 eア 答 fウ
********************************************************************************
解説
Float≧0.0
Floatは問題文より、「変換対象の実数」である。ここではこの数値が0以上であるかを判別している。つまりは、Floatが正であるか負であるかを判別している。
Float≧0.0が偽の時、つまりはFloatが負の場合には、
F ← -Float
でFloatの値を正に変換している。
変換対象の実数が負の際には、問題文より「負符号を表す"-"をOut[]に格納」とある。
Out[] ← "-"
で、その処理を行っている。
このセクションでは、問題文の(4)①に該当する処理を行っている。
Push(“#”)
で、プログラム中のコメントには「スタックに番兵として、“#”を積む」とある。番兵とは参考文献にある通りデータの終了を示すために配置されたデータを指している。
Fint ← Int(F)
問題文よりInt()関数は小数点以下を切り捨てる関数であるから、例えば、F が12.345の場合にはFintには12がセットされる。
Idx ← Fint – ( Fint ÷ 10 ) × 10
でFintおよびIdxは共に整数であるから、その演算結果も整数であると推測される。例えば、Fintが12の場合、
Fint ÷ 10
で結果は1.2ではなく、1となり、×10 を行うことで10となる。この演算結果で、Idxの値は2となる。つまりは、整数部の1の位がIdxにセットされることになる。
Chr[Idx]で、Chrは配列で問題文より添字は0から始まるので、値は以下のように格納されている。
Chr[0] | Chr[1] | Chr[2] | Chr[3] | Chr[4] | Chr[5] | Chr[6] | Chr[7] | Chr[8] | Chr[9] |
“0” | “1” | “2” | “3” | “4” | “5” | “6” | “7” | “8” | “9” |
上記の例ではIdxが2の時、つまりはChr[2]の時は文字の“2”が取得されることになる。
{ a }
問題文の(4)②より1の位から上位に向かって、1桁ずつ取得しスタックに格納していく。前段の処理で1の位の値がスタックに積まれたので、
Fint ÷ 10
によって、位を一つ落とすことができ、次の位をスタックに積めるようになる。よって、解答はエとなる。
T ← Pop()
でスタックから値を取り出す。この際に変換対象の実数に整数部がある時はその最上位の位を取得し、整数部がない場合には#が取り出される。
T ≠ ”#”
で変換対象の実数に整数部がある時には、以下の処理を行う。
OUT[L] ← T
で取り出した値を、変換結果を格納する文字型の配列に順にセットしていく。
{ b }
変換対象の実数に整数部がない場合に、例えば、変換対象の実数が0.012で、Numが2の時、Out[]は
0 | . | 0 | 1 |
となる。
つまりは変換対象の実数に整数部がない場合には、Out[0]に”0”をセットする必要がある。この場合はL=0の場合が該当する。
同様にして、変換対象の実数に整数部がない負数の時は、例えば変換対象の実数が-0.012でNumが2の時、Out[]は
- | 0 | . | 0 | 1 |
となる。この場合はL=1でOut[0]=”-“の場合が該当する。
よって、bの解答はウとなる。
Fdec ← F - Int(F)
で例えばFが12.345の時、Int(F)は12になるからFdecは0.345となる。よって、Fdecには変換対象の実数の小数部がセットされることになる。
{ c }
Fdec ← Fdec × 10
でFdecが0.345の時に結果は3.45となる。
さらに
Idx ← Int(Fdec)
でFdecが3.45の際にIdxには3がセットされる。
OUT[L] ← Chr[Idx]
で、Idxが3の時は文字の”3”がOUT[L]にセットされることになる。よって、解答はエとなる。
{ d }
上記の処理で小数点以下第1位をOUT[]にセットできる。上記の例では{ c }の処理でFdecが0.345の時に結果は3.45となる。よって、本処理で演算結果が0.45となれば、次の小数点がOUT[]に取得できるようになる。
よって、解答はアとなる。
設問2
Floatが-0.012の時、プログラム中の /* 符号の処理 */ セクションで
Float≧0.0
は偽となる。よって
F ← - Float
でFには0.012がセットされる。
/* 整数部の処理 */ セクションでInt(F)は0となる。
Fint > 0
は偽となるから、αの処理は一度も行われないことになる。よって、解答はアとなる。
/* 小数部の処理 */ セクションで
N:1 , N≦Num , 1
では擬似言語の言語仕様により、初期値がN=1でN≦Numが真の間はループを繰り返す。よって、βは2回繰り返されることになる。よって、解答はウとなる。
参考:平成19年秋期基本情報技術者試験午後問4
***********************************************************************************************************
無料から学べる講座
http://ai-light.com/itkeiei/
ニコニコチャンネル
http://ch.nicovideo.jp/ai-light
YouTubeチャンネル
https://www.youtube.com/user/ailightcom
Access・Excel倶楽部
http://ai-light.com/accessclub/
株式会社アイライト公式HP
http://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)
***********************************************************************************************************
- 関連記事
-
- 平成19年秋期基本情報技術者試験午後問4、疑似言語 (2017/04/26)
- 平成18年秋期基本情報技術者試験午後問4、疑似言語 (2017/03/18)