1 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 03:39:51 ] このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 C++Builder使いが優しくコメントを返しますが、 お礼はC++Builderの布教と初心者の救済をお願いします。 Borland Home Page www.borland.co.jp/ <過去スレ> くだすれC++Builder(超初心者用) pc8.2ch.net/test/read.cgi/tech/1117225464/l50 くだすれC++Builder(超初心者用)その2 pc10.2ch.net/test/read.cgi/tech/1144308804/l50 <兄弟スレ> くだすれDelphi(超初心者用)その39 pc10.2ch.net/test/read.cgi/tech/1169386914/l50
873 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 20:16:46 ] memo2 の値が 1 なら前後に 0 を検索して 0 があったらその値とそこまでの距離を使って 線形補完すればよろし。 ところで端に 1 があった場合はどうすんの?
874 名前:デフォルトの名無しさん [2008/12/20(土) 20:19:20 ] AnsiString A,B; int s,u; u = 0; for( int i = 0;i<Memo2->Lines->Count; i++ ){ if(Memo2->Lines->Strings[i] == '1'){ A = Memo2->Lines->Strings[i-1]; s = StrToInt(i); u = StrToInt(i); while(Memo2->Lines->Strings[u] == 0){ u++; } }
875 名前:デフォルトの名無しさん [2008/12/20(土) 20:20:31 ] B = Memo1->Lines->Strings[u]; for(int X = s; X< u+1; X++){ Memo1->Lines->Strings[X] = (B - A)/(u+1) * X + A; Memo2->Lines->Strings[X] = 0; } u = 0; } このような感じで組んでみたのですが線形補間もうまくできておらず、 エラーが起こる場合もあります、よろしければアドバイスお願いします
876 名前:デフォルトの名無しさん [2008/12/20(土) 20:22:45 ] >>873 返信ありがとうございます。 その場合は手動で0が端にくるようにしたいと思います。
877 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 20:23:24 ] >>873 memo1 のデータを保存する必要がないなら、 memo1 のデータをあらかじめ補間した値ですげ替えておけば良い。 メモリに余裕があるなら、memo1 とは別にそういうテーブルを用意してもいい。 最初に一気に補間すると時間がかかるなら無理かもしれないが。
878 名前:デフォルトの名無しさん [2008/12/20(土) 20:26:01 ] すいません、バージョンはc++builder5です。
879 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 20:34:28 ] memo1 を書き換えたのでいいのね。 文字列を引き算したり A に Memo2 の値を入れたり 整数を StrToInt したり '0' じゃなくて 0 と比較してたり X の範囲がおかしかったり 線形補間の分母がおかしかったり おかしいところがありすぎて困っちゃう。 あと、今はまあいいんだけど、 最終的には補間後に i を補間の終了した地点にまで移動させた方が効率がいい。
880 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 20:35:26 ] こういうことが起こるのも、変数名が 1 文字で分かりにくいからってのはあると思うぜ。 変数名は分かりやすい意味のある名前をつけよう。
881 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 21:39:53 ] >>879 >>880 返信、アドバイスありがとうございます>< プログラム知識も浅く見様見真似で作ったのでこんな形になってしまいました・・ おかしい言われたところも自分ではどのようにして変えていけばよいのかわからず 困り果てています。 線形補間をしてmemo1に書き換えるにはどのようにプログラムを組めばよいでしょうか・・
882 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 22:08:35 ] こっちもどうアドバイスしていいのかわからんレベルなんだが…。 とりあえず考え方として Memoから値を文字列→数値に変換して配列とかvectorに格納する 数値に必要に応じて線形補完する 数値を文字列に変換してMemoに格納する というように、やるべきことを自分が理解できるところまで分解してみてはいかが? 自分で理解できないものを作ることはできないんだし。
883 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 07:27:35 ] Memoとかコントロールに入っている値を取りだしてどうこうしてまた 戻す操作は一般に遅いので>>882 さんみたいにvectorに入れる など考えた方がいいよ
884 名前:デフォルトの名無しさん [2008/12/21(日) 16:35:08 ] vectorの格納とはいったいどういうものなんでしょうか? 今日調べていたのですが使い方もわからずじまいでした; 動作速度は遅くてもよいので具体的にこのように memo1とmemo2を見比べてエラー値のあった部分は前後の0(正常値)から 線形補間していきmemo3のように線形補間された配列を書き出すプログラムを作りたいのですが どのように書いていけばよいのでしょうか? お手数ですがよろしくお願いします。 memo1 memo2 memo3 5.6 0 5.6 6.1 0 6.1 6.1 0 6.1 7.2 ← 0 7.2 10 1 7.26 9.0 1 7.32 10 1 7.38 4.0 1 7.44 7.5 ← 0 7.5 5.9 0 5.9 5.4 0 5.4 5.5 0 5.5 5.4 ← 0 5.4 10 1 5.35 10 1 5.3 4.5 1 5.25 5.2 ← 0 5.2 6.1 0 6.2 ・ ・ ・ ・ ・ ・
885 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 17:30:23 ] 身近に聞ける人はいないのん? そりゃ答え教える事はできるけど・・・ 今後もずっと聞き続けるのん? って話だしなあ。
886 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 17:32:06 ] C++には型ってものがあってだな、ってところから説明が必要なのか? Vectorがわからないなら配列でいいんで、せめてそのくらいは勉強しようね。 で、丸投げならそういうスレにいってもらうとして、そうでなければ、 あなたが同じことをやるとしたらどうやってそれを実現するのか、を手順として 分解していって、それをプログラムとしてコーディングする、という手順で。 とりあえず文字列は数値計算できないものなので、これを一旦doubleにして、 計算して、終わったら文字列に戻す…てなふうに。
887 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 17:54:17 ] こういう単純な変換をするなら、 スクリプト言語使った方が楽だと思うんだがね。
888 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 21:58:26 ] >>884 とりあえずアルゴリズム云々以前ぽいけど、BCBに因る問題だけは説明。 Memo2->Lines->Strings[ i ] は文字ではなく文字列なので Memo2->Lines->Strings[ i ] == '1' や Memo2->Line->Strings[ i ] == 0 ではいけない。 比較するのなら Memo2->Line->Strings[ i ] == "1" とする。 Memo1のデータは数字に見えても実際は文字列なのでそのままでは計算できない。 なので一旦 ToDouble() メソッドを使って小数型にする。 (AnsiString::ToInt() や StrToInt() では整数になるので 5.4 とかは 5 に切り上げられてしまう) ※例として Memo1 の値を半分にして Memo3 に格納。 Memo3->lines->Add( Memo1->Lines->Strings[ i ].ToDouble() / 2.0 );
889 名前:デフォルトの名無しさん [2008/12/22(月) 16:18:17 ] TDateTime と COleDateTime って、 double 値として見れば等価ですか?
890 名前:884 [2008/12/22(月) 18:25:02 ] for( int i = 0;i<Memo2->Lines->Count; i++ ){ if(Memo2->Lines->Strings[i] == "1"){ c = i; while(Memo2->Lines->Strings[c] == "0"){ c++; } Memo3->Lines->Add(c-i); for(int x = i; x<c; x++){ Memo2->Lines->Strings[x] = 0; } c = 0; } } 線形補間をする上でエラー値の1がどれだけ続くのかを調べるために 上の方法でやってみたのですがうまくいかないのです。(常にcとiの値が同じで0になってしまう) どこに問題があるのかアドバイスの方よろしくお願いします。
891 名前:デフォルトの名無しさん [2008/12/29(月) 18:17:29 ] プログラム内でA1,A2,A3,A4,A5,B1,B2,B3,B4,B5,C1,C2,C3,C4,C5 に計算した値が入っていて、 Memo1 A1,A2,A3,A4,A5 B1,B2,B3,B4,B5 C1,C2,C3,C4,C5 というCSV形式でMemo1出力したいのですがどういう風に書けばいいですか?
892 名前:デフォルトの名無しさん mailto:sage [2008/12/29(月) 19:23:03 ] 1個ずつ出力して下さい。 ループが欲しけりゃ配列にして下さい。
893 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 13:15:46 ] TBitBtnやTToolBarで使えるビットマップデータはどこで入手できますか? インストールされたフォルダを探してもサンプル用のがちょっとあるだけだし、 いちいち作るの大変だし…
894 名前:デフォルトの名無しさん [2009/01/06(火) 23:25:37 ] C++Builder 2009 のトライアル版を使い始めたのですが、 良い関連書籍は無いでしょうか?初心者向けの。。。 今日ヨドバシに行ったのですが、VC++の本ばかりで、 C++Builder関連は3冊くらい(応用編のような感じ)しかありませんでした。
895 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 09:19:24 ] Delphiの本と開発者ガイドで大抵は事足りる。
896 名前:デフォルトの名無しさん [2009/01/12(月) 21:25:18 ] ユーザーが商品コードを入力(Edit1)して検索ボタン(Button1)を押したら、 商品名(Label1)を表示したいのですが、 ACCESSのDLookupのような命令はどう書けば良いでしょうか?
897 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 22:51:53 ] また>>896 みたいな阿呆が沸いてきたな 情報を小出しにするのはヤメレ
898 名前:896 [2009/01/12(月) 23:50:12 ] >>897 阿呆な質問だったみたいですいません。 サーバーにあるMySQLの商品テーブル接続まではうまく行って、 テストで特定のEdit欄に商品名を表示することまでは出来たのです。 で次は、Editに商品コードを入力して検索ボタンを押したら、 Labelに該当する商品名を表示させたいと思ったんですが、そこが うまくいかなくて。 TADOConnectionコンポーネントでADO接続。 TADOTableで商品テーブルと接続。 TDataSourceを配置。 IF文で、Text1のコードで商品テーブルの商品コードを検索し、 該当のコードがあればそのレコードの商品名を返せば良い。 というのはわかるんですが。 コンポーネント活用ガイド&実践プログラミング〈Vol.3〉データベーステクニック編 を読みながら書いても、2009版ではエラーが出てしまって。 全然解決しないもので、困ってました。
899 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 14:42:37 ] エラーと漠然と書かれても、コンパイルエラーなのか実行時エラーなのかもわからんし、 答えようもない。
900 名前:896 mailto:sage [2009/01/13(火) 19:41:05 ] すいません。 Lookupで自己解決しました。
901 名前:デフォルトの名無しさん [2009/01/14(水) 16:06:50 ] 計算をしたとき算出した小数の値が8.4345356554E248のようにEを含んだ値になってしまうのですが これをEを含ませず、また答えとして小数点6桁程度に抑えたいのですがどのようにすればよいのでしょうか? 上記の答えは double A;で宣言したときになったものでfloat A;で宣言するとオーバーフローとエラーがでてしまいます。
902 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 17:25:58 ] >>901 ひとまずグーグル先生に「書式 sprintf」と聞いてみたらいいと思うよ。
903 名前:デフォルトの名無しさん [2009/01/14(水) 18:12:23 ] >>902 返信ありがとうございます。 サイトでは何度も確認していたのですが、c++builderでは下のように書き出しており %●●という形で小数点の値を6桁と指定して残りを切り捨てという形に仕方はどうしてもわかりません。 宣言文の箇所で小数点の桁数の指定、またEなど数字以外のものを使用させないようにすることはできないでしょうか? 基本的なことなのかもしれませんがどうしてもわかりません; double A; ---(計算)---- Memo1->Lines->Add(A); このような感じです
904 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 18:26:04 ] >>903 www9.plala.or.jp/sgwr-t/c/sec05.html
905 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 18:27:03 ] >>903 ひとまずグーグル先生に「書式 sprintf」と聞いてみたらいいと思うよ。
906 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 18:58:37 ] >>903 Memo1->Lines->Add(AnsiString.sprintf("自分で考えてね", A)); って書けばいいよ。
907 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 02:14:20 ] 手元に環境が無いため、曖昧な質問ですいません。 日本語環境(XP SP3&BCB6)で作成したものを英語版のWindowsXPで実行すると、表示がおかしくなるようなことってありますか? Imageの中の表示がおかしいだけでなく、コンポーネントの配置や大きさもずれていたりします。 表示等に2byte文字は使っていないつもりです。 グラボとかの問題でもこのようなことは発生することってありますか? よろしくお願いします。
908 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 17:27:03 ] >>907 設計時のフォームのフォントのCharsetが気になるな。 フォームのコンストラクタでthis->Font = Screen->IconFont;して 表示崩れ直るか確認してみたら?(ParentFont=trueの状態で)
909 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 23:49:09 ] >>908 返事ありがとうございます。 this->Fontでは表示は崩れませんでした。 ただ、CharsetはシフトJISになっていました。 これによって位置がずれたりするのでしょうか?
910 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 16:21:09 ] >>909 charsetが影響するよ。実行時環境のcharsetが特定できないなら、 好みのフォント設定後、this->Font->Charset = Screen->Font->Charset でいいんじゃないかな。 英語XPでも、言語オプションの非ユニコードアプリを何語と解釈するかを「日本語」に セットすることで日本語XPと同じ表示にできるよ(フォントがインストールされていれば)
911 名前:デフォルトの名無しさん [2009/01/26(月) 16:04:21 ] アプリを起動するときvcl60.bplが見つからない。のエラーが出るときは、 「共有RTL DLLを使う」のチェックを外してコンパイルすると vcl60.bplをいっしょに配布しないで良いですが、 hoge.dllファイルを配布しない方法はないでしょうか? ttp://me.me.tokushima-u.ac.jp/~miw/H8/pukiwiki/index.php?BCB%A4%C7%A4%CEDLL%A4%CE%BB%C8%A4%A4%CA%FD このページ見ると、静的、動的どちらにしてもプログラムの見えるところに dllファイルを置かないとだめなようですが。
912 名前:デフォルトの名無しさん [2009/01/26(月) 16:37:23 ] hoge.dllはあなた独自のdllだから一緒に配布しちゃえばいいんでないの
913 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 17:07:32 ] >>912 レスありがとうございます。 ttp://www.gesource.jp/programming/bcb/22.html こういうページもあったのでやってみましたが、dllが同じフォルダにないと 起動したときにエラーでちゃいます。 できるのはbuilderのライブラリだけですか。 いろいろ検索してるとgccのページが出てくるんですが、 静的リンクでコンパイルするとサイズが大きくなると書いてあったので てっきり実行ファイルの中にライブラリが埋め込まれる感じで ライブラリが要らなくなるものだと思いました。 静的ライブラリも動的ライブラリもいっしょに配らないとだめで、 ロードされるタイミングだけなんですね。
914 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 17:43:42 ] 自作でDLLを作成して呼び出すようにしたのが悪いんだろ DLLも全部一緒くたに中に書いてしまえ
915 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 17:45:34 ] もしかしてスタティックリンクライブラリとDLLの区別がついてないんじゃないか
916 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 17:46:35 ] ていうか、DLLのソースorOMF形式のobjまたはlib(インポートライブラリじゃなくてスタティックリンクライブラリのほう)はないのか? それがあるならプロジェクトにobjやlib放り込めばDLLいらないんだが。
917 名前:911 mailto:sage [2009/01/26(月) 18:32:24 ] >>914-916 レスありがとうございます。 >インポートライブラリじゃなくてスタティックリンクライブラリのほう なるほど、検索すると出てきました。拡張子が同じでも本物と ちょっと違うのがあって、implibで作ったのはインポートライブラリ。 スタティックリンクライブラリを作ってやってみます。
918 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 19:59:45 ] リストボックスに入りきらない場合、水平スクロールバーを出したいのですが、どのように設定したらよいのでしょうか?
919 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 22:31:42 ] LB_SETHORIZONTALEXTENT
920 名前:デフォルトの名無しさん [2009/02/19(木) 11:52:00 ] c++builderって指名ユーザーライセンスという形態を取っているみたいですが、 自宅用に買ったc++builderを会社のマシンに(もちろん使うのは自分のみ) インストールして使うのは有りなんでしょうか?
921 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 12:06:50 ] >>920 ありでしょ。 不安なら問い合わせてみれば?
922 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 20:42:32 ] アカデミックからスタンダードにライセンスをアップグレードすることって出来ますか?