平成8年度 秋期 第二種 午後 問11

                        [更新日]1996.11.19
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ 次の問11から問14までの問については、この中から1問を選択し、答案用紙の┃ ┃選択欄の選をマークして解答してください。               ┃ ┃ なお、2問以上選択した場合には、はじめの1問について採点します。     ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ 問11 次のCプログラムの説明及びプログラムを読んで、設問l〜4に答えよ。 〔プログラムの説明〕 圧電素子センサ(素子の起電力を用いた圧力検出器)の温度に対する出力値の変化 を実験で調べたところ、表に示す結果が得られた。この表は,0℃のときの出力値を 1.00としたときの比率を表したものである。 表 温度とセンサ出力値比率の対応表 ┌────┬────────┐ │ 温度 │センサ出力値比率│ ├────┼────────┤ │ −40℃ │ 0.30 │ ├────┼────────┤ │ −20℃ │ 0.70 │ ├────┼────────┤ │ −10℃ │ 0.90 │ ├────┼────────┤ │ 0℃ │ 1.00 │ ├────┼────────┤ │ 10℃ │ 1.l0 │ ├────┼────────┤ │ 30℃ │ 1.60 │ ├────┼────────┤ │ 50℃ │ 1.70 │ └────┴────────┘ このデータをもとにして、−40〜50℃の間の温度補正係数Kを1℃ごとに求めて印 字するプログラムを作成した。このプログラムの結果を用いて、温度に対応するKの 値を圧電素子センサの出力値に乗算し、0℃のときの出力値に等しくなるように補正 できる。 (l)温度とセンサ出力値比率の表は、構造体配列Curve[]で記述する。 typedef struct{ int Temp; /* 温度 */ float Ratio; /* センサ出力値比率(実測値) */ float Step; /* 作業変数 */ }CURVE; CURVE Curve[ 7 ]; (2) 構造体配列Curve[]を初期化する関数Setupcurve()と、温度補正係数Kを求 める関数GetKvalue()を用いる。 〔プログラム〕 #include <stdio.h> typedef struct{ int Temp; /* 温度 */ float Ratio; /* センサ出力値比率(実測値)*/ float Step; /* 作業変数 */ }CURVE; Void SetupCurve(CURVE *,int); float GetKvalue(int,CURVE *,int ); main() { int Temp; float k; CURVE Curve[ 7 ]={ {-40,0.30,0.0 },{-20, 0.70, 0.0 },{-10, 0.90, 0.0 }, { 0, 1.00, 0.0 },{ 10, 1.10, 0.0 },{ 30, 1.60, 0.0 }, { 50, 1.70, 0.0 } }; SetupCurve(Curve,7); for (Temp=-40;Temp<=50;Temp++){ K=GetKvalue(Temp,Curve,7); printf("%d ℃のときの温度補正係数は %f です。\n",Temp,k); } } void SetupCurve(CURVE *p,int Points ) { int i; for(i=0;i<points-1;i++,p++){ p->Step = ( (p+1)->Ratio - p->Ratio)/ ( (p+1)->Temp - p->Temp); } } float GetKvalue(int Temp,CURVE *p,int Points) { int i,j,n; i = 0; j = Points - 1; if((Temp< p->temp) || (Temp>(p+j)->Temp)) return 0.0; /* 温度が範囲外のときは0.0を返す */ while(1){ n=(i+j)/2; if(Temp>=(p+n)->Temp){ if(n>=points-1) break; if(Temp<(p+n+1)->Temp) break; i=n+1; }else j=n; } p+=n; return 1.0 / (p->Ratio+p->Step*(Temp - p->Temp)); } 設問1 関数SetupCurve()の処理内容として正しい記述を、解答群の中から選ベ。 解答群 ア 温度区間全体を2次曲線で補間するための多項式の係数を求めている。 イ 温度区間全体を3次曲線で補間するための多項式の係数を求めている。 ウ 温度区間ごとに、温度1℃当たりのセンサ出力値比率の差分を求めている。 エ 温度区間ごとに、センサ出力値比率0.1当たりの温度の差分を求めている。 オ 温度区間ごとに、直線の方程式の傾きと切片を求めている。 設問2 構造体配列 Curve[]の要素を追加する場合、Curve[]が満たすべき必要 条件として正しいものを、解答群の中から選ベ。 解答群 ア 温度の昇順(低い温度から高い温度へ)に要素が並ぶこと。 イ 温度の上昇に従って、センサ出力値比率が大きくなること。 ウ 温度の上昇に従って、センサ出力値比率が上下しないこと。 エ センサ出力値比率が2.0を超えないこと。 オ 要素間の温度差が最低2℃以上離れていること。 設問3 関数GetKValue()が構造体配列Curve[]の要素を探索する回数について の正しい記述を、解答群の中から選ベ。 解答群 ア 計測温度の分布が一様ならば、要素数をNとすると2N回程度である。 イ 計測温度の分布が一様ならば、要素数をNとすると2N回程度である。 ウ 計測温度の分布が一様ならば、要素数をNとするとlog2N回程度である。 エ 高い温度の温度補正係数を求めるほうが探索回数が多くなる。 オ 毎回確率的に探索するので、要素数及び温度に無関係である。 設問4 温度補正係数Kを求めるアルゴリズムをプログラムから読み取り、温度が 16℃のときのKの値を、解答群の中から選ベ。 解答群 ア 0.15 イ 0.80 ウ 1.15 エ 1.25 オ 1.35