Quantcast
Channel: OKWAVE 閲覧数の多い質問(C・C++・C#/250)【本日】
Viewing all 50953 articles
Browse latest View live

C# eventの終了通知

$
0
0
以下のようなコードでイベント発行したときの終了通知が知りたいです。 public delegate void Update(); public event Update mUpdate = null; mUpdate += AAA(); mUpdate += BBB(); mUpdate += CCC(); ここで mUpdate(); を呼んだときにAAA(),BBB(),CCC()が全て呼ばれ終了したタイミング(終了通知)を知りたいです。 何か良い方法があればお教え頂けませんか?

CRC16計算について

$
0
0
CRC16のプログラムを作ったのでデバッグしていて気付いた事なのですが (産業装置で使うMODBUS-RTUのソフト) CRC16 x16+x15+x2+1 生成多項式 0xA001 CRC16でCRCを含めたデータを再CRCするとゼロになると言われておりますが そうならないのですが何故でしょう? もちろん、自分の作ったソフトが信用できないので他ソフトで検証 具体例 ベクターにあるCRC16の計算ソフト - CRC16.exe http://blog.goo.ne.jp/masaki_goo_2006/e/50b20edb79f60964faeaefe6fa064469 これに文字列"ABCD" [0x4142,0x4344]を入れて計算実行 出力結果  初期値:0xFFFF、出力XOR:0xFFFF、出力結果、右送り0x0F85 この出力を最初の文字列に追加する 0x4142,0x4344,0x0F85 結果は0xc7e6 となってゼロになりません やりかたが違うのでしょうか? 尚、私の作ったプログラムと上記ソフトの結果が同じです また、ネット上にある同様な他ソフトでも同じ結果でした (もちろんCRC計算条件が同じ物) 尚、上記ソフトで 初期値:0x0000、出力XOR:0x0000、左送り:9AA8 この場合のみCRC追加しての再CRCはゼロになりました ゼロになる場合とならない場合があるのでしょうか?

GetPrivateProfileStringでiniファイル読込む処理を詳しく知りたいのですが・・・

$
0
0
お世話になっています。 iniファイルを読込み、各変数に代入するC言語のDLLを作成したいのです。 このサイトの投稿や、MSDNなどにも載っていたのですが、 少し理解に苦しみます。 現在まで、理解した点がwindows.hのインクルードを 記述するところ辺りです。 iniファイルは下記のようなレイアウトです。 ---<mst.ini>---------------------------- [user] name=username ID=userid [pc] pcname=FMV ---------------------------------------- #include<windows.h>は記述することまでは 分かりましたが、以下から進みません。。。 GetPrivateProfileString("") 初心者で申し訳ありませんが、お助け願います。

c言語 パスカルの三角形

$
0
0
c言語でパスカルの三角形を出力するプログラムを作りたいのですが、上手くいきません。 何を直せばいいのか教えてください。 #include <stdio.h> #define N 10 int main(void){ int i, j = 1, x, y; int d[N][N]; /* 三角形を作成 */ for (i = 1 ; i < N ; i++){ d[i][0] = 1; while (j <= i - 1){ d[i][j] = d[i-1][j-1] + d[i-1][j]; j ++; } } /* 三角形の表示 */ for (y = 0; y < N; y++) { for (x = 0; x < N-y; x++) printf(" "); for (x = 0; x < y; x++) printf("%3d ", d[x][y]); printf("\n"); } return 0; } 実行結果 -2147417616 2665208 1629976532 1627572249 1629101723 1 1629982744 2665256 2665548 3407923 1629345053 1627571017 0 3538997 1629739051 10 1629345053 2665368 3670071 2665384 1629739040 1627927140 2665244 1628040295 57 1628810863 1629476960 1628602749 2665560 2665304 1629345053 0 1629739040 1629740576 1628992224 2 4411498 1628040588 -2147417600 0 1629476960 1629740664 1629739040 1 267574 0

C言語で5つの整数a、b、c、d、eを入力し、降順に整列した後に出力して終了するプログラムを作成してください

$
0
0
C言語で5つの整数a、b、c、d、eを入力し、降順に整列した後に出力して終了するプログラムを作成してください。 入力 出力 3 9 6 7 9 6 7 5 5 3

c言語で、繰り返し文の中で、0.01づつ増やすには?

$
0
0
c言語で、繰り返し文の中で、0.01づつ増やすには? c言語で、繰り返し文の中で、0.01づつ増やすにはどうすればよいのでしょうか? 関数F(x)=x3+2x-1 の値でx=0から5まで0.01刻みで増やし、出力させる プログラムを作成せよ。という問題です。 #include <stdio.h> int main() { double i; for(i=0;i<=5;i+=0.01){ printf("%lf",i*i*i+2*i-1); putchar('\n'); } return(0); } で、はじめにi=0なので、はじめは-1のはずですが、なぜか初めの値が11.28…と表示されます。これを0.1刻みで i+=0.1 とすると正常に作動するのですがどうでしょうか? お願いします。

ManagementClassが見つからない。

$
0
0
ManagementClassが見つからない。 質問させてください。 C#でWMIを使用したプログラムを作成しています。 using System.Management;を記述して、ManagementClassを宣言したのですが、ビルド時に「ManagementClassが見つからない」という旨のエラーが出ます。 ネットで調べる限りではusing System.Management;を記述するだけでManagementClassを使用できるように思うのですが、まだ何か足らないのでしょうか? どなたかお知恵をお貸しください。 よろしくお願いします。

C# EPPlusを使用してのExcel保存処理

$
0
0
C#でEPPlusを使用してエクセルからデータを読み込み、 変更、別のエクセルに保存しようとしているのですが、 出来た.xlsxファイルがよくわからない状態になっています。 【出来たファイル】 1.作成されたデータ量がINTEROP.EXCELで作成された物より小さい (1300kのファイルが800k程度になっています) 2.ファイルを開いて何もせずに終了すると、「変更を保存しますか」のダイアログが出る 3.ここで保存するとINTEROP.EXCELで作成されたものと同じファイルサイズになる 4.中身は1300kの時も800kの時も同じように見えます。(とりあえずデータは) という状態です。Excelファイルにはマクロ等無いので常に変更保存がでるわけではありません。 EPPlusからファイルをただ開いて上書き保存しても同じ状態になるので、 EPPlusの仕様なのか、Excelの問題なのかどっちかだと思うのですが、 両方共いまいちわからなく質問させていただきました。 有識者の方、どうぞよろしくお願いいたします。 環境:Windows7(32bit VisualStudio2015 EPPlus4.1)

台形の面積を求めるプログラム

$
0
0
すみません。わたしはC言語の初心者なのですが、台形の面積を求めるプログラムを教えてください。

C# シリアル通信でデータ受信時の欠損について

$
0
0
Visualstudio 2013 を使用して C# で開発を行っています。 SerialPort Classを使用してデータの送受信をするプログラムを作成しているのですが、 非同期でデータを受信する際にどうしてもうまくデータを取得出来ません。 5Byteのデータは正常に取得できるのですが、 その直後にくる40Byteのデータは、真ん中あたりの10数Byteや最後の10数Byteしか取れません。 serialPort.DataReceived に登録したイベント関数の中身です。 -------------------------------------------------------------------------------------- private void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) { bytesRead = 0; // Initialize a buffer to hold the received data byte[] buffer = new byte[this.serialPort.ReadBufferSize]; try { bytesRead = this.serialPort.Read(buffer, 0, buffer.Length); if (true == serialPort.IsOpen) { serialPort.DiscardInBuffer();//受信バッファをクリアする } } catch (Exception ex) { DataLog.Exception(ex); } //派生クラス用の処理 DeviceClassEventArgs _DeviceClassEventArgs = new DeviceClassEventArgs(buffer, bytesRead); DeviceClassEvent(this, _DeviceClassEventArgs); } -------------------------------------------------------------------------------------- ネットの情報を参考に、 ReceivedBytesThreshold の値を期待するデータ量に逐一変えることで とりあえず正常に取ることが出来たのですが、これでいいのでしょうか? 期待するデータ量がわからなかった場合は使えないのかなとも思います。 データが欠損してしまう理由、 上記の対処法以外の一般的な対処法など有りましたら教えて下さい。 その他参考になるページ等ありましたら教えていただけると大変助かります。

ラグランジュの補間法のCプログラム

$
0
0
昨日学校でラグランジュの補間法の問題をC言語のプログラムで解けという課題が出されました しかし、友達と相談してもよくわかりませんでした 課題は以下の問題です sin関数6点、(0.92+0.01x)、x=0,1,2,3,4,5を求めて、ラグランジュの方法でsin(0.923)を計算せよ ちなみに答えは、0.79742です 先生からサンプルのプログラムをもらいました 以下のサンプルプログラムを参考にして解いてくださいと言われたのですが、どうしても解けません すいませんが分かる方、よろしくお願いします #include <stdio.h> #include <math.h> #define N 6 //データ数 double x[N]={ 0.0,1.0,2.0,3.0,3.1,5.0}; //X座標 double y[N]={0.0,1.1,2.5,4.0,4.1,5.0}; //Y座標 double lagrange( double); int main() { double xx,yy; //補間計算 printf("XX\t\tYY\n"); for( xx=0.0; xx<=5.0; xx+=.2 ) { yy = lagrange( xx); printf("%8.2lf\t%8.2lf\n", xx, yy ); } return 0; } //補間サブルーチン double lagrange( double xx ) { double z[N]; double yy=0.0; int i,j; for( i=0; i<N; i++ ) { z[i] = 1.0; //係数計算 for( j=0; j<N; j++ ) if( i!=j ) z[i]*=(xx-x[j])/(x[i]-x[j]); //補間値計算 yy+=z[i]*y[i]; } return yy; } 上記はあくまでサンプルプログラムなので、中に入っている数値は適当です よろしくお願いします

csvファイルを読み込んで二次元配列に格納したい

$
0
0
200×250のある数字と文字の入力されたcsvファイル(またはtxtファイル)を読み込んで2次元配列に格納したいのです。 色々調べるとカンマの処理が必要ということがわかりましたが、どのようにソースを書けばよいかわかりません。使用言語はC言語です。 また、実際にcsvファイルを読み込むようにプログラムを書いてみましたが、すべて-858993460となって表示されます。 プログラミング初心者で勉強中なため困っています。 回答よろしくお願いします。 #include <stdio.h> #include <stdlib.h> #define row 200 #define column 250 int main() { int i, j; int data[row][column]; FILE *fp; fp = fopen("sample.csv", "r"); if (fp == NULL){ printf("ファイルがありません\n"); return 1; } for (i = 0; i < row; i++){ for (j = 0; j < column; j++){ fscanf(fp, "%lf", &data[i][j]); } } for (i = 0; i<row; i++){ for (j = 0; j < column; j++){ printf("%3d ", data[i][j]); } printf("\n"); } fclose(fp); return 0; }

例外処理のフローチャートの記述方法

$
0
0
例外処理のフローチャートを記述したいのですが、良い記述方法はないでしょうか? try、catch、throwの記述方法等教えていただければ幸いです。 #JISで決められている図でtry、catch、throwに該当する図はないと思います。 #わかりやすければ、独自の図などでも構いませんので、アドバイスお願いします。

int とcharの使い方と違い

$
0
0
教えてgooに投稿するのは初めてですがよろしくお願いします。 最近C言語を勉強し始めた初心者です。 ネットのサイトを見て独学でしています。 過去スレッドをさらっと見て聞きたいことが書いてなかったので投稿します。(同じスレッドがあったらすみませんOTL) #include<stdio.h> int main(void) { int str='a'; printf("str=%c\n",str); return0; } この上のプログラムでは str=a と出て、エラーが出ずにコンパイル出来ました。でも、 #include<stdio.h> int main(void) { int str[]="abc"; printf("str=%s\n",str); return0; } とするとエラーが出ます。 int とcharの使い方と違いについて詳しく教えてほしいです>< お願いします。

画面を強制的に再描画させる方法

$
0
0
MFCでプログラミングをしています。 SDIプログラムで、 メニューを選択すると「ある操作」をするように 作っています。 「ある操作」の中でループを回しており、 各ループ終了毎に更新結果を逐次描画させたいのですが、 うまく行きません。 ループの最後に Invalidate(TRUE) を書いてだめだったので、 pView->SetRedraw(TRUE); pView->RedrawWindow(); pDoc->UpdateAllViews(NULL); なども併用してみたのですが、 通過するだけで何もされません。 どなたかご教示よろしくお願いします。

CStringをwchar_tに変換したい

$
0
0
CStringをwchar_tに変換したく思い、ネットで探したところ、 http://msdn2.microsoft.com/ja-jp/library/ms235631(VS.80).aspx のページを見つけたので、下記のプログラムを組んで実行してみましたがエラーになって しまいます。 【プログラム】 CString orig("Hello, World!"); // Convert to a char* const size_t newsize = 100; // Convert to a wchar_t* // You must first convert to a char * for this to work. size_t origsize = strlen(orig) + 1; size_t convertedChars = 0; wchar_t wcstring[newsize]; mbstowcs_s(&convertedChars, wcstring, origsize, orig, _TRUNCATE); 【エラー】 error C2664: 'strlen' : 1 番目の引数を 'CString' から 'const char *' に変換できません。 error C2664: 'mbstowcs_s' : 4 番目の引数を 'CString' から 'const char *' に変換できません。 &CStrinをconst char *でキャストしてもうまくいきません。 どこがおかしいのでしょうか? 【環境】 WindowsXP+VC++2005

テキストデータの読み込みについて

$
0
0
C言語のテキストデータの読み込みについてです。 C言語のプログラムについてです。 2444,1114,2807, 1984,2845,2086, 658.1,-1564.0,1239.7, -102.0,958.4,123.1, 12.7,6.0,82.7 2439,1110,2802, 1973,2865,2108, 658.8,-1563.7,1239.6, -102.0,957.1,121.9, 12.8,6.0,82.7 2441,1106,2806, 1967,2888,2124, 659.4,-1563.5,1239.5, -102.2,956.4,121.0, 12.8,6.1,82.8 2440,1109,2808, 1964,2896,2127, 660.0,-1563.3,1239.4, -102.7,956.2,120.7, 12.8,6.1,82.8 2441,1112,2807, 1981,2894,2120, 660.6,-1563.0,1239.4, -103.3,956.2,120.1, 12.8,6.1,82.8                                       ↑ 上の様なカンマとスペースで15個に区切られているtxtファイルがあるのですが、このtxtデータの10コ目と11コ目をを計算で使いたく、取り出したいと考えているのですがscanfを使いどのように取り出すことが出来るのか、また取り出したデータから数値を引くことを教えて頂きたいです。 つまり -102.0   958.4 -102.0   957.1 -102.2 と 956.4 -102.7   956.2 -103.3   956.2,             を取り出して計算に使いたいです。 そして1番上の数値だと、 -102.0と958.4 を読み込み、例えばそれぞれ100を引いた値を配列に入れたいです。 -102.0と958.4 → -202.0 と 858.4 のように取り出したいです。 教えて頂きたいです。お願いします。

TOPMOSTプロパティについて

$
0
0
C#2010でアプリを作成しております。 フォームを強制的に最前面に発生させるTOPMOSTというプロパティ があります。 このプロパティをtrueとした画面を複数発生させた場合、どの画面が最前面になりますか? 最後(最新)に発生させた画面が最前面になるのでしょうか?

httpsアクセスにおけるClickOnceの動作

$
0
0
ClickOnce初心者です。VisualStudioについても名前ぐらいしか分かりません。 お手数・ご迷惑おかけしますが、よろしくお願いします。 他社ソフトをデモンストレーションで使用することになり、自社サーバにインストールしてもらいました。 他社ソフトはClickOnceを使用し、クライアントPCにソフトを配布する仕組みです。 このとき、httpで自社サーバソフト配布ページにアクセスした場合、問題なく他社ソフトのダウンロードが始まり、実際に他社ソフトを起動することができました。しかし、httpsアクセスで自社サーバソフト配布ページにアクセスした場合、添付の表示が出ます。詳細をクリックすると以下のlogが表示されるのですが、これの対処方法をご存知の方がいらっしゃいましたら、ご教示お願いします。 ※出力内容から、証明書が悪いのかと考え製造元に問い合わせをしたのですが、ClickOnce自体の動作には回答できないと拒否されていまいした。 OSはWindowsServer2008r2 です。 log抜粋ここから======================================== プラットフォームのバージョン情報 Windows : 6.1.7601.65536 (Win32NT) Common Language Runtime : 2.0.50727.5466 System.Deployment.dll : 2.0.50727.5420 (Win7SP1.050727-5400) mscorwks.dll : 2.0.50727.5466 (Win7SP1GDR.050727-5400) dfdll.dll : 2.0.50727.4927 (NetFXspW7.050727-4900) dfshim.dll : 4.0.40305.0 (Main.040305-0000) エラーの概要 以下はエラーの概要です。これらのエラーの詳細はログに一覧表示されています。 * https://ローカルIPアドレス/maroon/maroon.application?ProgramID=DJMN010&remoteINI=C:%5cMaroon%5cIni&remotePath=http:%2f%2fローカルIPアドレス%2fmaroon%2f のライセンス認証により例外が発生しました。 次の失敗メッセージが検出されました: + https://ローカルIPアドレス/maroon/maroon.application?ProgramID=DJMN010&remoteINI=C:\Maroon\Ini&remotePath=http://ローカルIPアドレス/maroon/ のダウンロードに失敗しました。 + 基礎になる接続が閉じられました: SSL/TLS のセキュリティで保護されているチャネルに対する信頼関係を確立できませんでした + 検証プロシージャによると、リモート証明書は無効です。 コンポーネント ストア トランザクションの失敗の概要 トランザクション エラーは検出されませんでした。 log抜粋ここまで======================================== 以上、よろしくお願いします。

Winsockのsendto関数のタイムアウトについて

$
0
0
はじめまして。。。 Winsockのsendto関数を使用してユニキャストでUDP送信 しているのですが、LAN切断時等送信先がない場合、 3秒くらいsendto関数の応答が帰ってこなくて困っています。 setsockoptの「SO_SNDTIMEO」で送信タイムアウトを 設定してみたのですが、状況は変わりませんでした。 もし、LAN切断時でもすぐに応答が帰ってくる方法が ございましたらご教示頂けないでしょうか? 環境 OS:Windows XP 言語:.NET 2003 C++
Viewing all 50953 articles
Browse latest View live