全2241件中181~200件表示
  • C++の&について

    VS2010です。 2.については、イテレータの実体を*で取得し、&でアドレスを取得することで、Pstructobj型の変数に代入しているのはわかるのですが、 1.の&は、どういう役割になるのでしょうか。 --------------------------- typedef struct{ int iVal; } structobj, *Pstructobj; int _tmain(int argc, _TCHAR* argv[]) { std::vector<structobj> structobjList; structobj a,b; a.iVal = 5; structobjList.push_back(a); // 1.コンパイルは通るが、iValにアクセスするとアクセス違反 Pstructobj oP1 = (Pstructobj&)*structobjList.begin(); // 2.問題なし Pstructobj oP2 = &*structobjList.begin(); return 0; }

  • 「C# VS JAVA」のマルチスレッティング

    JAVAはマルチスレッディングがものすごく楽と聞きますが、JAVAを真似してつくられたC#も同じようにマルチスレッディングにつよいのでしょうか? それとも、JAVAにはかなわないのでしょうか?

  • マルチスレッドの実行順序の制御

    お世話になります。 現在作っているプログラムで別スレッドを走らせて処理をしているのですが、問題に突き当たりお知恵を借りたく質問しました。 グローバル変数があり、イベントが発生するとイベントハンドラ内で別スレッドを作成し、そのグローバル変数にイベント発生時間を追記していきたいのです。下のようにクリティカルセッションを用いて多重書き込みは禁止しています。 string g_Value; EventProc(){ createThread(,,,Thread_Proc.....); } Thread_Proc(){ EnterCriticalSection(&m_cs); g_Value += Now(); LeaveCriticalSection(&m_cs); } しかし、1つのスレッドが終了しないうちに2,3個追加でスレッドが立ち上げられた場合、それらは発生順に実行されないようです。 なにか順番を管理するいい方法はないでしょうか?

  • C言語とjavaってどっちが簡単ですか?

    今C言語を勉強していますが、ものすごく難しく感じます。 終わったらjavaもやろうと思うのですが、どちらが簡単ですか? (日本語がおかしくてすみません)

  • C++別のオブジェクトからメンバ関数をコールバック

    自作のタイマオブジェクトにコールバックしたい別のオブジェクトのメンバ関数(複数)を登録して、一定時間経過後にコールバックしたいです。 今、考えているのはタイマオブジェクトでコールバック関数を呼び出す関数を仮想関数にして、継承したサブクラスごとにどのコールバック関数を呼び出すか処理を変えるやり方です。 ただ、これだと何だか複雑になりそうですし、そもそも根本的なところが間違っている気もします。 ご助言いただきたいです。 よろしくお願いします。

  • UDPデータ受信について

    以下でデータを送信すると、直ぐに0x42,0x42,0x00,0x00,0x00,0x00,0x82,0x00,0x01,0x44,0x33,0x00の12バイトのデータを送り返してくるのですが、これを送り返してきたら、数字の1を表示するように以下のプログラム内に書き込むことは出来ませんでしょうか?ご教授お願いします。 #include <winsock2.h> #pragma comment(lib,"ws2_32.lib") int main() { WSADATA wsaData; SOCKET sock; struct sockaddr_in addr; WSAStartup(MAKEWORD(2, 0), &wsaData); sock = socket(AF_INET, SOCK_DGRAM, 0); addr.sin_family = AF_INET; addr.sin_port = htons(3054); addr.sin_addr.S_un.S_addr = inet_addr("192.168.0.3 "); char data[] = { 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x02, 0x44, 0x33, 0x05 }; sendto(sock, data, 13, 0, (struct sockaddr *)&addr, sizeof(addr)); closesocket(sock); WSACleanup(); return 0; }

  • 取ってこれないメモリのはずのmallocの動作

    こんにちは.mallocの動作,及びコンパイルの仕様について質問です. 以下のような.cのプログラムを書いてgccでコンパイルして実行してみました. #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(int argc, char **argv) { int size = 0; int *tmp = NULL; while(1){ printf("Size %d\n", size++); tmp = (int *)malloc(size * 1024 * 1024); usleep(10000); free(tmp); } } このプログラムだと,heapから取ってこれないぐらい大きいメモリだとなんか起きるのかな?どれぐらいまで取ってこれるのかな?という興味でやってみたのですが, 1)32bit, 64bit ubuntu のgcc (バージョンは覚えてないですけど一番updateされてると思います)では永遠に回り続け, 2)Mac のgccだとSize=2048以降,つまり2GB以降で a.out(1145,0x7fff73a1b310) malloc: ***mach_vm_map(size=18446744071562067968) failed (error code=3) *** error: can't allocate region というエラーをはきます.(プログラムは回り続けます) a. この違いはgccの違いからくるという理解でよろしいですか?Macでの2GBというのもコンパイル側の制約なのでしょうか? b. ubuntuでは実際何が起こってるのでしょう?1000GBとか絶対取れないですけど回ってますし. c. ubuntuで実際に何が起こってるかを確認する方法はありますか.アセンブラとか吐かせるのでしょうか? お時間のあるときに回答してもらえたらと思います.

  • Track Bar 位置情報の取得関数 記述方法

    C++初心者です。 Visual Basic C++ 2010 Express にて Windowsフォームアプリケーション のプロジェクトを作成しています。 ツールボックスから Track Bar をForm1[デザイン]へ追加を行い、 ビルド、実行、 Barが移動した(移動させた)時の、Barの位置情報を取得したいのですが、 その取得する関数をどう記述すれば良いか分かりません。 最終的には、そのBarの位置情報を外部に出力したいと考えています。 private:System::void_track_Bar1_scroll(System~     ){          **この部分の記述** } ご教授よろしくお願いします。

  • 文字列検索について

    下記のようなC++プログラムにおいて、Good Morning! の「r」以後が、 検索にひっかからないで、-1を返します。 何故なのか、どうぞよろしくお願いします。 -------------------------------------------------------- #include <iostream> #include <cstring> using namespace std; int flag = 0; // 該当文字があったかどうかのフラグ int strch_idx(const char* s, char c){ int temp; cout << strlen(s) << endl; for(int i=0; i<(signed)strlen(s); i++){ if(*s == c){ temp=i+1; // 配列のインデックスは0オリジンだが、インデックスは1からだから1+する flag = 1; break; } s++; } if(flag == 1) return temp; else return -1; } int main(){ const char* s = "Good Morning!"; int idx = strch_idx(s, 'i'); cout << "検索文字のインデックス:" << idx << endl; return 0; }

  • [C言語]試験問題の復習ができません[穴埋め]

    2 次方程式の解を計算する方法に関するつぎの解説をよく読み,その空欄【 あ 】・ 【 え 】~【 こ 】 に適切な語句を埋めて文章を完成せよ。 2次方程式 x2+ax+b=0 を考える。その解の公式は D=a2-4b とおいてx=(-a±√D)/2 となる。 そこで,この2 解を変数 x1, x2 に計算するプログラムはつぎのように書きたくなる。 D= a*a-4.0*b; r= 【 あ 】; x1= (-a+r)/2.0; x2= (-a-r)/2.0; もちろん,このままプログラムとしたのではうまく動作しない。 【 あ 】 は D≧0 の場合に しか動作しないからである。つまり,このプログラムは,判別式が非負の場合にだけ動作する。 さて,この方程式が2 実解α,β をもつとする。このとき,a= -(α+β), b= αβ である。さらに, α≫0(α が大きな数), β≈0 (β が小さな数)であるとする。 上のプログラムでは 【 え 】にα の近似値が得られ,【 お 】にβ の近似値が得られるが,【 か 】は浮動小数点近似の精度に 近い精度の近似値になるものの,他方はそうはならない。桁落ちが生じるからである。これを避 けには,精度良く近似値が得られる【 か 】を使って,他方の解を“【 き 】”から乗除算で求 めることである。 この対策を完全に施して,解の公式で精度良く計算できる解をx1 にまず計算する形に仕上 げたプログラムでは,つぎのように書くことになる。 x1= (a>0.0 ? 【 く 】 : 【 け 】)/2.0; x2= 【 こ 】; __________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ ベクトルに行列による一次変換を施すプログラム,および,行列の2 乗を計算するプ ログラムに関するつぎの解説をよく読み,その空欄【 あ 】~【 か 】 に適切な語句を埋めて 文章を完成せよ。 ベクトルのデータ型 vector と(正方)行列のデータ型 matrix がつぎの通り宣言されて いるとする。 #define SIZE 3 typedef double vector[SIZE]; typedef double matrix[SIZE][SIZE]; ベクトルx に行列A による一次変換を施して得られるベクトルy = A x を計算するプログラム, および,行列A の2 乗 B= A2 を計算するプログラムを下に示す。ただし,つぎの通りに変数 (配列)が用意されているとする。 vector x; /* x の値が入れてある */ matrix A; /* A の値が入れてある */ vector y; /* ここにy の値を入れる */ matrix B; /* ここにB の値を入れる */ また, int 型の変数i,j,k も宣言してあるとする。 ベクトルに対する一次変換 for(i= 0; i!=SIZE; i++){ double w= 【 あ 】; for(j= 0; j!=SIZE; j++){ w= 【 い 】; } y[i]= 【 う 】; } 行列の2 乗 for(i= 0; i!=SIZE; i++){ for(j= 0; j!=SIZE; j++){ double w= 【 え 】; for(k= 0; k!=SIZE; k++){ w= 【 お 】; } B[i][j]= 【 か 】; } }

  • C++のファイルの読み込みの部分で質問があります。

    fp = fopen("enemydata.csv","r");の部分のコードで "enemydata.csv"のファイルを読み込むのですが "r"の部分が何を意味しているのがわかりません。 以下のコードの他にも enemy.cpp enemy.h がありますが関連するものが見あたりません。 "r"の部分のコードは以下に表示します。 よろしくお願いします。 control.cpp #include "pch.h" #include "control.h" CONTROL::CONTROL() { player = new PLAYER; back = new BACK; FILE *fp; ENEMYDATA data[ENEMY_NUM]; char buf[100]; int c; int col=1; int row=0; memset(buf,0,sizeof(buf)); ここの部分→fp = fopen("enemydata.csv","r"); //ヘッダ読み飛ばし while(fgetc(fp)!='\n'); while(1){ while(1){ c=fgetc(fp); //末尾ならループを抜ける。 if(c==EOF) goto out; //カンマか改行でなければ、文字としてつなげる if(c!=','&& c!='\n') strcat(buf,(const char*)&c); //カンマか改行ならループ抜ける。 else break; } //ここにきたということは、1セル分の文字列が出来上がったということ switch(col){ //1列目は敵種類を表す。atoi関数で数値として代入。 case 1: data[row].type=atoi(buf); break; //2列目は弾種類。以降省略。 case 2: data[row].stype=atoi(buf); break; case 3: data[row].m_pattern=atoi(buf); break; case 4: data[row].s_pattern=atoi(buf); break; case 5: data[row].in_time=atoi(buf); break; case 6: data[row].stop_time=atoi(buf); break; case 7: data[row].shot_time=atoi(buf); break; case 8: data[row].out_time=atoi(buf); break; case 9: data[row].x=atoi(buf); break; case 10: data[row].y=atoi(buf); break; case 11: data[row].speed=atoi(buf); break; case 12: data[row].hp=atoi(buf); break; case 13: data[row].item=atoi(buf); break; } //バッファを初期化 memset(buf,0,sizeof(buf)); //列数を足す ++col; //もし読み込んだ文字が改行だったら列数を初期化して行数を増やす if(c=='\n'){ col=1; ++row; } } out: //敵クラス生成 for(int i=0;i<ENEMY_NUM;++i){ enemy[i]=new ENEMY( data[i].type, data[i].stype, data[i].m_pattern, data[i].s_pattern, data[i].in_time, data[i].stop_time, data[i].shot_time, data[i].out_time, data[i].x, data[i].y, data[i].speed, data[i].hp, data[i].item); } } void CONTROL::All() { //int count = 0; //描画領域を指定 SetDrawArea(MARGIN,MARGIN,MARGIN+380,MARGIN+460); back->All(); //プレイヤークラスのAll関数実行 player->All(); for(int i=0;i<ENEMY_NUM;++i){ if(enemy[i]!=NULL){ if(enemy[i]->All()){ delete enemy[i]; enemy[i]=NULL; } } } ++g_count; } CONTROL::~CONTROL() { //プレイヤークラスの解放 delete player; delete back; for(int i=0;i<ENEMY_NUM;++i){ if(enemy[i]!=NULL){ delete enemy[i]; } } }

  • マウス移動イベントでMessageBox終了

    Visual C++ 2010 Expressでプログラム開発している初心者です。 現在、オペレータに確認させるため、MessageBox::Show()によりメッセージを表示して OKボタン押下により、MessageBoxを終了しておりますが、ボタン押下する前に マウス移動イベントにより、MessageBoxを終了できないか、調査しております。 MessageBoxのメソッドには、このような機能はないようなので、自前で作成するしか ないかな、と考えております。 その場合には、まず (1)ウィンドウを作成し、マウスイベントを取得できるプログラムを登録 (2)ウィンドウ(メッセージ含む)表示 (3)マウスイベントを取得 (4)イベント解析 (5)ウィンドウ終了 上記のように動かすには、初心者の自分にはとても難しいので 他に方法はないでしょうか? こんな方法があるよ、とヒントでも構いませんので、是非ご教示ください。 よろしくお願い致します。

  • MEFのサンプルが動かない。

    visualstudio2012でC#を触っています。 こちらのサイト http://sky-walkers.jp/index.php/blog/2010/09/14/16-blog-programing-net-framework4-mef をみているのですが、 最初のサンプルで、 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 今回はWindowsFormアプリケーションでサンプルを作ってみましたよ。 あいさつを返してくれる単純なdllを2つと、それを呼ぶためのexeを1つ。 あいさつをするプラグインがあれば、あいさつメニューを追加するようにしてみました。 Plugins フォルダの中にプラグインであるdllが入っているので、 入っている場合と空にした場合で試してみてくださいね。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー と書かれていたので、両方ダウンロードしてみましたが、紹介されているプラグインの機能が使えません。 Sourceの中の、MefSampleを起動し、開始を選択しますが、メニューにあいさつは現れず、ファイルメニューのみが表示され、終了しかできません。 サイトに書かれていることはよんでいるのですが、理由がわかりません。

  • C言語初心者です!詳しい方教えて下さい!

    以下のソースコードは野球のピッチングで投げてからキャッチャーに届くまでの軌道を出力するもので、応用すればゴルフでボールを打ってから停止するまでの同様な数値が出力される。と言われて渡されたのですが、どこを変更すればいいのかわかりません。 変更したい数値は ボールの重さ、大きさ、発射角度、初速度 と 揚力係数 です。 void force(float cl, float cy, float cd, float ut, float vt, float wt, float *fx, float *fy, float *fz) { float g=9.8, rho=1.225, S=0.0042; float q, uv; q = sqrt(ut*ut + vt*vt + wt*wt); uv = sqrt(ut*ut + vt*vt); *fx = -0.5*rho*S*q*q*(ut/q*cd+vt/uv*cy+wt/q*ut/uv*cl); *fy = -0.5*rho*S*q*q*(vt/q*cd-ut/uv*cy+wt/q*vt/uv*cl); *fz = -MASS*g-0.5*rho*S*q*q*(wt/q*cd-uv/q*cl); } void integra(float cl, float cy, float cd, float *xt, float *yt, float *zt, float *ut, float *vt, float *wt, float dt) { float u1, v1, w1, u2, v2, w2, fx, fy, fz; force(cl, cy, cd, *ut, *vt, *wt, &fx, &fy, &fz); u1 = *ut + fx*dt/MASS; v1 = *vt + fy*dt/MASS; w1 = *wt + fz*dt/MASS; force(cl, cy, cd, u1, v1, w1, &fx, &fy, &fz); u2 = 0.5*(u1 + *ut + fx*dt/MASS); v2 = 0.5*(v1 + *vt + fy*dt/MASS); w2 = 0.5*(w1 + *wt + fz*dt/MASS); *xt += 0.5*dt*(*ut + u2); *yt += 0.5*dt*(*vt + v2); *zt += 0.5*dt*(*wt + w2); *ut = u2; *vt = v2; *wt = w2; } int main() { float x[256], y[256], z[256]; int i; float dt=0.01; float dis=18.44; float cy, cl, cd=0.5; float xt, yt, zt, ut, vt, wt, us; float va, la; int white[3] = {255, 255, 255}; int red [3] = {255, 0, 0}; int green[3] = { 0, 255, 0}; int blue [3] = { 0, 0, 255}; int grey [3] = { 64, 64, 64}; int j; float ye[10], ze[10]; float yst[5] = {-0.215, 0.215, 0.215, -0.215, -0.215}; float zst[5] = {0.5, 0.5, 1.2, 1.2, 0.5}; sleep(1); for (j=0;j<10;j++) { xt = 0.0, yt=0.0, zt=1.8; printf("初速度(~150)km/h==>"); scanf ("%g", &us); if (us<=0.0) exit(0); us = us*1000.0/3600.0; printf("上下角(-5~5)(deg.)==>"); scanf ("%g", &va); va = va*PI/180.0; printf("左右角(-5~5)(deg.)==>"); scanf ("%g", &la); la = la*PI/180.0; ut = us*cos(la)*cos(va); vt = us*sin(la); wt = us*cos(la)*sin(va); printf("CL(-1~1)==>"); scanf ("%g", &cl); printf("CY(-1~1)==>"); scanf ("%g", &cy); printf("t x t z\n"); for (i=0; xt<=dis; i++) { x[i] = xt; y[i] = yt; z[i] = zt; integra(cl, cy, cd, &xt, &yt, &zt, &ut, &vt, &wt, dt); printf("%g %g %g %g\n", dt*(float)(i+1), xt, yt, zt); } ye[j] = yt, ze[j] = zt; } }

  • Graphicsプロパティ

    例えば using System; using System.Drawing; using System.Windows.Forms; class SeparateMain { public static void Main() { Application.Run(new AnotherHelloWorld()); } } class AnotherHelloWorld : Form { public AnotherHelloWorld() { Text = "Another Hello World"; BackColor = Color.White; } protected override void OnPaint(PaintEventArgs pea) { Graphics grfx = pea.Graphics; grfx.DrawString("Hello, windows Forms!", Font, Brushes.Black, 0, 0); } } の中の Graphics grfx = pea.Graphics; という部分なのですが、この部分はなぜ必要で、何をしてるのでしょう。 GDI+というのでしょうか System.Drawing.Graphicsというクラスのインスタンス、grfxを定義して、 PaintEventArgsのインスタンスpeaのGraphicsプロパティを代入 この処理が必要な理由がわかりません。お願いします。

  • 一つのソースコードから複数のOSへ書き出しは可能?

    仮にWindowsでC/C++のソースコードを書いたとして それをMacやLinux用にWindwos内でビルドすることは可能なのでしょうか? JavaだったらJVMがよろしくやってくれて OSの違いを吸収してくれているのはわかります Qtも一つコードを書けば複数のOS用に書き出すことができますが それはどういった仕組みなっているのでしょうか? いろいろ調べたのですが、そういった記事などが見つからなかったので 今回質問させていただきました、よろしくお願いします。

  • 32,767以上データのFFTソフトはないですか?

    32,767以上のデータをFFT出来るソフトはないですか? とりあえず、ベクターには無かったのですが・・・・

  • Graphicsプロパティ

    例えば using System; using System.Drawing; using System.Windows.Forms; class SeparateMain { public static void Main() { Application.Run(new AnotherHelloWorld()); } } class AnotherHelloWorld : Form { public AnotherHelloWorld() { Text = "Another Hello World"; BackColor = Color.White; } protected override void OnPaint(PaintEventArgs pea) { Graphics grfx = pea.Graphics; grfx.DrawString("Hello, windows Forms!", Font, Brushes.Black, 0, 0); } } の中の Graphics grfx = pea.Graphics; という部分なのですが、この部分はなぜ必要で、何をしてるのでしょう。 GDI+というのでしょうか System.Drawing.Graphicsというクラスのインスタンス、grfxを定義して、 PaintEventArgsのインスタンスpeaのGraphicsプロパティを代入 この処理が必要な理由がわかりません。お願いします。

  • Graphicsプロパティ

    例えば using System; using System.Drawing; using System.Windows.Forms; class SeparateMain { public static void Main() { Application.Run(new AnotherHelloWorld()); } } class AnotherHelloWorld : Form { public AnotherHelloWorld() { Text = "Another Hello World"; BackColor = Color.White; } protected override void OnPaint(PaintEventArgs pea) { Graphics grfx = pea.Graphics; grfx.DrawString("Hello, windows Forms!", Font, Brushes.Black, 0, 0); } } の中の Graphics grfx = pea.Graphics; という部分なのですが、この部分はなぜ必要で、何をしてるのでしょう。 GDI+というのでしょうか System.Drawing.Graphicsというクラスのインスタンス、grfxを定義して、 PaintEventArgsのインスタンスpeaのGraphicsプロパティを代入 この処理が必要な理由がわかりません。お願いします。

  • Graphicsプロパティ

    例えば using System; using System.Drawing; using System.Windows.Forms; class SeparateMain { public static void Main() { Application.Run(new AnotherHelloWorld()); } } class AnotherHelloWorld : Form { public AnotherHelloWorld() { Text = "Another Hello World"; BackColor = Color.White; } protected override void OnPaint(PaintEventArgs pea) { Graphics grfx = pea.Graphics; grfx.DrawString("Hello, windows Forms!", Font, Brushes.Black, 0, 0); } } の中の Graphics grfx = pea.Graphics; という部分なのですが、この部分はなぜ必要で、何をしてるのでしょう。 GDI+というのでしょうか System.Drawing.Graphicsというクラスのインスタンス、grfxを定義して、 PaintEventArgsのインスタンスpeaのGraphicsプロパティを代入 この処理が必要な理由がわかりません。お願いします。