(79)コンストラクタと複素数クラス2019年4月25日コンストラクタプログラミングでは、データの初期化忘れによる間違いもよく発生する。クラスでは、コンストラクタ(構築子)がある。データ構造の初期化専用の関数。コンストラクタと反対に、デストラクタは、データが不要となった時に自動的に呼び出される関数。このクラスの中には、引数無しのコンストラクタと、引数ありのコンストラクタが出てくる。C++では、同じ名前の関数でも引数の数や型に応じて呼出す関数を適切に選んでくれる。呼出すように使うことが多いだろう。呼出すというのが定番の使い方だろう。隠蔽化と基本的なオブジェクト指向の練習課題として、複素数クラスをあげる。ここでは、複素数の加算・乗算を例に説明をするので、減算・除算などの処理を記述することで、クラスの扱いに慣れてもらう。クラスは、加減算の関数は単純だけど、乗除算の関数を書く時には面倒になってくる。この場合、極座標系でプログラムを書いたほうが判りやすいかもしれない。反対に、加算は面倒な処理になってしまう。←しつこく繰り返すけど、セミコロン忘れないでね(^_^;このように、プログラムを開発していると、当初は直交座標系でプログラムを記述していたが、途中で極座標系の方がプログラムが書きやすいという局面となるかもしれない。オブジェクト指向による隠蔽化を正しく行っていれば、利用者に影響なく「データ構造」や「その手続き(メソッド)」を書換えることも可能となる。このように、プログラムをさらに良いものとなるべく書換えることは、オブジェクト指向ではリファクタリングと呼ぶ。クラスを作っていれば、クラス利用者への影響が最小にしながらリファクタリングが可能となる。中に、要素の定義や、メソッドの記述を行うと説明してきたが、メソッド内の処理が長い場合もある。中に書こうとすると、全体像が見渡せない。いう時には、以下のように、メソッドのプロトタイプ宣言と、メソッドの実体の記述を別に記載する。いうメソッドを記載した。指定をせずに、リファクタリングしやすいクラスにすることができる。してしまうと、クラス外でオブジェクトへの代入が可能となる。機能の代用し、隠蔽化を徹底させることも多い。作るとプログラムの意味が分かりやすくなる。いったクラスの参照や代入のメソッドは、getter(ゲッター),setter(セッター)と呼ぶ。ゲッターやセッターメソッドでは、要素を参照(あるいは代入)するだけといった極めて単純な関数を作ることになる。この場合、関数呼び出しの処理時間が無駄になる。指定すると、コンパイラは関数呼び出し用の命令を生成せず、それと同じ処理となる命令を埋め込んでくれる。定数を書き換えることはできない。メソッドは要素を参照するだけで、オブジェクトの中身が変化しない。メソッド内にはオブジェクトに副作用のある処理を書いてはいけない。いった用途に、オブジェクトを変化させないメソッド宣言がある。総務省主催の、地域における若手人材を活用した電波有効利用に資するIoT技術実証の円滑な実施のため、有効策を取りまとめていくことを目的とした事業の一環としてのコンテストが開催されます。巻き込んだ解決、あるいは新たなサービスの実現に繋がるようなアイデアを公募します。情報ネットワーク基礎(3EI/後期)楽しんで受講してくれた人からの意見があり、ポイントでも85ポイントと高評価であった。内容理解やシラバスについてポイントが若干低いようであるが、誤差の範疇と思われる。理解把握のポイントが最も低く、理解度確認のための質問などをもう少し増やしても良かったかと思う。情報制御基礎(3年学際科目/前期)学際科目ということで、初めて実施した科目であり、他学科からも受講生がある内容で、ポイントも70ポイントと低い評価であった。プログラムを授業でやっていない学科の学生から、内容が理解できないとの意見が多かった。今年度は、他学科の学生にもわかるように、プログラムの説明を増やしたり、プログラムよりも基本的な内容を増やしたいと考えている。情報構造論(4EI/通年)意見の欄には、例年になく辛辣な意見もあった。他の同クラスのアンケートでも、全般的に厳しい意見が多くみられ、ポイントは74.8と例年よりも低くいが、このクラスのオフセットとも考えられる。昨年から講義資料のWeb掲載などを行い、それを使った授業を中心としているが、ノート作成ができていない学生から、ノートをとる時間を十分にとってほしいとの意見があった。授業の時間の作り方などを考えたいが、一方で不まじめな学生がノートもも一切とらないで受講する姿は、理解する意欲に欠けていることもあり、どのような対処とすべきか、時間をかけて考えていきたい。データベース(5EI/後期)ポイントでは78.6と、若干低めの評価であった。演習量や試験についての評価が他に比べて若干低く、意見でも図や表といった具体例を交えた例での説明を増やしたほうが理解が進むとの建設的な意見もあった。資料などもWebでの公開などを進めているが、今後も実例などを増やし解りやすい資料を目指したい。オブジェクト指向プログラミング(PS2/前期)他学科出身の受講者も含まれるため、例年進度に注意しながら授業を進めているが、ポイントでは80ポイントで、例年並みの評価であった。演習などをタイムリーに行いながら授業を進めたいと考えているが、演習環境などの準備も必要で自主学習などの課題を検討したいと思う。出題されることが多い。プログラムについて扱う。直角三角形となるものをすべて表示する。簡単な方法は、以下となるであろう。整数比の直角三角形の一覧を求める。;}しかしこのプログラムの欠点としては、100×100×100回のループで無駄な処理が多い。ループ回数を減らすだけなら、最も内側の処理を、計算で整数値か確認すればいい。斜辺Cの整数値を求め、改めて確認する。計算誤差の問題を考えてみよう。多少の計算誤差があっても正しく処理が行われるにはどうすればいいか、考えてみよう。無駄な答えについて考えてみよう。このプログラムの答えでは、簡単な整数比の答えの「整数倍の答え」も表示されてしまう。(3:4:5)の答えのほかに、(6:8:10)も表示される。いった答えを表示しないようにするにはどうすればよいか?また、この2つのプログラムの処理時間を実際に比べてみる。処理を1000回繰り返し、数秒かかる処理にする。;}再帰プログラミング組み合わせ問題では、forループの多重の入れ子で問題を解けない場合が多い。(書けないことはないけど無駄なループで処理が遅くなるか、入れ子段数が可変にできない。)こういった場合には、再帰プログラミングがよく利用される。簡単な再帰の例として、階乗のプログラムを考える。ループで記述することになるだろう。;}再帰呼び出しでは、関数の処理の中に、自分自身の関数呼び出しが含まれる。問題を一つ小さくして、これ以上小さくできないときは処理を止めるように記述する。指定長を指定辺の組み合わせで作る再帰を使った簡単なパズル問題として、以下のプログラムを作成したい。配列の中に、複数の辺の長さが入っている。これを組み合わせて指定した長さを作れ。使用する辺はできるだけ少ない方がよい。辺の長さ10を作るには、(5,4,1)とか(7,3)などが考えられる。これは、ナップサック問題の基本問題で、容量の決まったナップサックに最大量入れる組合せを求めるのと同じである。[5,2,1,3,7]で作る。[4,2,1,3,7]で作る。[5,4,1,3,7]で作る。[5,2,4,3,7]で作る。[5,2,1,4,7]で作る。[5,2,1,3,4]で作る。そこで、ここまでの考えを、以下のようなプログラムで記述してみる。指定されたデータを入れ替える。最初のswapでの変更を元に戻す。これを再帰呼び出しにしてみよう。指定した丁度の長さを作れなかった。指定した長さを作れたので答えを表示。問題を一つ小さくして再帰。このプログラムでは、冗長な答えがあるか?ないか?検討せよ。前設問の整数比直角三角形のプログラムで、冗長な答えを削除するプログラムを作成せよ。(2)〜(5)は、演習の実験の時間内でできる範囲とする。アルゴリズム前の問題は、今年度のプログラミングコンテストの課題のパズルとは、方向性が違うので、今年度のプロコンの競技部門に近いパズルネタで演習。ような2次元配列が与えられたら、指定座標(x,y)を中心に周囲を塗りつぶす処理を作成せよ。この領域の指定位置を#で塗りつぶす。プログラムの説明のアルゴリズムでは、左図黒のような斜めに並んだブロックは、境界として通り抜けられないようにつくられている。そこで、斜めに並んだブロックは通り抜けられるルールとした場合のプログラムを記述せよ。プログラムと数値型2019年4月19日コンピュータの中では、2進数で値を表現するが、組み込み系のような小さいコンピュータでは、たくさんの桁を必要とする情報を扱うことが苦手である。そこで、C言語で数値を扱う型と、その型で扱える数値の範囲や問題点を説明する。補足資料:プログラミングの基礎として、C言語の基礎を示す。数値を扱う型C言語では、データを覚える型を大きく2つに分けると、整数型(int)と実数型(float)に分けられる。int)に分けられる。宣言すると32bitの場合も多いので要注意)がある。符号付きのデータは、負の数は2の補数によって保存する。この場合2進数の最上位bitは、負の数であれば必ず1となる。