【初心者歓迎】C/C++室 Ver.65【環境依存OK】

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2009/05/26(火) 13:37:36
VCのエディションは?
EEでなければAnkhSVNとか入れるのがいいと思うけど。
953951:2009/05/26(火) 13:52:08
>>952

ありがとうございます
Version  9.030729.1SP および Version 3.5 SP1となっています

すみませんEEとはなんでしょうか
AnkhSVNってのはなにかアドインみたいなものらしいことはググッてわかりました
これを入れればいいのですか?

954デフォルトの名無しさん:2009/05/26(火) 13:54:25
エンタープライズエディション?
955デフォルトの名無しさん:2009/05/26(火) 13:56:12
EEはExpressEditionね。
EEはアドイン使えないからね。

AnkhSVN入れるなら、それ自身ではリポジトリ作れないから他の
Subversionツールも必要。TortoiseSVNなんかお勧め。
バージョンあわせるなら、AnkhSVNは1.6サポートのDailyBuildのほうがいいよ。
でもまあSubversionの使い方覚えないとならんからやること多そうだな。
956デフォルトの名無しさん:2009/05/26(火) 14:00:01
>>955
残念ながらExpress Edition です
となると以外に難しいのかな
957デフォルトの名無しさん:2009/05/26(火) 14:07:09
TortoiseSVNでVC外から管理する手もあるが・・・
バージョン管理ツールそのものをあまり使ったことがないのかな。
builderXは調べてみたけどバージョン管理ツール対応ってなってるね、
この機能使ってたのだろうか。
958デフォルトの名無しさん:2009/05/26(火) 14:16:33
>>957
お察しの通りバージョン管理ツールという言葉自体初耳でして
PCを新調したら使い慣れたbuilderXがダウンロードできなくなってるみたいなので
EEを使い始めてまだ全然慣れていない状況です

といってほかに使えそうなのもないのでTortoiseSVNってのを調べてみますが
意外と大変そうですね
959デフォルトの名無しさん:2009/05/26(火) 14:22:37
>>958
そうでもないよ
TortoiseSVNはエクスプローラーに拡張を施すだけなので
TortoiseSVNで管理させたいフォルダを設定すれば右クリックであれこれできる

最近オプソに参加するのに導入して使い出して、昨日自分のローカルプロジェクトを
ローカル鯖立てて管理するようにした。

まあweb鯖とアクセスするようなものだよ
960デフォルトの名無しさん:2009/05/26(火) 19:30:41
質問があります。
粒子を動かすシミュレーションをやっていて、運動量を計算する必要が無くなったので
その運動量を計算する部分を削ったのですが削る前と比べて明らかに遅くなりました。
そこで、削る前の状態から一つずつ式を削っていったのですが全く速度が変わらなかったため
最後に関数外の宣言部分を削ったところ、また遅くなりました。
宣言部分を復活させたところ、速度が元に戻ったので宣言だけダミーとして残しています。
削った部分が他のところで使われてないか検索してもヒットしなかったので、やはり宣言の有無だけで
速度が変わっているのだと推測できます。
無駄に宣言してるのに速くなるってことがあるのでしょうか・・・。
961デフォルトの名無しさん:2009/05/26(火) 19:39:18
どっかのライブラリの中の関数と名前が被ってて、
ライブラリの内部で使われてる関数のリンクがおかしくなってると見た

変な空っぽの関数とリンクされて計算結果が狂ってないか確認した方がいい
あと削った関数の名前はひねくれた物に変えておけ
962デフォルトの名無しさん:2009/05/26(火) 19:52:55
>>961
結果を見比べたところ、全く変わっていませんでした。違うのは速度だけ・・・。
今まで、double MomX,MomY,MomZ;としてたのをdummyx,dummyy,dummyzとしても
遅くならなかったのでdummyxと宣言してますが使ってない変数を宣言するのは何か気持ち悪い・・・
963デフォルトの名無しさん:2009/05/26(火) 20:03:01
オーバーランとかのバグじゃないのか?
964 ◆5sQAqYKTFg :2009/05/26(火) 20:22:24
>>960
>>963 と同じ意見
ソースコードを見てみないことには分からない

ソースコードを晒せない場合
仕様を書いてくれれば新規に作るよ
高速化もやってみるよ
現在の処理時間の目安も書いてくれると嬉しいな
作ってみたい
965デフォルトの名無しさん:2009/05/26(火) 20:28:49
実数型変数では保持できないくらい大きい数値を扱うとき、int型配列を用いるとよいと習いました。
一つの要素に数値を1つ入れるのと、4つ入れるのでは、違いはやっぱり処理速度ですか?
966デフォルトの名無しさん:2009/05/26(火) 20:30:45
エスパーの回答 そうです!
967棚大生:2009/05/26(火) 20:37:26
他のスレッドにものせましたが反応がないので。。。
時間があまりないのでお願いします。

大学の課題です。
言語:C++
提出期限:5/27 0時
@
int i=99;と設定されていたら、
i/3 と i/3. では結果が異なる。
プログラミングを作成することによって、i/3 と i/3.を評価せよ。
(a,bを実数としてi/3 と i/3.をa,bに代入することとする。)
A
a=10, b=3, c=2 として
!aかつb>cの戻り値、!aまたはb>cの戻り値を求めるプログラムを作成せよ。
B
a=1,b=10,c=100のとき
c<b && b<a と c<b<a は同じものではない。
上記のことをプログラム化して確かめよ。
C
i=100で a=i++, a=++iの値を確かめるプログラムを作成せよ。
D
1から10までの和を計算するプログラムをインクリメント演算子を用いて、作成せよ。
デクリメント演算子を用いて、nCmを計算するプログラムを作成せよ。但し、n,mは cin を使って
キーボードから読み取ること。
968デフォルトの名無しさん:2009/05/26(火) 20:48:12
>>967
期限が短くなっとるwww
両方のスレ見てる人が多いから回答率が低くなるぞ
おとなしく向こうで待ってろよ
969デフォルトの名無しさん:2009/05/26(火) 20:54:01
int i = 55;
printf("1から10までの和: %d\n", i++);
970デフォルトの名無しさん:2009/05/26(火) 21:18:10
コードでわからない事なんですが雑学的なことなんですが
CLASSA

Pre-CLASSA
の2つの名前付されているクラスのPre-ってどういう意味なんでしょうか?
971デフォルトの名無しさん:2009/05/26(火) 21:32:32
自分でやれよカス
972デフォルトの名無しさん:2009/05/26(火) 21:34:15
「前の」
973デフォルトの名無しさん:2009/05/26(火) 21:40:02
thx!
974デフォルトの名無しさん:2009/05/26(火) 22:19:31
>>964
え〜と、ソースコードを晒せないし高度な物理の法則を使ってるから仕様を書くのも難しいのです・・・。
1500行書くの疲れた・・・
975デフォルトの名無しさん:2009/05/26(火) 22:22:38
>>950
状況としては、Cygwin-1.7.0-48で、
setlocale(LC_ALL, "ja_JP.UTF-8"); wprintf(L"Test\n"); printf("Test\n");
を実行すると、最後のprintfで派手に文字化けします。
で、これは正しく動くよう直すべきなのか、それとも、そもそもワイド文字系
I/Oとバイト文字系I/Oは、規格上「混ぜるな危険」なのかを知りたいのです。
正しく動くべきなら、もうちょっと気合入れて解析しようかと。
(だいたい当たりは付けたんですが、まだ解析途中)
976デフォルトの名無しさん:2009/05/26(火) 22:32:17
>>974
詳しくはよくわからんが宣言することによってたまたまCPUキャッシュ上に
効率よく乗る形になって速度でてるけど宣言しないことによって分岐予測失敗とかで
CPUキャッシュの無駄な破棄や転送が起きてるとか

ちなみに計算が必要なくなったので外したというのはその関数がやっていた計算を
あらかじめ配列などに収まるようにプールしておいて参照するだけにしたとか?
977デフォルトの名無しさん:2009/05/26(火) 23:14:51
>>976
粒子間に働く力を計算する関数と粒子を動かす関数を作ったのですが、粒子を動かす関数内部で
各粒子の運動量の総和をMomX+=vxで取り、最後に粒子数で割るという処理をしていました。
しかしデータとして出力する結果に運動量の項目は必要なかったので上記の処理を消したという次第です。
処理を消すだけなら速度も変わらず問題無いのですが上のレスで書いた通り宣言まで消すと遅くなるのです。

また、今度は極端に削除した例としてデータを出力する部分(ここは数値計算はしておらずofstreamで出力するだけ)
を消してみたのですがこっちはより遅くなるという結果でした。
自分もキャッシュ関連かと思っているのですが、まだプログラミングには詳しくないのでちょっと対策は勉強しないと考えられません・・・。
978デフォルトの名無しさん:2009/05/27(水) 00:24:51
まずは、
アセンブリコードレベルでの違いがあるかどうか。次は、
アライメントがあっているかどうか。
を調べてみて

x86 はそれほど影響はないと思うけど。
Itanium の例だけど、アライメントがずれると数分の1に遅くなってた。
979デフォルトの名無しさん:2009/05/27(水) 01:31:36
条件確認→300mSecほど待機を条件を満たすまで繰り返すとき
Sleep()を使うと動作がカクカクになってしまいます

システムに負荷をかけない形で待機をするほうほうはないでしょうか?
980デフォルトの名無しさん:2009/05/27(水) 01:35:20
>>979
MS-Windows なら WaitForSingleObject
981デフォルトの名無しさん:2009/05/27(水) 02:59:22
文字の置換プログラムを作っているのですが行き詰ってます。
insertの引数を何にすればいいか教えてください
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9264.txt
982デフォルトの名無しさん:2009/05/27(水) 08:37:23
あほか。先生に訊け
983デフォルトの名無しさん:2009/05/27(水) 20:04:41
std::ifstream::read(char* データ保存先, int データサイズ)を使ってバイナリデータを読み込もうとしています。
データ保存先をstd::vector<char>にしたいのですが、read()の第一引数としては受け付けてくれません。
reinterpret_cast<char*>やstatic_cast<char*>を試してみたのですが駄目でした。
このような場合は、一度charの配列に入れてからvector<char>に入れなおすしかないでしょうか?
984デフォルトの名無しさん:2009/05/27(水) 20:07:32
vector<char> buffer;
buffer.resize(1024);
istream.read(&buffer[0], 1024);
985デフォルトの名無しさん:2009/05/27(水) 20:14:04
>>984
出来ました。
ありがとうです。
986デフォルトの名無しさん:2009/05/27(水) 22:36:35
C言語の入門書は一通り読破して簡単なプログラムは作れるようになったのですが
どうしてもグローバル変数だらけになったり関数や構造体が増えてくると統一性がなくなったりしてしまいます
グローバル変数をやめると他の関数からアクセスしにくくなるし宣言するまで実体がないしで困っています
この先勉強をしていく上で参考になるような書籍等はないでしょうか?
987デフォルトの名無しさん:2009/05/27(水) 23:04:50
上3行と最後の行の関連性を説明しなさい
988デフォルトの名無しさん:2009/05/27(水) 23:22:54
上3行が目を引くための釣りで
下1行が本題なんだろ
989デフォルトの名無しさん:2009/05/27(水) 23:28:42
埋め
990デフォルトの名無しさん:2009/05/27(水) 23:32:23
いっそC++でも勉強しろ
991デフォルトの名無しさん:2009/05/27(水) 23:39:49
こんばんわ。
C++BuilderではSHCreateDirectoryを使うことは出来ますか?
992デフォルトの名無しさん:2009/05/27(水) 23:50:18
どうせここでレスを書いてもすぐに読めなくなるだろうけど
それ以上の勉強は、実際のソースをみるしかないと思う。
おれとしては、自分の興味のある分野のオープンソースなのを探して
それをよみながら使うのを勧める。
それが出来なければ、Cの実力は現状止まりだろうな。
993デフォルトの名無しさん:2009/05/28(木) 00:10:57
グローバル変数はstatic変数にしてファイル内スコープにして適切にファイル分割すればましになると思うけどなあ
994デフォルトの名無しさん:2009/05/28(木) 00:19:00
○○すればましになるとか、そんなのじゃないんだよ。
反吐を吐きそうになりながら、与えられたソースと格闘して、
思ったとおりに動かないソースのせいで何日も苦しみ、そのあと
今まで発見されなかったバグのせいだと分かり、、、、
というのをやるしかないんだよ。

995デフォルトの名無しさん:2009/05/28(木) 00:23:48
>>989
学生さん?
録音テープに法的な証拠能力は無いんだが
996デフォルトの名無しさん:2009/05/28(木) 00:37:24
あとは基本的なデータ構造(ダブルリンク、スタックや、ハッシュとかバイナリツリーとか)を使った練習ソースを覚えるまで書いてみるとか、
ダイクストラとかバックトラックとかFFTとかルンゲクッタとかそういうのをCで実装してみる。
そういうのに慣れると他のソースが読みやすくなる。
さらに完全なCでなくてもいいからある程度Cっぽい言語のコンパイラを自分で書いてみるといい。
externとか、staticとか、auto変数とかそういう部分の理解がしやすくなる。
あと、アセンブラも軽くやっとけ。ダブルポインタとかそこらへんが理解しやすくなる。
まあ毎日3時間づつくらいやれば、半年だよ。
997975:2009/05/28(木) 00:57:14
自己解決しますた。結論。規格上、ワイド文字系I/Oとマルチバイト文字系I/O
は混ぜるな危険。

入出力ストリーム(要はFILEオブジェクトの内部)には、どっちで入出力して
いるかの「入出力単位」というものがあって、一度でもどちらかのI/O関数を
使うと、入出力単位がそれに固定されます。要は、一度でもwprintf()を使っ
たらprintf()しちゃダメです。

どうしても途中で入出力単位を変更したい場合は、freopen()してからfwide()
する必要があります。(って書いてあったけど、freopen()したら入出力単位が
リセットされるんだから、明示的なfwide()は不要のような……^^;)

ソースを追いかけてたらfwide()にぶち当たって、これをキーワードに
あらためて調べてみると、手持ちの本に思いっきり書いてありました……orz
998デフォルトの名無しさん:2009/05/28(木) 01:00:50
一つの関数を10回ぐらい一から書き直すとかなりシェイプアップ出来る。

ついでに参考にしてたソースが最初
「なんでこんな面倒で分かり難いことやるんだよ!」
と思ってた箇所が実は合理的だったことに気づく・・・かも。
999デフォルトの名無しさん:2009/05/28(木) 01:02:23
糞スレ埋め
1000デフォルトの名無しさん:2009/05/28(木) 01:09:29
まんこ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。