2015年3月21日土曜日

Vectorのイテレータ破壊

C++でVectorを用いたプログラムを書いていたときに起こった事です。イテレータでVectorの指定要素にアクセス出来るようにし、最後にその要素にアクセスした時に範囲外の要素にアクセスしていますと言うエラーが出ました。いやいやおかしいだろうと思ってデバッグで順に見ていくと(開発環境はVC++2013)、イテレータの値が楽しい事になっていました。イテレータの破壊が起こったのはpushbackを実行した直後に起こっていました。どうやらpushbackやらeraseを行うとイテレータの破壊が起こるっぽい。 Vector自体が一定の領域を持っていて、領域が足らなくなると新しい領域を確保してそちらに移ってしまいます。その時古い領域は解放されます。ですので要素に何らかの変化が起こった時イテレータが指し示す場所が不正となってしまう事があるみたいです。 今回は元々要素数がどれくらい使うか分かっていたのでreserveをする事でこの問題は解決しました。

2015年3月18日水曜日

クラスで引っかかったこと

 C++でクラスを書く時に引っかかったことを書きます。 クラスの配列メンバは宣言と同時に初期化することができません。そのため、コンストラクタ時に多次元配列でマップを実装しようとしても


Dijkstr::Dijkstr(){
        cost_temp[V][V] = {
  { INF, 2   , 3   , INF , INF },
  {  2 , INF , 4   , INF , 10  },
  {  3 , 4   , INF , 1   , INF },
  { INF, INF , 1   , INF , 2   },
  { INF, 10  , INF , 2   , INF }
 };
}
と記述するとエラーをはいてしまいます。ここで小一時間ぐらい悩んでmemcpy関数の存在を思い出しました。 memcpyの使い方としては memcpy(void *str1,void *str2,size_t len) str2からstr1にlenバイト分コピーするといったものです。 memcpyを用いて


Dijkstr::Dijkstr(){
 static int cost_temp[V][V] = {
  { INF, 2   , 3   , INF , INF },
  {  2 , INF , 4   , INF , 10  },
  {  3 , 4   , INF , 1   , INF },
  { INF, INF , 1   , INF , 2   },
  { INF, 10  , INF , 2   , INF }
 };
 memcpy(cost, cost_temp, sizeof(cost_temp));
 

}
として解決しました。

2015年2月22日日曜日

高速!?素数判定プログラム

高速!?素数判定プログラム

今回はjavascriptを使って高速素数判定プログラムを作ってみました。

下に入力欄に判定させたい数値を入れて、Startボタンを押せば実行結果とかかった時間が出ます。

素数判定にはエラトステネスの篩を用いました。以下に参考URLを載せておきます。

参考URL: http://www2.cc.niigata-u.ac.jp/~takeuchi/tbasic/BackGround/ErSieve.html

2015年2月21日土曜日

Hacksellを少しいじってみた

お久しぶりです。今日はHacksellを少しいじってみて若干はまったところを書いておきたいと思います。え、四足ロボットはどうしたって?でははまったところを見てみましょう。
絶対値を出すプログラムを書いていたときに問題が発生しました。
プログラムは
abs::Int->Int
abs n = if n >= 0 then n else -n
です。
これを実行した時0以上の場合問題なく実行されるのですが、負の値を引数とした時に実行エラーが起こりました。
その原因と言うのはHaskellでは演算子と関数適用の優先順位が関数適用の方が上なんですね。つまりabs -5というのは(abs -)5と判断されます。これじゃあ、エラーが起きて当然ですね。
ですので実行時にabs (-5)として-5を一つの引数として実行すれば問題解決しました。

2014年12月4日木曜日

USBシールドとBLEドングルが届きました。

4足歩行ロボットを操作するにあたって、やっぱりスマフォで操作したいですよね。ということで使用マイコンは定番のarduinoUNO(mbedとかも面白そうなんですが…)にし、USBシールドとBLEドングルを使って操作しようと思います。BLEモジュールを買っても良かったのですが、ちょっとお高かったので今回は見送りました。あくまでプロトタイプの製作なので…次回あたり通信のうんちゃらについて書こうと思います。

2014年11月30日日曜日

四足歩行ロボット開発計画


へっぽこ大学生が備忘録として色々と書いていくので間違っている事があっても暖かい目で見てやって下さい。

まず最初に四足歩行ロボットを作ろうと思います。まあまだ設計段階なので進捗があり次第更新していきたいと思います。

ではでは