外のPCで正常に動いているプログラムを自分のノートPCでも動かそうと思いソースファイル等必要なものをディレクトリごと移しました。コンパイルはできましたが実行するとプログラムの開始の段階でsegmentation faultになってしまいます。他のPCでは正常に動いているコードなので間違いはないはずです。 cygwin環境です。 これはどういった原因で起こると考えられるでしょうか?
↧
別のPCにファイルを移してコンパイルして実行するとsegmentation faultになる。
↧
Linux環境変数設定(putenv?setenv?)
RedHatLinux7.3(2.96-110)、gcc(2.96 20000731)です。 C言語でプログラミングしていますが、環境変数設定がうまくいかず困っています。 下記の2つで試しましたが、どちらも戻り値は正常(0)なのに環境変数には設定されないのです。 その1: nRet = putenv( "HOGE_HOGE_VER=1.0.0" ); その2: nRet = setenv( "HOGE_HOGE_VER", "1.0.0", 1 ); この使い方は間違っているのでしょうか?それと、putenv、setenvの違いはなんなのでしょうか? ちなみに、既に設定されている環境変数をgetenvすることは、ちゃんとできるのですが。 よろしくお願いします。
↧
↧
c言語 リストデータ構造 キュー スタック がわかりません
ポインタを用いた線形リストデータ構造を利用して,キーボードから順に入力した複数の整数値(int型)を空の「スタック」および「キュー」にそれぞれ保存し,取り出した時,出力される整数値を順に表示するプログラム. 動作確認のために入力する整数値は,年号と月の数字の部分とせよ(2008年5月なら,「2→0→0→8→0→5」の順).また,スタックとキューに保存されているデータがどのような順で出力されるかをそれぞれ表示するようにせよ.(スタックの場合は「5→0→8→0→0→2」の順で出力され,キューの場合は「2→0→0→8→0→5」の順で出力されることを表示させ確認せよ) こうのようなプログラムを作らなくてはいけないのですが、まったくわかりません。参考にでもソースを教えていただけないでしょうか? また、詳しく解説されている(初級と中級レベルそれぞれについて)サイトや書籍がありましたらそちらもお願いいたします。
↧
数値計算の高速化 (cos, sin, exp)
数値計算の計算コストに関しての質問です。 webなどで見ていると、「cos, sin, expは計算コストが 高く、高速化のために、他の計算方法で代用できる 場合は代用する」ということが書かれていたのを見ました。 cosやsinの計算にテイラー展開したもので代用する方が 計算が早くなるということでしょうか?
↧
マージソートの計算量について-O(n*logn)
マージソートの計算量はO(n*logn)ですが、なぜそうなのかが理解出来ません。要素数が2, 4, 8, 16, 32, 64...と増加すると二分割するのにかかる時間は1, 2, 3, 4, 5, 6..となり、n=2^x, x=lognとなるところまでは理解出来ました。しかし更にnをかける必要があるのはどうしてでしょうか。要素数が1になるまで分割した後に、小さい順番に比較しながら統合して行く作業があり、これにも当然ランニングタイムがかかるのはわかりますがなぜこの要素の比較コスト?が*nなのでしょうか。 またウェブで調べると、他にもT(n)=2T(2/n)+O(n)という別の説明もあり、こちらも理解出来ません。この説明は上の説明とはまた別の角度から説明しているものなのでしょうか。わかる人がいたら教えて下さい。
↧
↧
C言語で、数値の桁数を求めるには??
C言語で数値の桁数を求めるプログラムをもとめたいのですが どうすればいいのでしょうか int c; int a; c=12345; a=printf("%d",c); とするとaに桁数は入るのですが cがPRINTF関数により表示されてしまいます どうすればいいでしょうか? わかる方はおしえてください、おねがいします。
↧
OpenCV cvmatchtemplate
OpenCVで画像一致検出のプログラムを組んでいます。 Cvmatchtemplateは動作していますが、そのパラメーター、 CV_TM_SQDIFFはSquared difference 輝度差の二乗和 CV_TM_CCORRはCross correlation 相互相関 CV_TM_CCOEFFはCorrelation coefficient 相関係数 でNORMEDはそれらの正規化したもの と言う所までは判ったのですが、(分かったでは無い-笑-)それらの意味が良く分かりません、かろうじて理解出来るのは輝度差の二乗和のみです。 私としては各々の詳細を理解出来なくても、どの様な結果を導きたい時使うパラメーターかが判れば良いのですが、色々サイトを探しても、数式が書かれている所はありますが具体例が書かれている所が見つかりませんでした。 どなたか良いサイト、もしくは本をご存知無いでしょうか。 よろしくお願いいたします。
↧
コンパイルエラーの意味
最近プログラミングの勉強を始めた初心者です。作成したプログラムをコンパイルしたところ以下のようなエラーが出ましたがなんのエラーなのかまったく分かりません… 初歩的な質問で申し訳ありませんが教えてください! /user/lib/libcygwin.a(libcmain.o)(.text+0x6a):libcmain.c: undefined reference to'WinMain@16' collect2: ld returned 1 exit status
↧
シーザー暗号(C言語)
シーザー暗号というものを作ろうとしていますが、文字のずらし方がわからず詰まっています。 手順は一応考えてあります。 (1)入力された文字を配列input[301]に代入 (2)何文字ずらすかを指定してその数値を変数countに代入 (3)入力された文字の長さを変数lenに代入 (4)inputとcountとlenを、文字をずらしてそれをoutputに返す関数shiftに渡す (5)outputを表示する のような感じですが、肝心の文字のずらし方がわかりません。 JISコードを使ってやるといいと聞いたんですが、そのやり方がわかりません。 ソース↓ #include <stdio.h> #include <string.h> int shift_char(char x[], int y, int z) { int i; for(i = 0; i <= z; i++) { x[i] = x[i] + y; } return x; } int main(int argc, char* argv[]) { char input[301]; char output[301]; int count, len, i; printf("文字を入力してください: "); scanf("%s" ,input); printf("何文字ずらしますか: "); scanf("%d" ,count); len = strlen(input); output = shift_char(input, count, len); for(i = 0; i <= len; i++) { printf("%s" ,output[i]); } return 0; } よろしくお願いします。
↧
↧
C#でFormを同時に閉じることについて。
あるForm2から呼び出したForm3があります。 Form2を閉じるとForm3も閉じられるプログラムを書きたいです。 インスタンスを与えれば簡単でしょうけど、Form2にはすでに別Formのインスタンスが与えられていて、複数個のインスタンスを同時に与える方法が分かりませんし、可能かも分かりません。まだまだプログラミングは浅くて…。 すでにthisで宣言したのでもう一個は何で宣言すればいいのかも分かりません。 public partial class Form2 : Form { Form1 frm1; public Form2(Form1 frm1) { this.frm1 = frm1; InitializeComponent(); } この他に、Form3のClosingイベントでForm2が閉じられたら同時に閉じるという方法も考えました。 Form3にはForm2のインスタンス、frm2は与えられています。 しかしif文の条件は、~==~、の形式になっていますが、Formが閉じたら…の書き方が分かりません。 frm2.Close() としても==がないですし、 Form2 frm2==frm2.Close() なども意味がありません。 どう書けばいいでしょうか? 無理もしくは面倒ならば仕方なくこのままでいきます。 結局何がしたいのかというと、Form3はForm2と連携しているため、仮にForm2を先に閉じてしまうとForm3はただ邪魔になるのです。 この際、自分でForm3を閉じればいですが、どうせなら自動でさせたいので。
↧
2分探索法 『成功・不成功探索一回の実行時間を求める』
C言語の授業で課題が出たのですが、自分が思っているような値が出なくて困っています。よろしければヒントだけでも頂ければなと思います。 ----------課題---------- 整列されているN個のデータに対して、その中にvがあるかどうかを判断する2分探索プログラムを実行する Nの値を10^6、5×10^6、10^7、5×10^7、10^8 と変化させたとき、成功探索、不成功探索一回の実行時間をそれぞれ求めよ。 このとき、Nと実行時間の関係はどのようになっているか(100字程度で) N 成功探索 不成功探索 10^6 ***秒 ***秒 5×10^6 ***秒 ***秒 10^7 ***秒 ***秒 5×10^7 ***秒 ***秒 10^8 ***秒 ***秒 ---------------------------------------- ~↑を元に作成したプログラム(成功探索の場合)~ #include <stdio.h> #include <stdlib.h> #include <time.h> #define T 1000000 #define N 100000000 int a[N]; int main(void) { clock_t t1,t2; int t; int i; int l, r, k, v, m; for (i = 0; i < N; i++) a[i] = i; t1=clock(); for (t = 0; t < T; t++) { v = rand() % N; l=0; r=N-1; k=-1; while (r >= l) { m = (l+r)/2; if (v == a[m]) { k=m; break; } if (v < a[m]) r = m-1; else l = m+1; } } t2=clock(); printf("cpu time=%10.6f[micro sec]\n",(double)(t2-t1)*1000000/(CLOCKS_PER_SEC*T)); return 0; } ↑a[i]すべてに0~N-1を代入し、vにランダムに0~N-1の値を代入する。2分探索法で、v=a[i]となったら終了する。 実行時間は、↑の操作を10^6回行い、その平均を実行時間をする…単位:マイクロ秒 として、コンパイルして動いたんですが実行時間の値にずれがありどの値が一番適切か分からなくて困っています。 ↑のプログラムをそれぞれのNで実行したところ N= 10^6で実行・・・1.016 0.891 0.969 1.155 1.14 [micro sec] 5×10^6で実行・・・1.422 1.500 1.563 1.250 1.406 1.297 10^7で実行・・・1.750 1.360 1.37 1.407 1.672 1.531 5×10^7で実行・・・1.859 1.797 1.812 1.800 10^8で実行・・・2.062 2.140 2.320 2.500 このような結果になりました。 これで正しいのでしょうか?もう少しずれの幅が小さいと決められそうなのですが…そもそもプログラムが間違ってるんでしょうか? でも、Nが大きくなるにつれて実行時間が増えてるのでこちらはまだいいんですが・・・問題は不成功探索の方です。 次に 不成功探索では↑のプログラムの 乱数vのところを変化させて v=rand() % N;という箇所を v=N;としました。 a[i]には0~N-1が入っているので、v=Nとすれば必ず不成功になるはずですよね? こうして実行してみると N= 10^6、5×10^6、10^7、5×10^7、10^8と値を変化させても 0.719 0.54 0.625 0.534 [micro sec] に近い値ばかり出てしまい、正しい値とは到底思えません。 不成功探索は成功探索より時間がかかるはずですよね?なのになぜこのようになってしまったのでしょうか? 後、Nと実行時間の関係とは、最終的に得られた結果を元にして「実行時間はlog2Nに比例している」と言えばいいんでしょうか? こういうものってどのように回答したらいいのかヒントだけでももらえると非常に有難いです。 長々とスイマセン。 少し気づいたことなど些細なことでも全然かまわないので、どうかよろしくお願いします。
↧
外部アプリケーションの起動について
Windows 7 32ビット機で、VC++ 2010 Express を利用して Windowsフォームアプリケーションを作成しております。文字コードはマルチバイト文字を選択しました。 アプリケーション自体は、メニュー画面にいくつかのボタンを設け、押下すると所定の実行ファイルが起動するといった非常に簡単なものです。 外部アプリケーションの起動方法ですが、ShellExecute()関数またはCreateProcess()関数を使用するのが一般的との事ですので、今回はCreateProces()関数を使うことにしました。大きな理由は、アプリケーションの実行待機機能が使いたかったためです。 とくに問題なくビルドが完了し実行してみたところ、殆どのアプリケーションは起動できるのですが、ひとつだけ起動できないものがありました。正確には、起動できないというよりは、タスクマネージャーにより起動されていることは確認できるのですが、バックグラウンドで動作するかのように肝心の画面が表示されません。 この状態になると(主プロセスである?)メニュー画面の制御がきかず(応答なし状態)、タスクマネージャーにより強制終了すると、ここでやっと表示されなかった画面が表示されるといった具合です。 何故このような現象が起こるのか、どのようにすれば解決するのかわかりません。誠に恐れ入りますがご教示賜りたく、何卒よろしくお願いいたします。 なお、下記にご参考となり得る情報を記載します。 1. 関数部分の記述は以下のとおりです。 rVal = CreateProcess ((LPTSTR)Fname, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); Fnameは、フルパスのファイル名がセットされたchar型変数で、ここでは第1引数に記述していますが、第2引数に記述した場合でも結果は同じです。 2. 上記の(LPTSTR)の記述はおまじない的なもので、この記述が無くても挙動は変わりません。どこかの記事で、Windows 7 で動作しない場合の対応と紹介されていましたので。 3. 実行ファイルは、R社のプリンタドライバーのインストーラ(.exe)です。 4. Z社のプリンタドライバーのインストーラやその他のアプリケーション(.exe)は問題なく動作します。 5. メニュー画面には複数のボタンがありますが、対応するロジックはすべて同じで、Fnameにセットされた値のみ異なります。 6. ShellExecute()関数を利用すると、問題なく動作します。
↧
・関数内で宣言された変数の扱い(C入門本の説明で)
以下C言語入門書の説明ですが! いまいちわかりません? ・関数内で宣言された変数の扱い 関数内で宣言した関数は、その関数内でのみ有効な変数になります。関数が異なれば、同じ変 数名で宣言することができます。例えば、main関数と(?)kansuu関数で、同じ(?)hennsuuという名 前の変数を宣言することができます。 int main() { int (A)hensuu = 0; (B)kansuuu(1); } int (C)kansuu(int hikusuu) { int (D)hensuu = 10; } 列のmain関数で宣言されている(?)hensuuと、さ(?)kansuu関数で宣言されている(?)hensuuは 同じ名前ですが、独立した異なるものです。(?)kansuu関数が実行されているときに、(?)hensuuの値 を変更しても、main関数で宣言されている(?)hensuuの値は変更されません。 また、(?)kansuu関数を実行している間だけ、(?)kansuu関数で宣言されている(?)hensuuが有効です。 (?)kansuu関数から呼び出し元でるmain関数に戻った際は、(?) kansuu関数で宣言した (?)hensuuはもう有効ではなくな、値を参照することもなくなります。 以上の説目で、 (A)hensuu、 (B)kansuuu、(C)kansuu、(D)hensuu (アルファベット)を分かりやすいよう追加しました。 説明の (?)にプログラムの(A)~(D)をつけたらどうなるか知りたいです。 (何となくわかるですが?) よろしくお願いします。
↧
↧
ubuntuでC++のGUIプログラム
C++でゲームを作りたいと思っているのですが、C言語はあるていどは分かるのですがC++はまったくやったことがありません。 そこで質問ですが、「ubuntuでC++のGUIプログラム」は作れるのでしょうか? WindowsとLinux系OS(Ubuntu)の両方で開発できるのが理想です。 初心者なので質問が上手くありませんが、答えていただければ幸です。
↧
Visual C++ システムシンボルセットアップについて
こんにちは。Visual C++ システムシンボルセットアップについて質問です。 WinMEの時には発生しなかったのですがWinXPにして、VC++を インストールすると、次のようなメッセージが出ます。 "Windows NT デバッグ シンボル" (Visual C++6.0 Tools プログラムグループにVisual C++ CD-ROMからシンボ ルファイル(DBG)のサブセットをセットアップするためのアイコンを登録しま した。これらのシンボルファイルがセットアップされなかった場合、Visual C ++のデバッカは呼び出し先関数のコンテキストを決定できません。 アプリケーションのデバッグを容易にするために、これらのシンボルファイル をセットアップすることを強く推奨します。) と、出るので指示通り"SETUPDBG.EXE"を実行して見ると (ファイルのバージョンがこのマシン上の対応するDLLと マッチしません。) と、出て正常にセットアップが終了しません。 (このマシン上の対応するDLL)とは、どこにあるのでしょう?また、正常にセ ットアップをするにはどうしたらいいでしょう? ぜひお願いします。
↧
DWORDの実際の型は何でしょうか
VC++.NETの環境です。 DOWRD dw1 = 1; int i = 2; と定義し ここで if ( i > dw1 ){ 何かの処理; } とコーディングすると warning C4018: '>' : signed と unsigned の数値を比較しようとしました。 のワーニングがでます。 これは、DWORDがint型でなくunsigned int型のようにも見えます。 ある本によれば(VC++.V.NET逆引き大全500の極意) DWORD はint型であると記述されています。 もし、int型ならこのワーニングはでないはずなのですが、 なぜでるのでしょうか。又、DWORDの実際の型は何なのでしょうか。ご存じのかたおりましたら、教えていただけませんでしょうか。
↧
CLRアプリと通常のアプリとの違い
について教えてください。 両者の使い分けはどのようにするのでしょうか? CLRアプリを実行するには特別な環境が必要なのでしょうか? VC++Express Edition を使って Win32コンソールアプリ(HelloWorld!表示) と CRLコンソールアプリ(HelloWorld!表示) を作ってみたのですが同じようなものができます。 どのように使い分けるのでしょうか?
↧
↧
Win32APIにて、ウィンドウ全体をドラッグして動かしたいのですが。
こんにちは。 いつもお世話になっております。 小生、只今WindowsXPSP3上で、C言語とWin32APIを使用し、BCC5.5.1でコンパイルしながら、Windowsプログラミングを勉強しています。 度々、質問させて頂き、その都度回答を頂戴し、誠に恐縮ではあるのですが、今回も質問させて下さい。 下記のコードをコンパイルすると、タイトルバーをドラッグして移動する事は出来るのですが、ウィンドウ全体(クライアント領域も含めて)移動するにはどのようにすればいいのでしょうか?? /* ウィンドウ表示 */ #include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); ATOM InitApp(HINSTANCE, LPCSTR); BOOL InitInstance(HINSTANCE, int, LPCSTR); int WINAPI WinMain( HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow) { MSG msg; BOOL bRet; LPCSTR szClassName = "Window"; if(!InitApp(hCurInst, szClassName)){ return FALSE; } if(!InitInstance(hCurInst, nCmdShow, szClassName)){ return FALSE; } while((bRet = GetMessage(&msg, NULL, 0, 0)) != 0){ if(bRet == -1){ MessageBox(NULL, "GetMessage Error", "Error", MB_OK); break; } else{ TranslateMessage(&msg); DispatchMessage(&msg); } } return (int)msg.wParam; } //ウィンドウクラスの登録 ATOM InitApp(HINSTANCE hInst, LPCSTR szClassName) { WNDCLASSEX wc; wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInst; wc.hIcon = (HICON)LoadImage( NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hCursor = (HCURSOR)LoadImage( NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = (LPCSTR)szClassName; wc.hIconSm = (HICON)LoadImage( NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); return (RegisterClassEx(&wc)); } //ウィンドウの生成 BOOL InitInstance(HINSTANCE hInst, int nCmdShow, LPCSTR szClassName) { HWND hWnd; hWnd = CreateWindow( szClassName, "Window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 200, 200, NULL, NULL, hInst, NULL); if(!hWnd){ return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } //ウィンドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { switch(msg){ case WM_DESTROY: PostQuitMessage(0); break; default: return (DefWindowProc(hWnd, msg, wp, lp)); } return 0; } お忙しい中申し訳ございませんが、 先輩方、アドバイス宜しくお願い致します。
↧
配列 平均値と分散値
#include <stdio.h> void mean_vari(int *s, int n, double *mean, double *variance); int main(void) { int i, n; int a[]={34, 54, 21, 80, 60, 90, 15, 24, 100}; double heikin, bunsan; mean_vari(&i,n,&heikin,&bunsan); printf("平均=%f 分散=%f\n",heikin,bunsan); return (0); } /* 合計を求める関数 */ void mean_vari(int *s, int n, double *mean, double *variance) { int i; int sum=0;/* 合計の初期化 */ double sum2=0; for (i = 0; i < n; i++) sum += s[i]; ????=sum/(double)????; for (i = 0; i < n; i++){ sum2 +=????; } ????=????; } 平均値と分散値を求めたいのですが、????の部分になりをいれていいかわかりません。 教えてください。
↧
VS2010でC#のDLLを作成する手順
Visual Studio 2010でVisual C#のコードのDLLを作成したいのですが 簡単なコード例で具体的な操作手順を教えていただけないでしょうか。 (Microsoft Visual Studio 2010、OS WindowXP) Visual C++でDLLを作成する手順については 「チュートリアル: ダイナミック リンク ライブラリの作成と使用 (C++)Visual Studio 2010 」 <http://msdn.microsoft.com/ja-jp/library/ms235636(v=vs.100).aspx> に詳しく手順が記載されていましたが、このVisual C#版が見たいのですが見当たりませんでした。 よろしくお願いします。
↧