下図はディジタル技術検定 2 級制御部門第 53 回の (13) である。
イメージ 1
見慣れていないと文言が難しく感じるかも知れないが、高校の時に習ったであろう数列を思い出せば良い。回答付近の文章はこうなる。
「この式の右辺は初項が(2)1(4)公比が e^(-aT)z^(-1) の無限(5)等比級数である」
ということで数式で書くと以下のようになり、[33]は(8)となる。
イメージ 2

下図はディジタル技術検定 2 級制御部門第 53 回の (14) である。
イメージ 3
まずスタックとはなんぞや、と思った人はマイコン関連の本に目を通しておく必要がある。とはいってもそんなに難しい話ではなくて、CPU が何かの処理を行っているときに別の処理を行う必要がある場合や関数(サブルーチン)の実行しようとしていた場合、それまでに処理を行っていた変数やその値が格納されているメモリアドレスなどを一旦退避、記憶させておくことである。この辺りの用語の使い方は私自身は 8 ビットマイコンをちょっといじった程度の知識で説明しているので、最新の用語や CPU のマニュアルなどで使われているものと乖離がある可能性があるので注意して下さい。
簡単なイメージで説明すると、プログラムがプログラムカウンタに従って実行中に関数を呼び出すことになったとする。そうすると関数が書いてあるプログラムのアドレスにジャンプするわけだが、その関数のプログラムを実行後、元のプログラムのアドレスに戻らなくてはいけない。そこで元のプログラムのアドレス番号を一旦スタックしてから関数のプログラムアドレスにジャンプすることになる。この時のスタックの行為を「push」と呼ぶ。関数のプログラム実行終了後は先ほどスタックした値を呼び出して、プログラムアドレスに戻ることになる。このスタックの値の呼び出し行為を「pop」と呼ぶ。ここではプログラムのアドレス番号を例に挙げたが、変数の値をスタックすることもあるだろうし、変数の格納アドレスをスタックする場合もあるだろう。
関数の中でさらに別の関数を呼び出した場合は、その前にスタックした値をずらして最新の値を書き込む領域を確保してから「push」を行うことになる。別の関数の実行が終了したときは最後に「push」された値を「pop」して最初の関数に戻って処理が続けられる。
そういうイメージから(ア)を考えてみると、英頭文字だけの用語でわかりにくいが、最後に入った値を最初に出力することを表す(4)LIFO(Last In First Out)が正解となる。
(イ)はスタックのデータの流れは以下のようになっていると考えられ、top にあったデータ、え?「top」ってどれ?図にも文言にも定義されていないようですが。どうやら「スタックの top」=「図の bottom」のようなので(3)18 が正解となる
イメージ 4
下図はディジタル技術検定 2 級制御部門第 53 回の (15) である。
イメージ 5
C 言語プログラムは必ず 1 問は出るのでこちらが得意な人はカモかも知れないが、私にはこの問題の答えは分かりませんでした。main から関数 f を呼び出しているわけだが、その中に自分自身を呼び出す記述が入っていてどうなっているのかよく分からない。

関数の最初に以下の記述を入れて数値の推移を見てみたが、どうもピンと来ない。関数の中で n = 0 になったところで main に戻るようだが。プログラムに詳しい方の補筆をいただきたい。

    printf("m = %d\n", m);
    printf("n = %d\n", n);

正解は[36](1)4、[37](3)11 となる。

そもそも関数の中に自分自身を呼び出すようなプログラムというのはよくあることなのだろうか?

今回で 2 級制御部門の解説は終了します。次回からは 1 級制御部門の解説に挑戦してみようと思います。

イメージ 6 ← にほんブログ村「科学」-「技術・工学」へ
 ↑ クリックをお願いします。