情報制御基礎で出題した問題で、5点の移動平均の処理の一部に、以下のコードがあった場合の間違い説明の問題。答えだけど、小数点以下が切り捨てになるのか、四捨五入になるのか気になってきた。;で確認してみたら、(int)実数は、小数点以下切り捨てだな。書いてほしい...とか微妙な話になるな。情報制御基礎の超優秀レポート2018年7月25日3年の学際科目で、5学科入り乱れての参加のある「情報制御基礎」の科目。幅広い知識を習得してもらう目的ということで、簡単なレポートでも要件を満たしていればA評価、B評価としているが、電気電子の学生さんからオリジナリティあふれる取り組みや、きちんとした考察のレポートがいくつか出てきている。この学生のレポートを100%としたら、よくわからないけど頑張ってついてきている学生さんが厳しくなっちゃうなぁ。嬉しいレポートもらったので、メモメモ。昨日、公私ともに大変お世話になった澤井先生がお亡くなりになったとの連絡が入った。私が高専に入ってプログラミングにのめり込み、就職の際に高専に誘って頂いた。仕事でも、色々と迷惑をかけ、大変世話になっていた。4月ころに退官する先生へのOB会の勧誘で来られている際にお会いしたけど、肺疾患の酸素ボンベを持ち歩いていて、体調も良くなかった様だった。澤井先生は、福井高専の発足当初から電気科で教えられていて、コンピュータの発達と共に、プログラミング、計算機構成論といった授業を担当し、澤井先生にFORTRANを習い、AND-OR,JK-FFで頭をパンクさせた人も数多いことでしょう。送り出してくれた先生でした...。その応用として、集合処理を考えてみる。2進数を用いた集合計算リストによる集合の前に、もっと簡単な集合処理を考える。データ件数の上限が少ない場合には、「2進数の列」の各ビットを集合の各要素に対応づけし、要素の有無を0/1で表現する。和集合、積集合を計算できるので、処理が極めて簡単になる。{1,2,3,4,6,9}}このような、2進数を用いた処理で有名なものとして、エラトステネスのふるいによる素数計算がある。このアルゴリズムでは、各bitを整数に対応付けし、素数で無いと判断した2進数の各桁に1の目印をつけていく方式である。前述の方法は、リストに含まれる/含まれないを、2進数の0/1で表現する方式である。要素が上限となってしまう。(32bitコンピュータ,gccの場合)しかし、リスト構造であれば、リストの要素として扱うことで、要素件数は自由に扱える。使って表現すれば、簡単なプログラムでリストの処理が記述できる。加えていく...という考えでプログラムを作ると以下のようになる。;}例題として、和集合、差集合などを考えてみよう。リストの共有と削除の問題リスト処理では、mallocを使うが、メモリリークをさせないためには、使用後のリストの廃棄は重要である。リストの全要素を捨てる処理であれば、以下のようになるであろう。b)のプログラムを以下のように作った場合、list_freeの処理は問題となる。(b)の部分は先のlist_free(b)で解放済み}このような、リストb,リストcで共有されている部分があると、データの廃棄処理をどのように記述すべきなのか、問題となる。ガベージコレクタのある言語を用いる...などがある。(2),(3)は後期授業で改めて解説を行う。計算処理中に一時的なデータの保存として、stackとqueueがよく利用されるが、それを配列を使って記述したり、任意の大きさにできるリストを用いて記述する。配列を使って記述すると以下のようになるであろう。1}しかし、この中にSTACK_SIZE以上のデータは貯えられない。同じ処理をリストを使って記述すれば、ヒープメモリを使い切るまで使うことができるだろう。;}キュー(QUEUE)2つの処理の間でデータを受け渡す際に、その間に入って一時的にデータを蓄えるためには、待ち行列(キュー)がよく利用される。Out)配列にデータを入れる場所(wp)と取り出す場所のポインタ(rp)を使って蓄えれば良いが、配列サイズを超えることができないので、データを取り出したあとの場所を循環して用いるリングバッファは以下のようなコードで示される。循環して追いついてしまう。そこで、このプログラムもリストを使って記述すると以下のようになる。ポインタが正しい位置になっていないため、おかしな状態になってしまう。2重管理を防ぐために、リストの先頭と末尾を1つのセルで管理する循環リストが使われることが多い。配列を用いたスタック・待ち行列は、どのような処理か?図などを用いて説明せよ。リスト構造を用いたスタック・待ち行列について、図などを用いて説明せよ。スタックや待ち行列を、配列でなくリスト構造を用いることで、どういう利点があるか?欠点があるか説明せよ。レポート-No.4制御工学とまとめ注意:2018/07/30(Mon)前期期末テスト・情報制御基礎は、A4✕1枚の手書き資料のみ、持ち込み可とする。ソフトウェア工学との説明を行う。Action)が行われる。トップダウン設計とウォーターフォール型開発が行われる。設計の中身も機能仕様や動作仕様...といった細かなフェーズになることも多い。全行程の遅延となることから、前段階では完璧な動作が必要となる。このような、上位設計から下流工程にむけ設計する方法は、トップダウン設計などと呼ばれる。川の流れが下流に向かう状態にたとえ、ウォーターフォールモデルと呼ばれる。ガントチャートなどを描きながら進捗管理が行われる。テストの前工程にそれぞれ対応したチェックが存在する。その各工程に対応したテストを経て最終製品となる様は、V字モデルと呼ばれる。Eclipseテストツール活用の基礎知識しかし、ウォーターフォールモデルでは、前段階の設計の不備があっても前工程に戻るという考えをとらないため、全体のPDCAサイクルが終わって次のPDCAサイクルまで問題が残ってしまう。巨大プロジェクトで大量の人が動いているだから、簡単に方針が揺らいでもトラブルの元にしかならないことから、こういった手法は大人数巨大プロジェクトでのやり方。部品となる部分を完成させ、それを組合せて全体像を組み上げる手法もとられる。この方法は、ボトムアップ設計と呼ばれる。このような設計は場当たり的な開発となる場合があり設計の見直しも発生しやすい。少人数開発では適宜前工程の見直しが可能となる。オブジェクト指向によるライブラリの利用者への影響を最小にしながら、ライブラリの内部設計の見直しも可能となる。このような外部からの見た挙動を変えることなく内部構造の改善を行うことはリファクタリングと呼ばれる。機能の一部分だけ完成させ、次々と機能を実装し完成に近づける方式もとられる。このPDCAサイクルを何度も回して機能を増やしながら完成形に近づける方式とも言える。このような開発方式は、アジャイルソフトウェア開発と呼ぶ。短い開発単位を繰り返し製品を作っていく。顧客とプログラマーが一体となって開発が行われる。エクストリームプログラミング(Xp)という考え方も提唱されている。一定期間毎にその役割を交代する)などの方式が取られることが多い。開発は、品質の良いものを作る中で無駄の排除を目的とし、本当にその機能は必要かを疑いながら、優先順位をつけ実装し、その実装が使われているのか・有効に機能しているのかを評価ながら開発をすすめる。伽藍とバザールこれは、通常のソフトウェア開発の理論とは異なるが、重要な開発手法の概念なので「伽藍とバザール」を紹介する。伽藍とは、優美な寺院のことであり、その設計・開発は、優れた設計・優れた技術者により作られた完璧な実装を意味している。バザールは有象無象の人の集まりの中で作られていくものを意味している。製品は、優秀なプロダクトだろうが、中身の設計情報などを普通の人は見ることはできない。インターネット上にソースコードが公開され、誰もがソースコードに触れプログラムを改良してもいい。その中で、新しい便利な機能を追加しインターネットに公開されれば、良いコードは生き残り、悪いコードは淘汰されていく。バザール方式は、オープンソースライセンスにより成り立っていて、このライセンスが適用されていれば、改良した機能はインターネットに公開する義務を引き継ぐ。ライセンス、Apacheライセンスといった違いがある。情報制御基礎の授業を通して、入力値を制御するため、コンピュータを使う場合の数値処理の基礎的な話として、信号の平滑化や差分について説明をしてきた。実際には、入力値を制御に利用する場合には、数学的バックグラウンドも必要となる。以下に、制御工学ではどのようなことを行うのか、概要を述べる。ここで紹介する制御理論は、古典制御理論と呼ばれる。得られるシステムで、どのように制御するかを考える。電気ポットの温度制御をする場合、設定温度の値を入力値(x)とし、何らかの処理を行い、出力となるヒーターの電流を制御し、最終的には温度(y)が測定される。ヒーターは、設定温度(x)と温度計の値(y)の差に応じて電流量を変化させる。このように一般的な制御では、最終的な温度が入力に戻っている。このように目標値に近づけるために、目標値との差をとって制御することをフィードバック制御という。入力と出力で制御された波形の例を示す。この波形では、黒のように入力値が変化した場合、それに追いつこうと出力が変化する。(1)理想的には、速やかに追いつく赤のように変化したい。(2)変化への制動が大きい過制動(青点線)では、目標値に追いつくまでに時間がかかる。(3)一方ずれに対して制御が激しいと目標値を追い越したり、増えすぎ分を減らしすぎたり変動する過制御(赤点線)となる。した時、基本的なフィードバック制御として偏差の使い方によってP動作,I動作,D動作がある。比例ゲイン)積分制御(I制御)偏差のある状態が長い時間続く場合、入力値の変化を大きくすることで目標値に近づけるための制御。積分ゲイン)微分制御(D制御)急激な出力値の変化が起こった場合、その変化の大きさに応じて妨げようとする制御。上記のI制御やD制御だけでは、安定することはなく、これらを組み合わせたPID制御を行う。値は、制御が最も安定するように調整を行うものであり、数値シミュレーションや、ステップ応答を与えた時の時間的変化を測定して調整を行う。前回の「差分」の講義における、波形データから、山の数をカウントする処理を記述せよ。授業では結果が「4つの山」としていたが、計算方法が明記されていれば、異なる結果でもよい。処理は、C言語などのプログラムで記述しても、表計算ソフトでの式による計算でも良い。表計算ソフトを用いる場合は、どのような式を入れてあるか具体的な式について明記してあること。レポートでは、計算方法が判るプログラムリスト(もしくは表計算ソフトの式がわかるもの)と、その説明。結果(全データでなくても良く、山としてカウントした部分の近辺のデータ)と、考察を記述すること。