vipasigaru の回答履歴
- クラス内の関数内static変数について
クラス内の「staticではないメンバ関数内で定義される」static変数の初期化タイミングはいつでしょうか? 自分としてはクラスのインスタンス生成時に初期化されるものだと思っていたのですが、どうもそうでは無さそうだという現象に出会ったもので。 例えば以下のようなサンプルプログラムがあるとします。 --------------------------------------- class TA { public: void func(int i); }; void TA::func(int i) { static int d=0; d += i; std::cout << d << std::endl; } int main() { for(int i=1; i < 3;i++) { TA ta; ta.func(i); ta.func(i); ta.func(i); } } --------------------------------------- これを実行した時、自分としては 1 2 3 2 4 6 という結果を期待していた訳ですが、実際には 1 2 3 5 7 9 という結果になりました。 ということは、もしかしてメンバ変数ではなくともクラス内に現れるstatic変数はstaticなメンバ変数と同等ということなのでしょうか? 実際、上記ソースのforループ内にもう一つclass TAのインスタンスtbを追加してみると、 --------------------------------------- for(int i=1; i < 3;i++) { TA ta; ta.func(i); ta.func(i); ta.func(i); TA tb; tb.func(i); tb.func(i); tb.func(i); } --------------------------------------- 1 2 3 4 5 6 8 10 12 14 16 18 となりました。 (まぁstaticではないメンバ変数に置き換えれば一応解決するのですが、個人的に何か凄く気持ち悪く感じて・・・)
- プログラマーへの道?
こんばんは。初めて質問させていただきます。 私は現在、契約社員として某大手通信会社の電話オペレーターを7年勤めています。 しかし年々、仕事の内容にもやりがいにも会社の方針やシステムなどにも疑問を感じるようになり、 「私がこれ以上この会社にいて成長できるのか?」 と考えるようになりました。 最近、プログラマーの仕事に興味を持つようになりました。 というのも、会社で現在使用しているシステムがあまりにもお粗末で使いづらく(聞けば15年以上同じものを使っているようです)、もっと効率のよい受付のシステムを作れば、いまだに手書きの書類が大半を占める受付の負担や、お客様対応時のミスを減らすことができるのではないかと思ったからです。 私はエクセルもワードも簡単な文書作成はできますが満足に使えるレベルではありません。 これからパソコンに関するいろいろなことを勉強して、大規模なシステムとはいかないまでも、毎日生活するなかでちょっと便利に使えるアプリのようなものを作って、いろんな人に喜んでもらえる仕事ができないかなぁと思っています。 私は現在31歳の女性・未婚です。ちなみに現在は地方に住んでいます。 遅くとも年内で今の会社を辞めて、何か別の仕事をしながらパソコンやプログラミングについての勉強をしていけたらと思っています。 (今の仕事は「目標」という名前の販売ノルマがあり、精神的に病んでしまうこともしばしばあるので退職は前提です) 今からもしどんなに頑張ったとしても、このような道を進むのは無謀でしょうか? いろいろなアドバイスをいただけたら嬉しく思います、どうぞよろしくお願いします。
- ベストアンサー
- その他(ビジネス・キャリア)
- mamacaly
- 回答数4
- テキストファイルを配列に
始めまして C言語にてテキストファイルの中身を読み込み一次元配列に代入するというシステムを作ろうとしているのですがわかりません テキストファイルの中身は 12 5312 72 7 444 53 7884 といった具合で100数行あり一行ごとに配列に入れたいです 勉強を始めたばっかりで本を見ても書いていなく困っています わかるかたご指導願えますか? よろしくお願いいたします
- 締切済み
- C・C++・C#
- gekikarapanti
- 回答数4
- charからの型変換
現在,計測機からUDP通信で送信される計測データをwinsockを用いて受信し解析するプログラムを書いています.受信データは16進数の数値群です. http://www.geekpage.jp/programming/winsock/udp.php こちらのコードを参考に作成し,buf配列内をdatファイルで書き出すことで受信データの確認も出来ました. しかし,解析にあたりいくつか私では解決できない問題に悩んでいるので質問させていただきます. recv関数の第二引数で指定する配列がchar型しか指定できないようで受信データが文字データとなってしまうことに悩んでいます. これをint型などの計算しやすい型に変換したいのですが,strtolやatol関数を用いても失敗してしまいます.(ASCIIに準拠していない為?) printf("%s %x",buf , buf)でbufを表示しようとしてもやはり文字化けが起こってしまいます. int型やdoubleなどの数値の型へ変化する方法をアドバイスいただけないでしょうか? datファイルで保存した受信データはこんな感じです(一部) FF EE 3D 75 62 00 C3 00 00 FF 55 00 D7 00 00 FF 5E 00 D7 00 00 FF 5A 00 C3 00 00 FF 64 00 C3 00 00 FF 62 00 EB 00 00 FF 71 00 FF 00 00 FF 69 00 FF 00 00 FF 6E 00 FF 00 00 FF 65 00 FF 00 00 FF A1 00 EB 00 00 FF A3 00 D7 00 00 FF 8C 00 FF 5C 00 FF B3 00 EB 63 00 FF AA 00 C3 00 00 FF 8F 00
- opencv 輪郭を矩形で囲みたい
プログラミング初心者です opencvを使っています cvFindContours関数を使って図形の輪郭線を求めました(上半分の図形) この画像のように輪郭線を矩形で囲みたいのですがどうすれば良いのでしょうか? 回答よろしくお願いします。
- 座標変換についての質問
どういう風に考えれば答えを出せるのかよくわからないので質問させていただきます。 C言語でのゲームプログラムに関しての質問です。 やりたい事はウィンドウ上の座標をマップの座標に変換する。です。 縦と横だけのマップチップの配置(イメージとしてグラディウスのような)の場合、 現在の座標XまたはY÷マップチップ一枚分の大きさで割ってやれば、マップの座標に変換できました。 そうではなく、今回は、斜め俯瞰のマップなのです。 ウィンドウ上の右上に行くほどマップXの数値が大きくなり、右下に行くほどマップYの数値が大きくなります。 その場合はどのように計算すれば現在の座標X、Yをマップ座標X、Yに変換できるのでしょう? 普通の縦と横だけの配置のものと考え方は似ていると思うのですがイマイチ、ピンと来ていません。 ちなみにマップチップの中心点から現在の座標Xに60、Yに-20を加えてやると、 次の(右上)チップの中心へと移動します。(その60と20に対しての斜辺は63でした) 何か不明な点、不足、間違いなどありましたら補足修正いたしますのでよろしくお願いいたします。
- プログラミングの問題で分からないものがあります。
プログラミングの問題で分からないものがあります。 m人のグループに同じ誕生日の人が二人以上いる確率Pはどのような式で表されるか? ただし、誕生日は1年365年に渡ってランダムに分布すると仮定する。(まず、同じ誕生日の人が一人もいない確率を考えるとよい。) グループ人数mの入力に対しPを計算するプログラムを作りなさい。 Pが初めて1/2を超えるmの値を求めよ。(そのようなmの値を求めるプログラムを作りなさい。) 回答お願いします。
- gnuplotについて質問です。
現在、linuxでC言語からパイプを使ってgnuplotに接続し、計算した結果をすぐに表示しようとしています。 下のようなプログラムでうまくいくと思ったのですが、グラフが表示されるのにすごい時間がかかってしまいます。 解決策をご存知でしたらご教示お願いいたします。 #include<stdio.h> #include<stdlib.h> #include<math.h> void main(){ FILE *plotin; double x , y; int i = 0; struct sched_param param; struct timespec tt; //gnuplotにパイプで接続 plotin = popen("gnuplot","w"); //制御LOOP開始 for(i = 0 ; i < 1000 ; i ++) { if( i == 10000) { exit(0); } //gnuplotで表示するグラフの計算 x = i * 0.01; y = x*x; //gnuplotに表示する fprintf(plotin,"plot '-' title \"oscillation\" \n"); fprintf(plotin,"%f %f\n", x,y); fprintf(plotin,"e\n"); i++; } //gnuplot閉じる pclose(plotin); }
- ベストアンサー
- C・C++・C#
- simizukiyo
- 回答数3
- 座標変換についての質問
どういう風に考えれば答えを出せるのかよくわからないので質問させていただきます。 C言語でのゲームプログラムに関しての質問です。 やりたい事はウィンドウ上の座標をマップの座標に変換する。です。 縦と横だけのマップチップの配置(イメージとしてグラディウスのような)の場合、 現在の座標XまたはY÷マップチップ一枚分の大きさで割ってやれば、マップの座標に変換できました。 そうではなく、今回は、斜め俯瞰のマップなのです。 ウィンドウ上の右上に行くほどマップXの数値が大きくなり、右下に行くほどマップYの数値が大きくなります。 その場合はどのように計算すれば現在の座標X、Yをマップ座標X、Yに変換できるのでしょう? 普通の縦と横だけの配置のものと考え方は似ていると思うのですがイマイチ、ピンと来ていません。 ちなみにマップチップの中心点から現在の座標Xに60、Yに-20を加えてやると、 次の(右上)チップの中心へと移動します。(その60と20に対しての斜辺は63でした) 何か不明な点、不足、間違いなどありましたら補足修正いたしますのでよろしくお願いいたします。
- gnuplotについて質問です。
現在、linuxでC言語からパイプを使ってgnuplotに接続し、計算した結果をすぐに表示しようとしています。 下のようなプログラムでうまくいくと思ったのですが、グラフが表示されるのにすごい時間がかかってしまいます。 解決策をご存知でしたらご教示お願いいたします。 #include<stdio.h> #include<stdlib.h> #include<math.h> void main(){ FILE *plotin; double x , y; int i = 0; struct sched_param param; struct timespec tt; //gnuplotにパイプで接続 plotin = popen("gnuplot","w"); //制御LOOP開始 for(i = 0 ; i < 1000 ; i ++) { if( i == 10000) { exit(0); } //gnuplotで表示するグラフの計算 x = i * 0.01; y = x*x; //gnuplotに表示する fprintf(plotin,"plot '-' title \"oscillation\" \n"); fprintf(plotin,"%f %f\n", x,y); fprintf(plotin,"e\n"); i++; } //gnuplot閉じる pclose(plotin); }
- ベストアンサー
- C・C++・C#
- simizukiyo
- 回答数3
- C言語 ポインタと配列の違いが理解できません。
ポインタと配列の違いとは何でしょうか? 自分は学校で習ったのですがあまり深くはやってくれず良く理解していないままです。 ・ポインタと配列はしまう場所は同じなのでしょうか? ・単にしまい方、呼び出し方が違うだけなのでしょうか? ・ポインタと使えるところでは配列も使えるのでしょうか? ・そもそもしまわれる場所って何処なのでしょうか? 基礎中の基礎のことなので申し訳ないですが教えてください。 後、「」←このサイト見ろ だけのような解答は無しでお願いします。
- ベストアンサー
- C・C++・C#
- noname#177863
- 回答数5
- csv読込でVectorに格納した数値を分類したい
C++について2回目の質問となります。 私、現在CSVファイルの値を取得するコードを書いています。 後々、この値をある計算に使う予定です。 そこで、計算に使う際に使いやすいように分類しながら値を変数に格納したいと考えてます。 CSV1行を分割後にVectorに格納しようと考えています。 このVectorの型に構造体を入れることってできるのでしょうか。 1行を分類したいという意図がありまして、Vector<struct ***>とできないかと思っているのですが、 これは有効なのかがわかりません。 当初は、Vector<int>にするか、Vectorを2次元配列にしてCSVデータを入れていき、計算のときに何番目(何列目)を取り出す、というやりかたにしようと考えていたのですが、分類の仕方は決まりきっているので、分類ごとに構造体を用意し、Vector<struct ***>に順番に入れていく、というやり方を思いつきました。 が、1行を一旦Vector<int>に入れてしまって、あとで必要なところを要素指定したほうがいいのではとまた思い直し、混乱が起こっています。 Vector<struct ***>ということはできるのか、という点、 Vector<int>にして、あとで構造体(変数?)にいれるべきなのか、という点、 または、Vectorに入れるべきではないのか(構造体に入れるならば、リストにすべきか)という点を教えていただけないでしょうか。 わかりにくいようでしたら、随時ご指摘お願いします。 すみません、C++初心者なので、もしかしたらとんでもないことをいっているかもしれませんが、有識者の方、アドバイスをお願いします。
- 締切済み
- C・C++・C#
- paburonnn26
- 回答数3
- c++でドル円変換のプラグラムを作りたいのですが
アドバイスお願いします。 Visual Studio 2008 c++でドル円変換のプラグラムを作りたいのですがよくわかりません。 仕様はedit boxを2つ、ボタンを2つ用意します。 例えばedit box1に「¥1000」または「$1000」と入力し、「¥」、「$」のボタンを押すと、edit box2に入力していたレート金額で計算し、edit box1に記号付き「¥」 「$」で結果を表示します。*小数点以下2桁まで対応 注)$ボタン、¥ボタンが押されたときに呼ばれるメソッド(関数)の中で、金額を計算するのではなく、金額を計算するメソッド(関数)を別に作り、1つのメソッドで&変換、¥変換を行うようにすること。 ダイアログは写真のような感じです。 補足 プログラムがわからないのと、どこにそのつくったプログラムを貼ればいいのでしょうか? お願いします(><)
- C言語でsqrt(a^2+b^2)のテーブル引き
プログラムに悩んでいるものです. とある画像処理のプログラムを組んでいるのですが,処理が遅くテーブル引きを組んでいます. 三角関数などはすんなりできたのですが,質題にもある通りsqrt(a^2+b^2)が実現できず,この場を借りて質問させていただきました. 以下にプログラムの一部を示します. ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー void filter(unsigned char* d, short *dx, short *dy, int w, int h) { ///// テーブル生成 ///// static int c_size = 0; // static 次の呼び出しでも値保持 static double *c_sqrt = NULL; // c_size = 255; // u,v:0~255 c_sqrt = (double *)malloc(sizeof(double)*c_size*c_size); // 領域確保 for(int i=0; i<c_size; ++i){ // 有りえるすべての値を生成 for(int j=0; j<c_size; ++i){ c_sqrt[i*j] = sqrt( (double)(i*i + j*j) ); } } ///// d = sqrt(dx^2 + dy^2) ///// for(int y = 1; y < h-1; ++y){ for(int x = 1; x < w-1; ++x){ double u = (double)dx[y*w+x]; double v = (double)dy[y*w+x]; int val = (int)c_sqrt[ (int)(u*v) ] /4; if (val>255) val=255; d[y*w+x] = val; } } } ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 見てご察し頂ける(?)と思いますが,この関数は何回も呼び出すので,上のほうででテーブル引きしようとしてます. ただ明らかなプログラム経験不足のためかうまくいってません. 個人的にはc_sqrtを別途関数c_sqrt(u,v)にしたほうがよいのかと思ってます. どういうプログラム記述をすれば,このテーブル引きが実現できるでしょうか? ご回答,お力添え,よろしくお願い致します.
- ベストアンサー
- C・C++・C#
- apollograffitti
- 回答数5
- gnuplotでのpngファイル変換ができません。
gnuplotで、ファイル形式をpngにしたいのですが、エラーが出てしまいます。 windowsでwgnuplot.exeを使用してグラフを作成しているのですが、pngへの変換がうまくいきません。 set terminal png と入力すると、 「fontconfing : Couldn't retrieve font file name. when opnening font "arial ", using internal non-scalable font Option are ' nocrop medium size 640,480 '」 と表示されます。 フォントはRomanに設定してあります。 他のフォントに設定してもうまくいきません。 どなたか解決策が分かる方がいましたら、回答をいただきたいです。 この質問に補足する
- 締切済み
- C・C++・C#
- mammy_1102
- 回答数1
- 【C++】巨大なビット配列の用意の仕方
現在C++で数値計算用のプログラムを組んでいます。 その計算の中で、2^16個の「on」または「off」のデータをメモリに記憶させる必要があります。その一つ一つにわざわざintやshortなどの既存のデータ型を使うのは馬鹿らしいので、2^16桁の二進数列(=8.2KB程度)を用意して操作したいと思っています。 (もし仮にon=+1,off=0などとしてint型配列を使うと、262KB必要となり、いくつも宣言することがためらわれます。この2^16個のデータを収める「配列」は全部で8000個程度用意したいのです。) これだけ大きなビット配列を、C++で用意するにはどうしたらよいでしょうか? 試しにビットフィールドを用いて struct bit{ unsigned elm :1<<16; //2^16個のビット数列 }; と宣言してみたのですが、基本型のビット数を超えるからとコンパイルは通りませんでした。@VC++ リソースを活用するためにビット配列を扱った経験のある方など、どうかご教授よろしくお願いします。
- ベストアンサー
- C・C++・C#
- buenaarbol
- 回答数4
- C++ operator演算子の動作について
下記プログラムを実行した時のoperator演算子の動作についての質問になります。 (VC++2010で動作確認) #include <iostream> struct UInterger { unsigned long ul_ui; UInterger( unsigned long ul_value ) : ul_ui( ul_value ) {} operator unsigned short() { return (unsigned short)ul_ui; } //(1)の時になぜ使用される?. operator unsigned int() { return (unsigned int)ul_ui; } operator unsigned long() { return (unsigned long)ul_ui; } }; int main() { UInterger s_uin(2); int i_temp = s_uin; // (1)コンパイルが通る. short s_temp = s_uin; // (2)コンパイルエラー. long l_temp = s_uin; // (3)コンパイルエラー. return 0; } (2)と(3)はoperatorの定義がないためコンパイルエラーとなるのは理解できます。 (1)でなぜコンパイルが通るのかがわかりません。 下記の定義を追加しない限り、コンパイルは通らないのではと考えております… operator int() { return (int)ul_ui; } 試しに(2)と(3)をコメントアウトしてステップ実行したところ (1)の時に下記のunsigned short()のオペレータが使用されておりました。 operator unsigned short() { return (unsigned short)ul_ui; } どなたか詳しい方、ご教授の程よろしくお願い致します。
- openCVの動画書き込みのプログラムを作っているのですが・・・
openCVの動画書き込みのプログラムを作っているのですが・・・ openCVで、読み込んだ動画(元動画)を背景差分法で2値化処理して出来た動画を保存する、というプログラムを作っています。 しかし、保存された動画を見ると、上手く書き込まれていません。というのも、元動画は15秒あるのですが、保存された動画を見ると、わずか2秒ほどで再生が終わってしまいます。 以下がプログラムのソースです。 #include <stdio.h> #include <cv.h> #include <cxcore.h> #include <highgui.h> #define THRESHOLD_MAX_VALUE 255 #define THRESHOLD 45 #define WIDTH 960 #define HEIGHT 540 int main( int argc, char **argv ){ int key; CvCapture *capture = NULL; IplImage *frameImage; IplImage *backgroundImage = cvCreateImage( cvSize(WIDTH, HEIGHT), IPL_DEPTH_8U, 1 ); IplImage *grayImage = cvCreateImage( cvSize(WIDTH, HEIGHT), IPL_DEPTH_8U, 1 ); IplImage *differenceImage = cvCreateImage( cvSize(WIDTH, HEIGHT), IPL_DEPTH_8U, 1 ); IplImage *binaryImage = cvCreateImage( cvSize(WIDTH, HEIGHT), IPL_DEPTH_8U, 1 ); double fps = 30.0; CvVideoWriter* VideoWriter = cvCreateVideoWriter("binary.avi", CV_FOURCC('F','L','V','1'), fps, cvSize(WIDTH, HEIGHT), 0 ); if ( ( capture = cvCreateFileCapture( "00011.avi" ) ) == NULL ) { printf( "File Not Found\n" ); return -1; } frameImage = cvLoadImage("haikei.bmp"); if(frameImage == NULL){ printf("Can't Get\n"); return -1; } cvCvtColor( frameImage, backgroundImage, CV_BGR2GRAY ); while ( 1 ) { frameImage = cvQueryFrame( capture ); if ( frameImage == NULL ){ break; } cvCvtColor( frameImage, grayImage, CV_BGR2GRAY ); cvAbsDiff( grayImage, backgroundImage, differenceImage ); cvThreshold( differenceImage, binaryImage, THRESHOLD, THRESHOLD_MAX_VALUE, CV_THRESH_BINARY ); cvWriteFrame(VideoWriter, binaryImage); key = cvWaitKey( 10 ); if ( key == 'q' ) { break; } } cvReleaseCapture( &capture ); cvReleaseVideoWriter( &VideoWriter ); cvReleaseImage( &backgroundImage ); cvReleaseImage( &grayImage ); cvReleaseImage( &differenceImage ); cvReleaseImage( &binaryImage ); return 0; } 抽出している際に、プロンプト画面に Compiler did not align stack variables.~ と出てきます。 また、非圧縮などでやると再生が出来ません。 PC環境はWindowsXPです。 助けてください!!
- ベストアンサー
- C・C++・C#
- meet-goodbye
- 回答数2