hidebun の回答履歴
- オブジェクト指向による座標変換とクラス構造
オブジェクト指向的プログラミングをすると以下はどうなるのか、結構悩んでおります。 流れ: 或る物体が有る ・位置情報算出のためのパラメータを変数にセット ・時刻情報を入れ、上記パラメータより、或る時刻における位置が求まる (計算に必要なパラメータを代入したら時刻情報がたぶん唯一の引数になります) ・原点はそのままでXYZ軸に対して回転座標変換を施す ・結果が求まる。 悩み: 初めに与えたパラメータを保持しておきたい。 座標変換を行った前と変換後の座標も保持しておきたい。 こういった場合、どういうアプローチが良いのでしょうか? 従来型のプログラミングですと構造体を引き回すことになりますが、パラメータと変換後の座標を独立して保持することになり、スマートな気がしません。 折角オブジェクト指向を使うので出来れば全て1パックにしておくのが望ましいと思うのですが、メンバ、メソッド…どうすれば良いのか分からず、こちらで質問させていただきます。 よろしくお願いします
- 入力チェック
入力チェックでMicro CADAMを組み入れたプログラムを作っているんですが文字を入力する際に、座標(x,y)で,を一緒に入れて入力させる方法を取っています。 質問したいのは次のほうで数字だけを入れるとエラーになるプログラムを作成したいと思っていますが、どうもうまくいきません。 isdigitを使って作っていますが巧く組み込んで作成する方法はありますでしょうか。 なお、入力チェックに符記号、二重カンマ、文字の入力はエラーになるように組み込んであります
- 締切済み
- C・C++・C#
- kururu0325
- 回答数1
- PCのガリガリ音はメモリ?HD?
ソフトをダブルクリックするとガリガリ音がします。 それはHDにあるプログラムがメモリ上に展開されているからなんでしょうけど、その音は HDから聞こえている音なのか、 メモリから聞こえている音なのか、 どっちなんでしょうか? 僕は多分ワードとかのソフトの画面がnewされてメモリセルが1になったり0になったり しているときの音だと思うのです。 メモリセルの1セルは電気が一定以上たまるとON、一定以下だとOFFと聞きます。 つまり、電気をためたり減らしたりしているときに発生する音が ガリガリ聞こえているのだと思うのです。 それにふつうの音楽のCDプレイヤーはガリガリ音がしないです。 であるならHDではなくメモリからの音と思うのです。 そのような理解であってますでしょうか?
- 締切済み
- C・C++・C#
- karasu4649
- 回答数7
- API 内部で、デバッカーをブレークさせたいです。
例えば、下記APIです。 環境は、VC++6.0です。 WINUSERAPI HWND WINAPI SetFocus( HWND hWnd); やはりムリですかね~
- ベストアンサー
- C・C++・C#
- noname#192260
- 回答数2
- API 内部で、デバッカーをブレークさせたいです。
例えば、下記APIです。 環境は、VC++6.0です。 WINUSERAPI HWND WINAPI SetFocus( HWND hWnd); やはりムリですかね~
- ベストアンサー
- C・C++・C#
- noname#192260
- 回答数2
- C言語について教えて下さい。
C言語について教えて下さい。 C言語の知識はないが、課題なので困ってます。 助けてください!!! 変更前 N00001 AAAA; N00002 M10; N00003 M11; N00004 BBBBB; N00005 YYYY; N00006 M12; N00007 M13; N00008 CCCCCC; N00009 YYYY; N00010 M14; N00011 M15; N00012 DDDDDDD; N00013 YYYY; N00014 EEEEEEEE; 変更後 N00001 AAAA; N00002 BBBBB; N00003 M10; N00004 M11; N00005 YYYY; N00006 CCCCCC; N00007 M12; N00008 M13; N00009 YYYY; N00010 DDDDDDD; N00011 M14; N00012 M15; N00013 YYYY; N00014 EEEEEEE
- コマンドプロンプト(cmd.exe)を小さいフォントで起動したい
コマンドプロンプト(cmd.exe)を小さいフォントを指定して起動したいのですが、そのフォントの指定方法がわかりません。ご存じのかたがおりましたら、教えて下さい。 コマンドプロンプトのショートカットで、フォントの指定欄があり、そこで小さいフォント(6×13等)を指定すれば、実現は可能ですが、その方法ですと、作業フォルダも、そのプロパティで指定したところになってしまいます。 やりたいことは、以下の通りです。 1.作業ディレクトリを、第1パラメータで受け取り、そこのディレクトリを作業ディレクトリとして、コマンドプロンプトを起動したい。 2.そのとき、小さいフォント(6×13)で、起動したい。 API(CreateProcess)を呼び出して、コマンドプロンプトの起動までは、出来たのですが、そのときに、フォントサイズを指定する方法がわかりません。(少なくとも、CreateProcessのパラメータにはフォントに関する指定はありませんでした) 実行環境は以下の通りです。 Windows2000 VC++2003
- 文字列を足し合わせる。
例えば、 標準入力で "Yamada Tarou" という文字列を入力したときに、 "My name is " という文字列と足し合わせて、 "My name is Yamada Tarou" という新たな文字列を作るにはどうすればいいのでしょうか? どなたか助言をお願いします。
- CException についてVC6とVC2005とのコンパイルの違い
こんにちわ、お世話になります。 現在、Windows XPにて、VC++6.0からVC++2005へと あるソフトの移植をしているのですが、 CException についてコンパイルエラーが出ています。 試しに、 -- CException* pException = new CException; delete pException; -- の様な文を書いて、VC++6.0とVC++2005とでコンパイルを 比較してみました。 すると思惑通り、VC++2005でだけ、以下の様なエラーが 出てしまいます。 -- error C2259: 'CException' : 抽象クラスをインスタンス化できません。 1> 次のメンバが原因です: 1> 'CException::~CException(void)' : は抽象型です -- ヘルプを見てもエラーが出るのは納得なのですが、 それならなぜVC++6.0の時には出なかったのでしょうか? 以上、よろしくお願い致します。
- ベストアンサー
- C・C++・C#
- happy10429
- 回答数5
- CException についてVC6とVC2005とのコンパイルの違い
こんにちわ、お世話になります。 現在、Windows XPにて、VC++6.0からVC++2005へと あるソフトの移植をしているのですが、 CException についてコンパイルエラーが出ています。 試しに、 -- CException* pException = new CException; delete pException; -- の様な文を書いて、VC++6.0とVC++2005とでコンパイルを 比較してみました。 すると思惑通り、VC++2005でだけ、以下の様なエラーが 出てしまいます。 -- error C2259: 'CException' : 抽象クラスをインスタンス化できません。 1> 次のメンバが原因です: 1> 'CException::~CException(void)' : は抽象型です -- ヘルプを見てもエラーが出るのは納得なのですが、 それならなぜVC++6.0の時には出なかったのでしょうか? 以上、よろしくお願い致します。
- ベストアンサー
- C・C++・C#
- happy10429
- 回答数5
- CException についてVC6とVC2005とのコンパイルの違い
こんにちわ、お世話になります。 現在、Windows XPにて、VC++6.0からVC++2005へと あるソフトの移植をしているのですが、 CException についてコンパイルエラーが出ています。 試しに、 -- CException* pException = new CException; delete pException; -- の様な文を書いて、VC++6.0とVC++2005とでコンパイルを 比較してみました。 すると思惑通り、VC++2005でだけ、以下の様なエラーが 出てしまいます。 -- error C2259: 'CException' : 抽象クラスをインスタンス化できません。 1> 次のメンバが原因です: 1> 'CException::~CException(void)' : は抽象型です -- ヘルプを見てもエラーが出るのは納得なのですが、 それならなぜVC++6.0の時には出なかったのでしょうか? 以上、よろしくお願い致します。
- ベストアンサー
- C・C++・C#
- happy10429
- 回答数5
- 半角カナ文字の検査
お世話になっております。 現在C#で開発を行っています。文字列の検索で困っているのですが、 文字列が半角かなで構成されているか、もしくは半角かな以外の文字が含まれるか? を判断したいのですがどのように行えばよいのでしょうか。 よろしくお願い致します。m(_ _)m
- ベストアンサー
- C・C++・C#
- seisakusyo
- 回答数1
- プログラムの不安
初めまして、4月に新社会人となり役1月、研修がたちました。 入社してから研修でC言語を学び今現在管理システムを1人1つC言語で作成しております。 ですが、大学の時の知識・入社してから学んだC言語の知識は全然といって良いほどで今現在開発中の管理システム(毎年研修で作っているということです)が上手く動かず月末の発表までに間に合わないんじゃないかと不安です、納期には絶対に出さないといけないといわれ正直なところ今の力ではあと2日…無理に近いです 入社してから本当は自分はこの仕事が違うんじゃないかと親とも相談しましたが、SE系のことを知らない親なので今ひとつなところです 上司にも相談しましたがプログラム云々より、それ以前のところの話になり納期厳しいの話も形が出来動くことが前提の話をされてしまい、不安が解消されたとはいえませんでした またその不安や社内の環境(4月から冷房ついてますが極端に冷えて対策を講じても寒気や震えが止まらないです)で今までなんともなかった部分で体調の悪化が出て正直今の仕事続けるかどうか悩んでます。 どうか何かアドバイス、ご意見いただけたらと思っていますよろしくお願いいたします
- ベストアンサー
- C・C++・C#
- sokayoguru
- 回答数7
- [A-Z0-9]の正規表現
言語はCでなくても普通の言語ならよいです。 アルファベットと数字混在確認のための一般的な書式を教えてください。 アルファベットまたは数字 でしたら[A-Z]|[0-9]と書けますが、andを意味するように書く方法が分からないので教えてください。
- エラーがどうしても解消しません。
エラーがどうしても解消しません。 コーディング無視、コメント無しです。 (まだ、そんなレベルに達してません。 プログラムを見て頂ければ分かると思いますが。) 使用環境はXP-sp2 CPAT for Boland C++ Compiler Ver2.31 Boland C++ Compiler5.5 複数のテキストファイルを一つのファイルにまとめるプログラムです。33行目以降は出力です。 読込48ファイル目でエラーが出てしまいます。 やってみた事は7行目のファイルポインタを99に変更、以前は50でした。(改善なし) 19行目のi=0を40に変更したら40から50まではエラー無く終了。(出力までOK) 17行目のファイル数入力で10個のファイルに対して11と入力した時、11個目はエラーとなりますが、出力はでます。 しかし、47個までは正常に終了しますが48個目でエラーが出て強制終了してしまい、出力されません。 解決方法はあるのでしょうか。 宜しくお願いいたします。 1:#include <stdio.h> 2:#include <stdlib.h> 3:#include <string.h> 4: 5:int main(void) 6:{ 7: FILE *fp[99],*fpo; 8: char fname0[15]; 9: char fname1[15]; 10: char fname2[10]; 11: char fname3[5]; 12: int i,j,n=0; 13: 14: 15: printf("\n Files coupling program \n\n"); 16: printf("File name : "); scanf("%s",fname2); 17: printf("How many Files : "); scanf("%d",&n); 18: 19: for (i = 0 ; i < n ; i++) 20: { 21: sprintf(fname3,".s%02d",i+1); 22: strcpy(fname0,fname2); 23: strcat(fname0,fname3); 24: 25: 26: if(NULL == (fp[i] = fopen(fname0, "r"))) 27: { 28: fprintf(stderr, "\nCannt openfile : %\n\n",fname0); 29: break; 30: } 31: printf("Read : %s \n",fname0); 32: } ------以降省略------ 68:}
- AF_UNIXのsocketと共有メモリを使ったリングバッファーの速度比較
いま、仕事でlinux上で2つのプロセスを動かし、プロセスの間で、高速で大量のデータの受け渡しが必要なプログラムを作っています。プロセス間の通信は普通の socket で AF_UNIX を使っています。 できるだけ速度を上げたいのですが、AF_UNIXのsocketのかわりに共有メモリを使ってリングバッファーでキューを作ってデータを送るという案が出ました。この方法によって速度の向上は期待できるでしょうか?
- GCCで暗黙の型変換の警告を出したい
情報が失われてしまうような代入について警告を出したいのですが、 どういったオプションを用いればよいでしょうか? コンパイラはGCCの3.x系か4.x系でお願いします。 以下のようなソースで型変換に関する警告がほしいんです。 --- test.c --- #include <stdio.h> int main(void) { int a = 66000; short b; b = a; // <- 暗黙の型変換 printf("%d\n", b); return 0; } 実行結果 $ ./test 464 以下のオプションを試しましたが、上記のソースでは 何の警告も出ませんでした。 -W -Wall -Wconversion -Wimplicit ご存知の方いらっしゃいましたら、どうかお助け下さい。
- 動画の遅延再生プログラム
PCとPCカメラを使って、 10秒前後の遅延再生する簡易プログラムを 作りたいと思っております。 WEBカメラのドライバのフリーソフト EWCLIBを利用して、下記ソースまで 作ったのですが、高スペックなPCにも かかわらず、フレームレートが ばらつきます。 フレームレートは30にしており、 妥協して15にしても同様の 問題がおこるので、おそらくWindowsかカメラの 自動制御が悪さをしていると思われます。 当方試行錯誤したのですが、ついに行き詰りました。 ソースの改良、ハードの取替え、動作環境の 変更等対策がありましたらご教授願います。 ちなみに高価なものであれば、すでに同機能以上の ものが世の中にあるのは把握しておりますので、 なるべくなら、安価に仕上げれるものが 望ましいです。 #include <esplib.h> #include <ewclib.h> #pragma comment(lib, "winmm.lib") #include <crtdbg.h> #define FRAMES 60 #define WX 320 #define WY 240 float a=0,b=0,c=0; void ESP_Ready(void) { ESP_CreateImage(0,"000",0,0,WX,WY,400); ESP_OpenTextWindow(0,86,512,439,135); ESP_Printf("初期化中...\n"); int r= EWC_Open(WX,WY,15); if(r){ ESP_Printf("Error %d\n",r); return; } ESP_Printf("Startをクリックしてください.\n"); } void ESP_Main(void) { int w=0; int **latesc; latesc = new int*[FRAMES]; for(int i=0;i<FRAMES;i++){ latesc[i] = new int[WX*WY]; } for(;;){ a=timeGetTime(); CopyMemory(ESP_VramPtr[0],latesc[w],WX*WY*4); // フレームバッファを指定 ESP_Select(0); ESP_Update(); // 新しいフレームが来るまで待つ for(;;){ Sleep(1); if(EWC_IsCaptured(0)) break; } // フレーム番号 r の表示 c=timeGetTime(); b = c - a; ESP_Locate(0,5); ESP_Printf("ewc_time[0]= %f [s]\n",b); ESP_Locate(0,3); ESP_Printf("w=%03d\n",w); EWC_SetBuffer(0,latesc[w]); w=(w+1)%(FRAMES-1); //wには最後に書き込まれたフレームを指定する if(ESP_STOP) break; } for(int i=0;i<FRAMES;i++){ delete[] latesc[i]; } delete[] latesc; ESP_Printf("Stop\n"); } void ESP_Finish(void) { EWC_Close(); }
- 動画の遅延再生プログラム
PCとPCカメラを使って、 10秒前後の遅延再生する簡易プログラムを 作りたいと思っております。 WEBカメラのドライバのフリーソフト EWCLIBを利用して、下記ソースまで 作ったのですが、高スペックなPCにも かかわらず、フレームレートが ばらつきます。 フレームレートは30にしており、 妥協して15にしても同様の 問題がおこるので、おそらくWindowsかカメラの 自動制御が悪さをしていると思われます。 当方試行錯誤したのですが、ついに行き詰りました。 ソースの改良、ハードの取替え、動作環境の 変更等対策がありましたらご教授願います。 ちなみに高価なものであれば、すでに同機能以上の ものが世の中にあるのは把握しておりますので、 なるべくなら、安価に仕上げれるものが 望ましいです。 #include <esplib.h> #include <ewclib.h> #pragma comment(lib, "winmm.lib") #include <crtdbg.h> #define FRAMES 60 #define WX 320 #define WY 240 float a=0,b=0,c=0; void ESP_Ready(void) { ESP_CreateImage(0,"000",0,0,WX,WY,400); ESP_OpenTextWindow(0,86,512,439,135); ESP_Printf("初期化中...\n"); int r= EWC_Open(WX,WY,15); if(r){ ESP_Printf("Error %d\n",r); return; } ESP_Printf("Startをクリックしてください.\n"); } void ESP_Main(void) { int w=0; int **latesc; latesc = new int*[FRAMES]; for(int i=0;i<FRAMES;i++){ latesc[i] = new int[WX*WY]; } for(;;){ a=timeGetTime(); CopyMemory(ESP_VramPtr[0],latesc[w],WX*WY*4); // フレームバッファを指定 ESP_Select(0); ESP_Update(); // 新しいフレームが来るまで待つ for(;;){ Sleep(1); if(EWC_IsCaptured(0)) break; } // フレーム番号 r の表示 c=timeGetTime(); b = c - a; ESP_Locate(0,5); ESP_Printf("ewc_time[0]= %f [s]\n",b); ESP_Locate(0,3); ESP_Printf("w=%03d\n",w); EWC_SetBuffer(0,latesc[w]); w=(w+1)%(FRAMES-1); //wには最後に書き込まれたフレームを指定する if(ESP_STOP) break; } for(int i=0;i<FRAMES;i++){ delete[] latesc[i]; } delete[] latesc; ESP_Printf("Stop\n"); } void ESP_Finish(void) { EWC_Close(); }
- 動画の遅延再生プログラム
PCとPCカメラを使って、 10秒前後の遅延再生する簡易プログラムを 作りたいと思っております。 WEBカメラのドライバのフリーソフト EWCLIBを利用して、下記ソースまで 作ったのですが、高スペックなPCにも かかわらず、フレームレートが ばらつきます。 フレームレートは30にしており、 妥協して15にしても同様の 問題がおこるので、おそらくWindowsかカメラの 自動制御が悪さをしていると思われます。 当方試行錯誤したのですが、ついに行き詰りました。 ソースの改良、ハードの取替え、動作環境の 変更等対策がありましたらご教授願います。 ちなみに高価なものであれば、すでに同機能以上の ものが世の中にあるのは把握しておりますので、 なるべくなら、安価に仕上げれるものが 望ましいです。 #include <esplib.h> #include <ewclib.h> #pragma comment(lib, "winmm.lib") #include <crtdbg.h> #define FRAMES 60 #define WX 320 #define WY 240 float a=0,b=0,c=0; void ESP_Ready(void) { ESP_CreateImage(0,"000",0,0,WX,WY,400); ESP_OpenTextWindow(0,86,512,439,135); ESP_Printf("初期化中...\n"); int r= EWC_Open(WX,WY,15); if(r){ ESP_Printf("Error %d\n",r); return; } ESP_Printf("Startをクリックしてください.\n"); } void ESP_Main(void) { int w=0; int **latesc; latesc = new int*[FRAMES]; for(int i=0;i<FRAMES;i++){ latesc[i] = new int[WX*WY]; } for(;;){ a=timeGetTime(); CopyMemory(ESP_VramPtr[0],latesc[w],WX*WY*4); // フレームバッファを指定 ESP_Select(0); ESP_Update(); // 新しいフレームが来るまで待つ for(;;){ Sleep(1); if(EWC_IsCaptured(0)) break; } // フレーム番号 r の表示 c=timeGetTime(); b = c - a; ESP_Locate(0,5); ESP_Printf("ewc_time[0]= %f [s]\n",b); ESP_Locate(0,3); ESP_Printf("w=%03d\n",w); EWC_SetBuffer(0,latesc[w]); w=(w+1)%(FRAMES-1); //wには最後に書き込まれたフレームを指定する if(ESP_STOP) break; } for(int i=0;i<FRAMES;i++){ delete[] latesc[i]; } delete[] latesc; ESP_Printf("Stop\n"); } void ESP_Finish(void) { EWC_Close(); }